POST /v1/agents/{agent_id}/unpublish. The signature over a time-bound payload proves you control the provider’s DID, ensuring that only the original publisher can remove an agent. Once unpublished, the agent record is marked as revoked and can no longer be invoked or discovered.
Build the Unpublish Request
Construct the request body with the following fields before signing:Your provider ID—the same one used when the agent was submitted.
The current DID of the provider (e.g.
did:key:z6Mk...). Must match the DID on record for this provider. If you have rotated your key since submission, use the current DID.A unique random string for this request. Prevents replay attacks. Use a UUID or a cryptographically random hex string.
Current Unix timestamp in milliseconds at the time you sign the request.
Expiry Unix timestamp in milliseconds. The node rejects requests received after this time. A 5-minute window (
issued_at_ms + 300000) is recommended.Base64-encoded Ed25519 signature over the canonical JSON of the unpublish payload. See Signing the payload below.
Optional human-readable explanation for the removal. Stored in the audit log.
Signing the Payload
Build the canonical JSON payload, then sign it with the provider’s Ed25519 private key. The payload to sign is:signature in the request body.
The
agent_id is taken from the URL path, not from the request body. When building the payload to sign, use the same agent_id you will pass in the request URL.Send the Unpublish Request
POST /v1/agents/{agent_id}/unpublish with the signed body:
200 OK with the updated agent record:
After Unpublishing
Once an agent is unpublished:- Its
statusis set to"revoked"in the registry. - It is no longer returned by
GET /v1/agentsorGET /v1/agents/{agent_id}. - Any invocation attempt via
/invokeor/invoke-asyncreturns404 Not Found. - Historical execution receipts for the agent remain queryable for auditing purposes.
POST /v1/agent-submissions. The new submission will go through the normal review flow.