DID Interface Definition Language (DIDIDL) 0.12 — Draft Specification


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

  1. Each operation MUST appear in exactly one process module.
  2. Process module DIDs MUST be unique within the agent.
  3. Operation DIDs are module-scoped and MUST be unique.
  4. Union of all process modules MUST form a disjoint partition of operations.
  5. Schemas included in module disclosure MUST only include referenced schemas.
  6. DIDComm authentication MUST protect all DIDIDL exchanges.
  7. 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"]
    }
  }
}

link to the original content