Status: Draft
Version: 1.1
License: Apache 2.0
1. Abstract
DIDIDL defines a transport-neutral, message-type–centric capability description format for agents using .
It enables agents to:
- Publish typed operations grouped under process modules
- Describe request, response, and error schemas
- Support machine-readable discovery
- Enable client generation and validation
DIDIDL does not introduce HTTP routing semantics.
1.1 Key Concepts
- Process Module DIDs:
did:web7:{process-name}:{version}:modules - Operation DIDs:
did:web7:{module-name}:{version}:{operation-name}(module-scoped) - Discovery Message DIDs:
did:web7:{process-name}:1.1:query-modules/disclose-modules
2. Terminology
TermDefinitionAgentA DIDComm-capable entityProcess ModuleA grouping of operations representing a business or functional process, identified by a DIDOperationA DIDComm message type representing a callable capabilitySchemaA JSON Schema definition conforming toDIDIDL DocumentJSON object conforming to this specification
Normative keywords MUST, SHOULD, MAY follow RFC 2119.
3. Canonical DID Patterns
DID TypePatternExampleProcess Module DIDdid:web7:{process-name}:{version}:modules``did:web7:user-onboarding:1.0:modulesOperation DIDdid:web7:{module-name}:{version}:{operation-name}``did:web7:user-api:1.0:create-userDiscovery Query Modulesdid:web7:{process-name}:1.1:query-modules``did:web7:user-onboarding:1.1:query-modulesDiscovery Disclose Modulesdid:web7:{process-name}:1.1:disclose-modules``did:web7:user-onboarding:1.1:disclose-modulesDiscovery Query Moduledid:web7:{process-name}:1.1:query-module``did:web7:user-onboarding:1.1:query-moduleDiscovery Disclose Moduledid:web7:{process-name}:1.1:disclose-module``did:web7:user-onboarding:1.1:disclose-module
4. DIDIDL Document Structure
{
"dididl": "1.1",
"agent": "did:example:agent123",
"modules": [...],
"schemas": {...}
}
All operations MUST be nested under exactly one process module.
5. Process Module Object
{
"id": "did:web7:user-onboarding:1.0:modules",
"name": "User Onboarding",
"version": "1.0",
"description": "Handles user lifecycle initiation",
"operations": [
{
"type": "did:web7:user-api:1.0:create-user",
"request": "#/schemas/CreateUserRequest",
"response": "#/schemas/UserDto"
},
{
"type": "did:web7:user-api:1.0:verify-email",
"request": "#/schemas/VerifyEmailRequest",
"response": "#/schemas/VerifyEmailResponse"
}
]
}
Rules:
- Process module DIDs MUST follow the pattern:
did:web7:{process-name}:{version}:modules - Each operation MUST belong to exactly one module
- Operation DIDs are module-scoped:
did:web7:{module-name}:{version}:{operation-name}
6. Operation Object
{
"type": "did:web7:user-api:1.0:create-user",
"request": "#/schemas/CreateUserRequest",
"response": "#/schemas/UserDto",
"errors": ["#/schemas/ValidationError"]
}
Rules:
- Operation DIDs MUST be unique within the agent
- Versioning MUST be encoded in the DID
- Request and response schemas MUST be referenced by JSON pointer
7. Discovery Protocol
7.1 Query Modules
Request
{
"type": "did:web7:user-onboarding:1.1:query-modules"
}
Response
{
"type": "did:web7:user-onboarding:1.1:disclose-modules",
"modules": [
{
"id": "did:web7:user-onboarding:1.0:modules",
"name": "User Onboarding",
"version": "1.0",
"description": "Handles user lifecycle initiation"
},
{
"id": "did:web7:credential-issuance:2.0:modules",
"name": "Credential Issuance",
"version": "2.0"
}
]
}
7.2 Query a Specific Module
Request
{
"type": "did:web7:user-onboarding:1.1:query-module",
"id": "did:web7:user-onboarding:1.0:modules"
}
Response
{
"type": "did:web7:user-onboarding:1.1:disclose-module",
"module": {
"id": "did:web7:user-onboarding:1.0:modules",
"name": "User Onboarding",
"version": "1.0",
"operations": [
{
"type": "did:web7:user-api:1.0:create-user",
"request": "#/schemas/CreateUserRequest",
"response": "#/schemas/UserDto"
},
{
"type": "did:web7:user-api:1.0:verify-email",
"request": "#/schemas/VerifyEmailRequest",
"response": "#/schemas/VerifyEmailResponse"
}
],
"schemas": {...}
}
}
8. Normative Requirements
- Each operation MUST appear in exactly one process module.
- Process module DIDs MUST be unique within the agent.
- Operation DIDs are module-scoped and MUST be unique.
- Union of all process modules MUST form a disjoint partition of operations.
- Schemas included in module disclosure MUST only include referenced schemas.
- DIDComm authentication MUST protect all DIDIDL exchanges.
- Version changes that introduce breaking schema modifications MUST increment the major version in the DID.
9. Example Complete DIDIDL Document
{
"dididl": "1.1",
"agent": "did:example:agent123",
"modules": [
{
"id": "did:web7:user-onboarding:1.0:modules",
"name": "User Onboarding",
"version": "1.0",
"operations": [
{
"type": "did:web7:user-api:1.0:create-user",
"request": "#/schemas/CreateUserRequest",
"response": "#/schemas/UserDto"
},
{
"type": "did:web7:user-api:1.0:verify-email",
"request": "#/schemas/VerifyEmailRequest",
"response": "#/schemas/VerifyEmailResponse"
}
]
}
],
"schemas": {
"CreateUserRequest": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"email": { "type": "string" }
},
"required": ["email"]
},
"VerifyEmailRequest": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"token": { "type": "string" }
},
"required": ["token"]
},
"VerifyEmailResponse": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"success": { "type": "boolean" }
},
"required": ["success"]
},
"UserDto": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "string" },
"email": { "type": "string" }
},
"required": ["id", "email"]
}
}
}