Download OpenAPI specification:
The Skribble API v2 documentation describes the publicly available Skribble API version 2. The API allows businesses and teams of any size to integrate the e-signing solution of Skribble with internal systems, software, or SaaS solutions. It provides a simple interface to create and manage signature requests programmatically. Signature requests define who signs what and describe the document flow between participants. Actual signing occurs in the Skribble web application.
API v2 provides enhanced features including creating, finding, and triggering signature requests, user and monitoring details, and reporting activities. It maintains backward compatibility with API v1 but upgrading is recommended to access the latest features. Migration from API v1 involves updating base URLs, renaming fields, and adjusting visual signature positions.
To use the Skribble API, you first need an API key and an API user. Both can be managed on the API key page in your business profile. Consult our guide for setup instructions.
Skribble offers two types of API keys:
Demo API keys
Demo API keys are for testing and development purposes. Signatures created with demo keys have no legal weight and are free of charge.
Demo keys can be identified by their name, which starts with api_demo.
Production API keys
Production API keys are used for live systems. Signatures created with production keys will be invoiced.
Production keys can be identified by their name, which starts with api_production or, in some cases, api_prod.
⚠ Note All costs incurred by signature requests created with your API keys will be charged to your business. We recommend starting with a demo API key during development and testing, and switching to a production key only once testing is complete.
For help setting up Skribble Business, contact us at info@skribble.com.
To obtain an access token, authenticate using the /access/login endpoint.
You can pass your credentials as raw JSON or as x-www-form-urlencoded
key-value pairs (see example requests).
Upon successful authentication, a JSON Web Token (JWT) is returned. This JWT must be included in nearly every API request.
The access token is passed in the Authorization HTTP header using the
Bearer scheme. Example:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI...
API keys have a long but finite lifetime. The validity period depends on the volume of API calls and is agreed upon individually as part of the shared secret agreement.
Access tokens have a lifetime of approximately 20 minutes. Automatic token renewal is not currently supported.
There is no logout endpoint. Access tokens expire automatically after the defined lifetime.
| username required | string The username of the users credentials to login |
| api-key required | string The API key of the users credentials to login |
{- "username": "add_your_api_name_here",
- "api-key": "please_enter_your_password_here"
}eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJJWlMxY0pXQXlXVFdZeDR6dXRGNzJlYWVILT...
Upload using a Base64 encoded file as content.
Request body to create a Document object
| content required | string <byte> Base64 encoded bytes of the document. |
| content_type | string Content type of bytes sent in content. Currently, only application/pdf is supported. |
| title required | string Title of the document. |
| read_access | Array of strings Give specific users or API keys read access to this document. |
| write_access | Array of strings Give specific users or API keys write access to this document. |
{- "content": "SGVsbG8gd29ybGQh",
- "content_type": "application/pdf",
- "title": "Example contract PDF",
- "read_access": [
- "backoffice@company_a.com",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
]
}{- "id": "00000000-1212-9546-6542-323232323232",
- "title": "Example contract PDF",
- "content_type": "application/pdf",
- "size": 29010,
- "page_count": 1,
- "page_width": 600,
- "page_height": 840,
- "owner": "api_demo_example",
- "read_access": [
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2099-12-12T12:12:12.000Z",
- "updated_at": "2099-12-12T12:12:12.000Z"
}Returns an array of all accessible Document objects.
[- {
- "id": "00000000-1212-9546-6542-323232323232",
- "title": "Example contract PDF",
- "content_type": "application/pdf",
- "size": 29010,
- "page_count": 1,
- "page_width": 600,
- "page_height": 840,
- "owner": "api_demo_example",
- "read_access": [
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2099-12-12T12:12:12.000Z",
- "updated_at": "2099-12-12T12:12:12.000Z"
}, - {
- "id": "11111111-2222-3333-4444-555555555555",
- "title": "Employee NDA Document",
- "content_type": "application/pdf",
- "size": 48230,
- "page_count": 3,
- "page_width": 612,
- "page_height": 792,
- "owner": "api_demo_example",
- "read_access": [
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2099-10-01T09:00:00.000Z",
- "updated_at": "2099-10-02T11:45:00.000Z"
}
]Fetches the metadata for the Document identified by its ID.
| DOC_ID required | string <uuid> Example: f1e2d3c4-7b8a-4e6f-9d3b-123456789abc Unique ID received when creating the Document Request object |
{- "id": "00000000-1212-9546-6542-323232323232",
- "title": "Example contract PDF",
- "content_type": "application/pdf",
- "size": 29010,
- "page_count": 1,
- "page_width": 600,
- "page_height": 840,
- "owner": "api_demo_example",
- "read_access": [
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2099-12-12T12:12:12.000Z",
- "updated_at": "2099-12-12T12:12:12.000Z"
}Deletes a Document by its ID. Deletion behaves similarly to deleting a
SignatureRequest and does not necessarily remove the object from the
system immediately.
If more than one participant is involved, the DELETE request only removes
the current user from the Document.
The system permanently removes the Document once the last user deletes it
via the Skribble web application.
| DOC_ID required | string <uuid> Example: f1e2d3c4-7b8a-4e6f-9d3b-123456789abc Unique ID received when creating the Document Request object |
Downloads the content of the document identified by its ID. Returns either a PDF binary or a JSON object containing a Base64-encoded PDF.
| DOC_ID required | string <uuid> Example: f1e2d3c4-7b8a-4e6f-9d3b-123456789abc Unique ID received when creating the Document Request object |
{- "content_type": "application/pdf",
- "content_size": 29010,
- "content": "U29tZUJhc2U2NEVuY29kZWRJbWFnZQ=="
}Returns a preview image for a specific page of the uploaded PDF document. Page numbering starts at 0 for the first page.
Use the optional
scaleparameter to control the preview size:scale=100returns a full-size preview, whilescale=20returns a thumbnail.
| DOC_ID required | string <uuid> Example: f1e2d3c4-7b8a-4e6f-9d3b-123456789abc Unique ID received when creating the Document Request object |
| PAGE_ID required | integer Page ID of the document |
| scale | number >= 0 Default: 100 Example: scale=20 The scaling factor for the image. |
Creates a new SignatureRequest, which is the primary object of the Skribble API.
A SignatureRequest defines who signs what and under which conditions. It specifies
the document to be signed, the list of required signers, the desired signature quality
and legislation, and optional settings such as signing sequences, callback URLs, and
access control.
Upon creation, invitations are sent to all specified signers. The response contains
the created SignatureRequest including its unique id, which is required for all
subsequent operations on this request.
Request body to create a SignatureRequest object
| content required | string <byte> Base64 encoded bytes of the document. Maximum document size is 112.5 MB unencoded (150 MB Base64-encoded). | ||||||||||||||
| content_type | string Content type of bytes sent in content. Currently, only application/pdf is supported. | ||||||||||||||
| title required | string Title of the signature request. | ||||||||||||||
| message | string Message sent to the other participants along with this signature request. | ||||||||||||||
| legislation | string (SignatureLegislation) Enum: "ZERTES" "EIDAS" Legislation under which the signatures are created. Required when
| ||||||||||||||
| quality | string (SignatureQuality) Enum: "SES" "AES" "AES_MINIMAL" "QES" "DEMO" "PART11" Minimal quality of the signatures for this signature request.
| ||||||||||||||
No signers (null) or Array of Signers (objects) | |||||||||||||||
No observers (null) or Array of Observers (strings) | |||||||||||||||
| callback_success_url | string <uri> Callback URL called via POST when all signers have signed (overall success). The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a | ||||||||||||||
| callback_error_url | string <uri> Callback URL called via POST when a signer declines or the SignatureRequest is withdrawn. The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a | ||||||||||||||
| callback_update_url | string <uri> Callback URL called via POST on any change to the SignatureRequest (e.g. one signer has signed). The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a | ||||||||||||||
| callback_start_sign_url | string <uri> Callback URL called via POST when a signer starts the signature process (only for xQES). The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a | ||||||||||||||
| callback_ident_error_url | string <uri> Callback URL called via POST when the identification of a signer ends in an error. The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a | ||||||||||||||
| custom | string Custom field for storing application-specific data related to this signature request. | ||||||||||||||
No attachment when signed (null) or Array of Attachment when signed (strings) | |||||||||||||||
No owner (null) or Specific owner (string) | |||||||||||||||
No other writer (null) or Array of Additional writer (strings) |
{- "title": "Example contract",
- "message": "Please sign this document!",
- "content": "SGVsbG8gd29ybGQh",
- "content_type": "application/pdf",
- "signatures": [
- {
- "account_email": "you@example.info"
}
]
}{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "you@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}Updates an existing SignatureRequest. We recommend creating the SignatureRequest
with all necessary information upfront and using this endpoint only when changes are
required.
The following fields can be updated: title, message, legislation, quality,
signatures, cc_email_addresses, callback_success_url, callback_error_url,
callback_update_url, custom, attach_on_success, read_access, and write_access.
Updating signers
To add or remove signers, provide the complete desired state of the signatures array:
Important: Any signer not present in the
signaturesarray will be removed. Changes to signers can only be made as long as none of the signers have already completed their signature.
Updating observers
To update the observer list, provide the complete desired state of the
cc_email_addresses array. Pass null to leave the current observers unchanged.
Request body to update a SignatureRequest object
| id required | string <uuid> Unique ID of the signature request. | ||||||||||||||
| title | string Title of the signature request. | ||||||||||||||
| message | string Message sent to the other participants along with this signature request. | ||||||||||||||
| legislation | string (SignatureLegislation) Enum: "ZERTES" "EIDAS" Legislation under which the signatures are created. Required when
| ||||||||||||||
| quality | string (SignatureQuality) Enum: "SES" "AES" "AES_MINIMAL" "QES" "DEMO" "PART11" Minimal quality of the signatures for this signature request.
| ||||||||||||||
No signers (null) or Array of Signers (objects) | |||||||||||||||
No update (null) or Array of Update in Observers (strings) | |||||||||||||||
| callback_success_url | string <uri> Callback-URL which is called on overall success. | ||||||||||||||
| callback_error_url | string <uri> Callback-URL which is called in case of an error. | ||||||||||||||
| callback_update_url | string <uri> Callback-URL which is called in case of an update. | ||||||||||||||
| callback_start_sign_url | string <uri> Callback-URL which is called when a signer starts the signature process (only for xQES). | ||||||||||||||
| callback_ident_error_url | string <uri> Callback-URL which is called when the identification of a signer ends in an error. | ||||||||||||||
No update (null) or Array of Attachment when signed (strings) | |||||||||||||||
No update (null) or Array of Specific write access (strings) |
{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Example contract",
- "message": "Please sign this document!",
- "legislation": "ZERTES",
- "quality": "QES",
- "signatures": { },
- "cc_email_addresses": { },
- "attach_on_success": { },
- "write_access": { }
}{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Example contract",
- "message": "Please sign this document!",
- "document_id": "29eae6aa-5558-2ada-2870-d4e654c0da5c",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-42b4c2fb9ee947778ba70bc0698c78f7",
- "signatures": [
- {
- "sid": "894a0240-e01a-2307-4376-0267c6a8d105",
- "status_code": "SIGNED",
- "account_email": "you@example.info",
- "signer_identity_data": {
- "email_address": "nas@example.com",
- "first_name": "John",
- "last_name": "Doe",
- "mobile_number": "41791234567",
- "language": "en",
- "identity_reference": "Internal-ID-012345",
- "identification_require_evidence": true,
- "provider": "swisscom_ra_app",
- "evidence_id": "700580648"
}, - "sequence": -1,
- "notify": true,
- "decline_message": "string",
- "signed_at": "2025-10-09T12:15:30.000Z",
- "signed_legislation": "ZERTES",
- "signed_quality": "QES",
- "last_viewed_at": "2025-10-09T12:10:00.000Z",
- "language": "en",
- "visual_signature": {
- "image": {
- "content": "SGVsbG8gd29ybGQh",
- "content_type": "image/png",
- "content_size": 3160
}, - "position": {
- "page": "0",
- "height": 70,
- "width": 150,
- "x": 350,
- "y": 240,
- "rotation": 0
}, - "positions": [
- {
- "page": "0",
- "height": 70,
- "width": 150,
- "x": 350,
- "y": 240,
- "rotation": 0
}
], - "form_field": "Signature1",
- "text": {
- "content": "Customer Signature",
- "font_name": "Helvetica-Bold",
- "font_size": "12",
- "font_color": "#ff0000"
}
}
}
], - "cc_email_addresses": [ ],
- "expiration_date": "2025-11-21",
- "attachments": [ ],
- "attach_on_success": [
- "SIGNED_DOCUMENT",
- "SIGNATURE_PROTOCOL"
], - "custom": "MyCustomvalue1,MyVal2",
- "owner": "api_demo_example",
- "read_access": [
- "persononetosign@external.net",
- "api_demo_example",
- "you@example.info",
- "persontwotosign@external.net"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-08T17:37:03.569Z",
- "updated_at": "2025-10-08T17:37:03.569Z",
}Fetches a SignatureRequest by its ID.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "you@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}Deletes a SignatureRequest by its ID.
Important: A SignatureRequest can only be deleted via the API if:
the SignatureRequest has status_overall=OPEN, and
the API user has sufficient rights on the SignatureRequest, e.g. when
it was created by the API user.
Deleting a SignatureRequest does not necessarily remove it from the
system immediately.
WITHDRAWN
When the API user is the owner of the SignatureRequest and it is
still in status_overall=OPEN, the SignatureRequest will be
WITHDRAWN.
This means the SignatureRequest will transition to
status_overall=WITHDRAWN and all pending signatures will be marked with
status_code=WITHDRAWN. Sign and read rights for all signers will be
revoked, so invited signers can no longer read or sign the
SignatureRequest.
REMOVE AS PARTICIPANT
When the API user is a participant but not the owner of the
SignatureRequest, the DELETE request will only remove the API user as a
participant.
In this case, the system will remove the SignatureRequest and its related
documents once the last remaining user deletes it via the Skribble web
application.
DELETING
When the API user is the last user with access rights to the
SignatureRequest (e.g. after a WITHDRAW), the SignatureRequest and
its related documents will be permanently removed from the system.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
Withdraws a SignatureRequest, for example when signing becomes unnecessary
or an error occurred during the invitation process. As the inviter, you can
explicitly withdraw the SignatureRequest. This removes all signers and
observers as participants and notifies them with a specified message.
Similar to deletion, the withdraw action can only be executed if:
The SignatureRequest has status_overall=OPEN
The API user has sufficient rights on the SignatureRequest, such as
when it was created by the API user.
Note We recommend using the
deleteendpoint, which automatically determines the appropriate action. For example, if the API user does not have withdrawal rights, they may instead be removed as a participant, or the document may be deleted directly.Use the
withdrawendpoint specifically when you need to withdraw theSignatureRequestwhile keeping it in Skribble.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
Request body to withdraw a SignatureRequest object
| message | string [ 0 .. 2048 ] characters Withdraw message. |
{- "message": "The reason for withdrawing the signature."
}{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "WITHDRAWN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}Provides the signature report for a specific signature request.
By default, the report is returned as a human-readable, digitally signed
PDF document. Optionally, the report format can be changed using the
type query parameter (e.g. JSON or HTML).
The report contains all relevant information about the signature process, including signatories, timestamps, and verification details. It serves as legally valid proof of the completed signing process and can be stored or shared for auditing, compliance, or record-keeping purposes.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| type | string Default: "PDF" Enum: "PDF" "JSON" "HTML" Format of the Report. |
To add an individual signer, use the same parameters as when creating a
SignatureRequest. The process is the same. By using account_email, you can
add a signer who has a Skribble account. By using signer_identity_data,
you can invite a No-Account-Signer to the SignatureRequest with the ID
{{SR_ID}}.
💡 Good to know
We recommend this approach of combining signer_idendity_data and
account_email if you are unsure whether the user has a Skribble account.
The benefit is that an existing Skribble user will afterwards find the
SignatureRequest in the To sign section of their account on
my.skribble.com.
Conversely, if you invite them using only signer_identity_data, the
document will not appear in their Skribble account, even if they have an
existing Skribble account. Instead, they will have to access the document
using the specific link provided in their signature invitation email.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
Request body to add a Signer
| account_email | string <email> Optional signer account email address. |
| sequence | number <int32> Default: -1 Optional signer sequence. |
| notify | boolean Default: true Whether to send a notification to this signer. |
| language | string (SignatureLanguage) Enum: "en" "de" "fr" "it" Determines in which language e-mails are sent to the user, if the user has not set their language preference yet. |
object (SignerIdentityData) Optional (no-account) signer identity information. | |
Visual Signature (object) or Visual Signature (object) or Visual Signature (object) (VisualSignature) |
{- "account_email": "single-signer@skribble.com",
- "signer_identity_data": {
- "email_address": "single-signer@skribble.com"
}
}{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Example contract",
- "message": "Please sign this document!",
- "document_id": "29eae6aa-5558-2ada-2870-d4e654c0da5c",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-42b4c2fb9ee947778ba70bc0698c78f7",
- "signatures": [
- {
- "sid": "894a0240-e01a-2307-4376-0267c6a8d105",
- "status_code": "SIGNED",
- "account_email": "you@example.info",
- "signer_identity_data": {
- "email_address": "nas@example.com",
- "first_name": "John",
- "last_name": "Doe",
- "mobile_number": "41791234567",
- "language": "en",
- "identity_reference": "Internal-ID-012345",
- "identification_require_evidence": true,
- "provider": "swisscom_ra_app",
- "evidence_id": "700580648"
}, - "sequence": -1,
- "notify": true,
- "decline_message": "string",
- "signed_at": "2025-10-09T12:15:30.000Z",
- "signed_legislation": "ZERTES",
- "signed_quality": "QES",
- "last_viewed_at": "2025-10-09T12:10:00.000Z",
- "language": "en",
- "visual_signature": {
- "image": {
- "content": "SGVsbG8gd29ybGQh",
- "content_type": "image/png",
- "content_size": 3160
}, - "position": {
- "page": "0",
- "height": 70,
- "width": 150,
- "x": 350,
- "y": 240,
- "rotation": 0
}, - "positions": [
- {
- "page": "0",
- "height": 70,
- "width": 150,
- "x": 350,
- "y": 240,
- "rotation": 0
}
], - "form_field": "Signature1",
- "text": {
- "content": "Customer Signature",
- "font_name": "Helvetica-Bold",
- "font_size": "12",
- "font_color": "#ff0000"
}
}
}
], - "cc_email_addresses": [ ],
- "expiration_date": "2025-11-21",
- "attachments": [ ],
- "attach_on_success": [
- "SIGNED_DOCUMENT",
- "SIGNATURE_PROTOCOL"
], - "custom": "MyCustomvalue1,MyVal2",
- "owner": "api_demo_example",
- "read_access": [
- "persononetosign@external.net",
- "api_demo_example",
- "you@example.info",
- "persontwotosign@external.net"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-08T17:37:03.569Z",
- "updated_at": "2025-10-08T17:37:03.569Z",
}Removes an individual signer from the SignatureRequest. Provide the
SignatureRequest ID SR_ID and the Signature ID SID of the signer to
remove.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| SID required | string <uuid> Example: 97db18c8-7ca1-35a2-9726-0b32771e4ac6 Unique ID of the signer |
Use this endpoint to provide supplementary documents (for example, Terms &
Conditions or appendices) to participants of a SignatureRequest.
Attachments are delivered to participants together with the
SignatureRequest.
Content type limits: The Skribble API accepts PDF files, image files, Microsoft Office files, and plain text files.
Allowed content types:
Content size limits: The maximum size of a single attachment is approximately 40 MB. The maximum request size is 60 MB.
Amount limits: There is currently no limit on the number of attachments per SignatureRequest. Abuse of this service may result in enforced limits.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
Request body to create a SignatureAttachment object
| filename required | string File name of the attachment. |
| content_type required | string Content type of the attachment. Supported types:
|
| content required | string <byte> Base64 encoded bytes of the attachment. |
{- "filename": "Attachment-1.pdf",
- "content_type": "application/pdf",
- "content": "SGVsbG8gd29ybGQh"
}{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "attachments": [
- {
- "attachment_id": "8ed33046-3798-8c54-0b13-0820d0d6e121",
- "filename": "Attachment.pdf"
}
]
}Downloads the content of the attachment identified by ATTACHMENT_ID
for the SignatureRequest with the ID SR_ID.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| ATTACHMENT_ID required | string <uuid> Example: 8ed33046-3798-8c54-0b13-0820d0d6e121 Unique ID returned when the Signature Attachment is created. |
Deletes the attachment identified by ATTACHMENT_ID from the
SignatureRequest with the ID SR_ID.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| ATTACHMENT_ID required | string <uuid> Example: 8ed33046-3798-8c54-0b13-0820d0d6e121 Unique ID returned when the Signature Attachment is created. |
Returns all SignatureRequest objects that the current user has sufficient
access rights to.
Filter
You can optionally filter results using one or more of the optional parameters.
Filters search for an exact match of the corresponding field value. This
means the filter is case-sensitive and will not match partial values. For
example, account_email=john.doe@skribble.com will only match a
SignatureRequest where the account_email field is exactly
john.doe@skribble.com and will not match another.john.doe@skribble.com.
Exception: The search parameter searches for document titles that contain
the search term.
Pagination
The result set can be controlled using the optional pagination parameters
page_number and page_size, which helps prevent excessively large result
sets.
| account_email | string <email> Example: account_email=john.doe@skribble.com Filter on the field |
| signer_email_address | string <email> Example: signer_email_address=john.doe@skribble.com Filter on the field |
| search | string Example: search=text to find Filter on the field |
| signature_status | string (Signature Status Code) Enum: "OPEN" "WAITING" "DECLINED" "WITHDRAWN" "SIGNED" "ERROR" Example: signature_status=SIGNED Filter on the field |
| status_overall | string (Signature Status Overall) Enum: "OPEN" "DECLINED" "WITHDRAWN" "SIGNED" "ERROR" Example: status_overall=OPEN Filter on the field |
| signatures_count | integer <int32> [ 0 .. 1000 ] Filter on the field |
| created_by | string Example: created_by=api_demo_example Filter on the field |
| page_number | number >= 1 Example: page_number=1 Page number for pagination. By default pagination is disabled. |
| page_size | number >= 0 Default: 50 Example: page_size=25 Page size for pagination. |
[- {
- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "you@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}, - {
- "id": "8c73215f-bf33-d8a9-90e5-1a5cd0b9273a",
- "title": "Employment Contract",
- "message": "Please review and sign your employment contract.",
- "document_id": "2aa9b2e7-3c21-4d7a-bf9c-6a1f6f5fcb98",
- "legislation": "EIDAS",
- "quality": "AES",
- "status_overall": "OPEN",
- "business": "biz-87c4d39afc6d471da7bcbf4f2e8ef931",
- "signatures": [
- {
- "sid": "5ad9f2c1-6a81-42af-9a6a-7c5adcb54e23",
- "account_email": "alice@example.com",
- "sequence": 1,
- "status_code": "SIGNED",
- "notify": true,
- "visual_signature": {
- "position": {
- "x": 120,
- "y": 490,
- "width": 150,
- "height": 70,
- "page": "2",
- "rotation": 0
}, - "positions": [
- {
- "x": 120,
- "y": 490,
- "width": 150,
- "height": 70,
- "page": "2",
- "rotation": 0
}
]
}
}, - {
- "sid": "19de3b41-9d65-4cb7-90ff-239b7a0eac12",
- "account_email": "hr@examplecorp.com",
- "sequence": 2,
- "status_code": "OPEN",
- "notify": true,
- "visual_signature": {
- "position": {
- "x": 130,
- "y": 420,
- "width": 155,
- "height": 72,
- "page": "2",
- "rotation": 0
}, - "positions": [
- {
- "x": 130,
- "y": 420,
- "width": 155,
- "height": 72,
- "page": "2",
- "rotation": 0
}
]
}
}
], - "cc_email_addresses": [
- "legal@examplecorp.com"
], - "owner": "api_demo_example",
- "read_access": [
- "alice@example.com",
- "hr@examplecorp.com",
- "legal@examplecorp.com",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T08:15:22.115Z",
- "updated_at": "2025-10-15T08:15:22.115Z"
}
]Retrieves multiple SignatureRequest objects in a single call.
Provide a JSON array of SignatureRequest IDs in the request body to specify which
records to fetch. The response includes only the SignatureRequests that were
successfully found. IDs that do not match any existing record are silently ignored.
Array of SignatureRequest IDs to retrieve.
[- "abababab-a777-e8e8-e8e8-121212121212",
- "bbddbbdd-7788-7ee7-a22a-bfbfbfbfbfbf",
- "cccccccc-1111-2222-3333-444444444444",
- "dddddddd-dead-beef-cafe-999999999999",
- "eeeeeeee-aaaa-bbbb-cccc-dddddddddddd",
- "ffffaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
- "abababab-1234-5678-9abc-defdefdefdef",
- "12341234-aaaa-bbbb-cccc-123412341234",
- "99999999-8888-7777-6666-555555555555",
- "abcdabcd-abcd-abcd-abcd-abcdabcdabcd"
][- {
- "id": "abababab-a777-e8e8-e8e8-121212121212",
- "title": "First example contract",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "you@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}, - {
- "id": "bbddbbdd-7788-7ee7-a22a-bfbfbfbfbfbf",
- "title": "Second example contract",
- "document_id": "2aa9b2e7-3c21-4d7a-bf9c-6a1f6f5fcb98",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "SIGNED",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
- "account_email": "colleague@example.info",
- "sequence": -1,
- "status_code": "SIGNED",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "colleague@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-14T09:00:00.000Z",
- "updated_at": "2025-10-14T11:30:00.000Z"
}
]Fetches a SignatureRequest by its ID.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
{- "id": "4f43614a-de50-bfe1-2df3-4c881fc7840e",
- "title": "Sample document",
- "message": "Please sign this document.",
- "document_id": "1ff0cf91-6b54-f3bd-bffb-8fcd5e799764",
- "legislation": "ZERTES",
- "quality": "QES",
- "status_overall": "OPEN",
- "business": "biz-5a2aea44ddea4f0531ebcdcbcedf873c",
- "signatures": [
- {
- "sid": "e5ab7fba-e815-0f65-f437-7c78953a0b7d",
- "account_email": "you@example.info",
- "sequence": -1,
- "status_code": "OPEN",
- "notify": true
}
], - "cc_email_addresses": [ ],
- "attachments": [ ],
- "owner": "api_demo_example",
- "read_access": [
- "you@example.info",
- "api_demo_example"
], - "write_access": [
- "api_demo_example"
], - "created_at": "2025-10-15T07:47:01.223Z",
- "updated_at": "2025-10-15T07:47:01.223Z"
}In addition to the automatic signature reminders, manual reminders can also be initiated via the Skribble web application and also via the API.
This allows for greater flexibility in managing signature requests, ensuring that important documents are signed promptly. By using both automatic and manual reminders, you can tailor your approach to suit the specific needs of your users or customers.
Limits
There is an hourly limit on the number of signature reminders that can be sent. This limit ensures that reminders are used responsibly and prevents excessive notifications. Generally, this restriction should not affect you if you use this feature appropriately. By adhering to this limit, you can effectively manage your signature requests without overwhelming your users or customers with frequent reminders.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
Returns detailed information about the callbacks associated with a
SignatureRequest. Use this endpoint to confirm whether a callback has been
executed or to identify errors that occurred during the callback process.
Result
If no callbacks have been triggered yet, the response will be an empty
array. Otherwise, it contains an array of callback objects that have
already been executed.
| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
[- {
- "signature_request_id": "b107da0e-db25-478a-8130-b85e6c57ae83",
- "type": "SUCCESS",
- "state": "COMPLETED",
- "attempts": 1,
- "messages": [
- "Failed 404",
- "Failed 500"
], - "created_at": "2025-10-08T17:37:03.569Z",
- "updated_at": "2025-10-08T17:37:03.569Z"
}
]Uploads a document and affixes an electronic seal in a single call.
Optionally, a visual signature can also be placed on the document.
The response contains the document_id of the newly created sealed
document, which can be used to retrieve it.
Content base64-encoded in a JSON object
| content required | string <byte> Base64 encoded bytes of the document. |
| account_name | string Account name of the seal contract that should be used. If your company own more than one seal and the field account_name is not given or empty, then the first given seal for the API user will be used for sealing. |
| title | string Title of the document. |
No visual signature (null) or (Visual Signature (Single Position (object) or Multiple Positions (object) or Form Field (object))) |
{- "account_name": "ais_demo_seal",
- "content": "U29tZUJhc2U2NEVuY29kZWRJbWFnZQ=="
}{- "document_id": "98ca4eda-11f7-da4a-72da-9db677f38280"
}Starts the signing process by uploading the PDF document content and
assigning it a title.
Send-To objects and their related Documents and SignatureRequests are only guaranteed for a limited lifetime.
A Send-To request that is not claimed by a user — i.e. where a user does not add the document to their list of documents to sign — is deleted automatically after one day.
All Send-To objects and their related Documents and SignatureRequest objects, regardless of status, are deleted automatically after 90 days.
Content can be sent directly as a file or base64-encoded in a JSON object
| title required | string Title of the document. |
| content required | string <binary> PDF file to upload. |
{- "id": "8229873d-d7c7-4e2b-a8a3-000003313532",
- "access_code": "b498e9d2-93f4-4380-b998-c44f467ae020"
}To call the track endpoint, you must include the value of the
access_code field—received when creating the Send-To object—in the
request header X-Accesscode.
| SEND_TO_ID required | string <uuid> Example: d98ae06a-3ae4-5cc5-c0a3-62b05901b84f Unique ID received when creating the Send-To object |
| X-Accesscode required | string <uuid> Example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 Access code received when creating the Send-To object |
{- "status": "UNCLAIMED",
- "creator": null,
- "signers": null
}To call the download endpoint, you must include the value of the
access_code field—received when creating the Send-To object—in the
request header X-Accesscode.
The response contains the originally provided PDF document in its current
state, which may be signed, declined, withdrawn, or still open for signing.
The current status can be retrieved using the track endpoint.
| SEND_TO_ID required | string <uuid> Example: d98ae06a-3ae4-5cc5-c0a3-62b05901b84f Unique ID received when creating the Send-To object |
| X-Accesscode required | string <uuid> Example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 Access code received when creating the Send-To object |
To call the delete endpoint, you must include the value of the
access_code field—received when creating the Send-To object—in the
request header X-Accesscode.
This call deletes the involved Send-To, Document, and SignatureRequest
objects regardless of the current Send-To state.
| SEND_TO_ID required | string <uuid> Example: d98ae06a-3ae4-5cc5-c0a3-62b05901b84f Unique ID received when creating the Send-To object |
| X-Accesscode required | string <uuid> Example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 Access code received when creating the Send-To object |
Returns the effective signature quality that will be applied when the
given username signs a document.
The resulting quality is determined by the combination of the requested
quality and legislation, where any matches any legislation.
For example, if you create a SignatureRequest with quality=AES_MINIMAL
and legislation=ZERTES, this endpoint will indicate the final quality the
user will sign with — typically QES, as AES_MINIMAL upgrades to QES
when the user's settings allow it.
| username | string <email> Example: username=john.doe@skribble.com Username to find |
{- "qes": {
- "zertes": "QES",
- "eidas": null
}, - "aes_minimal": {
- "zertes": "QES",
- "eidas": "AES"
}, - "aes": {
- "any": "AES"
}, - "ses": {
- "any": "SES"
}
}Endpoints for retrieving, checking status, and downloading identification evidence collected during Express QES signing. Requires Express QES identification evidence to be enabled for the business and a completed identification process.
Returns the current status of the identification evidence for the given
SignatureRequest and evidence_id.
Requirements:
evidence_id is required,
available in signer_identity_data.evidence_id of the SignatureRequest response).| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| EVIDENCE_ID required | string Example: 700580648 Unique ID of the identification evidence record, available in the |
{- "id": 1,
- "transactionCode": "700580648",
- "accountId": 111,
- "workflowId": 11,
- "status": "COMPLETED",
- "pendingReview": null,
- "createdAt": "2025-08-25T12:26:24.227Z",
- "expiresAt": "2025-08-26T12:26:24.226Z",
- "startedAt": "2025-08-25T12:26:27.134Z",
- "completedAt": "2025-08-25T12:27:58.382Z",
- "reviewedAt": null
}Retrieves the full identification evidence record as JSON for the given
SignatureRequest and evidence_id.
Requirements:
evidence_id is required).| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| EVIDENCE_ID required | string Example: 700580648 Unique ID of the identification evidence record, available in the |
{- "identFormat": "1.0.0",
- "transactionCode": "700580648",
- "initialTransactionCode": "700580648",
- "status": "COMPLETED",
- "flaggedAsFraud": false,
- "forcedManualReview": false,
- "pidDeleted": false,
- "createdAt": "2025-08-25T12:26:24.227Z",
- "updatedAt": "2025-08-25T12:27:58.382Z",
- "transactionLog": [
- {
- "status": "INITIATED",
- "timestamp": "2025-08-25T12:26:27.134Z"
}, - {
- "status": "COMPLETED",
- "timestamp": "2025-08-25T12:27:58.382Z"
}
]
}Downloads all files related to the identification evidence as a ZIP archive.
Requirements:
evidence_id is required).| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| EVIDENCE_ID required | string Example: 700580648 Unique ID of the identification evidence record, available in the |
Retrieves the signed JWT for the identification evidence. Useful for cryptographic verification or downstream integration purposes.
Requirements:
evidence_id is required).| SR_ID required | string <uuid> Example: cccccccc-4a6a-a958-a42e-6ea4172a378b Unique ID received when creating the Signature Request object |
| EVIDENCE_ID required | string Example: 700580648 Unique ID of the identification evidence record, available in the |
eyJhbGci3R[...]UtMDUifQ.eyJpZGVudEZ[...]MC4wI.NVJJA6z[...]hE5sE85Nko751w
Returns detailed signature activities for your business and its members within a specified date range.
Use these parameters to filter for a specific time range.
| Parameter | Description | Mandatory |
|---|---|---|
start_date |
The start date of the range to fetch the signature activities. Format: yyyy-MM-dd. |
yes |
end_date |
The end date of the range to fetch the signature activities. Format: yyyy-MM-dd. |
yes |
The result set can be controlled using the optional pagination parameters page and size
| Parameter | Description | Mandatory |
|---|---|---|
page |
The page number to fetch the signature activities. Must be a positive integer. Default: 1 |
no |
size |
The size of the page to fetch the signature activities. Must be a positive integer. Default: 25 Maximum: 100 | no |
sort |
The sort order of the signature activities. Can be asc or desc. Default is desc. |
no |
The response contains the following information.
General
| Field | Description |
|---|---|
activities |
Array of activities. See the following subchapter Activities. |
total_items |
Total items to fetch when paginating through all the pages. |
total_pages |
Total pages to fetch when paginating through all the pages. |
current_page |
Current page number. |
size |
Size of the page. |
Activities
| Field | Description |
|---|---|
id |
The ID of the signature activity. |
action |
The action type of a signature activity. Can be signed or sealed. |
timestamp |
The timestamp of the signature activity. |
signature_request_id |
The signature request ID. |
cost_center |
The cost center of the signature paying party. This information might not necessarily be present. |
initiator |
The initiator user of the signature activity. See the following subchapter User. |
signer |
The signer user of the signature activity. See the following subchapter User. |
User
| Field | Description |
|---|---|
email |
The email of the user. |
first_name |
The first name of the user. |
last_name |
The last name of the user. |
type |
The membership status of the user in relation to the business. Can be api, external, member or unknown. |
mobile |
The mobile number of the user. |
| start_date required | string <date> Example: start_date=2024-01-01 Start Date to find |
| end_date required | string <date> Example: end_date=2024-01-31 End Date to find |
| page | number Default: 1 Example: page=1 Page for pagination. |
| size | number <= 100 Default: 25 Example: size=50 Page size for pagination. |
| sort | string Default: "desc" Enum: "asc" "desc" Example: sort=desc Sort order |
{- "total_pages": 8,
- "total_items": 377,
- "current_page": 1,
- "size": 50,
- "activities": [
- {
- "_id": "66f5c2c054dc55b710d27968",
- "action": "SIGNED",
- "timestamp": "2024-01-31T13:59:11.382Z",
- "signature_request_id": "baf85d34-6676-8592-a7aa-39fb0ea81622",
- "cost_center": { },
- "initiator": {
- "email": "john.doe@skribble.com",
- "first_name": "John",
- "last_name": "Doe",
- "type": "member",
- "mobile": "41791234567"
}, - "signer": {
- "email": "john.doe@skribble.com",
- "first_name": "John",
- "last_name": "Doe",
- "type": "member",
- "mobile": "41791234567"
}, - "quality": "QES",
- "legislation": "ZERTES"
}
]
}Returns the current health status of the Skribble API. Use this endpoint to monitor system availability and responsiveness.
status:UP indicates that the system is operational.
{- "status": "UP",
- "groups": [
- "liveness readyness"
]
}