Credential bootstrap
Read, create, or delete the tenant partner configuration from the authenticated app.
Official M2M API reference for integration setup, templates, and electronic signature documents.
Authentication model
Credential bootstrap is performed with an administrative Signly App session against `/api`. Once created, the M2M integration consumes the API by sending `X-Tenant-Signly` and `X-Auth-Signly` on every request.
Read, create, or delete the tenant partner configuration from the authenticated app.
Create templates, read versions, and manage signed URLs for PDF upload and download.
Publish documents, read status, extend deadlines, cancel processes, and resend invitations.
Recover the chronological trace for a `processId` and use webhooks to learn about each change in real time.
The `/api` endpoint is used from the administrative app to create the credential your backend will later consume.
POST /api
{
"auth_method": "KEY"
} You will first see the active partner-collection surface and then the advanced capabilities of the same public M2M API. Each detailed endpoint below includes request examples, body fields, successful responses, and common error cases.
/api Gets the tenant current partner configuration. /api Creates a partner credential (`KEY` or `HMAC`). /api Revokes the current partner configuration. /v1/templates Lists the tenant current templates. /v1/templates/{templateId} Gets the latest version of a template. /v1/documents Lists tenant documents. /v1/documents Publishes a signing document. /v1/documents/{documentId} Gets a document status. /v1/documents/{documentId}/extend Extends the flow deadline. /v1/documents/{documentId}/cancel Cancels an active flow. /v1/documents/{documentId}/participants/{participantId}/resend Resends a signing invitation. /v1/events/{processId} Gets the event history for a process. /v1/templates/{templateId}/history Lists all versions for a template. /v1/templates/{templateId}/versions/{version} Gets a specific template version. /v1/templates/{templateId}/fields Gets the signable fields defined for a template. /v1/templates/{templateId}/fields Creates or updates signable fields for a template. /v1/templates Creates a new template. /v1/templates/{templateId} Creates a new version of an existing template. /v1/templates/{templateId}/versions/{version}/upload-url Generates a signed URL to upload the PDF. /v1/templates/{templateId}/versions/{version}/download-url Generates a signed URL to download the PDF. /v1/templates/{templateId}/versions/{version} Deletes a specific template version. /v1/templates/{templateId} Deletes the whole template and its history. /v1/documents/{documentId}/summary Gets an operational summary for the document. Each endpoint includes method, path, functional description, headers, parameters, body fields, request example, and success/error responses.
/api Endpoint consumed from Signly App to check whether the tenant already has a partner credential and which method it uses. It is not the M2M authentication channel; it is only configuration bootstrap.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Auth-Signly ex. Bearer eyJhbGciOi... | Bearer token | Yes | Administrative Signly App session. Used only to create or delete the tenant partner configuration. |
Request examples
2curl -X GET "https://api.signly.apologs.com/api" \ -H "X-Auth-Signly: Bearer eyJhbGciOi..."
import requests
url = "https://api.signly.apologs.com/api"
headers = {
"X-Auth-Signly": "Bearer eyJhbGciOi...",
}
response = requests.get(
url,
headers=headers,
)
print(response.status_code)
print(response.json()) Current configuration
{
"success": true,
"status": 200,
"code": "api_integration_fetched",
"message": "API integration configuration fetched.",
"data": {
"tenantId": "58bff266-cdad-46db-b373-1b06476146cd",
"authMethod": "KEY",
"status": "ACTIVE",
"keyId": "pk_01J8XQ8B0P8XSH6M3B2P0N5W9K",
"createdAt": "2026-04-23T14:55:00Z",
"updatedAt": "2026-04-23T14:55:00Z",
"partnerBaseUrl": "https://api.signly.apologs.com"
},
"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
} Missing configuration
{
"success": false,
"status": 404,
"code": "api_integration_not_found",
"message": "API integration configuration not found.",
"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": "not_found",
"details": { "resource": "api_integration" }
}
} Notes
/api Generates the credential your backend will later send in `X-Auth-Signly`. The UI currently exposes `KEY` and `HMAC`; `JWT` exists in the authorizer but is not open in the operational flow described here.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Auth-Signly ex. Bearer eyJhbGciOi... | Bearer token | Yes | Administrative Signly App session. Used only to create or delete the tenant partner configuration. |
Content-Type ex. application/json | application/json | Yes | JSON payload. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
auth_method ex. KEY | string | Yes | Authentication method to generate for the tenant. |
Request examples
2The secret may be shown only in the creation response.
curl -X POST "https://api.signly.apologs.com/api" \
-H "X-Auth-Signly: Bearer eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{ "auth_method": "KEY" }' import requests
url = "https://api.signly.apologs.com/api"
headers = {
"X-Auth-Signly": "Bearer eyJhbGciOi...",
"Content-Type": "application/json",
}
payload = { "auth_method": "KEY" }
response = requests.post(
url,
headers=headers,
json=payload,
)
print(response.status_code)
print(response.json()) Credential created
{
"success": true,
"status": 201,
"code": "api_integration_created",
"message": "API integration created.",
"data": {
"tenantId": "58bff266-cdad-46db-b373-1b06476146cd",
"authMethod": "KEY",
"status": "ACTIVE",
"keyId": "pk_01J8XQ8B0P8XSH6M3B2P0N5W9K",
"apiKey": "sk_live_partner_abc123",
"createdAt": "2026-04-23T14:55:00Z"
},
"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
} Invalid method
{
"success": false,
"status": 400,
"code": "invalid_auth_method",
"message": "Auth method is invalid.",
"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": "validation",
"details": { "field": "auth_method", "allowed": ["KEY", "HMAC"] }
}
} /api Deletes the tenant partner configuration. Your backend stops being able to authenticate with the revoked credential.
Headers
| Field | Type | Required | Description |
|---|---|---|---|
X-Auth-Signly ex. Bearer eyJhbGciOi... | Bearer token | Yes | Administrative Signly App session. Used only to create or delete the tenant partner configuration. |
Request examples
1curl -X DELETE "https://api.signly.apologs.com/api" \ -H "X-Auth-Signly: Bearer eyJhbGciOi..."
Integration deleted
{
"success": true,
"status": 200,
"code": "api_integration_deleted",
"message": "API integration deleted.",
"data": { "deleted": true },
"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/templates Returns the latest version of each template for the tenant authenticated with partner headers.
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. |
Request examples
2curl -X GET "https://api.signly.apologs.com/v1/templates?limit=10&sort=-createdAt" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
import requests
url = "https://api.signly.apologs.com/v1/templates?limit=10&sort=-createdAt"
headers = {
"X-Tenant-Signly": "58bff266-cdad-46db-b373-1b06476146cd",
"X-Auth-Signly": "sk_live_partner_abc123",
}
response = requests.get(
url,
headers=headers,
)
print(response.status_code)
print(response.json()) Templates listed
{
"success": true,
"status": 200,
"code": "templates_listed",
"message": "Templates listed.",
"data": [
{
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateName": "Acuerdo de servicio",
"description": "Version comercial vigente",
"version": 2,
"createdAt": "2026-04-18T20:00:00Z",
"updatedAt": "2026-04-23T10:30:00Z"
}
],
"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/templates/{templateId} Returns the current version of a specific template. This endpoint is present in the current partner collection.
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 |
|---|---|---|---|
templateId | string | Yes | Template identifier. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Template fetched
{
"success": true,
"status": 200,
"code": "template_fetched",
"message": "Template fetched.",
"data": {
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateName": "Acuerdo de servicio",
"description": "Version comercial vigente",
"templateVersion": "3f34581a-5b4a-4068-ab72-5f2b36611fa1#0002",
"version": 2,
"fields": []
},
"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
} Template not found
{
"success": false,
"status": 404,
"code": "not_found",
"message": "Template not found.",
"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": "not_found",
"details": { "templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1" }
}
} /v1/templates Creates a template v1. You can then request a signed URL to upload the PDF for that 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. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
templateName ex. Acuerdo de servicio | string | Yes | Template display name. |
description ex. Version comercial vigente | string | No | Functional or business context. |
Request examples
2curl -X POST "https://api.signly.apologs.com/v1/templates" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{ "templateName": "Acuerdo de servicio", "description": "Version comercial vigente" }' import requests
url = "https://api.signly.apologs.com/v1/templates"
headers = {
"X-Tenant-Signly": "58bff266-cdad-46db-b373-1b06476146cd",
"X-Auth-Signly": "sk_live_partner_abc123",
"Content-Type": "application/json",
}
payload = { "templateName": "Acuerdo de servicio", "description": "Version comercial vigente" }
response = requests.post(
url,
headers=headers,
json=payload,
)
print(response.status_code)
print(response.json()) Template created
{
"success": true,
"status": 201,
"code": "template_created",
"message": "Template created.",
"data": {
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateName": "Acuerdo de servicio",
"description": "Version comercial vigente",
"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/templates/{templateId}/history Returns every published version of a template, useful for audit or operational rollback.
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 |
|---|---|---|---|
templateId | string | Yes | Template whose history you want to inspect. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/history" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
History listed
{
"success": true,
"status": 200,
"code": "template_history_listed",
"message": "Template history listed.",
"data": [
{ "templateVersion": "3f34581a-5b4a-4068-ab72-5f2b36611fa1#0001", "version": 1 },
{ "templateVersion": "3f34581a-5b4a-4068-ab72-5f2b36611fa1#0002", "version": 2 }
],
"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/templates/{templateId}/versions/{version} Allows you to recover an exact template version without depending on the latest current 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 |
|---|---|---|---|
templateId | string | Yes | Template identifier. |
version ex. 2 | integer | Yes | Required numeric version. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/versions/2" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Version fetched
{
"success": true,
"status": 200,
"code": "template_version_fetched",
"message": "Template version fetched.",
"data": {
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateVersion": "3f34581a-5b4a-4068-ab72-5f2b36611fa1#0002",
"version": 2
},
"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/templates/{templateId}/fields Retrieves the definition of signable or fillable fields associated with the template.
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 |
|---|---|---|---|
templateId | string | Yes | Template to inspect. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/fields" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Fields listed
{
"success": true,
"status": 200,
"code": "template_fields_fetched",
"message": "Template fields fetched.",
"data": [
{
"fieldName": "FIRMA_CLIENTE",
"fieldType": "SIGNATURE",
"page": 1,
"x": 124,
"y": 566
}
],
"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/templates/{templateId}/fields Overwrites the template field definition for the current 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. |
Content-Type ex. application/json | application/json | Yes | JSON payload content type. |
Path Params
| Field | Type | Required | Description |
|---|---|---|---|
templateId | string | Yes | Template whose fields will be updated. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
[].fieldName ex. FIRMA_CLIENTE | string | Yes | Field functional identifier. |
[].fieldType ex. SIGNATURE | string | Yes | Field type, for example `SIGNATURE` or `TEXT`. |
Request examples
1curl -X PUT "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/fields" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '[
{
"fieldName": "FIRMA_CLIENTE",
"fieldType": "SIGNATURE",
"page": 1,
"x": 124,
"y": 566
}
]' Fields updated
{
"success": true,
"status": 200,
"code": "template_fields_updated",
"message": "Template fields updated.",
"data": [
{
"fieldName": "FIRMA_CLIENTE",
"fieldType": "SIGNATURE",
"page": 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/templates/{templateId}/versions/{version}/upload-url Allows uploading the file associated with a specific template version. The binary upload then happens directly against S3.
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 |
|---|---|---|---|
templateId | string | Yes | Template identifier. |
version ex. 1 | integer | Yes | Template version to which the file belongs. |
Request examples
1curl -X POST "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/versions/1/upload-url" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
URL generated
{
"success": true,
"status": 200,
"code": "template_upload_url_generated",
"message": "Upload URL generated.",
"data": {
"method": "PUT",
"uploadUrl": "https://s3.amazonaws.com/...",
"expiresInSeconds": 900
},
"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/templates/{templateId} Updates template metadata and generates a new version on top of which you can later upload an updated PDF.
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 |
|---|---|---|---|
templateId | string | Yes | Template to version. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
templateName ex. Acuerdo de servicio | string | Yes | Display name for the new version. |
Request examples
1curl -X PUT "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{ "templateName": "Acuerdo de servicio", "description": "Version 3 con nuevos campos" }' New version created
{
"success": true,
"status": 200,
"code": "template_updated",
"message": "Template updated.",
"data": {
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateVersion": "3f34581a-5b4a-4068-ab72-5f2b36611fa1#0003",
"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/templates/{templateId}/versions/{version}/download-url Returns a temporary URL to download the stored PDF for a specific 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 |
|---|---|---|---|
templateId | string | Yes | Template identifier. |
version ex. 2 | integer | Yes | Version of the file to download. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/versions/2/download-url" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Download URL
{
"success": true,
"status": 200,
"code": "template_download_url_generated",
"message": "Download URL generated.",
"data": {
"downloadUrl": "https://s3.amazonaws.com/...",
"expiresInSeconds": 900
},
"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/templates/{templateId}/versions/{version} Deletes a specific template version without affecting the rest of the history.
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 |
|---|---|---|---|
templateId | string | Yes | Base template. |
version ex. 1 | integer | Yes | Version to delete. |
Request examples
1curl -X DELETE "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1/versions/1" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Version deleted
{
"success": true,
"status": 200,
"code": "template_version_deleted",
"message": "Template version deleted.",
"data": { "deleted": true },
"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/templates/{templateId} Deletes all versions of a template. Use it carefully because it affects history and future documents based on that definition.
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 |
|---|---|---|---|
templateId | string | Yes | Template to delete. |
Request examples
1curl -X DELETE "https://api.signly.apologs.com/v1/templates/3f34581a-5b4a-4068-ab72-5f2b36611fa1" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Template deleted
{
"success": true,
"status": 200,
"code": "template_deleted",
"message": "Template deleted.",
"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": null
} /v1/documents Lists signing processes for the tenant. Supports filters, pagination, and sorting by `createdAt`.
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 | Maximum number of results per page. The backend accepts from 1 to 100. |
cursor | string | No | Opaque pagination cursor. |
sort ex. -createdAt | string | No | Sort by `createdAt`; use `-createdAt` for newest first. |
status ex. IN_PROGRESS | string | No | Filters by document status. |
Request examples
2curl -X GET "https://api.signly.apologs.com/v1/documents?limit=10&sort=-createdAt" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
import requests
url = "https://api.signly.apologs.com/v1/documents?limit=10&sort=-createdAt"
headers = {
"X-Tenant-Signly": "58bff266-cdad-46db-b373-1b06476146cd",
"X-Auth-Signly": "sk_live_partner_abc123",
}
response = requests.get(
url,
headers=headers,
)
print(response.status_code)
print(response.json()) Documents listed
{
"success": true,
"status": 200,
"code": "documents_listed",
"message": "Documents listed.",
"data": [
{
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"createdAt": "2026-04-18T20:22:08.258102+00:00",
"status": "CREATED",
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1"
}
],
"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
} Invalid sort field
{
"success": false,
"status": 400,
"code": "bad_request",
"message": "Invalid sort field.",
"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": "validation",
"details": { "code": "INVALID_SORT_FIELD", "field": "creationDate" }
}
} /v1/documents Creates the signing flow from a template and a participant list. This is the central endpoint of the partner integration.
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 |
|---|---|---|---|
templateId | string | Yes | Base template identifier. |
templateVersion ex. 0002 | string | Yes | Version that must be used for the document. |
participants | Participant[] | Yes | List of signers or flow participants. |
participants[].displayName ex. Juan David Otero | string | Yes | Participant display name. |
participants[].signatureMode ex. ["SIGNATURE_EMAIL"] | string[] | Yes | Signature channels or mechanisms. Example: `SIGNATURE_EMAIL`, `SIGNATURE_SMS`, `SIGNATURE_BIOMETRIC`. |
participants[].identity.email ex. juanoterot@outlook.com | string | No | Participant email when the flow uses email. |
participants[].identity.phone ex. +573217597071 | string | No | Participant phone for SMS, WhatsApp, or operational contact. |
participants[].identity.documentNumber ex. 1109661121 | string | No | Participant document number. It becomes mandatory for some biometric flows. |
participants[].policy.attemptsMax ex. 3 | integer | No | Maximum number of attempts allowed. |
participants[].policy.cooldownSeconds ex. 60 | integer | No | Minimum time between participant attempts. |
flowPolicy.onParticipantFail ex. CANCEL_FLOW | string | No | Policy to apply when a participant fails. Example: `CANCEL_FLOW`. |
orderMode ex. PARALLEL | string | Yes | Defines whether signing is `PARALLEL` or `SEQUENTIAL`. |
deadlineAt ex. 2026-05-21T23:59:00Z | string (ISO-8601) | No | Process deadline. |
metadata ex. { "source": "crm", "contractId": "CNT-4482" } | object | No | Free-form object to correlate the document with your system. |
Request examples
2curl -X POST "https://api.signly.apologs.com/v1/documents" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateVersion": "0002",
"participants": [
{
"displayName": "Juan David Otero",
"signatureMode": ["SIGNATURE_EMAIL"],
"identity": { "email": "juanoterot@outlook.com" },
"policy": { "attemptsMax": 3, "cooldownSeconds": 60 }
}
],
"orderMode": "PARALLEL",
"deadlineAt": "2026-05-21T23:59:00Z"
}' import requests
url = "https://api.signly.apologs.com/v1/documents"
headers = {
"X-Tenant-Signly": "58bff266-cdad-46db-b373-1b06476146cd",
"X-Auth-Signly": "sk_live_partner_abc123",
"Content-Type": "application/json",
}
payload = {
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"templateVersion": "0002",
"participants": [
{
"displayName": "Juan David Otero",
"signatureMode": ["SIGNATURE_EMAIL"],
"identity": { "email": "juanoterot@outlook.com" },
"policy": { "attemptsMax": 3, "cooldownSeconds": 60 }
}
],
"orderMode": "PARALLEL",
"deadlineAt": "2026-05-21T23:59:00Z"
}
response = requests.post(
url,
headers=headers,
json=payload,
)
print(response.status_code)
print(response.json()) Document created
{
"success": true,
"status": 201,
"code": "document_created",
"message": "Document created.",
"data": {
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"status": "CREATED",
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1",
"participants": [
{
"participantId": "a244be1a-98c5-4faa-bcb7-55218983a731",
"displayName": "Juan David Otero"
}
]
},
"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
} Invalid payload
{
"success": false,
"status": 400,
"code": "validation_error",
"message": "Validation error.",
"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": "validation",
"details": { "fields": { "participants": { "0": { "_schema": ["Document number is required for biometric signature."] } } } }
}
} Insufficient credits
{
"success": false,
"status": 402,
"code": "insufficient_credits",
"message": "Not enough credits to process the document.",
"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": "credits",
"details": {}
}
} /v1/documents/{documentId} Returns the current status and metadata for the signing flow.
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 |
|---|---|---|---|
documentId | string | Yes | Document identifier. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/documents/0e51e6ee-4643-4381-97e0-5164c00a0142" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Document fetched
{
"success": true,
"status": 200,
"code": "document_fetched",
"message": "Document fetched.",
"data": {
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"status": "IN_PROGRESS",
"createdAt": "2026-04-18T20:22:08.258102+00:00",
"updatedAt": "2026-04-23T15:01:02Z",
"templateId": "3f34581a-5b4a-4068-ab72-5f2b36611fa1"
},
"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
} Document not found
{
"success": false,
"status": 404,
"code": "not_found",
"message": "Document not found.",
"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": "not_found",
"details": { "documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142" }
}
} /v1/documents/{documentId}/extend Updates the process maximum date without creating a new document.
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 |
|---|---|---|---|
documentId | string | Yes | Document to extend. |
Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
newDeadlineAt ex. 2026-06-15T23:59:00Z | string (ISO-8601) | Yes | New document deadline. |
Request examples
1curl -X POST "https://api.signly.apologs.com/v1/documents/0e51e6ee-4643-4381-97e0-5164c00a0142/extend" \
-H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \
-H "X-Auth-Signly: sk_live_partner_abc123" \
-H "Content-Type: application/json" \
-d '{ "newDeadlineAt": "2026-06-15T23:59:00Z" }' Deadline extended
{
"success": true,
"status": 200,
"code": "document_deadline_extended",
"message": "Deadline extended.",
"data": {
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"deadlineAt": "2026-06-15T23:59:00Z"
},
"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/documents/{documentId}/cancel Stops the signing flow and prevents further participant progress.
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 |
|---|---|---|---|
documentId | string | Yes | Document that must be cancelled. |
Request examples
1curl -X DELETE "https://api.signly.apologs.com/v1/documents/0e51e6ee-4643-4381-97e0-5164c00a0142/cancel" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Document cancelled
{
"success": true,
"status": 200,
"code": "document_cancelled",
"message": "Document cancelled.",
"data": { "documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142" },
"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/documents/{documentId}/participants/{participantId}/resend Triggers the invitation again for a specific document participant.
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 |
|---|---|---|---|
documentId | string | Yes | Flow document. |
participantId | string | Yes | Participant that will receive the resend. |
Request examples
1curl -X POST "https://api.signly.apologs.com/v1/documents/0e51e6ee-4643-4381-97e0-5164c00a0142/participants/a244be1a-98c5-4faa-bcb7-55218983a731/resend" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Invitation resent
{
"success": true,
"status": 200,
"code": "invitation_resent",
"message": "Invitation resent.",
"data": {
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"participantId": "a244be1a-98c5-4faa-bcb7-55218983a731"
},
"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/documents/{documentId}/summary Returns a compact view of document progress for internal dashboards or reconciliation.
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 |
|---|---|---|---|
documentId | string | Yes | Document to summarize. |
Request examples
1curl -X GET "https://api.signly.apologs.com/v1/documents/0e51e6ee-4643-4381-97e0-5164c00a0142/summary" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
Document summary
{
"success": true,
"status": 200,
"code": "document_summary_fetched",
"message": "Document summary fetched.",
"data": {
"documentId": "0e51e6ee-4643-4381-97e0-5164c00a0142",
"status": "IN_PROGRESS",
"completedParticipants": 0,
"pendingParticipants": 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/events/{processId} Returns the timeline for the `processId` associated with a participant. It is the targeted lookup used to reconstruct chronological evidence when you need historical detail beyond webhooks.
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 |
|---|---|---|---|
processId ex. 91b5d467-ee84-4c78-8f37-048387797ab3-d0a31523-3d9c-4613-936a-9bf510ad05d4 | string | Yes | Process identifier returned on document creation or within participants. |
Request examples
2curl -X GET "https://api.signly.apologs.com/v1/events/91b5d467-ee84-4c78-8f37-048387797ab3-d0a31523-3d9c-4613-936a-9bf510ad05d4" \ -H "X-Tenant-Signly: 58bff266-cdad-46db-b373-1b06476146cd" \ -H "X-Auth-Signly: sk_live_partner_abc123"
import requests
url = "https://api.signly.apologs.com/v1/events/91b5d467-ee84-4c78-8f37-048387797ab3-d0a31523-3d9c-4613-936a-9bf510ad05d4"
headers = {
"X-Tenant-Signly": "58bff266-cdad-46db-b373-1b06476146cd",
"X-Auth-Signly": "sk_live_partner_abc123",
}
response = requests.get(
url,
headers=headers,
)
print(response.status_code)
print(response.json()) Process events
{
"success": true,
"status": 200,
"code": "events_listed",
"message": "Events listed.",
"data": [
{
"eventId": "01JC8DYNXKHPK6H4F0VYB3J9R3",
"eventType": "PROCESS_CREATED",
"processId": "proc-20251027-0001",
"status": "SUCCESS",
"actor": "backend",
"timestamp": "2025-10-27T15:00:01.120Z"
},
{
"eventId": "01JC8E0XYAHTYV26J7W72RBQWQ",
"eventType": "OTP_SENT",
"processId": "proc-20251027-0001",
"status": "SUCCESS",
"actor": "frontend",
"timestamp": "2025-10-27T15:03:18.904Z"
}
],
"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
} Notes