Skip to main content

DID Registry API

The DID Registry API is the HTTP interface that ISBE exposes so that entities can manage their DID directly, without needing to interact with the blockchain at a low level. It is implemented with Node.js / Express and published in each of the three environments.

  • Current version: v2.0.0 (basepath /api/v1)
  • Format: OpenAPI 3.0.3
  • Specification: available as openapi.yaml in the isbe-identity-did-api repository.

URLs by Environment

EnvironmentBase URLSwagger UI
PREhttps://did-registry.pre.portal.redisbe.com/api
PROhttps://did-registry.portal.redisbe.com/api/v1

Transaction Model

The API distinguishes between two types of operations:

1. Queries (GET)

Direct reading of the registry. They do not require a signature. They are invoked and the response is the requested data.

2. Write Operations (POST /contract/...)

Any endpoint under /contract/ DOES NOT execute the transaction on-chain. Instead, it returns an unsigned transaction that the client must:

  1. Sign off-chain with its private control key.
  2. Send using POST /api/v1/transactions/send.

This pattern ensures that the API never has access to the users' private keys.

Authentication

Currently, the API does not require standard HTTP authentication (there is no Authorization header). Access control is delegated to the blockchain: only transactions signed by an authorized EOA (DID controller, or the TA in special operations) are accepted by the smart contract.

For special operations such as insertFirstDidDocument, the from EOA must be previously authorized as an onboarding node. Otherwise, the transaction will revert on-chain.

Transaction Response Format

All POST /contract/... endpoints return the same object:

{
"to": "0x00000000000000000000000000000000000015Be",
"data": "0x<calldata>",
"gasLimit": "0x4c4b40",
"gasPrice": "0xfa0",
"chainId": "0x8131",
"nonce": "0xe",
"value": "0x0",
"from": "0x<SIGNER_EOA>"
}

All hexadecimal fields are encoded as strings with a 0x prefix (Ethereum JSON-RPC format).

Error Codes

The API uses the standard format:

{
"error": "validation_error",
"error_description": "Field 'vMethodId' must be a base64url-encoded 32 bytes string"
}
HTTP CodeMeaning
200 OKSuccessful operation.
206 Partial ContentTransaction sent but receipt is not yet available.
400 Bad RequestInvalid body or parameters.
404 Not FoundDID not found (in resolution endpoints).
406 Not AcceptableAccept header not supported.
500 Internal Server ErrorUnexpected error in the API or the blockchain network.

Endpoint Map

EndpointTagDescription
GET /api/v1/identifiersIdentifiersList DIDs (paginated).
GET /api/v1/identifiers/{identifier}IdentifiersResolve DID Document.
POST /api/v1/contract/insertFirstDidDocumentDidDocumentInitial registration of a DID.
POST /api/v1/contract/insertDidDocumentDidDocumentReplace existing DID Document.
POST /api/v1/contract/updateAlsoKnownAsDidDocumentUpdate alsoKnownAs.
POST /api/v1/contract/updateBaseDocumentDidDocumentUpdate @context.
POST /api/v1/contract/addControllerControllersAdd controller.
POST /api/v1/contract/revokeControllerControllersRevoke controller.
POST /api/v1/contract/addVerificationMethodVerification MethodsRegister new key.
POST /api/v1/contract/revokeVerificationMethodVerification MethodsRevoke key.
POST /api/v1/contract/expireVerificationMethodVerification MethodsExpire key.
POST /api/v1/contract/rollVerificationMethodVerification MethodsRotate key.
POST /api/v1/contract/addVerificationRelationshipVerification RelationshipsAssociate use with a key.
POST /api/v1/transactions/sendTransactionsSend signed transaction.

Each endpoint is documented in detail in the following pages: