Send any contract for legally binding e-signature in three API calls. Multi-party routing, OTP-verified identity, PKCS#7-sealed output, and a hash-chained audit trail — all included on the free tier.
Upload any standard PDF — NDAs, MSAs, SOWs, SLAs, employment agreements, lease agreements. No template required for one-off contracts.
Sequential or parallel signer routing via routing_order. Party A signs, then Party B — or both sign simultaneously. Mixed routing for approval chains.
Each signer verifies via email or SMS OTP before signing. The verification event is logged in the audit trail with timestamp and IP.
The completed contract is sealed with a CA-issued digital signature. Any byte-level modification invalidates the seal — detectable by any PDF reader.
Every event — view, consent, OTP, signature, seal — is appended to a hash-chained log. Tampering with any event breaks the chain.
Subscribe to envelope.completed and receive a real-time POST when all parties finish. Download the sealed contract from /v1/envelopes/{id}/document.
A contract signing API is a REST interface that handles the full lifecycle of collecting legally binding electronic signatures on a contract: uploading the document, declaring signers and field positions, dispatching signing invitations, tracking progress, and returning a sealed tamper-evident document when all parties complete. It removes the need to build your own signing UI, identity verification, audit trail, or document sealing infrastructure.
Yes. Electronic signatures on contracts are legally binding under the US ESIGN Act and UETA (all 50 states) and under Canadian provincial electronic commerce acts including Ontario's ECA and BC's ECPA. The legal validity depends on demonstrating intent to sign and attribution — both established by the OTP-verified audit trail that GetSigned generates. The PKCS#7 seal proves the document has not been altered since signing.
Three API calls: (1) POST /oauth/token — get a bearer token with your client credentials. (2) POST /v1/envelopes — upload the contract PDF, declare signers with name and email, specify signature field coordinates. (3) POST /v1/envelopes/{id}/send — dispatch signing links. Each signer receives a tokenized email link, verifies via OTP, and signs. When all parties complete, the envelope.completed webhook fires with the sealed contract ready to download.
Declare both signers in the signers array. Set routing_order: 1 on Party A and routing_order: 2 on Party B for sequential signing — Party B receives their link only after Party A completes. Set both to routing_order: 1 for parallel signing — both receive links simultaneously and sign in any order. Assign each signer's signature fields via signer_id in the fields array.
Subscribe to the envelope.completed webhook. It fires when every signer has completed and the document has been sealed. The webhook payload includes the envelope ID, status, and completion timestamp. Use it to trigger downstream actions: store the sealed PDF, update your CRM, send a countersigned copy to all parties, or unlock a provisioning flow.
Related: Multi-signer routing · Audit trail guide · E-signature legality · Template API