For the complete documentation index, see llms.txt. This page is also available as Markdown.

Demo Endpoints

Public, unauthenticated endpoints that exist only to power the built-in demo Issue/Verify UI served at /dashboard. They are controlled solely by the system.test_endpoints_enabled configuration flag: when it is enabled they are publicly reachable (no admin session required), and when it is disabled every /demo/* endpoint returns 404.

Each demo endpoint mirrors the behaviour of its protected counterpart exactly (same request/response shapes) and only exposes safe read/create actions — no destructive methods are exposed. Access control for these endpoints is expected to be handled at the gateway. Only enable system.test_endpoints_enabled in trusted demo/interop environments.

List credential templates (demo)

get

Demo variant of GET /issuer/templates for the built-in demo Issue/Verify UI. Publicly reachable without an admin session; returns 404 unless system.test_endpoints_enabled is enabled.

Authorizations
AuthorizationstringOptional
Bearer authentication header of the form Bearer <token>.
Query parameters
orderstring · enumOptionalPossible values:
order_bystringOptional
per_pageinteger · min: 1 · max: 50Optional
pageinteger · min: 1Optional
searchstringOptional
formatstring · enumOptionalPossible values:
Responses
200

Credential templates successfully loaded

application/json
get/demo/issuer/templates
GET /demo/issuer/templates HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "templates": [
    {
      "id": "7dcfa413-bff0-4f62-a51a-ab9959623332",
      "name": "Credential Template name",
      "schema": {
        "id": "9322c384-fd8e-4a13-80cd-1cbd1ef95ba8",
        "schema_url": "https://example.com/schemas/9322c384-fd8e-4a13-80cd-1cbd1ef95ba8/schema.json",
        "name": "text"
      },
      "style": {
        "text-color": "text",
        "background": "text",
        "image": "text",
        "background-image": "text"
      },
      "format": "dc+sd-jwt",
      "config": {
        "vct": "text",
        "valid_in": 1,
        "valid_at": "2026-01-01T00:00:00.000Z",
        "expires_in": 1,
        "expires_at": "2026-01-01T00:00:00.000Z",
        "issuer_credential_configurations_supported_name": "text",
        "disclosure_frame": {
          "ANY_ADDITIONAL_PROPERTY": "anything"
        },
        "doctype": "text",
        "type": [
          "text"
        ]
      },
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ],
  "meta": {
    "order_by": "name",
    "order": "ASC",
    "order_from_params": true,
    "per_page": 10,
    "per_page_from_params": true,
    "records_count": 100,
    "page": 1,
    "page_count": 10
  }
}

Create credential offer (demo)

post

Demo variant of POST /issuer/offers for the built-in demo Issue/Verify UI. Publicly reachable without an admin session; returns 404 unless system.test_endpoints_enabled is enabled.

Authorizations
AuthorizationstringOptional
Bearer authentication header of the form Bearer <token>.
Body
claimsobjectOptional

Claims to be included in the issued verifiable credential

credential_configuration_idsstring[]Required

Credential configuration identifiers to include in the offer.

user_idstringOptional

user_id sent to the external resource server via resource hook

Responses
200

OK

application/json
credential_offer_uristringOptional

credential offer URI

tx_codestringOptional

randomly generated code that will be required when claiming the credential offer

post/demo/issuer/offers
POST /demo/issuer/offers HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 235

{
  "claims": {},
  "credential_configuration_ids": [
    "text"
  ],
  "grants": {
    "authorization_code": {
      "issuer_state": "text"
    },
    "urn:ietf:params:oauth:grant-type:pre-authorized_code": {
      "pre-authorized_code": "text",
      "tx_code": {
        "length": 1
      }
    }
  },
  "user_id": "text"
}
{
  "credential_offer_uri": "text",
  "tx_code": "text"
}

List presentation templates (demo)

get

Demo variant of GET /verifier/templates for the built-in demo Issue/Verify UI. Publicly reachable without an admin session; returns 404 unless system.test_endpoints_enabled is enabled.

Authorizations
AuthorizationstringOptional
Bearer authentication header of the form Bearer <token>.
Query parameters
orderstring · enumOptionalPossible values:
order_bystring · enumOptionalPossible values:
per_pageinteger · min: 1 · max: 50Optional
pageinteger · min: 1Optional
searchstring · max: 50Optional
typestring · enumOptionalPossible values:
created_at_fromstring · dateOptional
created_at_tostring · dateOptional
updated_at_fromstring · dateOptional
updated_at_tostring · dateOptional
Responses
200

Presentation templates successfully loaded

application/json
get/demo/verifier/templates
GET /demo/verifier/templates HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "templates": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "purpose": null,
      "created_at": "2026-01-01T00:00:00.000Z",
      "updated_at": "2026-01-01T00:00:00.000Z",
      "input_descriptors": [
        {
          "id": "text",
          "format": {
            "ANY_ADDITIONAL_PROPERTY": {}
          },
          "name": "text",
          "purpose": "text",
          "constraints": {
            "limit_disclosure": "required",
            "fields": [
              {
                "path": [
                  "text"
                ],
                "name": "text",
                "purpose": "text",
                "filter": {
                  "type": "text",
                  "const": null,
                  "pattern": "text",
                  "format": "text",
                  "exclusiveMinimum": 1,
                  "exclusiveMaximum": 1,
                  "minimum": 1,
                  "maximum": 1,
                  "enum": [
                    "text"
                  ],
                  "not": {
                    "enum": [
                      "text"
                    ],
                    "const": null
                  },
                  "items": {
                    "type": "text"
                  },
                  "contains": {
                    "type": "text",
                    "const": null
                  }
                },
                "optional": true,
                "intent_to_retain": true
              }
            ]
          },
          "group": [
            "text"
          ]
        }
      ],
      "type": "dcql",
      "dcql_query": {
        "credentials": [
          {
            "id": "text",
            "format": "dc+sd-jwt",
            "multiple": true,
            "meta": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "trusted_authorities": [
              {
                "type": "text",
                "values": [
                  "text"
                ]
              }
            ],
            "require_cryptographic_holder_binding": true,
            "claims": [
              {
                "id": "text",
                "namespace": "text",
                "claim_name": "text",
                "path": [],
                "values": [],
                "intent_to_retain": true
              }
            ],
            "claim_sets": [
              [
                "text"
              ]
            ]
          }
        ],
        "credential_sets": [
          {
            "options": [
              [
                "text"
              ]
            ],
            "required": true
          }
        ]
      }
    }
  ],
  "meta": {
    "order_by": "name",
    "order": "ASC",
    "order_from_params": true,
    "per_page": 10,
    "per_page_from_params": true,
    "records_count": 100,
    "page": 1,
    "page_count": 10
  }
}

Create verifier presentation request (demo)

post

Demo variant of POST /verifier/requests for the built-in demo Issue/Verify UI. Publicly reachable without an admin session; returns 404 unless system.test_endpoints_enabled is enabled.

Authorizations
AuthorizationstringOptional
Bearer authentication header of the form Bearer <token>.
Body
namestringOptional

Optional custom name for the presentation request. If omitted, the presentation template name is used.

Example: Employee ID check
presentation_template_idstringRequired

Identifier of the presentation template to use for the request.

Example: my-presentation-template
response_modestring · enumOptional

Determines how the wallet submits the authorization response.

Possible values:
verifier_redirect_uristringOptional

URI to redirect to after the wallet submits the authorization response.

Example: https://verifier.example.com/callback
expected_originsstring[] · min: 1Optional

List of expected origins for the Digital Credentials API response. At least one origin must be provided when specified.

Example: ["https://verifier.example.com"]
Responses
201

Presentation request successfully created

application/json
post/demo/verifier/requests
POST /demo/verifier/requests HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 372

{
  "name": "Employee ID check",
  "presentation_template_id": "my-presentation-template",
  "response_mode": "direct_post",
  "verifier_redirect_uri": "https://verifier.example.com/callback",
  "expected_origins": [
    "https://verifier.example.com"
  ],
  "transaction_data": [
    {
      "type": "svx-wallet:custom-transaction-data",
      "credential_ids": [
        "credential_id_in_dcql_query_of_my-presentation-template"
      ]
    }
  ]
}
{
  "presentation_request": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "Employee ID check",
    "presentation_definition": {
      "id": "text",
      "input_descriptors": [
        {
          "constraints": {
            "fields": [
              {
                "filter": {
                  "ANY_ADDITIONAL_PROPERTY": "anything"
                },
                "path": "[\"$.issuer\", \"$.vc.issuer\", \"$.iss\"]",
                "optional": true
              }
            ],
            "limit_disclosure": "required"
          },
          "format": {
            "ANY_ADDITIONAL_PROPERTY": "anything"
          },
          "group": [
            "text"
          ],
          "id": "text",
          "name": "text",
          "purpose": "text"
        }
      ],
      "submission_requirements": [
        {
          "count": 1,
          "from": "text",
          "name": "text",
          "rule": "pick"
        }
      ]
    },
    "dcql_query": {
      "credentials": [
        {
          "id": "text",
          "format": "dc+sd-jwt",
          "multiple": true,
          "meta": {
            "ANY_ADDITIONAL_PROPERTY": "anything"
          },
          "trusted_authorities": [
            {
              "type": "text",
              "values": [
                "text"
              ]
            }
          ],
          "require_cryptographic_holder_binding": true,
          "claims": [
            {
              "id": "text",
              "namespace": "text",
              "claim_name": "text",
              "path": [],
              "values": [],
              "intent_to_retain": true
            }
          ],
          "claim_sets": [
            [
              "text"
            ]
          ]
        }
      ],
      "credential_sets": [
        {
          "options": [
            [
              "text"
            ]
          ],
          "required": true
        }
      ]
    },
    "transaction_data": [
      {
        "type": "svx-wallet:custom-transaction-data",
        "credential_ids": [
          "credential_id_in_dcql_query_of_my-presentation-template"
        ],
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    ],
    "status": "pending",
    "response_type": "vp_token",
    "response_mode": "direct_post",
    "state": null,
    "nonce": "text",
    "expires_at": "2026-01-01T00:00:00.000Z",
    "verifier_redirect_uri": null,
    "expected_origins": [
      "text"
    ],
    "created_at": "2026-01-01T00:00:00.000Z",
    "updated_at": "2026-01-01T00:00:00.000Z"
  }
}

Last updated