Update a registry component
Deprecates a whole component (no new installs or inserts) with an optional deprecationMessage, or lifts it; only people who may publish paywalls in the owner project, and organization admins, can.
ownerProjectId transfers the component to another project of the organization, whose people who may publish paywalls can then publish, deprecate and yank; only a person who is an organization admin can transfer.
Guide: Publishing
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The project's id, proj_.... A secret key works only in the project it belongs to.
The registry component's id, cmp_pkg_....
Request body
application/json
TypeScript definitions
Use the request body type in TypeScript.
true deprecates the whole component; false lifts its deprecation.
Why the component is deprecated, for installers; only with isDeprecated: true.
Transfers the component to this project of the organization; only an organization admin can.
Examples
curl -X PATCH "https://api.voidhash.com/api/v1/projects/proj_tz4a98xxat96iws9zmbrgj3a/registry-components/cmp_pkg_h2j7k4l9z1x6c3v8b5n0m4q7" \ -H "Authorization: Bearer vh_sk_..." \ -H "Content-Type: application/json" \ -d '{ "isDeprecated": true, "deprecationMessage": "Use acme/plan-picker-v2" }'{ "id": "cmp_pkg_h2j7k4l9z1x6c3v8b5n0m4q7", "organizationId": "org_w5xk2e7q0lzv3n8b1c4d6f9g", "slug": "acme/plan-picker", "publisher": "acme", "name": "plan-picker", "title": "Plan picker", "description": "Selectable plans.", "category": "", "keywords": [ "plans", "pricing" ], "isDeprecated": true, "deprecatedAt": "2026-04-20T09:00:00.000Z", "deprecationMessage": "Use acme/plan-picker-v2", "ownerProjectId": "proj_tz4a98xxat96iws9zmbrgj3a", "latestVersionId": "cmp_pkg_ver_e5r8t2y6u0i3o7p1a4s9d2f6", "latestVersion": "1.3.0", "versionCount": 5, "installId": "cmp_inst_b9n4m7q2w5e8r1t6y3u0i5o8", "createdAt": "2026-03-05T10:12:00.000Z", "updatedAt": "2026-04-20T09:00:00.000Z"}{ "error": { "type": "invalid_request", "code": "invalid_owner_project", "message": "proj_tz4a98xxat96iws9zmbrgj3a is not a project of this organization you can use.", "param": "ownerProjectId" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "registry_component_not_found", "message": "This organization's registry has no component cmp_pkg_h2j7k4l9z1x6c3v8b5n0m4q7.", "param": "registryComponentId" }}{ "error": { "type": "conflict", "code": "string", "message": "string", "param": "string" }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 400 | invalid_request | invalid_owner_project | For an owner project outside the organization. |
| 400 | invalid_request | deprecation_message_without_deprecation | For a deprecation message without a deprecation. |
| 404 | not_found | registry_component_not_found | — |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Component registry
- Retrieve the registry publisher
GET - Claim a registry namespace
PUT - List registry components
GET - Publish a component bundle
POST - Publish a project component
POST - Retrieve a registry component
GET - List a registry component's versions
GET - Retrieve a registry component version
GET - Update a registry component version
PATCH - Retrieve a version's file
GET - Review an install
GET - List installed components
GET - Install a registry component
POST - Retrieve an install
GET - Update an install
PATCH - Uninstall a registry component
DELETE
Something wrong or missing on this page? Tell us by email or on Discord.