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.
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.
Credential templates successfully loaded
Invalid query params
Demo endpoints are disabled (system.test_endpoints_enabled is off)
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
}
}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.
Claims to be included in the issued verifiable credential
Credential configuration identifiers to include in the offer.
user_id sent to the external resource server via resource hook
OK
credential offer URI
randomly generated code that will be required when claiming the credential offer
Demo endpoints are disabled (system.test_endpoints_enabled is off)
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"
}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.
Presentation templates successfully loaded
Invalid query params
Demo endpoints are disabled (system.test_endpoints_enabled is off)
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
}
}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.
Optional custom name for the presentation request. If omitted, the presentation template name is used.
Employee ID checkIdentifier of the presentation template to use for the request.
my-presentation-templateDetermines how the wallet submits the authorization response.
URI to redirect to after the wallet submits the authorization response.
https://verifier.example.com/callbackList of expected origins for the Digital Credentials API response. At least one origin must be provided when specified.
["https://verifier.example.com"]Presentation request successfully created
Invalid request payload
Demo endpoints are disabled (system.test_endpoints_enabled is off)
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