QuickSigner › eSignature API › SaaS customer onboarding
eSignature API for SaaS Customer Onboarding
Let customers sign order forms, MSAs and DPAs inside your app, checkout or quote flow, then provision the account the moment the signed PDF is sealed. No redirect to a third-party signing site, and no sales rep chasing a PDF by email.
Order forms and contracts,
signed inside your product
Send order forms, MSAs and DPAs to customers from your own app. The customer signs in an embedded view or from an email, and your team countersigns.
A webhook tells your app when the contract is complete, so you can provision the account right away.

REQUEST_COMPLETED webhookWhere signing fits in a SaaS customer journey
Most SaaS contracts are signed at one of five moments. Each has a different signer and a different next step in your product:
| Moment | Document | Who signs | What happens on completion |
|---|---|---|---|
| Self-serve upgrade to an annual or invoiced plan | Order form | The customer admin, inside your app | Switch billing to invoice, raise seat limits |
| Sales-led deal | Order form and MSA | Customer signatory, then your countersigner | Create the subscription in billing, open onboarding |
| Security or procurement review | DPA, security addendum, NDA | Customer legal or procurement | Mark the account as cleared for production data |
| Renewal or expansion | Renewal order form | The existing customer admin | Extend the term, add seats or modules |
| Partner or reseller onboarding | Partner agreement | Partner, then your partnerships lead | Open the partner portal and pricing tier |
Click-through terms or a signed order form?
Click-through terms work for self-serve sign-ups: courts generally enforce them when the terms are clearly presented and the user takes a clear action to accept. Larger deals are different. When the buyer is a company, the question is not only whether someone clicked, but whether that person could bind the company. In at least one US federal case, a click by an employee did not bind the company because the vendor had been told only named executives could sign contracts.
| Situation | Click-through terms | Signed order form |
|---|---|---|
| Self-serve plan, card payment | Usually enough | Not needed |
| Invoiced or annual plan | Possible | Recommended, with a named signatory |
| Negotiated price or terms | Not suitable | Needed, plus your countersignature |
| Customer procurement requires a signature | Not accepted | Needed |
| Data processing agreement (GDPR) | Possible in electronic form | Common for enterprise customers |
The API supports the signed side of this: a named signer, a recorded signing certificate and your countersignature after theirs.
Three integration patterns
1. Quote to signed order form
Your CPQ or billing system renders the order form PDF with the customer's plan, seats and price. Write signature tags into the template text, styled white so they stay invisible, set extractTags to true, and the API creates the fields. With signInOrder true, the customer signs first and your countersigner signs second.
curl --request POST \
--url https://app.quicksigner.com/api/v1/requests \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"fileName": "9be2...-order-form-acme.pdf",
"extractTags": true,
"signInOrder": true,
"senderName": "YourApp",
"emailSubject": "Your YourApp order form is ready to sign",
"recipients": [
{ "type": "EMAIL", "email": "cfo@acme.example", "name": "Customer Signatory" },
{ "type": "EMAIL", "email": "deals@yourapp.example", "name": "YourApp Countersigner" }
]
}'Tag syntax and the full request schema are in the API reference.
2. Signing inside your app
For a self-serve upgrade, load the customer's signUrl in an iframe on your billing page. Set hideInfoPanel on the request so the signing view fits your layout, disable_notifs in the admin's recipient options so they do not also get an email, and signedRedirectUrl to return them to a "thanks, your plan is active" page.
<iframe
src="https://app.quicksigner.com/sign/..."
width="100%" height="900" style="border:0"
allow="camera; clipboard-write">
</iframe>signedRedirectUrl can fire before the signature is written into the PDF. Change the plan in your system on the REQUEST_COMPLETED webhook, not on the redirect.
3. Provision on the webhook
| Event or status | What your app does |
|---|---|
RECIPIENT_SIGNED | Show "signed by customer, awaiting countersignature" on the deal; notify your countersigner. |
REQUEST_COMPLETED | Download the signed PDF and certificate, attach them to the account and CRM record, activate the subscription, start onboarding emails. |
Status REJECTED | Reopen the deal and alert the account owner. |
Status CANCELED | The quote expired or was replaced by a new version. |
Statuses such as REJECTED and CANCELED come from GET /requests/{requestId}, which also returns each recipient's sigStatus and signing order.
Download links are short-lived (about 2 hours for the signed PDF, 15 minutes for the certificate), so fetch both as soon as the webhook arrives and store them with the account.
What a SaaS integration costs
Production runs on the Professional plan at $15 per user a month, plus $0.30 per sign request. The first 50 sign requests are free, once. Above 500 requests a month, ask for volume pricing.
| Scenario | Sign requests a month | Monthly cost with one Professional user |
|---|---|---|
| Sales-led B2B SaaS: 30 new deals and 20 renewals | 50 | $30 |
| Product-led SaaS: 150 self-serve upgrades to invoiced plans, plus 50 DPAs | 200 | $75 |
| Platform with 500 order forms a month | 500 | $165 |
| More than 500 a month | 500+ | Volume quote |
The scenarios leave out the 50 free sign requests. A request with a customer signer and your countersigner is one request.
Checklist for choosing an eSignature API for SaaS
| What to check | Why it matters for SaaS | QuickSigner |
|---|---|---|
| Embedded signing | A redirect to another site loses self-serve buyers. | iframe with hideInfoPanel and signedRedirectUrl |
| Webhooks | Provisioning should not wait for someone to check an inbox. | RECIPIENT_SIGNED, REQUEST_COMPLETED |
| Generated documents | Order forms change with every quote. | Text tags with extractTags on generated PDFs |
| Countersignature | Your side signs after the customer. | signInOrder |
| Your brand in emails | Customers should see your company, not a vendor's. | senderName, emailSubject, emailMessage |
| Verifiable PDF | Procurement and auditors check signatures in Acrobat. | PAdES, AATL certificate, trusted timestamp |
| Security | Enterprise buyers ask about your vendors. | ISO/IEC 27001:2022, GDPR |
| Simple auth | Fewer moving parts in your backend. | One API key, no OAuth flow |
SaaS eSignature API FAQs
Can customers sign an order form without leaving my app?
Yes. Load the signer's signUrl in an iframe and set hideInfoPanel on the request. The signed PDF is the same as with email signing.
How do I activate the subscription after signing?
Listen for the REQUEST_COMPLETED webhook, which fires when the document is sealed. Activate the plan there, not on the signer's redirect, because signatures are applied asynchronously.
Can our side countersign automatically after the customer?
Set signInOrder to true and add your countersigner as the last recipient. They are asked to sign only after the customer has signed. If the countersigner is your API account itself, with a default signature and signature fields assigned, your backend can sign with POST /requests/{requestId}/sign after the customer's RECIPIENT_SIGNED webhook.
Can I send order forms generated by our billing system?
Yes. Upload the generated PDF and set extractTags to true to create fields from tags in the document text. You can also use a saved template by templateId.
Do customers need a QuickSigner account?
No. Signers need only a link and a browser.
Can the signing email show our company name?
Yes. senderName is shown to the signer under "Sent by" and in the notification email, and emailSubject and emailMessage set the subject and the message.
Does a DPA need a signature?
GDPR Article 28(9) requires the processing contract to be in writing, which includes electronic form. The prevailing view, shared by the Bavarian data protection authority, is that a qualified electronic signature is not required. Many enterprise customers still ask for a signed DPA so the record shows who signed it for them.
Can I test before paying?
Yes. A free developer account allows unlimited test sign requests. Completed test documents are watermarked.
Related
Add order form signing to your product
- Create a free developer account and enable the API.
- Send a test order form with a customer signer and a countersigner.
- Activate a test subscription from the
REQUEST_COMPLETEDwebhook.
Unlimited test requests. Move to production on the Professional plan when you are ready.
Prices and features as of October 12, 2026. This page is general information, not legal advice.



