Schemas
LoginRequest
usernameThe username of the users credentials to login
api-keyThe API key of the users credentials to login
ProblemResponse
typeURI identifying the problem category. The host of this URI depends on
the environment the request was made against (e.g. api.skribble.com
and api.skribble.de for the production regions; other environments
use their respective hosts). Match on the path segment after /problem/
rather than the full URI. Known values:
https://api.skribble.com/problem/problem-with-message— generic error with a messagehttps://api.skribble.com/problem/entity-not-found— requested resource does not existhttps://api.skribble.com/problem/feature-not-enabled— a required feature is not enabled for the businesshttps://api.skribble.com/problem/constraint-violation— request violates a domain constrainthttps://api.skribble.com/problem/parameterized— parameterized error with detailshttps://api.skribble.com/problem/limit-exceeded— a usage limit was exceeded
methodHTTP method of the failing request.
pathRequest URI of the failing request.
statusHTTP status code, mirroring the response status line.
messageHuman-readable error message.
keyOptional machine-readable error key. Present for a subset of errors that carry
a stable code. Prefer matching on this field over parsing message, which is
not part of the stable contract.
Known keys, grouped by category:
Authentication (403):
error.auth.token_expired: the access token has expirederror.auth.token_invalid: the access token is malformed or otherwise invaliderror.auth.credentials_invalid: the supplied credentials were rejected
Rate limiting (429):
error.rate_limit.exceeded: a generic rate limit was exceedederror.rate_limit.reminder: the per-signature-request reminder limit was exceeded
File upload / attachment (400):
file.attachment.unsupported: the uploaded attachment type is not supportedfile.malware.detected: malware was detected in the uploaded file
PDF processing (400):
file.pdf.general_error: the PDF could not be loaded (corrupt or unreadable)file.pdf.encryption.unknown_password: the PDF is encrypted with an unknown passwordfile.pdf.encryption.no_changes_allowed: the PDF's signature permissions (DocMDP) do not allow the required changesfile.pdf.encryption.unknown_permissions: the PDF is encrypted with an unknown permissions typefile.pdf.signature_verification.failed: verification of an existing PDF signature failed
Signature request (400):
error.sr.last_document_cannot_be_removed: the request would remove the only remaining document from the signature request; an SR must keep at least one document
SignatureStatusCode
The state of a signature.
Possible values:
- OPEN Waiting for the user to sign a signature.
- WAITING The signer is waiting for a preceding signer in the sequence to complete.
- DECLINED The user declined to sign.
- WITHDRAWN The owner has withdrawn the signature request.
- SIGNED The user signed the document.
- ERROR A technical error occurred.
SignatureStatusOverall
Overall signing status of the document.
Possible values:
- OPEN At least one user has not signed or declined their signature yet.
- DECLINED At least one user declined to sign. The signature request failed.
- WITHDRAWN The owner has withdrawn the signature request.
- SIGNED All users signed the document. The signature request was successfully completed.
- EXPIRED The owner-set
expires_atdate has passed before all signers signed. Terminal status. - ERROR A technical error occurred. The signature request cannot be completed.
SignatureLegislation
Legislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
SignatureQuality
Minimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
SignatureLanguage
Determines in which language e-mails are sent to the user, if the user has not set their language preference yet.
SignerIdentityDataResponse
email_addressEmail address of the no-account-signer.
first_nameFirst name of the no-account-signer.
last_nameLast name of the no-account-signer.
mobile_numberMobile number of the no-account-signer.
languageDetermines in which language e-mails are sent to the user, if the user has not set their language preference yet.
identity_referenceCustomer-generated identifier for further identification of the signer.
identification_require_evidenceIf set, a new identification process is started to get fresh evidence records, even if the signer is already identified. If the business hasn't enabled Express QES, the request is rejected.
providerEvidence provider used to verify the signer's identity.
evidence_idID of the evidence records created during identification. Populated in the
SignatureRequest response once the identification process has been completed.
VisualSignatureImage
contentBase64 encoded bytes of content.
content_typeContent type of bytes sent in content. At the moment this MUST be image/png
content_sizeSize of content in bytes. Calculated by the server.
VisualSignaturePosition
pagePage number (0-indexed) where the signature appears. This is a String and not a number!
heightHeight of the signature in pixels.
widthWidth of the signature in pixels.
xX-coordinate (pixels from left) of signature.
yY-coordinate (pixels from top) of signature.
rotationDefines a rotation of the field content. If used in context with a form field, then only the values 0, 90, 180, 270 are legal. Otherwise every value is legal. The rotation is applied counter clockwise.
VisualSignatureResponse
Visual signature image.
Position where the signature should appear.
List of additional positions where the signature should appear.
form_fieldName of the form field in which the signature is placed. If multiple fields of this name are present in the document, all will be used. Takes precedence before positions.
Text displayed inside the form field.
SignatureRecipientResponse
sidstatus_codeThe state of a signature.
Possible values:
- OPEN Waiting for the user to sign a signature.
- WAITING The signer is waiting for a preceding signer in the sequence to complete.
- DECLINED The user declined to sign.
- WITHDRAWN The owner has withdrawn the signature request.
- SIGNED The user signed the document.
- ERROR A technical error occurred.
account_emailSigner identity information returned as part of the SignatureRequest response.
sequencenotifyWhether Skribble sends notification emails to this signer. When set to false together with
signer_identity_data.identity_reference, the TAN-based email validation for No-Account-Signers (SES) is skipped.
signing_urlA personalized signing URL for this specific signer, distinct from the top-level signing_url of the SignatureRequest. It points to the Skribble web application and will directly open the document for signing provided that the user is known to Skribble and is logged in. Otherwise, the user must login or register first to be able to see the document.
When the user visits this URL, they will be forwarded to a special preview page of the PDF document and can start the signature process as usual.
You can add the following query parameters to this signing_url. Skribble will respect these parameters and redirect the user to the provided URLs once the signature process is finished.
Example: https://my.skribble.com/view/4f43614a-de50-bfe1-2df3-4c881fc7840e/cd16bd0802d146fd94ff736d7d7bf551?exitURL=https%3A%2F%2Fmy-app.com%2Fsigned&redirectTimeout=10
| Parameter | Type | Description |
|---|---|---|
exitURL | string (URL-encoded) | Optional URL to redirect after the signature process finished. Example: https%3A%2F%2Fgoogle.com |
errorURL | string (URL-encoded) | Optional URL to redirect in case of an error. Defaults to exitURL. Ignored if exitURL is not set. Example: https%3A%2F%2Fbing.com |
declineURL | string (URL-encoded) | Optional URL to redirect when the user declines. Defaults to exitURL. Ignored if exitURL is not set. |
hidedownload | boolean | Optional flag to hide the download button on the success screen. Requires exitURL to be set. Example: true |
redirectTimeout | integer | Optional seconds before auto-redirect after signing. Min 0 (instant), max 90. Default: 45. Example: 20 |
lang | string | Optional language code to display the signing page in a specific language. Supported values: en (default), de, fr. Example: lang=fr |
overlay | boolean | Optional flag to show or hide the Skribble overlay on the signing page. |
decline_messageThe message provided by the signer when declining the signature request. Only present if the signer declined and provided a message.
signed_atTimestamp when this signer signed the document.
signed_legislationThe legislation under which this signer's signature was created. Only present after signing.
signed_qualityThe actual quality of this signer's signature. Only present after signing.
last_viewed_atTimestamp when this signer last viewed the document.
languageLanguage preference for this signer.
Visual signature placement information.
AttachOnSuccess
When a SignatureRequest has been signed by all signers, all signers and all observers are notified by email. Skribble provides the option to attach two types of attachments automatically to this email:
- the signed document and
- the signature protocol.
This can be configured via the business settings, which can be used to define that these documents should generally be attached for all SignatureRequests created by business members.
Alternatively it is possible to define the attachments on demand per SignatureRequest by using this field.
SignatureResponse
idtitlemessagedocument_idlegislationLegislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
qualityMinimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
signing_urlThe URL for the SignatureRequest owner to view and manage the request in the Skribble web application. This URL is not intended for signers — each signer has their own dedicated signing_url within the signatures array.
status_overallOverall signing status of the document.
Possible values:
- OPEN At least one user has not signed or declined their signature yet.
- DECLINED At least one user declined to sign. The signature request failed.
- WITHDRAWN The owner has withdrawn the signature request.
- SIGNED All users signed the document. The signature request was successfully completed.
- EXPIRED The owner-set
expires_atdate has passed before all signers signed. Terminal status. - ERROR A technical error occurred. The signature request cannot be completed.
businesscc_email_addressesauto_delete_atServer-managed date on which this signature request and its related documents are automatically
deleted in line with the owning business's retention policy. Not directly settable by API clients.
May be absent or null when no retention policy applies.
expires_atOwner-set expiry date for this signature request. When this date passes, the request
transitions to status_overall=EXPIRED. Set via expires_at at create time.
Absent or null when no owner-set expiry has been configured.
attach_on_successWhen a SignatureRequest has been signed by all signers, all signers and all observers are notified by email. Skribble provides the option to attach two types of attachments automatically to this email:
- the signed document and
- the signature protocol.
This can be configured via the business settings, which can be used to define that these documents should generally be attached for all SignatureRequests created by business members.
Alternatively it is possible to define the attachments on demand per SignatureRequest by using this field.
customCustom field for storing application-specific data related to this signature request.
ownerread_accessUsers or API keys with read access to this signature request.
write_accessUsers or API keys with write access to this signature request.
created_atupdated_atcallback_success_urlCallback URL called on overall success. See the request schema for supported placeholders and retry behaviour.
callback_error_urlCallback URL called when a signer declines or the request is withdrawn. See the request schema for supported placeholders and retry behaviour.
callback_update_urlCallback URL called on any update (e.g. one signer signed). See the request schema for supported placeholders and retry behaviour.
callback_start_sign_urlCallback URL called when a signer starts the signature process (only for xQES). See the request schema for supported placeholders and retry behaviour.
callback_ident_pending_urlCallback URL called when the identification of a signer requires manual review. See the request schema for supported placeholders and retry behaviour.
callback_ident_error_urlCallback URL called when the identification of a signer ends in an error. See the request schema for supported placeholders and retry behaviour.
SignerIdentityData
email_addressEmail address of no-account-signer. Mandatory when quality is SES.
first_nameFirst name of no-account-signer
last_nameLast name of no-account-signer
mobile_numberMobile number of no-account-signer
languageDetermines in which language e-mails are sent to the user, if the user has not set their language preference yet.
providerEvidence provider where Skribble can verify the signer's identity data.
identity_referenceOptional customer-generated identifier for further identification. When set together with notify: false,
the TAN-based email validation for No-Account-Signers (SES) is skipped, allowing signers to sign directly
without the Skribble TAN process.
identification_require_evidence(optional) if set, even if the signer is already identified, a new identification process is started to get fresh evidence records. If the business hasn't enabled Express QES, the request is rejected.
VisualSignature
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · requires: position | |
| type = object · requires: positions | |
| type = object · requires: form_field |
Visual signature image.
positionsMust not be provided when position is used.
form_fieldMust not be provided when position is used.
SignatureRecipient
account_emailOptional signer account email address.
sequenceOptional signer sequence.
notifyWhether to send a notification to this signer.
languageDetermines in which language e-mails are sent to the user, if the user has not set their language preference yet.
Optional (no-account) signer identity information.
Visual signature placement information.
UpdateSignatureRequest
idUnique ID of the signature request.
titleTitle of the signature request.
messageMessage sent to the other participants along with this signature request.
legislationLegislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
qualityMinimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
callback_success_urlCallback-URL which is called on overall success.
callback_error_urlCallback-URL which is called in case of an error.
callback_update_urlCallback-URL which is called in case of an update.
callback_start_sign_urlCallback-URL which is called when a signer starts the signature process (only for xQES).
callback_ident_pending_urlCallback-URL which is called when the identification of a signer requires manual review.
callback_ident_error_urlCallback-URL which is called when the identification of a signer ends in an error.
CreateSignatureRequestBase
titleTitle of the signature request.
messageMessage sent to the other participants along with this signature request.
legislationLegislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
qualityMinimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
List of recipients required to sign the document.
It is possible to create a SignatureRequest where one or more invited participants won't need a Skribble account to sign the SignatureRequest. Those signers are called No-Account-Signers (NAS).
To invite a No-Account-Signer (NAS), include an entry in the signatures array without an
account_email and provide the signer's details using signer_identity_data instead.
Each entry in the signatures array will be treated as a distinct identity. This means two entries
with the same signer_identity_data are treated as two different identities and require that this
person signs the document twice.
Optionally you can combine signer_identity_data and account_email in your requests. In this case,
the system checks first if there is a Skribble account with the specified e-mail address.
If one is found the existing Skribble user will be invited to sign the document. Otherwise, the
specified user in signer_identity_data will be invited to sign.
Good to know We recommend combining
signer_identity_dataandaccount_emailif 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 onlysigner_identity_data, the document will not appear in their Skribble account, even if they have one. Instead, they will have to access the document using the specific link provided in their signature invitation email.
Missing fields like first name and last name can easily be adjusted by the signer through the Skribble web client.
cc_email_addressesObserver email addresses of users who are granted read access and to whom notifications are sent. Any email address is accepted, regardless of whether the recipient already has a Skribble account. If the observer does not yet have an account, they will need to create one to access the document.
callback_success_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the final signed document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_error_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_update_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document IDSKRIBBLE_SIGNATURE_ID— the Signature ID (SID) of the signature just made
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_start_sign_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_ident_pending_urlCallback URL called via POST when the identification of a signer requires manual review.
The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_ident_error_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
customCustom field for storing application-specific data related to this signature request.
expires_atEarly access. This field is available to opted-in businesses only. To request access, contact support@skribble.com.
Setting expires_at requires the signature-request expiry feature to be enabled
for the business. If it is not, the request fails with 403 Forbidden
(problem type feature-not-enabled).
Owner-set expiry date for this signature request (ISO 8601 date, e.g. 2026-12-31).
When set, the SignatureRequest transitions to status_overall=EXPIRED at the end of the
given day if it has not been completed. EXPIRED is a terminal status.
Constraints
- Must be today or later.
- Must be at most 6 months in the future.
- If the owning business has a retention policy configured,
expires_atmust be at most one day before the configured retention deletion date.
Omit or send null to leave the request without an owner-set expiry.
attach_on_successWhen a SignatureRequest has been signed by all signers, all signers and all observers are notified by email. Skribble provides the option to attach two types of attachments automatically to this email:
- the signed document and
- the signature protocol.
This can be configured via the business settings, which can be used to define that these documents should generally be attached for all SignatureRequests created by business members.
Alternatively it is possible to define the attachments on demand per SignatureRequest by using this field.
creatorSet a business member as the owner of this signature request, in addition to the API user.
write_accessUsers or API keys with write access to this signature request.
CreateSignatureRequest
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · requires: content, title | |
| type = object · requires: file_url, title | |
| type = object · requires: document_id, title |
contentBase64 encoded bytes of the document. Maximum document size is 112.5 MB unencoded (150 MB Base64-encoded).
titleTitle of the signature request.
content_typeContent type of bytes sent in content. Currently, only application/pdf is supported.
messageMessage sent to the other participants along with this signature request.
legislationLegislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
qualityMinimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
List of recipients required to sign the document.
It is possible to create a SignatureRequest where one or more invited participants won't need a Skribble account to sign the SignatureRequest. Those signers are called No-Account-Signers (NAS).
To invite a No-Account-Signer (NAS), include an entry in the signatures array without an
account_email and provide the signer's details using signer_identity_data instead.
Each entry in the signatures array will be treated as a distinct identity. This means two entries
with the same signer_identity_data are treated as two different identities and require that this
person signs the document twice.
Optionally you can combine signer_identity_data and account_email in your requests. In this case,
the system checks first if there is a Skribble account with the specified e-mail address.
If one is found the existing Skribble user will be invited to sign the document. Otherwise, the
specified user in signer_identity_data will be invited to sign.
Good to know We recommend combining
signer_identity_dataandaccount_emailif 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 onlysigner_identity_data, the document will not appear in their Skribble account, even if they have one. Instead, they will have to access the document using the specific link provided in their signature invitation email.
Missing fields like first name and last name can easily be adjusted by the signer through the Skribble web client.
cc_email_addressesObserver email addresses of users who are granted read access and to whom notifications are sent. Any email address is accepted, regardless of whether the recipient already has a Skribble account. If the observer does not yet have an account, they will need to create one to access the document.
callback_success_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the final signed document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_error_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_update_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document IDSKRIBBLE_SIGNATURE_ID— the Signature ID (SID) of the signature just made
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_start_sign_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_ident_pending_urlCallback URL called via POST when the identification of a signer requires manual review.
The URL supports the following placeholders, replaced with current SignatureRequest data before each call:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
callback_ident_error_urlCallback 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:
SKRIBBLE_SIGNATURE_REQUEST_ID— the SignatureRequest IDSKRIBBLE_DOCUMENT_ID— the most recent document ID
Retry: If the endpoint is unreachable, Skribble retries every 10 minutes for up to 2 hours.
The endpoint can return a Retry-After header (seconds) to control the retry interval.
customCustom field for storing application-specific data related to this signature request.
expires_atEarly access. This field is available to opted-in businesses only. To request access, contact support@skribble.com.
Setting expires_at requires the signature-request expiry feature to be enabled
for the business. If it is not, the request fails with 403 Forbidden
(problem type feature-not-enabled).
Owner-set expiry date for this signature request (ISO 8601 date, e.g. 2026-12-31).
When set, the SignatureRequest transitions to status_overall=EXPIRED at the end of the
given day if it has not been completed. EXPIRED is a terminal status.
Constraints
- Must be today or later.
- Must be at most 6 months in the future.
- If the owning business has a retention policy configured,
expires_atmust be at most one day before the configured retention deletion date.
Omit or send null to leave the request without an owner-set expiry.
attach_on_successWhen a SignatureRequest has been signed by all signers, all signers and all observers are notified by email. Skribble provides the option to attach two types of attachments automatically to this email:
- the signed document and
- the signature protocol.
This can be configured via the business settings, which can be used to define that these documents should generally be attached for all SignatureRequests created by business members.
Alternatively it is possible to define the attachments on demand per SignatureRequest by using this field.
creatorSet a business member as the owner of this signature request, in addition to the API user.
write_accessUsers or API keys with write access to this signature request.
SignatureReport
Metadata and status information about the signature request
List of users involved in the signature process
CallbackType
The type of this callback.
Possible values:
- SUCCESS Is triggered when the document has been successfully signed by all parties involved.
- UPDATE Is triggered on changes on the
SignatureRequestobject like when one person of all involved parties has signed. - ERROR Is triggered when a person declines the signature or when the
SignatureRequestis withdrawn. - START_SIGN Is triggered when a person starts the signature process (only for xQES).
- IDENT_PENDING Is triggered when the identification of a person within a signature process requires manual review.
- IDENT_ERROR Is triggered when the identification of a person within a signature process ended in an error.
CallbackState
The state of the callback.
Possible values:
- OPEN The callback request will be executed in the next execution cycle.
- COMPLETED The callback request was executed successfully. The API received an HTTP 2xx success code in response.
- RESIGNATED The callback request has been attempted
attemptstimes but was unsuccessful. The API did not receive a valid HTTP 2xx response.
SignatureCallbacksResponse
signature_request_idSignature request's unique ID on Skribble.
typeThe type of this callback.
Possible values:
- SUCCESS Is triggered when the document has been successfully signed by all parties involved.
- UPDATE Is triggered on changes on the
SignatureRequestobject like when one person of all involved parties has signed. - ERROR Is triggered when a person declines the signature or when the
SignatureRequestis withdrawn. - START_SIGN Is triggered when a person starts the signature process (only for xQES).
- IDENT_PENDING Is triggered when the identification of a person within a signature process requires manual review.
- IDENT_ERROR Is triggered when the identification of a person within a signature process ended in an error.
stateThe state of the callback.
Possible values:
- OPEN The callback request will be executed in the next execution cycle.
- COMPLETED The callback request was executed successfully. The API received an HTTP 2xx success code in response.
- RESIGNATED The callback request has been attempted
attemptstimes but was unsuccessful. The API did not receive a valid HTTP 2xx response.
urlThe called URL of this callback.
attemptsThe attempts this callback was carried out.
messagesError messages in case that the callback failed.
created_atThe time at which the object was created.
updated_atThe time at which the object was last changed.
CreateSignatureAttachmentRequest
filenameFile name of the attachment.
content_typeContent type of the attachment. Supported types:
application/pdf, application/x-tika-msoffice, application/x-tika-ooxml,
application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document,
application/vnd.ms-word.document.macroEnabled.12, application/vnd.ms-excel,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
application/vnd.ms-excel.sheet.macroenabled.12, application/vnd.ms-powerpoint,
application/vnd.openxmlformats-officedocument.presentationml.presentation,
application/vnd.ms-powerpoint.presentation.macroEnabled.12,
image/gif, image/jpeg, image/png, text/plain
contentBase64 encoded bytes of the attachment.
IdentificationEvidenceStatusResponse
idInternal ID of the evidence record.
transactionCodeUnique transaction code for the identification process.
accountIdInternal account ID associated with the identification.
workflowIdInternal workflow ID used for the identification process.
statusCurrent status of the identification process.
Present if the identification is pending manual review, otherwise null.
createdAtTimestamp when the identification was created.
expiresAtTimestamp when the identification evidence expires.
startedAtTimestamp when the identification process was started by the signer.
Timestamp when the identification process was completed. Null if not yet completed.
Timestamp when the identification was reviewed. Null if not reviewed.
CreateSealRequest
contentBase64 encoded bytes of the document.
account_nameAccount 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.
titleTitle of the document.
SignatureFormFieldPosition
pagePage number (0-indexed) where the field appears. This is a String and not a number!
heightHeight of the field in pixels.
widthWidth of the field in pixels.
xX-coordinate (pixels from left) of field.
yY-coordinate (pixels from top) of field.
rotationDefines a rotation of the field content. If used in context with a form field, then only the values 0, 90, 180, 270 are legal. Otherwise every value is legal. The rotation is applied counter clockwise.
SignatureFormField
nameSignature Formfield name
signedSignature status of Formfield
List of positions where the Formfield is present
DocumentResponse
idparent_idID of the previous version of the Document object. As documents are immutable, every change will create a new version, which is connected by the parent_id.
titlecontent_typesizepage_countpage_widthpage_heightOptional detected Signature Formfields
ownerread_accessUsers or API keys with read access to this document.
write_accessUsers or API keys with write access to this document.
created_atupdated_atUploadDocumentRequest
titleTitle of the document.
read_accessGive specific users or API keys read access to this document.
write_accessGive specific users or API keys write access to this document.
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · requires: content | |
| type = object · requires: file_url |
contentBase64 encoded bytes of the document.
content_typeContent type of bytes sent in content. Currently, only application/pdf is supported.
DocumentContentResponse
content_typecontent_sizecontentBase64 encoded bytes of the document.
CreateSendToRequest
titleTitle of the document.
contentBase64 Encoded Document.
CreateSendToResponse
urlURL to claim document to get signed.
idGenerated send-to document ID
access_codeAccess code to be used in for endpoints.
TrackSendToResponse
statusStatus of the Send-To request
User who claimed the Send-To request
List of signers for the Send-To request
UserSignatureQualitiesResponse
Best possible quality, but AES at a minimum.
ActivitiesSignaturesUser
emailfirst_namelast_nametypemobileActivitiesSignaturesEntry
_idactionAction performed on the signature request
timestampsignature_request_idID of the related signature request
Optional cost center
qualityMinimal quality of the signatures for this signature request.
| Quality | Description |
|---|---|
| QES | Every signer must use QES. This is the default quality. Requires a legislation parameter. |
| AES | Signers will use AES if available, otherwise fall back to QES. |
| AES_MINIMAL | Signers will use QES if available, otherwise AES. At least AES is guaranteed. Requires a legislation parameter. |
| SES | Every signer uses SES. |
| DEMO | Every signer uses a DEMO signature with no legal binding. API demo users (api_demo_example_*) get this quality by default. |
| PART11 | Signers use a signature compliant with 21 CFR Part 11 regulations. |
legislationLegislation under which the signatures are created. Required when quality is QES or AES_MINIMAL.
| Legislation | Description |
|---|---|
| ZERTES | QES according to Swiss law. This is the default. |
| EIDAS | QES according to EU law. |
