{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"000df74c-41d3-4f28-a182-342a6ce21028","name":"Zoop eStamp SDK Documentation","description":"The Estamp API empowers developers to seamlessly integrate electronic stamping capabilities into their applications, facilitating the authentication and validation of digital documents. Electronic stamping, often referred to as estamping, ensures the integrity and legal validity of documents in digital form.\n\nZoop Estamp API supports 3 different flows\n\n- Procure eStamps of Different States\n    \n- Procure eStamp and attach to document\n    \n- Procure eStamp And Use it in Esign Flow\n    \n\n### **URL**\n\n{{eStampSDKBaseUrl}} baseUrl for estamp service\n\nwhere eStampSDKBaseUrl can be\n\n- [https://live.zoop.plus/contract/estamp](https://live.zoop.plus/contract/esign)( for production)\n    \n- [https://test.zoop.plus/contract/estamp](https://live.zoop.plus/contract/esign)( for testing)\n    \n\n### **HEADER**\n\nIn order to authenticate you need to pass the following headers:\n\n- app-id - Identifier of your organisation which is created in client dashboard\n    \n- api-key – API key generated for the respective app\n    \n\n### Authentication Error\n\n| HTTP Code | Message |\n| --- | --- |\n| `401` | app not found |\n| `401` | api key is invalid or disabled |\n| `401` | You don't have permission to access this resource. |\n\n### Estamp Procurement Journey\n\n- Create Estamp Order\n    \n    - An Estamp Order can be created by calling the /init API, with all the details required for the transaction i.e, first party name, second party name, stamp duty paid by,consideration price,article id,stamp duty value,branch id etc.You also need to pass a field called **procure** with its value as **true** for estamp procurement journey\n        \n    - A Unique Order ID is generated for your estamp order.\n        \n    - **Parameters to Note:**\n        \n        - `stampType`:\n            \n            - `\"ESTAMP\"` for digital eStamps (available for immediate download or webhook notification)\n                \n            - `\"TRADITIONAL\"` for physical/traditional stamp papers (delivered to a registered address)\n                \n- Estamp Order Status\n    \n    - Once the order is fulfilled, the estamp will be generated and added to the inventory to consume.\n        \n\n### Estamp Consumption Journey\n\n#### 1\\. Allocate E-Stamp\n\n**Endpoint**\n\n`POST {{eStampSDKBaseUrl}}/v2/estamps/allocate`\n\n**Description**\n\nThis API is used to **reserve (allocate)** an e-stamp from the inventory against a transaction.\n\nAllocation is useful when you want to **block** an e-stamp before final consumption.\n\n**Request Body Example**\n\n```\n{\n  \"firstPartyName\": \"Test\",          \n  \"secondPartyName\": \"Test1\",        \n  \"stampDutyPaidBy\": \"SECOND_PARTY\", \n  \"purpose\": \"Loan\",                 \n  \"stateCode\": \"AN\",                 \n  \"articleId\": 1081,                 \n  \"stampDutyAmount\": 200,            \n  \"referenceId\": \"TEST12345\"         \n}\n\n ```\n\n**Request Body Parameters**\n\n| Field Name | Type | Required | Description |\n| --- | --- | --- | --- |\n| `firstPartyName` | String | ✅ Yes | Name of the first party in the agreement. |\n| `secondPartyName` | String | ✅ Yes | Name of the second party in the agreement. |\n| `stampDutyPaidBy` | String | ✅ Yes | Who is paying the stamp duty. Allowed values:  <br>• `FIRST_PARTY`  <br>• `SECOND_PARTY` |\n| `purpose` | String | ✅ Yes | Purpose of the transaction (e.g., Loan, Sale Deed, Rental Agreement). |\n| `stateCode` | String | ✅ Yes | State code where the e-stamp is applicable. Example: `\"AN\"` for Andaman. |\n| `articleId` | Integer | ✅ Yes | Article ID mapped to state and purpose. |\n| `stampDutyAmount` | Number | ✅ Yes | Amount of stamp duty (in INR) to be allocated. |\n| `referenceId` | String | ✅ Yes | Unique identifier provided by the client for request tracking. |\n\n---\n\n#### 2\\. Consume / Release E-Stamp\n\n**Endpoint**\n\n`POST {{eStampSDKBaseUrl}}/v2/estamps/consume`\n\n**Description**\n\nThis API is used to **mark an e-stamp as consumed** (final usage) or **release** it (cancel the allocation).\n\n- If you are **sure of consumption**, you can directly call this API (allocation not required).\n    \n- If you need a **cancellable flow**, first call **Allocate API**, and then use this API to either:\n    \n    - `CONSUME` → mark it as consumed\n        \n    - `RELEASE` → cancel the allocation\n        \n\n⚠️ Once consumed, the e-stamp **cannot be released**.\n\n**Request Body Example**\n\n```\n{\n  \"firstPartyName\": \"Souraj\",\n  \"secondPartyName\": \"Sarkar\",\n  \"stampDutyPaidBy\": \"SECOND_PARTY\",\n  \"purpose\": \"Loan\",\n  \"stateCode\": \"AP\",\n  \"articleId\": 1001,\n  \"stampDutyAmount\": 100,\n  \"referenceId\": \"TEST12345\",\n  \"action\": \"CONSUME\"\n}\n\n ```\n\nYou have **two options** for consuming a stamp:\n\n---\n\n**Option 1 — Pass Stamp Usage Details**\n\nIf you **do not already know the estampId**, you can provide the stamp usage details.  \nThe system will **search for a matching available e-Stamp**, allocate it, and **mark it as consumed**.\n\n```\n{\n  \"firstPartyName\": \"Zoop\",      // Name of the first party mentioned on the stamp\n  \"secondPartyName\": \"Test\",     // Name of the second party mentioned on the stamp\n  \"stampDutyPaidBy\": \"SECOND_PARTY\", // Who will bear stamp duty (FIRST_PARTY / SECOND_PARTY / SHARED)\n  \"purpose\": \"Loan\",               // Purpose for which the stamp is being used\n  \"stateCode\": \"AP\",               // State in which the stamp is issued (State code)\n  \"articleId\": 1001,               // Article/Instrument type ID as per stamp rules\n  \"stampDutyAmount\": 100,          // Denomination / stamp value required\n  \"referenceId\": \"TEST12345\",      // Unique reference from client to track the transaction\n  \"action\": \"CONSUME\"              // Action to perform: CONSUME or RELEASE\n}\n\n ```\n\n**When to use this:**\n\n- You want the system to **pick the appropriate stamp** automatically.\n    \n- You **do not know the estampId** beforehand.\n    \n\n---\n\n**Option 2 — Pass an Existing** **`estampId`**\n\nIf you **already know which stamp to consume**, you can send only the `estampId`.\n\n```\n{\n  \"estampId\": \"cm8r5ckkb00020t9oej21d9iz\"\n}\n\n ```\n\n**When to use this:**\n\n- The stamp is already reserved or previously allocated to you.\n    \n- You want to **directly mark that specific stamp as consumed**.\n    \n\n**Request Body Parameters**\n\n| Field Name | Type | Required | Description |\n| --- | --- | --- | --- |\n| `firstPartyName` | String | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Name of the first party in the agreement. |\n| `secondPartyName` | String | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Name of the second party in the agreement. |\n| `stampDutyPaidBy` | String | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Who is paying the stamp duty. Allowed values:  <br>• `FIRST_PARTY`  <br>• `SECOND_PARTY` |\n| `purpose` | String | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Purpose of the transaction. |\n| `stateCode` | String | ✅ Yes  <br>\\[when need to consume stamp directly\\] | State code where the e-stamp is applicable. |\n| `articleId` | Integer | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Article ID mapped to the state and purpose. |\n| `stampDutyAmount` | Number | ✅ Yes  <br>\\[when need to consume stamp directly\\] | Amount of stamp duty (in INR) to be consumed or released. |\n| `referenceId` | String | ✅ Yes | Unique identifier provided by the client for request tracking. |\n| `action` | String | ✅ Yes | Action to be performed:  <br>• `CONSUME` → Mark as consumed  <br>• `RELEASE` → Cancel allocation |\n\n---\n\n#### 🔄 API Usage Approach\n\nThere are **two approaches** for using these APIs depending on your use case:\n\n##### **1\\. Direct Consume Approach**\n\n- Use this when you are **sure** that the stamp will be consumed.\n    \n- Call only `POST /v2/estamps/consume` with `\"action\": \"CONSUME\"`.\n    \n- ⚠️ Once consumed, the stamp **cannot** be released.\n    \n\n##### 2\\. **Safe Funnel (Allocate → Consume/Release)**\n\n- Use this when the transaction **may be cancelled** or requires **confirmation** before consuming.\n    \n- Call `POST /v2/estamps/allocate` to block the stamp.\n    \n- Then call `POST /v2/estamps/consume` with:\n    \n    - `\"action\": \"CONSUME\"` → Finalize consumption\n        \n    - `\"action\": \"RELEASE\"` → Cancel allocation and return to inventory\n        \n\n---\n\n#### 🔗 API Sequence\n\n##### Direct Consumption (No Allocation)\n\n```\nClient → /v2/estamps/consume (action=CONSUME) → E-Stamp Consumed\n\n ```\n\n##### Safe Funnel (Allocatable Flow)\n\n```\nClient → /v2/estamps/allocate → E-Stamp Allocated\n       → /v2/estamps/consume (action=CONSUME) → E-Stamp Consumed\n       OR\n       → /v2/estamps/consume (action=RELEASE) → E-Stamp Released\n\n ```\n\n### Estamp And Esign Journey\n\n- Procure eStamp Using **Estamp Procurement Journey**\n    \n    - Place an eStamp Order using /init api\n        \n    - Place an Bulk eStamp Order using /bulk/init api\n        \n    - Place an eStamp Order with document attachment or webhook using /contract/init api\n        \n- Pass **eStamp id** in **eSign init api**\n    \n    - Once estamp Order has been fulfilled, you need to pass **request_id** obtained from **eStamp init api** as **estamp_id** to **eSign init api.** You also need to pass an additional field called **estamp_required** with its value set to **true**.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"29380795","team":416426,"collectionId":"000df74c-41d3-4f28-a182-342a6ce21028","publishedId":"2sB2cYcg1s","public":true,"publicUrl":"https://documenter-api.postman.tech/view/29380795/2sB2cYcg1s","privateUrl":"https://go.postman.co/documentation/29380795-000df74c-41d3-4f28-a182-342a6ce21028","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"Zoop eStamp SDK"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2025-04-11T11:09:22.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Zoop eStamp SDK","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/d8e4a22b3c95e3239e5a6e8f795bf44986c21c7317235658db23bfb1071062aa","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sB2cYcg1s"}