Process
Creation, start, completion, failure, cancellation, and expiration of the process.
Configure outbound destinations and understand what each process, OTP, biometric, and document event means.
Event-driven model
Signly uses webhooks as the primary channel to synchronize state changes. Your integration should handle idempotency, retries, and partial ordering.
Creation, start, completion, failure, cancellation, and expiration of the process.
Send, resend, validation, failure, and expiration of the OTP challenge.
Biometric capture, validation, or rejection, plus approved or failed liveness.
Document open, field signing, and final completion traceability.
Practical list of the events you should recognize in integration and operations. Not every flow emits every event; it depends on the signing channel and configured identity policy.
Representative example of an event your backend can receive when a process finishes.
{
"eventId": "evt_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"type": "PROCESS_COMPLETED",
"occurredAt": "2026-04-23T14:21:33Z",
"tenantId": "58bff266-cdad-46db-b373-1b06476146cd",
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"participantId": "a244be1a-98c5-4faa-bcb7-55218983a731",
"attempt": 1,
"data": {
"status": "COMPLETED",
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"completedAt": "2026-04-23T14:21:31Z"
}
} /v1/webhooks Lists tenant webhooks. /v1/webhooks Creates a webhook. /v1/webhooks/{webhookId} Gets a webhook by ID. /v1/webhooks/{webhookId} Updates description, events, and retries. /v1/webhooks/{webhookId}/status Activates or deactivates a webhook. /v1/webhooks/{webhookId}/test Sends a test event. /v1/webhooks/{webhookId} Deletes a webhook. Each endpoint includes method, path, functional description, headers, parameters, body fields, request example, and success/error responses.
/v1/webhooks Returns tenant webhooks and supports filters by status, URL, and update range.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Query Params
| Field | Type | Required | Description |
|---|---|---|---|
limit ex. 10 | integer | No | Page size between 1 and 100. |
status ex. ENABLED | string | No | Status `ENABLED` or `DISABLED`. |
sort ex. -updatedAt | string | No | Supported sort by `updatedAt` or `url`. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/webhooks?limit=10&sort=-updatedAt" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Webhooks listed
{
"success": true,
"status": 200,
"code": "webhooks_listed",
"message": "Webhooks listed.",
"data": [
{
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"url": "https://example.com/signly/webhooks",
"status": "ENABLED",
"version": 3
}
],
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
} /v1/webhooks Registers an HTTP destination to receive Signly events. The service performs a short connectivity validation before persisting.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
url ex. https://example.com/signly/webhooks | string | Yes | Receiving HTTPS endpoint. |
events ex. ["PROCESS_COMPLETED","OTP_VERIFIED"] | string[] | Yes | List of events to subscribe. |
description | string | No | Operational description for the destination. |
customHeaders | object | No | Additional headers sent on every delivery. |
retries | object | No | Webhook retry policy. |
Request examples
1curl -X POST "https://api.signly.apologs.com/v1/webhooks" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/signly/webhooks",
"description": "Eventos principales del proceso",
"events": ["PROCESS_COMPLETED", "OTP_VERIFIED", "DOCUMENT_VIEWED"],
"customHeaders": { "X-Client-Auth": "abc123" },
"retries": { "maxAttempts": 3, "backoff": "exponential" },
"httpTimeoutMs": 5000
}' Webhook created
{
"success": true,
"status": 201,
"code": "webhook_created",
"message": "Webhook created.",
"data": {
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"url": "https://example.com/signly/webhooks",
"status": "ENABLED",
"version": 1
},
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
} /v1/webhooks/{webhookId} Returns webhook configuration, status, and version.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Path Params
| Field | Type | Required | Description |
|---|---|---|---|
webhookId | string | Yes | Webhook identifier. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/webhooks/wh_01J8XQAGF9E7T7N2G4G6M5J1RP" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Webhook fetched
{
"success": true,
"status": 200,
"code": "webhook_fetched",
"message": "Webhook fetched.",
"data": {
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"url": "https://example.com/signly/webhooks",
"status": "ENABLED",
"events": ["PROCESS_COMPLETED", "OTP_VERIFIED"],
"version": 3
},
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
} /v1/webhooks/{webhookId} Allows editing description, event list, retries, and timeout. Supports optimistic concurrency through `If-Match`.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
If-Match ex. 3 | integer | No | Expected resource version. |
Path Params
| Field | Type | Required | Description |
|---|---|---|---|
webhookId | string | Yes | Webhook to modify. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
description | string | No | New description. |
status ex. DISABLED | string | No | New webhook status. |
events | string[] | No | New event list. |
Request examples
1curl -X PUT "https://api.signly.apologs.com/v1/webhooks/wh_01J8XQAGF9E7T7N2G4G6M5J1RP" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-H "If-Match: 3" \
-d '{
"description": "Eventos core de produccion",
"events": ["PROCESS_COMPLETED", "PROCESS_FAILED", "OTP_VERIFIED"]
}' Webhook updated
{
"success": true,
"status": 200,
"code": "webhook_updated",
"message": "Webhook updated.",
"data": {
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"status": "ENABLED",
"version": 4
},
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
} Stale version
{
"success": false,
"status": 412,
"code": "precondition_failed",
"message": "Webhook version mismatch.",
"data": null,
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": {
"type": "concurrency",
"details": { "expectedVersion": 3 }
}
} /v1/webhooks/{webhookId}/status Shortcut to update only the webhook operational status.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
If-Match ex. 4 | integer | No | Expected version. |
Path Params
| Field | Type | Required | Description |
|---|---|---|---|
webhookId | string | Yes | Webhook whose status will change. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
status ex. DISABLED | string | Yes | New status `ENABLED` or `DISABLED`. |
Request examples
1curl -X PUT "https://api.signly.apologs.com/v1/webhooks/wh_01J8XQAGF9E7T7N2G4G6M5J1RP/status" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-H "If-Match: 4" \
-d '{ "status": "DISABLED" }' Status updated
{
"success": true,
"status": 200,
"code": "webhook_status_updated",
"message": "Webhook disabled.",
"data": {
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"status": "DISABLED",
"version": 5
},
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
} /v1/webhooks/{webhookId}/test Triggers a synthetic event to validate that your endpoint responds correctly.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Tenant-Signly ex. 58bff266-cdad-46db-b373-1b06476146cd | string | Yes | Tenant identifier that scopes the entire operation. |
X-Auth-Signly ex. sk_live_partner_abc123 | string | Yes | Tenant partner credential. For `KEY` send the raw value; for `HMAC` the authorizer accepts `HMAC <secret>` or the raw secret. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
Path Params
| Field | Type | Required | Description |
|---|---|---|---|
webhookId | string | Yes | Webhook to which the test will be sent. |
Request examples
1curl -X POST "https://api.signly.apologs.com/v1/webhooks/wh_01J8XQAGF9E7T7N2G4G6M5J1RP/test" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{ "type": "signly.webhook_test", "tenantId": "58bff266-cdad-46db-b373-1b06476146cd" }' Test sent
{
"success": true,
"status": 200,
"code": "webhook_test_sent",
"message": "Test event delivered.",
"data": {
"webhookId": "wh_01J8XQAGF9E7T7N2G4G6M5J1RP",
"deliveryStatus": "DELIVERED",
"attempt": 1
},
"pagination": null,
"meta": {
"request_id": "req_01J8XQ7M8VW2A6G2B0N7J5AZ7Q",
"timestamp": "2026-04-23T15:00:00Z",
"api_version": "v1",
"tenant_id": "58bff266-cdad-46db-b373-1b06476146cd"
},
"error": null
}