- List signature requests GET
- Create a signature request POST
- Retrieve a signature request GET
- Delete a signature request DELETE
- Send a draft signature request POST
- Cancel a signature request POST
- List a signature request's audit trail GET
- Remind signers POST
- Download the signed document GET
- Create a signing session POST
Create a signature request
Asks one or more signers to sign one or more PDFs. Give documents by id (uploaded) or inline, and each signer's fields by position (page, x, y, width, height in PDF points from the page's top left) or by text anchor ({{signature:signer_1}}). Every signer needs a signature field. Sent at once unless send is false (a draft). Each signer signs by email (delivery: "email", the default) or in your app ("embedded").
bearerAuthAuthorizationBearer <token>A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.
Idempotency-Key?stringMakes retries safe: a repeated request with the same key and body returns the original request (in its current state) instead of creating another, for 24 hours. 1-256 characters.
1 <= length <= 256Coss-Version?"2026-10-10"The API version (a date) to use for this request. Defaults to your organization's version, pinned to the latest one when it first used the API and upgraded from the dashboard. The SDK always sends the version it was built for.
"2026-10-10"application/json- body
- body
- …
title*stringShown to signers.
1 <= length <= 200message?stringA note to signers.
length <= 2000documents*array<|>Uploaded documents by id, or PDFs inline (base64).
1 <= items <= 10signers*array<>1 <= items <= 20signing_order?stringparallel (default): everyone at once. sequential: in each signer's order.
"parallel""sequential"expires_at?stringWhen unsigned requests expire (at most 365 days ahead).
date-timemetadata?Your own key-value pairs, returned with the request and its webhooks.
reminder_interval_days?|Email signers who haven't signed get a reminder every this many days (up to 3). Default: your Sign settings' reminder_interval_days; null: none.
1 <= value <= 30send?booleanDefault true: send at once. false keeps a draft to send later.
The signature request (sent, or draft). A replay returns the original request in its current state.
application/json- response
- response
- …
object*"sign_request""sign_request"id*stringstatus*stringdraft until sent, sent while signers sign, then completed (everyone signed), declined (a signer declined), canceled or expired.
"draft""sent""completed""declined""canceled""expired"title*stringmessage*string|nullsigning_order*string"parallel""sequential"documents*array<>signers*array<>fields*array<>metadata*sandbox*booleanreminder_interval_days*|Days between automatic reminders to email signers; null: none.
expires_at*|date-timeexpired_at*|date-timesent_at*|date-timecompleted_at*|date-timecanceled_at*|date-timedeclined_at*|date-timesigned_document*|The completed document, sealed by coss.com: every document with the signatures and values filled in, and a certificate of completion. null until it is ready (shortly after completed, announced by the sign_request.completed webhook); download it from GET /v1/sign/requests/{id}/signed_document.
created_at*stringdate-timeimport { Coss } from "coss";const coss = new Coss({ apiKey: process.env.COSS_API_KEY, baseUrl: "https://api.coss.com",});const { data, error } = await coss.sign.requests.create({ title: "Services agreement", documents: [ { document_id: "sdoc_01k7c8m4q2f3e9v6t5r1n0p8yz", }, ], signers: [ { name: "Ada Lovelace", email: "ada@example.com", fields: [ { type: "signature", anchor: "{{signature:signer_1}}", }, { type: "date_signed", page: 2, x: 320, y: 640, width: 120, height: 18, }, ], }, ],});{ "object": "sign_request", "id": "sreq_01k7c8m4q2f3e9v6t5r1n0p8yz", "status": "sent", "title": "Services agreement", "message": null, "signing_order": "parallel", "documents": [ { "id": "sdoc_01k7c8m4q2f3e9v6t5r1n0p8yz", "filename": "agreement.pdf", "sha256": "9f2c6c0f0e1d4b7a8c5e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c", "page_count": 2 } ], "signers": [ { "object": "sign_signer", "id": "ssgn_01k7c8m4q2f3e9v6t5r1n0p8yz", "name": "Ada Lovelace", "email": "ada@example.com", "order": 1, "delivery": "email", "authentication": "email_link", "status": "pending", "client_ref": null, "viewed_at": null, "signed_at": null, "declined_at": null, "decline_reason": null } ], "fields": [ { "object": "sign_field", "id": "sfld_01k7c8m4q2f3e9v6t5r1n0p8yz", "signer_id": "ssgn_01k7c8m4q2f3e9v6t5r1n0p8yz", "document_id": "sdoc_01k7c8m4q2f3e9v6t5r1n0p8yz", "type": "signature", "page": 2, "x": 72, "y": 640, "width": 140, "height": 12, "required": true, "label": null, "anchor": "{{signature:signer_1}}" } ], "metadata": {}, "sandbox": false, "reminder_interval_days": 3, "expires_at": null, "expired_at": null, "sent_at": "2026-10-26T15:04:05.000Z", "completed_at": null, "canceled_at": null, "declined_at": null, "signed_document": null, "created_at": "2026-10-26T15:04:05.000Z"}