SignSecure Sign PadSignSecure Sign Pad

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 retry

For 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.

FieldRequiredAccepted value
stateYesSupported two-letter code from the catalog below
articleYesExact instrument name from the selected state's catalog
amountYesWhole-number stamp duty from "10" through the selected state's Capricorn limit (up to "10000000")
considerationAmountYesNon-negative whole-number instrument value, for example "50000"
payeeNofirst-party (default) or second-party
hardcopyNon (default) or y
firstPartyYesLegal name, valid email, optional 10-digit mobile, and address
secondPartyYesSame shape as firstParty; the two legal names must be different
shippingWhen hardcopy is yname, 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.

Top-level state value: KA
Maximum duty: ₹1,00,00,000120 of 120
Act ref.Exact API valueCopy
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
3Adoption Deed
4Affidavit
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
7Appointment in execution of a power
8(a)Appraisement or Valuation - Upto Rs.1000
8(b)Appraisement or Valuation - In any other case
9Apprenticeship Deed
10Articles 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
13Bottomry 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
16Certificate 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
17Certificate of Enrolment as Advocate
18Charter 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)
19Composition Deed
20(5)(i)Conveyance - Industrial machinery treated as movable
21Copy of Extract
22Counter part or Duplicate
23Customs Bond or Excise Bond Art 23(b)
24Delivery order in respect of Goods
25Divorce
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)
29Indemnity 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
31Letter of Allotment
32Letter 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
33Memorandum 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
38Note 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
40BLimited 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
42Protest of Bill / Note
43Protest by the Master of a Ship
44Re-Conveyance of mortgaged property
47Security Bond or Mortgage Deed
49Share Warrants
50Shipping
51Surrender 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.
53ATransfer 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
55Warrants 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:

EventMeaning
document.estamp.startedThe provider accepted the purchase and status is pending
document.estamp.completedThe stamped PDF was verified and attached to the envelope
document.estamp.failedThe e-stamp process reached a terminal failure

The successful sequence is document.estamp.starteddocument.estamp.completeddocument.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 statusClient behavior
queued or processingShow that the request is being prepared
pendingWait for a webhook; optionally offer a manual refresh action
completedThe stamped PDF is attached and signing has started
failedShow 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 failed and emit document.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 id as an idempotency key. A manual delivery retry retains the same event ID.

Integration checklist

  • Use an article value from the selected state's registry, not the Act number.
  • Keep amount and considerationAmount as strings.
  • Use different legal names for firstParty and secondParty.
  • Upload the PDF before calling send.
  • Accept HTTP 202 as success for an e-stamped send.
  • Verify webhook signatures and deduplicate on event id.
  • Reconcile with GET /envelopes/{id}/status after missed connectivity.
  • Invoke the immediate check only for a user-driven refresh.

On this page