Skip to content

Signature Requests

GET /v1/signature_requests

Returns a paginated list of signature requests for your organization.

Query parameters:

ParameterTypeDescription
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20, max: 100)

Response:

{
"signature_requests": [
{
"id": "sr_123",
"title": "Service Agreement",
"status": "sent",
"is_complete": false,
"is_declined": false,
"signing_order": "everyone",
"test_mode": false,
"metadata": {},
"files_url": "/v1/signature_requests/sr_123/files",
"created_at": "2026-03-04T10:00:00Z",
"expires_at": null,
"signers": [
{
"id": "sig_456",
"name": "Jane Smith",
"email": "jane@example.com",
"status": "pending",
"order": 0,
"signed_at": null,
"viewed_at": null
}
]
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total_pages": 1,
"total_count": 1
}
}

GET /v1/signature_requests/:id

Returns a single signature request with signer details.


POST /v1/signature_requests

Upload a PDF file and send it for signature. Use multipart/form-data encoding.

Parameters:

ParameterTypeDescription
filefilePDF file to sign (required)
dataJSONRequest data (required, see below)

Data fields:

FieldTypeDefaultDescription
titlestring"Untitled"Document title
messagestringMessage included in signing emails
signersarrayrequiredSigner objects (see below)
fieldsarrayField placement objects
signing_orderstring"everyone""everyone" or "one_at_a_time"
expires_atstringISO 8601 expiration date
test_modebooleanfalseNon-binding test mode
metadataobjectArbitrary key-value data

Signer object:

FieldTypeDescription
namestringSigner’s full name (required)
emailstringSigner’s email address (required)
orderintegerSigning order (required for one_at_a_time)

Field object:

FieldTypeDescription
typestringsignature, date, text, or checkbox (required)
signer_indexintegerIndex into the signers array (required)
pageintegerPage number, 1-based (required)
xnumberX position in points (required)
ynumberY position in points (required)
widthnumberWidth in points (required)
heightnumberHeight in points (required)
labelstringLabel shown to signer
requiredbooleanWhether field must be filled (default: true)

Example:

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",
"message": "Please review and sign this agreement.",
"signers": [
{"name": "Jane Smith", "email": "jane@example.com"}
],
"fields": [
{
"type": "signature",
"signer_index": 0,
"page": 1,
"x": 100,
"y": 650,
"width": 200,
"height": 50
}
]
}'

Response (201):

{
"signature_request": {
"id": "sr_789",
"title": "Service Agreement",
"status": "sent",
"is_complete": false,
"is_declined": false,
"message": "Please review and sign this agreement.",
"signing_order": "everyone",
"test_mode": false,
"metadata": {},
"files_url": "/v1/signature_requests/sr_789/files",
"created_at": "2026-03-04T12:00:00Z",
"expires_at": null,
"signers": [
{
"id": "sig_101",
"name": "Jane Smith",
"email": "jane@example.com",
"status": "pending",
"order": 0,
"signed_at": null,
"viewed_at": null
}
]
}
}

POST /v1/signature_requests/send_with_template

Create a signature request from a pre-configured template.

Body parameters:

FieldTypeDefaultDescription
template_idstringrequiredTemplate ID (prefixed tmpl_)
titlestringtemplate nameDocument title
messagestringMessage for signers
signersarrayrequiredSigners mapped to template roles
expires_atstringISO 8601 expiration
test_modebooleanfalseNon-binding test mode
metadataobjectArbitrary metadata

Signer object (template):

FieldTypeDescription
namestringSigner’s full name (required)
emailstringSigner’s email address (required)
rolestringTemplate role name
role_idintegerTemplate role ID

Provide either role or role_id for each signer.


POST /v1/signature_requests/:id/cancel

Cancels a signature request. Only requests that haven’t been completed can be cancelled.

Response (200):

Returns the updated signature request with status: "cancelled".


POST /v1/signature_requests/:id/remind

Send a reminder email to a signer who hasn’t signed yet.

Body parameters:

FieldTypeDescription
email_addressstringEmail of the signer to remind (required)

Response (200):

{
"message": "Reminder sent."
}

GET /v1/signature_requests/:id/files

Redirects to the signed PDF file. Only available after all signers have completed. Returns 404 if the signed file is not yet available.

Use the -L flag with curl to follow the redirect:

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