REST API

API reference

Version 1.0.0. Base URL https://api.esoppari.fi. The machine-readable contract: openapi.yaml.

Every endpoint needs an API key unless it says otherwise. Each error answer is a problem document.

Account

GET /v1/me

Describe the API key that makes the call

Responses

StatusDescriptionBody
200 The key, its organisation and its rate limit. application/json Me
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Documents

POST /v1/documents

Upload a PDF for a signing request

Upload the PDF first, then name its id as document_id when you create the signing request. The PDF must be at most 10 MiB, not encrypted and not signed already. An upload that no signing request claims is deleted after 24 hours.

Request body

multipart/form-data

FieldTypeDescription
file required string (binary) The PDF.

Responses

StatusDescriptionBody
201 The upload is stored. application/json Document
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

DELETE /v1/documents/{document_id}

Delete an upload that no signing request claimed

Parameters

NameInTypeDescription
document_id required path string (uuid)

Responses

StatusDescriptionBody
204 The upload is deleted, or was already gone.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Signing requests

GET /v1/signing-requests

List signing requests, newest first

Parameters

NameInTypeDescription
status query SigningRequestStatus
created_from query string (date-time) Only requests created at or after this instant.
created_to query string (date-time) Only requests created before this instant.
cursor query string The next_cursor of the previous page. Leave out for the first page.
limit query integer

Responses

StatusDescriptionBody
200 One page. application/json SigningRequestList
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/signing-requests

Create a draft signing request

Creates a draft. Nothing is sent: call send next. Every field you leave out takes the default of the key's group, then of the organisation.

Send an Idempotency-Key to make a retry safe: the same key returns the request that the first call created, with status 200.

Parameters

NameInTypeDescription
Idempotency-Key header string Any string up to 255 characters, unique per signing request you mean to create. Keys are unique per organisation, not per API key: prefix them with the name of your system.

Request body

application/json: SigningRequestCreate

Responses

StatusDescriptionBody
200 A retry with the same Idempotency-Key. The body is the request the first call created. application/json SigningRequest
201 The draft is created. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/signing-requests/{signing_request_id}

Get a signing request and its signers

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
200 The request. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

PUT /v1/signing-requests/{signing_request_id}

Replace a draft

Replaces every field of a draft, the signer list included. Send the ETag of your last read as If-Match; a draft that changed since then is refused with 412, and a call without If-Match with 428. If-Match: * replaces whatever version is current. To keep the PDF, leave out document_id.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)
If-Match required header string The ETag of your last read of the draft.

Request body

application/json: SigningRequestUpdate

Responses

StatusDescriptionBody
200 The draft after the change. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

DELETE /v1/signing-requests/{signing_request_id}

Delete a draft

Only a draft can be deleted. A sent request is cancelled instead.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
204 The draft is deleted.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/signing-requests/{signing_request_id}/cancel

Cancel a sent request

A cancelled request has the status declined and a cancelled event. A signer decline has a declined event instead. A second call on a request that is already cancelled returns 200.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
200 The request is cancelled. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/signing-requests/{signing_request_id}/events

List what happened to a request, newest first

One page at a time. Pass the next_cursor of a page as cursor to read the next one; the last page has a null next_cursor.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)
cursor query string The next_cursor of the previous page. Leave out for the first page.
limit query integer

Responses

StatusDescriptionBody
200 A page of the events. application/json object
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/signing-requests/{signing_request_id}/send

Send a draft to its signers

The service prepares the document and emails the first signers. A second call on a request that waits for signatures or is completed returns 200 and does nothing; on a declined or expired request it is 409 request_not_draft.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
200 The request is sent. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/signing-requests/{signing_request_id}/signed-document

Download the signed PDF

The PAdES PDF with every signature. It exists once the request is completed, and for a declined or expired request that has at least one signature. Before that the answer is 404 with code signed_document_not_ready.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
200 The signed PDF. application/pdf string (binary)
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/signing-requests/{signing_request_id}/signers/{signer_id}/resend-invitation

Email the invitation to a signer again

Schedules the email; it goes out within seconds. The invitation_resent event of the request shows when it went out. At least once: a retry can send a second email, and two calls while the first waits send one. Only a signer in the invited status can get a new invitation. A signer gets one invitation email in 3 minutes at most: a resend sooner gives 429 resend_too_soon with Retry-After.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)
signer_id required path string (uuid)

Responses

StatusDescriptionBody
204 The invitation is accepted for sending.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/signing-requests/{signing_request_id}/signers/{signer_id}/withdraw

Remove a signer who has not signed

The signer moves to the withdrawn status and their link stops working; the request goes on without them. In a sequential order the next signer is invited when the withdrawn one held the turn. When no unsigned signer is left and at least one signed, the request completes with the signatures it has. When nobody signed, the call is refused with 409 withdraw_leaves_no_signature: cancel the request instead. Only a signer in the pending or invited status can be withdrawn; a second call on a withdrawn signer returns 200.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)
signer_id required path string (uuid)

Responses

StatusDescriptionBody
200 The request after the withdrawal. application/json SigningRequest
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/signing-requests/{signing_request_id}/source-document

Download the PDF of a draft as it was uploaded

Available while the request is a draft. After the send, download the signed PDF instead.

Parameters

NameInTypeDescription
signing_request_id required path string (uuid)

Responses

StatusDescriptionBody
200 The PDF. application/pdf string (binary)
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Branding

GET /v1/branding

Get the theme of the signing pages

The colours and the logo that signers see. A field that is absent or null uses the platform colour or, for the logo, the initials of your organisation.

Responses

StatusDescriptionBody
200 The theme. application/json Branding
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

PUT /v1/branding/colours

Replace the theme colours

Send all five colours as #rrggbb, or null for the platform colour. A refused colour is a 422 that names its field, and nothing is stored. The rules:

  • primary_colour: 3:1 contrast against white, also on hover and when pressed. It must not be a red, and must look different from the Decline button. Codes primary_low_contrast, primary_like_decline.
  • decline_colour: a red, with 3:1 contrast against white, also on hover and when pressed. Codes decline_not_red, decline_low_contrast.
  • secondary_colour: the text of base buttons, 4.5:1 against white and against a pressed button. Code secondary_low_contrast.
  • link_colour: links that are not buttons, 4.5:1 against white. Code link_low_contrast.
  • chrome_colour: any colour.

The text on each fill turns black or white for contrast.

Request body

application/json: BrandColours

Responses

StatusDescriptionBody
200 The theme after the change. application/json Branding
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Webhooks

GET /v1/events/{event_id}

Get an event and the payload that went out

Parameters

NameInTypeDescription
event_id required path string (uuid) The event id. The webhook-id header of a delivery is evt_ and this id.

Responses

StatusDescriptionBody
200 The event. application/json WebhookEvent
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/webhook-deliveries/{delivery_id}

Get a delivery and its attempts

Parameters

NameInTypeDescription
delivery_id required path string (uuid)

Responses

StatusDescriptionBody
200 The delivery. application/json WebhookDeliveryDetail
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-deliveries/{delivery_id}/redeliver

Send a delivery again

The same webhook-id goes out again, so a receiver that dropped the first one by its id drops this one too. A delivery that is still pending, or one whose endpoint is disabled, is refused with 409; a webhook.test delivery goes to a disabled endpoint too, but not after a 410 Gone until you enable the endpoint again. A webhook.test delivery is also refused with 409 while another test of the endpoint waits.

Parameters

NameInTypeDescription
delivery_id required path string (uuid)

Responses

StatusDescriptionBody
202 The delivery is queued again.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/webhook-endpoints

List the webhook endpoints

Responses

StatusDescriptionBody
200 Every endpoint of the organisation, oldest first. An organisation has 10 at most. application/json WebhookEndpointList
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints

Register a webhook endpoint

The URL must be https on port 443, with a host name, not an IP address. A host that resolves to a private or loopback address is refused. The answer carries the signing secret once; store it, then verify each delivery with it (Standard Webhooks).

Request body

application/json: WebhookEndpointInput

Responses

StatusDescriptionBody
201 The endpoint and its secret. application/json WebhookEndpointWithSecret
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/webhook-endpoints/{endpoint_id}

Get a webhook endpoint

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
200 The endpoint. application/json WebhookEndpoint
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

PUT /v1/webhook-endpoints/{endpoint_id}

Replace the URL, the description and the event filter

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Request body

application/json: WebhookEndpointInput

Responses

StatusDescriptionBody
200 The endpoint after the change. application/json WebhookEndpoint
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

DELETE /v1/webhook-endpoints/{endpoint_id}

Delete a webhook endpoint and its delivery log

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
204 The endpoint is deleted. Deliveries still queued are not sent.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/webhook-endpoints/{endpoint_id}/deliveries

List the deliveries of an endpoint, newest first

The log keeps 30 days.

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)
cursor query string The next_cursor of the previous page. Leave out for the first page.
limit query integer

Responses

StatusDescriptionBody
200 One page. application/json WebhookDeliveryList
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints/{endpoint_id}/disable

Disable an endpoint

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
200 The endpoint. Deliveries still queued are cancelled when they come due. application/json WebhookEndpoint
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints/{endpoint_id}/enable

Enable an endpoint

Also enables an endpoint that the service disabled after 72 hours of failures or a 410 Gone, and starts its failure clock again. The service records no event for an endpoint while it is disabled, so read the current state of your requests through the API. Then send the failed and cancelled deliveries again with recover.

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
200 The endpoint. application/json WebhookEndpoint
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints/{endpoint_id}/recover

Send the failed and cancelled deliveries again

A delivery is cancelled when its endpoint is disabled before an attempt. Enable the endpoint first: an endpoint that is disabled gives 409 webhook_endpoint_disabled. One call sends 1000 deliveries at most, oldest first; call again for the next ones. A webhook.test delivery is not sent again.

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Request body

application/json: WebhookRecoverInput

Responses

StatusDescriptionBody
202 How many deliveries are queued again. application/json WebhookRecoverResult
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints/{endpoint_id}/rotate-secret

Make a new signing secret

For 24 hours, each delivery carries two signatures: one with the new secret and one with the old. Deploy the new secret within that time. A second rotation within the 24 hours ends the oldest secret at once.

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
200 The endpoint and its new secret. application/json WebhookEndpointWithSecret
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/webhook-endpoints/{endpoint_id}/test

Send a webhook.test event

The test goes through the normal delivery path, and also to an endpoint that is disabled. A test makes one attempt, with no retry. While a test of the endpoint waits for its attempt, a new call returns that test. A 410 Gone to a test disables the endpoint, as for any event, and after a 410 Gone a test gives 409 webhook_endpoint_disabled until you enable the endpoint again.

Parameters

NameInTypeDescription
endpoint_id required path string (uuid)

Responses

StatusDescriptionBody
202 The delivery is queued. application/json WebhookDelivery
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Creation sessions

POST /v1/creation-sessions

Open a creation session

A creation session is one page on which a person of your app reviews and sends one signing request, with no eSoppari account. Send the person to url (hosted), or mount url in your app with esoppari.js (embedded). The session lasts expires_in_minutes and sends once. A hosted page then sends the person to success_url or cancel_url; an embedded page calls the callbacks of esoppari.js. Trust the creation_session.completed webhook, not the redirect.

The workflow fields (expiry, reminders, retention and the others) take the group and organisation defaults as a create does, and the page cannot change them. The page can change the title, and the signers when allow_edit_signers is true. With no document_id, the person uploads the PDF on the page.

An organisation has 100 open sessions at most; one more gives 422 creation_session_limit_reached.

Request body

application/json: CreationSessionCreate

Responses

StatusDescriptionBody
201 The session, its page URL and its client secret. Both carry the secret and are in this answer only. application/json CreationSessionWithSecret
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/creation-sessions/{creation_session_id}

Get a creation session

Parameters

NameInTypeDescription
creation_session_id required path string (uuid)

Responses

StatusDescriptionBody
200 The session, with no secret. application/json CreationSession
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

GET /v1/embed-origins

List the embed origins

Responses

StatusDescriptionBody
200 The origins that may frame an embedded session, oldest first. An organisation has 10 at most. application/json EmbedOriginList
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

POST /v1/embed-origins

Add an embed origin

An https origin with no path, for example https://app.example.com. An embedded session names one of these origins, and only that origin can frame its page.

Request body

application/json: EmbedOriginInput

Responses

StatusDescriptionBody
201 The origin as it is stored. application/json EmbedOrigin
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

DELETE /v1/embed-origins

Remove an embed origin

An open session that names the origin closes at once, and its page cannot be framed.

Parameters

NameInTypeDescription
origin required query string

Responses

StatusDescriptionBody
204 The origin is removed.
4xx / 5xx An error. code says which one; see the error guide. application/problem+json Problem

Spec

GET /v1/openapi.yaml

This document

No API key needed.

Responses

StatusDescriptionBody
200 The OpenAPI document. application/yaml string

Schemas

BrandColours

Send all five fields. Null is the platform colour; a missing field is a 422, so a change of one colour cannot clear another.
FieldTypeDescription
chrome_colour required string | null
decline_colour required string | null
link_colour required string | null
primary_colour required string | null
secondary_colour required string | null

Branding

FieldTypeDescription
chrome_colour required string | null The top bar of every signing page. Null is the platform colour.
decline_colour required string | null The fill of the Decline buttons. Null is the platform red.
link_colour required string | null Links that are not buttons. Null is the platform colour.
logo BrandLogo
primary_colour required string | null The fill of the call-to-action buttons. Null is the platform colour.
secondary_colour required string | null The text of base buttons, such as Cancel, Back and Close. Null is the platform colour.

CompletionDelivery

What the signers get when everyone signed.

One of copy, notice, none.

CreationCancelReason

What cancelled the session: the person (person), the revoke of its key, the removal of its embed origin, or the erasure of its request.

One of person, api_key_revoked, embed_origin_removed, request_erased.

CreationSession

FieldTypeDescription
allow_edit_signers required boolean
cancel_reason CreationCancelReason Set for a cancelled session only.
cancel_url required string
closed_at string | null
created_at required string (date-time)
embed_origin string | null
expires_at required string (date-time)
id required string (uuid)
signing_request_id string | null The request that the send created; absent until the session is completed.
status required CreationSessionStatus
success_url required string
ui_mode required CreationUIMode

CreationSessionCreate

FieldTypeDescription
allow_edit_signers boolean When false, the page shows the signers and cannot change them, and signers is required.
cancel_url required string An https URL, as success_url.
completion_delivery CompletionDelivery
description string
document_id string (uuid) The id of an upload. The page shows it and cannot replace it.
embed_origin string Required for embedded, and only then. One of the organisation's embed origins.
expires_in_minutes integer
expires_on string (date) The last day the signers can sign. Defaults from the group or organisation.
external_reference string Your own id for the request, for example a case number. It is shown in lists and is not unique.
group_id string (uuid) An active group of the organisation. A create without it uses the key's group. A replace without it keeps the draft's group.
language string one of en, fi, sv The language of the document.
legal_basis string The retention ground that an erasure weighs.
locale string one of en, fi, sv The language of the page. Defaults to the browser's.
order_type OrderType
processing_basis ProcessingBasis
processing_purpose string
reminder_interval_days integer 0 sends no reminders.
retention_category string The code of one of the organisation's active retention categories.
signers array of SignerInput
success_url required string An https URL. {SESSION_ID} in it is replaced with the session id.
title string
ui_mode required CreationUIMode

CreationSessionStatus

One of open, completed, cancelled, expired.

CreationSessionWithSecret

FieldTypeDescription
allow_edit_signers required boolean
cancel_reason CreationCancelReason Set for a cancelled session only.
cancel_url required string
client_secret required string cs_ and the secret of the session. Shown in this answer only.
closed_at string | null
created_at required string (date-time)
embed_origin string | null
expires_at required string (date-time)
id required string (uuid)
signing_request_id string | null The request that the send created; absent until the session is completed.
status required CreationSessionStatus
success_url required string
ui_mode required CreationUIMode
url required string The page, with the client secret in the fragment. Open it (hosted), or pass it to esoppari.js (embedded).

CreationUIMode

One of hosted, embedded.

Document

FieldTypeDescription
expires_at required string (date-time) The upload is deleted at this instant unless a request claims it.
filename required string
id required string (uuid)
page_count required integer
size_bytes required integer

EmbedOrigin

FieldTypeDescription
created_at required string (date-time)
origin required string

EmbedOriginInput

FieldTypeDescription
origin required string

EmbedOriginList

FieldTypeDescription
data required array of EmbedOrigin

FieldError

FieldTypeDescription
code required string
pointer required string JSON Pointer (RFC 6901) to the field.

Me

FieldTypeDescription
api_key required object
rate_limit required object
tenant_id required string (uuid)

OrderType

sequential invites signers by order; equal orders sign in parallel.

One of sequential, parallel.

Problem

An RFC 9457 problem document.
FieldTypeDescription
code required string Stable machine code.
detail string
errors array of FieldError One entry per invalid field, when code is validation_failed.
request_id required string
status required integer
title required string
type required string (uri-reference)

ProcessingBasis

The GDPR Art. 6(1) ground that the signer notice states in your name.

One of consent, contract, legal_obligation, vital_interests, public_task, legitimate_interests.

Signer

FieldTypeDescription
email required string
id required string (uuid)
invited_at string | null
language string
name required string
order required integer
required_eid_country string
signed_at string | null
status required SignerStatus

SignerInput

FieldTypeDescription
capacities array of SigningCapacity
email required string A bad address gives a 422 signer_email_invalid.
language string one of en, fi, sv The language of the signer's emails and pages.
message string A note in the invitation email.
name required string
order integer Signing position for sequential. Defaults to the position in the list.
required_eid_country string ISO 3166-1 alpha-2. The signer must use an eID of this country. Empty means any.

SignerStatus

One of pending, invited, signed, declined, expired, withdrawn.

SigningCapacity

FieldTypeDescription
organisation_id string The business ID of the organisation.
organisation_name string Required for representative.
type required string one of personal, representative

SigningEvent

FieldTypeDescription
id required string (uuid)
occurred_at required string (date-time)
signer_id string | null
type required string one of created, signer_invited, signed, declined, expired, completed, cancelled, invitation_resent, privacy_notice_acknowledged, signer_withdrawn

SigningRequest

FieldTypeDescription
completed_at string | null
completion_delivery CompletionDelivery
created_at required string (date-time)
description string
document required object
draft_incomplete boolean True while a draft cannot be sent yet. Always false after the send.
expires_at required string (date-time)
external_reference string
group_id string | null
id required string (uuid)
language string
legal_hold boolean Set and released by an administrator in the portal only.
order_type required OrderType
processing_basis ProcessingBasis
processing_purpose string
reminder_interval_days required integer
retention_category string
signers array of Signer Present on a single request. A list leaves it out; get the request for its signers.
status required SigningRequestStatus
title required string
updated_at required string (date-time)

SigningRequestCreate

FieldTypeDescription
completion_delivery CompletionDelivery
description string
document_id required string (uuid) The id of an upload.
expires_on string (date) The last day the signers can sign. Defaults from the group or organisation.
external_reference string Your own id for the request, for example a case number. It is shown in lists and is not unique.
group_id string (uuid) An active group of the organisation. A create without it uses the key's group. A replace without it keeps the draft's group.
language string one of en, fi, sv The language of the document.
legal_basis string The retention ground that an erasure weighs.
order_type OrderType
processing_basis ProcessingBasis
processing_purpose string
reminder_interval_days integer 0 sends no reminders.
retention_category string The code of one of the organisation's active retention categories.
signers required array of SignerInput
title string

SigningRequestFields

FieldTypeDescription
completion_delivery CompletionDelivery
description string
expires_on string (date) The last day the signers can sign. Defaults from the group or organisation.
external_reference string Your own id for the request, for example a case number. It is shown in lists and is not unique.
group_id string (uuid) An active group of the organisation. A create without it uses the key's group. A replace without it keeps the draft's group.
language string one of en, fi, sv The language of the document.
legal_basis string The retention ground that an erasure weighs.
order_type OrderType
processing_basis ProcessingBasis
processing_purpose string
reminder_interval_days integer 0 sends no reminders.
retention_category string The code of one of the organisation's active retention categories.
signers array of SignerInput
title string

SigningRequestList

FieldTypeDescription
data required array of SigningRequest
next_cursor required string | null Send it as cursor for the next page. Null on the last page.

SigningRequestStatus

One of draft, pending_signatures, completed, declined, expired, erased.

SigningRequestUpdate

FieldTypeDescription
completion_delivery CompletionDelivery
description string
document_id string (uuid) A new upload that replaces the PDF. Leave out to keep it.
expires_on string (date) The last day the signers can sign. Defaults from the group or organisation.
external_reference string Your own id for the request, for example a case number. It is shown in lists and is not unique.
group_id string (uuid) An active group of the organisation. A create without it uses the key's group. A replace without it keeps the draft's group.
language string one of en, fi, sv The language of the document.
legal_basis string The retention ground that an erasure weighs.
order_type OrderType
processing_basis ProcessingBasis
processing_purpose string
reminder_interval_days integer 0 sends no reminders.
retention_category string The code of one of the organisation's active retention categories.
signers required array of SignerInput
title string

WebhookAttempt

FieldTypeDescription
attempt required integer
attempted_at required string (date-time)
duration_ms required integer
http_status integer | null
outcome required WebhookAttemptOutcome

WebhookAttemptOutcome

One of succeeded, http_error, gone, timeout, network_error, blocked.

WebhookDelivery

FieldTypeDescription
attempts required integer Attempts since the delivery was created or last sent again. 8 at most.
created_at required string (date-time)
endpoint_id required string (uuid)
event_id required string (uuid)
event_type required string An event type, or webhook.test.
id required string (uuid)
last_http_status integer | null
last_outcome WebhookOutcome
next_attempt_at string | null
status required WebhookDeliveryStatus
succeeded_at string | null

WebhookDeliveryDetail

FieldTypeDescription
attempt_log required array of WebhookAttempt Every attempt, oldest first. No response body is kept.
attempts required integer Attempts since the delivery was created or last sent again. 8 at most.
created_at required string (date-time)
endpoint_id required string (uuid)
event_id required string (uuid)
event_type required string An event type, or webhook.test.
id required string (uuid)
last_http_status integer | null
last_outcome WebhookOutcome
next_attempt_at string | null
status required WebhookDeliveryStatus
succeeded_at string | null

WebhookDeliveryList

FieldTypeDescription
data required array of WebhookDelivery
next_cursor required string | null

WebhookDeliveryStatus

One of pending, succeeded, failed, cancelled.

WebhookEndpoint

FieldTypeDescription
created_at required string (date-time)
description required string
event_types required array of WebhookEventType
failing_since string | null The first failure since the last success, or since a gap of more than 24 hours with no failure.
id required string (uuid)
status required WebhookEndpointStatus
updated_at required string (date-time)
url required string

WebhookEndpointInput

FieldTypeDescription
description string
event_types array of WebhookEventType The events to send. Empty or absent sends every event.
url required string

WebhookEndpointList

FieldTypeDescription
data required array of WebhookEndpoint

WebhookEndpointStatus

disabled_failing: the service disabled it after 72 hours of failures or a 410 Gone.

One of enabled, disabled, disabled_failing.

WebhookEndpointWithSecret

FieldTypeDescription
created_at required string (date-time)
description required string
event_types required array of WebhookEventType
failing_since string | null The first failure since the last success, or since a gap of more than 24 hours with no failure.
id required string (uuid)
secret required string The signing secret, whsec_ and base64. Shown in this answer only.
status required WebhookEndpointStatus
updated_at required string (date-time)
url required string

WebhookEvent

FieldTypeDescription
id required string (uuid)
occurred_at required string (date-time)
payload required object The JSON body that went out. It names the resource and its status only.
type required string

WebhookEventType

One of signing_request.sent, signing_request.completed, signing_request.declined, signing_request.cancelled, signing_request.expired, signer.signed, signer.declined, signer.withdrawn, creation_session.completed, creation_session.expired, creation_session.cancelled.

WebhookOutcome

One of succeeded, http_error, gone, timeout, network_error, blocked, .

WebhookRecoverInput

FieldTypeDescription
since required string (date-time) Deliveries created at or after this instant, within the last 30 days.

WebhookRecoverResult

FieldTypeDescription
deliveries required integer