Create a Decentralized Identifier (DID) with the did:cheqd DID method using cheqd Studio.
In cheqd Studio, you can easily create and publish a did:cheqd DID to the cheqd testnet or mainnet, anchoring it on-ledger with associated public keys and metadata. This DID can then be used to:
Sign and issue verifiable credentials as an 'issuer'.
Establish a trusted identity on cheqd for entities like organisations, digital products or AI Agents.
Serve as the parent identifier for DID-Linked Resources (e.g. status lists, trust registries).
This tutorial walks through the process of creating an Issuer DID using cheqd Studio's API or interface, including how to configure your keys, DID Document, and optional service endpoints.
🔐 Once registered, the DID becomes publicly resolvable and forms the cryptographic foundation of your identity as an issuer in decentralized ecosystems.
Make sure you have set up your account with cheqd Studio and have generated an API key to authenticate with our APIs, using our guides below:
Using the /did/create API, users have two options for creating a did:cheqd DID and associated DID Document on-ledger:
Filling out a simple form using the application/x-www-url-form-encoded or application/json option within an API client of your choice.
Compiling a full DID Document body yourself using the application/json option, using already created identity keys, within an API client of your choice.
This is the easiest way to create DIDs on cheqd and is recommended for users who are not overly familiar with compiling DID Documents.
Using the application/x-www-url-form-encoded option, users are able to choose between the following variables to compile your DID:
From this request, cheqd Studio will automatically create and publish a DID and associated DID Document to the ledger and return it as a response.
Alternatively, you can use the application/json option and pass only a few specific inputs, for example:
Or, if you have that you want to use, you can reference the created key ID, kid, in the request:
Using the application/json option, users are able to choose between the following variables to compile your DID:
Instead of generating a DID Document using simple parameters, you can create a fully formatted DID Document yourself. Before, submitting a manually created DID, you will need to have to input the key material into the DID document.
Use the to generate a new keypair within the Credential Service key management store. Copy the publicKeyHex.
To simplify this process of formatting a DID Document using your own keys, we've created a . Simply paste in your publicKeyHex and choose the variables to compile your DID Document template.
Within the /did/create JSON payload, paste the response of your DID Document template, with your own signing keys.
Request format:
Alternatively, you can use the application/json request format below.
You can use the kid created from Step 1 within the options section, and then compile the remainder of tour DID Document.
Hit execute on the API below to create your did:cheqd DID and associated DID Document.
After creating a DID or multiple DIDs, users can list all the created DIDs associated with their account. Using the /did/list API.
Below are a list of alternatives for creating cheqd DIDs.
options{
"idFragment": "service-1",
"type": "LinkedDomains",
"serviceEndpoint": [
"https://example.com"
]
}{
"did": "did:cheqd:testnet:ca029356-69dc-4cb4-a4c6-13b959ffaad6",
"keys": [
{
"kid": "1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039",
"kms": "postgres",
"type": "Ed25519",
"publicKeyHex": "1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039",
"meta": {
"algorithms": [
"EdDSA",
"Ed25519"
]
},
"controller": "did:cheqd:testnet:ca029356-69dc-4cb4-a4c6-13b959ffaad6"
}
],
"services": [],
"provider": "did:cheqd:testnet",
"controllerKeyRefs": [
"1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039"
],
"controllerKeys": [
{
"kid": "1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039",
"kms": "postgres",
"type": "Ed25519",
"publicKeyHex": "1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039",
"meta": {
"algorithms": [
"EdDSA",
"Ed25519"
]
},
"controller": "did:cheqd:testnet:ca029356-69dc-4cb4-a4c6-13b959ffaad6"
}
],
"controllerKeyId": "1a07cb379cd6f2d9acddf9a6d6af4e930d5696818a38020bde2b6ead5cd85039"
}{
"network": "testnet",
"identifierFormatType": "uuid",
"options": {
"verificationMethodType": "Ed25519VerificationKey2018"
}
}{
"network": "testnet",
"identifierFormatType": "uuid",
"options": {
"key": "8255ddadd75695e01f3d98fcec8ccc7861a030b317d4326b0e48a4d579ddc43a", // Pass kid if you have created a key separately
"verificationMethodType": "Ed25519VerificationKey2018"
}
}{
"didDocument": {
"id": "did:cheqd:testnet:0ff9df5d-653b-4f77-a66c-0035abc34d63",
"controller": [
"did:cheqd:testnet:0ff9df5d-653b-4f77-a66c-0035abc34d63"
],
"verificationMethod": [
{
"id": "did:cheqd:testnet:0ff9df5d-653b-4f77-a66c-0035abc34d63#key-1",
"type": "JsonWebKey2020",
"controller": "did:cheqd:testnet:0ff9df5d-653b-4f77-a66c-0035abc34d63",
"publicKeyJwk": {
"crv": "Ed25519",
"kty": "OKP",
"x": "BFSLOxwMJgpmWRtTUuo0JAvz6VXGp4WDDcN0dFfCQKo"
}
}
],
"authentication": [
"did:cheqd:testnet:0ff9df5d-653b-4f77-a66c-0035abc34d63#key-1"
]
}
}
"options": {
"key": "8255ddadd75695e01f3d98fcec8ccc7861a030b317d4326b0e48a4d579ddc43a",
"verificationMethodType": "Ed25519VerificationKey2018"
},
"didDocument": {
"@context": [
"https://www.w3.org/ns/did/v1"
],
"id": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0",
"controller": [
"did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0"
],
"authentication": [
"did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#key-1"
],
"service": [
{
"id": "did:cheqd:testnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#service-1",
"type": "LinkedDomains",
"serviceEndpoint": [
"https://example.com"
]
}
]
}
}This endpoint returns the list of DIDs controlled by the account.
Filter DID by the network published.
Filter DID by the provider.
Include metadata in response.
Filter resource by created date
Page number.
Number of items to be listed in a single page.
The request was successful.
A problem with the input fields has occurred. Additional state information plus metadata may be available in the response body.
Access token is missing or invalid
An internal error has occurred. Additional state information plus metadata may be available in the response body.
{
"total": 1,
"dids": [
"text"
]
}GET /did/list HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Accept: */*
This endpoint creates a DID and associated DID Document. As input, it can take the DID Document parameters via a form, or the fully-assembled DID Document itself.
Network to create the DID on (testnet or mainnet)
Identity Provider to create the DID
Algorithm to use for generating the method-specific ID. The two styles supported are UUIDs and Indy-style Base58. See cheqd DID method documentation for more details.
Type of verification method to use for the DID. See DID Core specification for more details. Only the types listed below are supported.
The unique identifier in hexadecimal public key format used in the verification method to create the DID.
["https://www.w3.org/ns/did/v1"]The request was successful.
A problem with the input fields has occurred. Additional state information plus metadata may be available in the response body.
Access token is missing or invalid
An internal error has occurred. Additional state information plus metadata may be available in the response body.
POST /did/create HTTP/1.1
Host: studio-api.cheqd.net
x-api-key: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 286
"network='testnet'&providerId='text'&identifierFormatType='uuid'&verificationMethodType='Ed25519VerificationKey2018'&service=[{'idFragment':'service-1','type':'LinkedDomains','serviceEndpoint':['https://example.com']}]&key='text'&@context=['https://www.w3.org/ns/did/v1']"{
"did": "text",
"controllerKeyId": "text",
"keys": [
{}
],
"services": [
{
"id": "did:cheqd:mainnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#service-1",
"type": "LinkedDomains",
"serviceEndpoint": [
"https://example.com"
],
"priority": 0,
"recipientKeys": [
"did:cheqd:mainnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#key-1"
],
"routingKeys": [
"did:cheqd:mainnet:7bf81a20-633c-4cc7-bc4a-5a45801005e0#key-2"
],
"accept": [
"didcomm/aip2;env=rfc587"
]
}
]
}