Skip to content

Sending for Signature

The signature requests endpoint lets you upload a PDF and send it to one or more signers. VisiSign handles the email delivery, signing experience, and document finalization.

Upload a file and provide signer information:

Terminal window
curl -X POST https://api.visisign.app/v1/signature_requests \
-H "Authorization: Bearer vsk_your_key_here" \
-F "file=@contract.pdf" \
-F 'data={
"title": "Service Agreement",
"signers": [
{"name": "Alice", "email": "alice@example.com"},
{"name": "Bob", "email": "bob@example.com"}
]
}'

The data parameter accepts the following fields:

FieldTypeDefaultDescription
titlestring"Untitled"Document title shown to signers
messagestringMessage included in the signing email
signersarrayrequiredList of signer objects
fieldsarrayPlaced fields (signature, date, text, checkbox)
signing_orderstring"everyone""everyone" (parallel) or "one_at_a_time" (sequential)
expires_atstringISO 8601 expiration date
test_modebooleanfalseTest mode requests are not legally binding
metadataobjectArbitrary key-value data attached to the request

Each signer needs a name and email. For sequential signing, include order:

{
"signers": [
{"name": "Alice", "email": "alice@example.com", "order": 0},
{"name": "Bob", "email": "bob@example.com", "order": 1}
]
}

When signing_order is "one_at_a_time", signers are emailed in order — Bob receives his signing link only after Alice completes.

Position fields on the document pages. Each field is linked to a signer by signer_index (0-based, matching the signers array):

{
"fields": [
{
"type": "signature",
"signer_index": 0,
"page": 1,
"x": 100,
"y": 650,
"width": 200,
"height": 50,
"required": true
},
{
"type": "date",
"signer_index": 0,
"page": 1,
"x": 100,
"y": 710,
"width": 150,
"height": 30
}
]
}
TypeDescription
signatureSignature field (draw, type, or upload)
dateAuto-filled with the signing date
textFree-text input
checkboxCheckbox toggle
PropertyTypeDefaultDescription
typestringrequiredField type
signer_indexintegerrequiredWhich signer this field belongs to
pageintegerrequiredPage number (1-based)
xnumberrequiredX position in points from left edge
ynumberrequiredY position in points from top edge
widthnumberrequiredWidth in points
heightnumberrequiredHeight in points
labelstringLabel shown to the signer
requiredbooleantrueWhether the field must be filled

Send a reminder to a signer who hasn’t signed yet:

Terminal window
curl -X POST https://api.visisign.app/v1/signature_requests/sr_123/remind \
-H "Authorization: Bearer vsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"email_address": "alice@example.com"}'

Cancel a signature request that hasn’t been completed:

Terminal window
curl -X POST https://api.visisign.app/v1/signature_requests/sr_123/cancel \
-H "Authorization: Bearer vsk_your_key_here"

Cancelled requests cannot be reopened. Signers who haven’t signed will see the request as cancelled.

Once all signers have completed, download the signed PDF:

Terminal window
curl -L https://api.visisign.app/v1/signature_requests/sr_123/files \
-H "Authorization: Bearer vsk_your_key_here" \
-o signed-document.pdf

The response redirects to the file URL. Use -L (follow redirects) with curl.