D

API Reference

Complete reference for all D-ME API endpoints. Base URL: https://api.d-id.me/v1. All requests require Authorization: Bearer <key>.

KYC Verification

POST/kyc/sandbox/verify

Submit a sandbox verification. Returns approved instantly. Free, no Smile Identity call.

Required scope:kyc.verify

Request body

{
  "id_type": "national_id",
  "country": "SN",
  "id_number": "1234567890123",
  "first_name": "Amara",
  "last_name": "Diallo",
  "date_of_birth": "1990-05-15",
  "external_ref": "user_001",
  "score_requested": false
}

Response

{
  "data": {
    "id": "ver_01hxyz1234567890",
    "status": "approved",
    "country": "SN",
    "id_type": "national_id",
    "external_ref": "user_001",
    "created_at": "2026-05-01T10:30:00Z",
    "completed_at": "2026-05-01T10:30:00Z",
    "score": null
  }
}

Try it

Request body (JSON)

Send a request to see the response
Press ⌘↵ to send
POST/kyc/verify

Submit a live KYC verification. Async — queues a Smile Identity job. Returns 202 Accepted with initial status pending.

Required scope:kyc.verify

Request body

{
  "id_type": "national_id",
  "country": "SN",
  "id_number": "1234567890123",
  "first_name": "Amara",
  "last_name": "Diallo",
  "date_of_birth": "1990-05-15",
  "external_ref": "user_001",
  "score_requested": false
}

Response

{
  "data": {
    "id": "ver_01hxyz1234567890",
    "status": "pending",
    "country": "SN",
    "id_type": "national_id",
    "external_ref": "user_001",
    "created_at": "2026-05-01T10:30:00Z",
    "completed_at": null,
    "score": null
  }
}

Try it

Request body (JSON)

Send a request to see the response
Press ⌘↵ to send
GET/kyc/verifications

List verifications for your tenant. Cursor-based pagination, 20 per page by default.

Required scope:kyc.read

Parameters

limit
integer

Results per page (1–100, default 20)

cursor
string

Pagination cursor from previous response

status
string

Filter by status: pending, approved, declined, error

Response

{
  "data": [
    {
      "id": "ver_01hxyz1234567890",
      "status": "approved",
      "country": "SN",
      "id_type": "national_id",
      "external_ref": "user_001",
      "created_at": "2026-05-01T10:30:00Z",
      "completed_at": "2026-05-01T10:30:00Z"
    }
  ],
  "meta": {
    "next_cursor": "cur_abc123",
    "total": 42
  }
}

Try it

Query params

limit
cursor
status
Send a request to see the response
Press ⌘↵ to send
GET/kyc/verifications/:id

Retrieve a single verification by ID.

Required scope:kyc.read

Parameters

id
string*required

Verification ID

Response

{
  "data": {
    "id": "ver_01hxyz1234567890",
    "status": "approved",
    "country": "SN",
    "id_type": "national_id",
    "external_ref": "user_001",
    "created_at": "2026-05-01T10:30:00Z",
    "completed_at": "2026-05-01T10:30:00Z",
    "score": null
  }
}

Try it

Path params

id
Send a request to see the response
Press ⌘↵ to send

API Keys

POST/keys

Create a new API key for your tenant. The raw key is returned once — store it immediately.

Required scope:keys.write

Request body

{
  "name": "Production backend",
  "scopes": ["kyc.verify", "kyc.read", "webhooks.read"],
  "environment": "live"
}

Response

{
  "data": {
    "id": "key_01hxyz1234567890",
    "name": "Production backend",
    "key": "dme_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "scopes": ["kyc.verify", "kyc.read", "webhooks.read"],
    "environment": "live",
    "created_at": "2026-05-01T10:00:00Z",
    "last_used_at": null
  }
}

Try it

Request body (JSON)

Send a request to see the response
Press ⌘↵ to send
GET/keys

List all active API keys for your tenant. Raw keys are never returned — only metadata.

Required scope:keys.read

Response

{
  "data": [
    {
      "id": "key_01hxyz1234567890",
      "name": "Production backend",
      "scopes": ["kyc.verify"],
      "environment": "live",
      "created_at": "2026-05-01T10:00:00Z",
      "last_used_at": "2026-05-01T11:00:00Z"
    }
  ]
}

Try it

Send a request to see the response
Press ⌘↵ to send
DELETE/keys/:id

Revoke an API key. This action is immediate and irreversible. Any requests using this key will return 401.

Required scope:keys.write

Parameters

id
string*required

Key ID

Response

// 204 No Content

Try it

Path params

id
Send a request to see the response
Press ⌘↵ to send

Webhooks

POST/webhooks

Register a webhook endpoint. The secret is returned once — store it to verify incoming requests.

Required scope:webhooks.write

Request body

{
  "url": "https://your-app.com/webhooks/d-me",
  "events": ["verification.completed", "verification.failed"],
  "description": "Production webhook"
}

Response

{
  "data": {
    "id": "wh_01hxyz1234567890",
    "url": "https://your-app.com/webhooks/d-me",
    "events": ["verification.completed", "verification.failed"],
    "secret": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "active": true,
    "created_at": "2026-05-01T10:00:00Z"
  }
}

Try it

Request body (JSON)

Send a request to see the response
Press ⌘↵ to send
GET/webhooks

List all registered webhook endpoints for your tenant.

Required scope:webhooks.read

Response

{
  "data": [
    {
      "id": "wh_01hxyz1234567890",
      "url": "https://your-app.com/webhooks/d-me",
      "events": ["verification.completed"],
      "active": true,
      "created_at": "2026-05-01T10:00:00Z"
    }
  ]
}

Try it

Send a request to see the response
Press ⌘↵ to send
DELETE/webhooks/:id

Deactivate and delete a webhook endpoint.

Required scope:webhooks.write

Parameters

id
string*required

Webhook ID

Response

// 204 No Content

Try it

Path params

id
Send a request to see the response
Press ⌘↵ to send
POST/webhooks/:id/test

Send a test event to a webhook endpoint. Useful for verifying your signature verification code.

Required scope:webhooks.write

Parameters

id
string*required

Webhook ID

Response

{
  "data": {
    "delivered": true,
    "status_code": 200,
    "response_time_ms": 142
  }
}

Try it

Path params

id

Request body (JSON)

Send a request to see the response
Press ⌘↵ to send

Usage & Billing

GET/usage

List usage events for your tenant. Each verification and score generates a usage event used for billing.

Required scope:kyc.read

Parameters

limit
integer

Results per page (1–100, default 20)

cursor
string

Pagination cursor

from
string

ISO 8601 start date filter

to
string

ISO 8601 end date filter

Response

{
  "data": [
    {
      "id": "usg_01hxyz1234567890",
      "event_type": "kyc.verification",
      "verification_id": "ver_01hxyz1234567890",
      "environment": "live",
      "created_at": "2026-05-01T10:30:00Z"
    }
  ],
  "meta": {
    "next_cursor": null,
    "total": 1
  }
}

Try it

Query params

limit
cursor
from
to
Send a request to see the response
Press ⌘↵ to send