Docs

Pacts

Send a pact

Send a draft: the first signer is emailed a private link, and the pact's documents are charged.

POST/v1/pacts/{uid}/send

Sending uses one document for every 3 signers (rounded up) from this month's allowance first, then from packs. It is charged once and not returned if the pact is later voided, declined or lapses. See Documents and plans.

Authorization

Authorizationstringheaderrequired
Bearer followed by your API key: Bearer sgk_…. The key also works in an X-Api-Key header. See Authentication.

Path parameters

uidstringpathrequired
The pact's 8-character id. Not case-sensitive.

Query parameters

include_linksbooleanquerydefault: false
Add the first signer's signing_url to the response.

Body

application/jsonOptional: send no body to use the defaults.
lapse_daysinteger
Days until it lapses unsigned, 1 to 365. Defaults to the value given at creation, else 30.

Response

200 OKThe pact, now sent. warning is set if the invitation email failed.
uidstring
The pact's id: 8 letters and digits.
titlestring
Shown to signers and in emails (150 characters at most).
statusstring
See Pact lifecycle.
One of draft sent sealed declined voided lapsed
messagestring | null
Your note in the invitation email.
page_countinteger
Pages in the document.
created_bystring
Where it was created: the dashboard, the API or the MCP server.
One of web api mcp
current_signerinteger | null
The order of the signer whose turn it is while the pact is sent; otherwise null.
date_createdstring (date-time)
When the draft was created.
date_sentstring (date-time) | null
When it was sent.
date_lapsesstring (date-time) | null
When it lapses if it is not sealed first.
date_sealedstring (date-time) | null
When the last signer signed.
date_updatedstring (date-time)
When anything about it last changed.
documents_chargedinteger | null
Documents it used when it was sent. null on a draft.
documents_costinteger | null
What sending this draft will use: one document per 3 signers, rounded up. Only set on a draft.
sent_sha256string
SHA-256 (lowercase hex) of the PDF as sent. The sigil records it too.
signed_sha256string | null
SHA-256 of the signed PDF, once sealed.
recipientsarray of objects
Signers in order, then CCs.
ShowHide recipient attributes
orderinteger
Position, starting at 1. Signers come first, numbered in the order you gave them; CCs follow.
rolestring
Signers sign in order; a CC gets the finished copy.
One of signer cc
namestring
The recipient's name.
emailstring
The recipient's address, lowercased.
statusstring
Where this recipient is.
One of pending viewed signed declined
date_viewedstring (date-time) | null
When they first opened their signing link.
date_signedstring (date-time) | null
When they signed.
typed_namestring | null
The full name they typed when signing.
decline_reasonstring | null
Their reason, if they declined.
signing_urlstring
The private link for the signer whose turn it is. Anyone with it can sign as that person, so only give it to them.
Only with include_links=1, and only on the waiting signer.
linksobject
Where to get the files.
ShowHide child attributes
documentstring (URL)
The document as sent (download).
signedstring (URL) | null
The signed PDF, once sealed (download).
sigilstring (URL) | null
The sigil (certificate of completion), once sealed (download).
dashboardstring (URL)
The pact's page on the dashboard (needs a login).
fieldsarray of objects
The pact's own copy of the fields, with values as signers fill them in.
Single-pact responses only.
ShowHide field attributes
idinteger | null
The field's id on a pact. null on a template.
recipientinteger
The signer the field belongs to: the number in its glyph (\s2\ → 2), or the signer it was given to in the website's field editor.
typestring
What the signer provides.
One of signature initials name date text checkbox
pageinteger
The page it is on, starting at 1.
xnumber
Distance from the page's left edge, in PDF points (1/72 inch).
ynumber
Distance from the top of the page to the box's bottom edge, in points: the glyph's text baseline. Signatures stand on that line.
widthnumber
The box's width in points: set by the field type for a glyph, as drawn for a field placed by hand on the website.
heightnumber
The box's height in points: set by the field type for a glyph, as drawn for a field placed by hand on the website.
labelstring | null
The label from the glyph, such as Company in \t1:Company\, or the one typed in the field editor.
requiredboolean
false when the glyph ends in ! (\t1:Phone!\, \c1!\), or when the field was made optional in the field editor.
valuestring | null
What was filled in, once that signer has signed: text as typed, "1" or "0" for a checkbox, the typed name for name, and the signing date (MM/dd/yyyy, UTC) for date. Signatures and initials are images on the PDF, so they stay null.
eventsarray of objects
The audit trail, oldest first.
Single-pact responses only.
ShowHide event attributes
eventstring
What happened.
One of created fields sent emailed email_failed viewed consented signed declined sealed copy_emailed copy_email_failed voided reissued
atstring (date-time)
When it happened.
bystring | null
Who did it: your email address, or the signer's. null for what the system does on its own, such as sealing.
tostring | null
Who an email went to, for emailed, email_failed, reissued, copy_emailed and copy_email_failed.
notestring | null
Detail, such as signer 2, the consent version, or the reason given for voiding or declining.
warningstring
Set when an invitation email could not be delivered. The action still happened: resend the link, or check the address.
Only on create (with send), send and resend responses, and only when an email failed.

Errors

StatusWhen
400 Bad RequestThe pact is not a draft, or is already being sent.
401 UnauthorizedThe API key is missing, wrong or revoked.
403 ForbiddenThe account's plan does not include API access (Pro and Business do).
404 Not FoundNo pact with that id belongs to your account.
409 ConflictNot enough documents left. The pact stays a draft.

Every error body is { "error": "message" }. See Errors.