Status: Draft
Version: 1.0
License: Apache 2.0
Editors: Michael Herman, Chief Digital Officer, Web 7.0 Foundation
1. Abstract
DIDIDL defines a transport-neutral, message-type–centric capability description format for agents using using DIDComm.
DIDIDL enables agents to:
- Publish typed operations grouped under process capabilities
- 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
- Discovery DIDComm Message DIDs
did:web7:{process-name}:{version}:query-capabilitiesdid:web7:{process-name}:{version}:disclose-capabilitiesdid:web7:{process-name}:{version}:capabilities:{capability-name}:query-capabilitydid:web7:{process-name}:{version}:capabilities:{capability-name}:disclose-capability
- Process Capability DID
did:web7:{process-name}:{version}:capabilities:{capability-name}
- Process Capability Operation DID
did:web7::{process-name}:{version}:operations{capability-name}:{operation-name}
2. Terminology
| Term | Definition |
|---|---|
| Agent | A DIDComm-enabled entity |
| Process Capability (Capability) | A grouping of operations representing a business or functional process |
| Process Capability Operation (Operation) | A DIDComm message type representing a callable function |
| Schema | A JSON Schema definition conforming to JSON Schema |
| Process DIDIDL Document (DIDIDL Document) | JSON object conforming to this specification |
Normative keywords MUST, SHOULD, MAY follow RFC 2119.
3. Canonical DID Patterns
| DID Type | Pattern | Example |
|---|---|---|
| Process Capability DID | did:web7:{process-name}:{version}:capabilities:{capability-name}: | did:web7:user-onboarding:1.0:capabilities:enrollment |
| Process Capability Operation DID | | |
| Discovery Query Process Capabilities | did:web7:{process-name}:{version}:query-capabilities | did:web7:user-onboarding:1.0:query-capabilities |
| Discovery Disclose Process Capabilities | did:web7:{process-name}:{version}:disclose-capabilities | did:web7:user-onboarding:1.0:disclose-capabilities |
| Discovery Query Process Capability Operations | did:web7:{process-name}:{version}:capabilties:{capability-name}:query- | did:web7:user-onboarding:1.0::query- |
| Discovery Disclose Process Capability Operations | did:web7:{process-name}:{version}:capabilities:{capability-name}:disclose- | did:web7:user-onboarding:1.0::disclose- |

4. DIDIDL Document Structure
4a. Process Capabilities
{ "dididl": "1.0", "agent": "did:example:agent123", "capabilities": [...], "schemas": {...}}
All operations MUST be nested under exactly one process capability.
4b. Process Capability Operations
{ "id": "did:web7:user-onboarding:1.0:capabilities:enrollment", "name": "User Onboarding-Enrollment", "version": "1.0", "description": "Handles user lifecycle initiation", "operations": [ { "type": "did:web7:user-onboarding:1.0:operations:enrollment:create-user", "request": "#/schemas/CreateUserRequest", "response": "#/schemas/UserDto" }, { "type": "did:web7:user-onboarding:1.0:operations:enrollment:verify-email", "request": "#/schemas/VerifyEmailRequest", "response": "#/schemas/VerifyEmailResponse" } ]}
Rules:
- Process Capability DIDs MUST follow the pattern:
did:web7:{process-name}:{version}:capabilities - Each operation MUST belong to exactly one capability
- Operation DIDs are capability-scoped:
did:web7:{capability-name}:{version}:{operation-name}
4c. Process Capability Operation
{ "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
5. Discovery Protocol
5.1 Query Capabilities
Request
{ "type": "did:web7:user-onboarding:1.0:query-capabilities"}
Response
{ "type": "did:web7:user-onboarding:1.0:disclose-capabilities", "capabilities": [ { "id": "did:web7:user-onboarding:1.0:capabilities", "name": "User Onboarding", "version": "1.0", "description": "Handles user lifecycle initiation" }, { "id": "did:web7:credential-issuance:2.0:capabilities", "name": "Credential Issuance", "version": "2.0" } ]}
5.2 Query a Specific Capability
Request
{ "type": "did:web7:user-onboarding:1.0:query-capability", "id": "did:web7:user-onboarding:1.0:capabilities"}
Response
{ "type": "did:web7:user-onboarding:1.0:disclose-capability", "capability": { "id": "did:web7:user-onboarding:1.0:capabilities", "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": {...} }}
6. Normative Requirements
- Each operation MUST appear in exactly one process capability.
- Process Capability DIDs MUST be unique within the agent.
- Operation DIDs are capability-scoped and MUST be unique.
- Union of all process capabilities MUST form a disjoint partition of operations.
- Schemas included in capability 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.
7. Example Complete DIDIDL Document
{ "dididl": "1.0", "agent": "did:example:agent123", "capabilities": [ { "id": "did:web7:user-onboarding:1.0:capabilities", "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"] } }}