{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"9ad005e9-c0de-4dd3-90d9-a9885f761171","name":"Consist.DoxiAPI v5.0","description":"# Getting Started\n\nWelcome to the **Doxi Sign API**!\n\nThis guide explains how to authenticate and use key endpoints like creating flows and using templates.  \nSwagger: [https://doxi-sign.com/api/swagger](https://doxi-sign.com/api/swagger)\n\nOpenAPI: [https://doxi-sign.com/api/swagger/v4/swagger.json](https://doxi-sign.com/api/swagger/v4/swagger.json)\n\n---\n\n## Get Access Token (Login)\n\nAll API requests require a valid access token.\n\n### Token Endpoint Format\n\nPOST [https://login.doxi-sign.com/auth/realms/{tenant}/protocol/openid-connect/token](https://login.doxi-sign.com/realms/%7Btenant%7D/protocol/openid-connect/token)\n\n> Replace `{tenant}` with your actual company name.  \nFor example, if your Doxi URL is `https://doxi-sign.com/mycompany`, then:  \nPOST [https://login.doxi-sign.com/auth/realms/mycompany/protocol/openid-connect/token](https://login.doxi-sign.com/realms/mycompany/protocol/openid-connect/token) \n  \n\n### Headers\n\n### Body Parameters\n\n| Field | Value |\n| --- | --- |\n| grant_type | password |\n| client_id | doxi |\n| username | [your@email.com](https://mailto:your@email.com) |\n| password | your_password |\n| scope | openid |\n\n> Only `username`, `password`, and `{tenant}` need to be changed.  \n`client_id` is always `doxi`. \n  \n\n### Sample Response\n\n``` json\n{\n  \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp...\",\n  \"expires_in\": 300,\n  \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...\",\n  \"token_type\": \"Bearer\"\n}\n\n ```\n\n## Required Headers for All API Calls\n\nEvery request to the Doxi API must include the following headers:\n\n| Header | Description |\n| --- | --- |\n| Authorization | `Bearer {access_token}` – the token obtained from the login step |\n| X-Tenant | Your tenant name (e.g., `mycompany`) |\n\n### Example:\n\nAuthorization: {{vault:bearer-token}}  \nX-Tenant: mycompany\n\n> Your tenant name appears in your Doxi URL:  \nIf your portal is `https://doxi-sign.com/mycompany`, your `X-Tenant` is `mycompany`. \n  \n\n## Refresh Token\n\nWhen your access token expires, you can use the `refresh_token` to obtain a new access token without logging in again.\n\n### Endpoint\n\nPOST [https://login.doxi-sign.com/realms/{tenant}/protocol/openid-connect/token](https://login.doxi-sign.com/realms/%7Btenant%7D/protocol/openid-connect/token)\n\n> Replace `{tenant}` with your actual tenant name (e.g., `mycompany`). \n  \n\n### Headers\n\n### Body Parameters\n\n| Field | Value |\n| --- | --- |\n| grant_type | refresh_token |\n| client_id | doxi |\n| refresh_token | your_refresh_token |\n\n### Sample Request\n\nPOST [https://login.doxi-sign.com/realms/mycompany/protocol/openid-connect/token](https://login.doxi-sign.com/realms/mycompany/protocol/openid-connect/token)  \nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=refresh_token&  \nclient_id=doxi&  \nrefresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...\n\n``` json\n{\n  \"access_token\": \"new-access-token\",\n  \"refresh_token\": \"new-refresh-token\",\n  \"expires_in\": 300,\n  \"token_type\": \"Bearer\"\n}\n\n ```\n\nMake sure to update the Authorization header in future API calls with the new access_token\n\n## Create a New Flow\n\nThis method creates a signature flow in the Doxi system by uploading a PDF document and defining the process using a JSON payload.\n\n---\n\n### Endpoint\n\nPOST [https://doxi-sign.com/api/ex/flow](https://doxi-sign.com/api/ex/flow)\n\n---\n\n### Required Headers\n\nX-Tenant: mycompany  \nContent-Type:\n\n---\n\n### Body Parameters (multipart/form-data)\n\n| Field | Type | Description |\n| --- | --- | --- |\n| `File` | File (PDF) | The PDF document to be signed, uploaded as binary stream |\n| `CreateFlowJsonRequest` | String (JSON) | The full flow configuration in JSON format |\n\n---\n\n### Example Request\n\n**Form Data Fields:**\n\n- `File`: Upload the actual PDF file (`application/pdf`)\n    \n- `CreateFlowJsonRequest`: Paste this JSON string:\n    \n\n``` json\n{\n  \"DocumentFileName\": \"API Example.pdf\",\n  \"SenderKey\": {\n    \"Key\": \"someUser@SomeDomain.com\",\n    \"Type\": 1\n  },\n  \"Description\": \"API Example test\",\n  \"FlowElements\": [\n    {\n      \"SignerKey\": {\n        \"Key\": \"someUser@SomeDomain.com\",\n        \"Type\": 1\n      },\n      \"ElementType\": 0,\n      \"ElementSubType\": 0,\n      \"PageNumber\": 1,\n      \"Position\": {\n            \"Top\": 440.2,\n            \"Left\": 62.0,\n            \"Width\": 78.8,\n            \"Height\": 37.5\n        }\n    }\n  ],\n  \"Recipients\": [\n    {\n      \"UserKey\": {\n        \"Key\": \"david@doxi.com\",\n        \"Type\": 1\n      },\n      \"Email\": \"david@doxi.com\",\n      \"FirstName\": \"David\",\n      \"LastName\": \"White\"\n    }\n  ],\n  \"CustomFields\": [\n    {\n      \"Key\": \"SomeInnerSystemIdNumber\",\n      \"Value\": \"12345\"\n    }\n  ],\n  \"Users\": [\n    {\n      \"UserKey\": {\n        \"Key\": \"someUser@SomeDomain.com\",\n        \"Type\": 1\n      },\n      \"Email\": \"someUser@SomeDomain.com\",\n      \"FirstName\": \"Marty\",\n      \"LastName\": \"Braun\",\n      \"SmsPhoneNumber\": \"0501234567\",\n      \"ForceApprovalOnSignature\": false,\n      \"PersonalMessage\": \"test 123\"\n    }\n  ]\n}\n\n ```\n\nThe CreateFlowJsonRequest must be a string field containing valid JSON, not a nested object.\n\n<img src=\"https://content.pstmn.io/3759867e-b364-4eb5-887c-1d12bc9ce1de/Y3JlYXRlIGZsb3cuSlBH\" width=\"452\" height=\"435\">\n\n### 🧠 Field Explanations\n\n| Field | Description |\n| --- | --- |\n| `DocumentFileName` | The display name of the PDF document that will appear in the signing process. |\n| `SenderKey` | Identifies the user who initiated the signing process. This user receives the final signed document. It includes:  <br>• `Key`: usually the sender's email  <br>• `Type`: key type (1 = Email) |\n| `Description` | A short message that describes the purpose of the signing flow. Shown to signers in emails and signing screens. |\n| `FlowElements` | An array of field definitions (elements) that need to be filled during the signing process. Each element includes:  <br>• `SignerKey`: who must fill the element  <br>• `ElementType`: type of field (e.g., signature, checkbox, text)  <br>• `ElementSubType`: further categorization (optional)  <br>• `PageNumber`: which page of the document  <br>• `Position`: coordinates and size (Top, Left, Width, Height) |\n| `Recipients` | A list of users who will receive email notifications when the flow is signed or rejected. These users are not signers. |\n| `CustomFields` | Optional metadata fields (key-value pairs) attached to the flow. Useful for connecting the flow to internal system IDs or business context. |\n| `Users` | List of signers involved in the flow. Each user must have at least an email or phone number.  <br>Additional properties include:  <br>• `SmsPhoneNumber`: if SMS is used  <br>• `ForceApprovalOnSignature`: forces confirmation after signature  <br>• `PersonalMessage`: custom message sent to the signer |\n\n### Pro Tip: Reverse-Engineer Flow Configuration\n\nTo determine the exact **element positions**, **field types**, and all required parameters for creating a signing flow via the API, it's recommended to first build a sample process using the **Doxi web interface**.\n\nOnce the flow is created manually, you can retrieve its full configuration using the following API:\n\nGET /ex/flow/{signFlowId}\n\nThis will return all relevant details (including users, elements, field positions, and structure) which you can then reuse to construct the same flow programmatically via the API.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"21971446","team":1798796,"collectionId":"9ad005e9-c0de-4dd3-90d9-a9885f761171","publishedId":"2sB2qZFNbZ","public":true,"publicUrl":"https://documenter-api.postman.tech/view/21971446/2sB2qZFNbZ","privateUrl":"https://go.postman.co/documentation/21971446-9ad005e9-c0de-4dd3-90d9-a9885f761171","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"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":"2026-01-21T21:21:38.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","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/39149a7be95b32e965a260ebfde4e64e2641454fc4ddf5d026433b7160a3d809","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/2sB2qZFNbZ"}