E-Stamp API Workflow
Create, track, and receive webhooks for e-stamped signing envelopes.
E-stamping is an asynchronous pre-signing step in SignSecure Sign Pad. The platform purchases the government stamp, attaches the certificate as the first page of the PDF, and only then opens the normal recipient signing workflow.
create + upload → send (202) → e-stamp pending → stamped PDF attached → recipients notified
└──── terminal failure → manual retryFor a server integration, subscribe to document.estamp.completed and
document.estamp.failed. Use the status endpoint for reconciliation and the
manual check endpoint only when a user explicitly refreshes status.
Request contract
Set both workflow.estampEnabled and workflow.estampConfig when creating the
envelope.
| Field | Required | Accepted value |
|---|---|---|
state | Yes | Supported two-letter code from the catalog below |
article | Yes | Exact instrument name from the selected state's catalog |
amount | Yes | Whole-number stamp duty from "10" through the selected state's Capricorn limit (up to "10000000") |
considerationAmount | Yes | Non-negative whole-number instrument value, for example "50000" |
payee | No | first-party (default) or second-party |
hardcopy | No | n (default) or y |
firstParty | Yes | Legal name, valid email, optional 10-digit mobile, and address |
secondParty | Yes | Same shape as firstParty; the two legal names must be different |
shipping | When hardcopy is y | name, address, city, full state name, 6-digit pincode, and 10-digit mobile |
Do not send the Stamp Act number in article. Send the exact API value, such as
Affidavit. Capitalization, punctuation, and wording can differ by state.
Valid states and articles
The registry below contains all 846 values across 13 supported states and is
driven by the same source used by the SignSecure Sign Pad envelope UI. Select a
state, search by instrument name or Act reference, and copy the exact value into
workflow.estampConfig.article.
Provider value registry
Valid e-stamp articles
This is the same catalog used by the SignSecure Sign Pad envelope UI. Copy the exact API value; the displayed Act article number is only a reference.
KA| Act ref. | Exact API value | Copy |
|---|---|---|
| 1(i)(a) | Acknowledge of a Debt - upto Rs.5000/- | |
| 1(i)(b) | Acknowledge of a Debt - more than 5000/- | |
| 1(ii) | Acknowledgement of Letter, Article, Package, Parcel ..... | |
| 2(a) | Administration Bond - Up to Rs.1000/- | |
| 2(a) | Administration Bond - Upto Rs.1000/- | |
| 2(B) | Administration Bond - In any other case | |
| 3 | Adoption Deed | |
| 4 | Affidavit | |
| 5(a) | Sale of Bill Exchange | |
| 5(b) | Purchase or Sale of Government Security | |
| 5(c)(i) | Sale or Purchase of Shares, Stocks Bonds, Debenture Stock or other marketable security between members of Stock Exchange | |
| 5(c)(ii) | Agreement or its records or MOA - In any other case | |
| 5(e)(ii) | Agreement or its records or MOA - Sale of immovable property wherein part performance of the contract, possession of the contract, possession of the property is not delivered | |
| 5(g)(i) | Agreement or its records or MOA - Sale of moveable property, possession of the property is delivered | |
| 5(g)(ii) | Agreement or its records or MOA - Sale of moveable property, possession of the property is not delivered | |
| 5(i) | Agreement relating to contract between Depository Participant and Client for opening Demat A/c | |
| 5(i-a) | Agreement relating to Contract between Stock Broker or Sub Broker (agent) and client for Stock Market Operations | |
| 5(i-b) | Agreement relating to Advertisement or telecasting or broadcasting of programs | |
| 5(i-c) | Agreement relating to assignment or transfer of intellectual property rights, patent rights, copy rights or trade market rights | |
| 5(i-d)(i) | Agreement relating to building works or labour or services - Upto Rs.10 lakhs | |
| 5(i-d)(ii) | Agreement or its records or MOA - Agreement relating to building works or labour or services Above Rs.10 lakhs | |
| 5(i-e)(i) | Chit Agreement - Where the value of the chit does not exceed Rs.1 lakh | |
| 5(i-e)(ii) | Chit Agreement - Where the value of the chit exceeds Rs.1 lakh | |
| 5(J) | Agreement (in any other cases) | |
| 6(1)(i) | Agreement relating to DTD - Loan amount does not exceed Rs.10 lakhs | |
| 6(1)(ii) | Agreement relating to DTD - Loan amount exceeding Rs.10 lakhs | |
| 6(2)(i) | Pawn or Pledge of Movable Property - Loan amount above Rs.1 lakh and upto Rs.10 lakh | |
| 6(2)(ii) | Pawn or Pledge of Movable Property - Loan amount above Rs.10 lakhs | |
| 7 | Appointment in execution of a power | |
| 8(a) | Appraisement or Valuation - Upto Rs.1000 | |
| 8(b) | Appraisement or Valuation - In any other case | |
| 9 | Apprenticeship Deed | |
| 10 | Articles of Association of a Company | |
| 12(a) | Bond - Amount secured does not exceed Rs.1000 | |
| 12(a) | Respondentia Bond - Amount Secured does not exceed Rs.1000 | |
| 12(b) | Bond - Amount exceeding Rs.1000 | |
| 12(b) | Respondentia Bond - Amount exceeding Rs.1000 | |
| 13 | Bottomry Bond | |
| 15(a) | Certificate of Sale - Purchase money does not exceed Rs.10 | |
| 15(b) | Certificate of Sale - Purchase money does not exceed Rs.25 | |
| 15(c) | Certificate of Sale - In any other case | |
| 16 | Certificate evidencing right or title of the holder thereof, or any other person, either to any share, scrip or stock in or of any incorporated company | |
| 17 | Certificate of Enrolment as Advocate | |
| 18 | Charter Party | |
| 18A(1) | Purchase or Sale of Government Securities - 37(c) | |
| 18A(1) | Purchase or Sale of Government Securities - 5(b) | |
| 18A(2) | Securities of incorporated company of other body corporate submitted to clearing house office stock exchange recognized under the Securities Contract (regulartion) Act, 1956. - 5(c)(i) | |
| 18A(2) | Securities of incorporated company of other body corporate submitted to clearing house office stock exchange recognized under the Securities Contract (regulation) Act, 1956. - 37(b) | |
| 18A(3) | Securities of incorporated company or other body corporate submitted to clearing house office stock exchange not recognized under the securities contract (regulation) Act, 1956. - 37(b) | |
| 18A(3) | Securities of incorporated company or other body corporate submitted to clearing house office stock exchange not recognized under the securities contract (regulation) Act, 1956. - 5(c)(i) | |
| 19 | Composition Deed | |
| 20(5)(i) | Conveyance - Industrial machinery treated as movable | |
| 21 | Copy of Extract | |
| 22 | Counter part or Duplicate | |
| 23 | Customs Bond or Excise Bond Art 23(b) | |
| 24 | Delivery order in respect of Goods | |
| 25 | Divorce | |
| 27(b)(iii) | Further charges Hypothecation of Movable property loan upto 10 Lakhs 34(d)(i) | |
| 27(b)(iii) | Further charges Loan exceeding 10 Lakhs 34(d)(ii) | |
| 29 | Indemnity Bond (As per Article 47) | |
| 30(1)(i) | Lease of Immovable Property - Not exceeding 1 year in case of Residential property | |
| 30(1)(ii) | Lease of Immovable Property - Not exceeding 1 year in case of commercial industrial property | |
| 30(2) | Lease of Movable Property - Lease of movable property rent fixed, no premium30(2)(a)(i)upto 10 years | |
| 30(2)(a)(ii) | Lease of Movable Property - Above 10 years | |
| 30(2)(b) | Lease of Movable Property - Lease granted for fine or premium but no rent | |
| 30(2)(c) | Lease of Movable Property - Lease for fine premium and also rent | |
| 31 | Letter of Allotment | |
| 32 | Letter of licence | |
| 32-A (i) | Letter of License - Not more than 1 year in case of residential property | |
| 32-A(ii) | Letter of License - Not more than 1 year in case of commercial industrial property | |
| 32-A(iii) | Letter of License - 1 year to 10 year | |
| 32-A(iv) | Letter of License - 10 year to 20 year | |
| 32-A(v) | Letter of License - 20 to 30 year | |
| 33 | Memorandum of Association of a company | |
| 34(d)(i) | Mortgage Deed - Hypothecation of movable property loan upto Rs.10 lakh | |
| 34(d)(ii) | Mortgage Deed - loan exceeding 10 lakhs | |
| 37(a) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange of any goods or commodities | |
| 37(b) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange of any share, scrip, stock, bond, debenture (other than Government Security) | |
| 37(c) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange of a Government Securities | |
| 37(d) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange other Securities | |
| 37(e) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange of futures and options trading of securities | |
| 37(f) | Note or memorandum of record sent by broker to his principal intimating the purchase or sale through stock exchange of forward contracts commodities | |
| 38 | Note of Protest by the Master of a ship | |
| 39(a)(1) | Partition - Non Agricultural property in BBMP, UDA, BMRDA, Municipal Councils or Town Panchayats | |
| 39(a)(2) | Partition - Other Areas | |
| 39(b) | Partition - Agricultural Land | |
| 39(c) | Partition - Movable Property | |
| 39(d) | Partition - Combination of all above | |
| 40 (A) | Partnership - Constitution of Partnership | |
| 40(B)(b) | Partnership - Reconstitution | |
| 40(C) | Partnership - Dissolution | |
| 40(C)(b) | Partnership - Dissolution - Immovable properties | |
| 40A(a) | Limited Liability Partnership - Capital Upto Rs.10 lakhs | |
| 40A(b) | Limited Liability Partnership - Capital more than Rs.10 lakhs | |
| 40B | Limited Liability Partnership - Reconstruction or Amalgamation | |
| 41(a) | Power of Attorney - for admitting executing of document | |
| 41(b) | Power of Attorney - for authorizing one or more person to act in a single transaction. | |
| 41(c) | Power of Attorney - for authorizing more than 5 person to act jointly. | |
| 41(d) | Power of Attorney - authorizing more than 5 to 10 persons to act jointly in more than one transaction or generally | |
| 41(e) | Power of Attorney - Authorizing to sell property | |
| 41(eb) | Power of Attorney - when sale power given to other than family members | |
| 41(f) | Power of Attorney - when given for trading operation | |
| 41(g) | Power of Attorney - when given for depository participant | |
| 41(h) | Power of Attorney - in any other case | |
| 42 | Protest of Bill / Note | |
| 43 | Protest by the Master of a Ship | |
| 44 | Re-Conveyance of mortgaged property | |
| 47 | Security Bond or Mortgage Deed | |
| 49 | Share Warrants | |
| 50 | Shipping | |
| 51 | Surrender of Lease (Art 40b) | |
| 52(a) | Transfer of debentures | |
| 52(b) | Transfer any interest secured by bond or policy of insurance | |
| 52(c) | Transfer - property under section 25 of administrator generals act 1963. | |
| 53A | Transfer of License | |
| 54(i) | Trust made for public religious and charitable purpose | |
| 54(ii) | Trust made for management and custody of property where there is no transfer / disposition of property | |
| 55 | Warrants of Goods | |
| 56(i) | Bank Guarantee - If related to paper bank guarantee | |
| 56(ii) | Bank Guarantee - If relating to e-bank guarantee |
The supported top-level state codes are CH, DL, GJ, HR, HP, JK,
JH, KA, MH, PB, TN, UP, and UK. When requesting a hard copy,
shipping.state must be the full state name rather than this code.
Complete TypeScript SDK example
import { readFile } from "node:fs/promises";
import { SignSecureClient } from "@signsecure/sdk";
const client = new SignSecureClient({
apiKey: process.env.SIGNSECURE_API_KEY,
});
const pdf = await readFile("./service-agreement.pdf");
const envelope = await client.envelopes.createAndUpload(pdf, {
fileName: "service-agreement.pdf",
title: "Service Agreement",
recipients: [
{
name: "Authorized Signer",
email: "signer@example.com",
order: 1,
role: "signer",
signatureMethod: "electronic",
signaturePlacement: {
type: "text",
searchText: "Authorized Signatory",
position: "below",
},
},
],
workflow: {
mode: "sequential",
estampEnabled: true,
estampConfig: {
state: "KA",
article: "Affidavit",
amount: "100",
considerationAmount: "50000",
payee: "first-party",
hardcopy: "n",
firstParty: {
name: "Acme Private Limited",
email: "legal@acme.example",
mobile: "",
address: "Bengaluru, Karnataka",
},
secondParty: {
name: "Example Industries",
email: "legal@example.test",
mobile: "",
address: "Mumbai, Maharashtra",
},
},
},
});
const queued = await client.envelopes.send(envelope.id);
if ("estamp" in queued) {
console.log(queued.status); // "estamping"
console.log(queued.estampStatus); // "queued"
}Text placement works with e-stamping. The certificate becomes page 1, and SignSecure Sign Pad automatically shifts coordinate placements, form fields, and page-restricted text placements before notifying recipients.
Equivalent REST request
Create the envelope:
curl -X POST "https://api.signpad.signsecure.in/api/v1/envelopes" \
-H "Authorization: Bearer $SIGNSECURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fileName": "service-agreement.pdf",
"title": "Service Agreement",
"recipients": [{
"name": "Authorized Signer",
"email": "signer@example.com",
"order": 1,
"role": "signer",
"signatureMethod": "electronic",
"signaturePlacement": {
"type": "text",
"searchText": "Authorized Signatory",
"position": "below"
}
}],
"workflow": {
"mode": "sequential",
"estampEnabled": true,
"estampConfig": {
"state": "KA",
"article": "Affidavit",
"amount": "100",
"considerationAmount": "50000",
"payee": "first-party",
"hardcopy": "n",
"firstParty": {
"name": "Acme Private Limited",
"email": "legal@acme.example",
"mobile": "",
"address": "Bengaluru, Karnataka"
},
"secondParty": {
"name": "Example Industries",
"email": "legal@example.test",
"mobile": "",
"address": "Mumbai, Maharashtra"
}
}
}
}'Upload the PDF using the presigned POST in the create response, then send it:
curl -X POST \
"https://api.signpad.signsecure.in/api/v1/envelopes/$ENVELOPE_ID/send" \
-H "Authorization: Bearer $SIGNSECURE_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'The send endpoint returns HTTP 202 rather than holding the connection open:
{
"success": true,
"estamp": true,
"estampStatus": "queued",
"message": "E-stamp requested. Recipients will be notified when the document is ready.",
"envelopeId": "env_abc123",
"status": "estamping"
}Receive e-stamp webhooks
Create a webhook under Settings → Webhooks and subscribe to these events:
| Event | Meaning |
|---|---|
document.estamp.started | The provider accepted the purchase and status is pending |
document.estamp.completed | The stamped PDF was verified and attached to the envelope |
document.estamp.failed | The e-stamp process reached a terminal failure |
The successful sequence is
document.estamp.started → document.estamp.completed → document.sent.
On failure, document.estamp.failed replaces the last two events.
Completed payload
{
"id": "evt_01J...",
"event": "document.estamp.completed",
"createdAt": "2026-07-22T10:15:00.000Z",
"data": {
"envelopeId": "env_abc123",
"title": "Service Agreement",
"status": "completed",
"transactionId": "txn_123",
"reference": "ref_123",
"certificateId": "cert_123",
"documentId": "doc_123",
"occurredAt": "2026-07-22T10:15:00.000Z"
}
}Failed payload
{
"id": "evt_01J...",
"event": "document.estamp.failed",
"createdAt": "2026-07-22T10:15:00.000Z",
"data": {
"envelopeId": "env_abc123",
"title": "Service Agreement",
"status": "failed",
"transactionId": "txn_123",
"reference": "ref_123",
"error": "Provider reported an e-stamp failure.",
"occurredAt": "2026-07-22T10:15:00.000Z"
}
}Verify X-SignSecure-Signature against the raw request body before processing
an event. See Webhooks for signature code,
delivery limits, deduplication, and manual retries.
Reconcile status
Webhooks should drive your application, while the status endpoint remains the source of truth after a reconnect or missed delivery:
curl \
"https://api.signpad.signsecure.in/api/v1/envelopes/$ENVELOPE_ID/status" \
-H "Authorization: Bearer $SIGNSECURE_API_KEY"{
"envelopeId": "env_abc123",
"status": "estamping",
"estamp": {
"enabled": true,
"status": "pending",
"transactionId": "txn_123",
"reference": "ref_123",
"certificateId": null,
"initiatedAt": "2026-07-22T10:00:00.000Z",
"pollAttempts": 1,
"lastError": null
}
}| E-stamp status | Client behavior |
|---|---|
queued or processing | Show that the request is being prepared |
pending | Wait for a webhook; optionally offer a manual refresh action |
completed | The stamped PDF is attached and signing has started |
failed | Show lastError and direct the owner to the envelope's manual retry action |
Request an immediate check
SignSecure Sign Pad performs an hourly safety check. When a user opens the envelope status view or deliberately presses refresh, request one immediate provider check:
curl -X POST \
"https://api.signpad.signsecure.in/api/v1/envelopes/$ENVELOPE_ID/estamp/check" \
-H "Authorization: Bearer $SIGNSECURE_API_KEY"The endpoint queues work and returns immediately. Read the status endpoint or wait for the resulting webhook. Do not run a tight polling loop around this endpoint.
Failure and retry behavior
- Provider and validation failures move the e-stamp to
failedand emitdocument.estamp.failed. - E-stamp retries are owner-controlled from the envelope view; there is no automatic purchase retry that could buy a duplicate stamp.
- Webhook deliveries make one immediate attempt and never run an automatic retry cron. A failed delivery can be retried manually from Settings → Webhooks, up to three total attempts.
- Treat webhook
idas an idempotency key. A manual delivery retry retains the same event ID.
Integration checklist
- Use an
articlevalue from the selected state's registry, not the Act number. - Keep
amountandconsiderationAmountas strings. - Use different legal names for
firstPartyandsecondParty. - Upload the PDF before calling
send. - Accept HTTP
202as success for an e-stamped send. - Verify webhook signatures and deduplicate on event
id. - Reconcile with
GET /envelopes/{id}/statusafter missed connectivity. - Invoke the immediate check only for a user-driven refresh.