{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"0805743f-4576-4bac-a310-78e82308cedb","name":"Documoto Headless API Endpoints","description":"Welcome to Documoto's Headless API documentation. Designed exclusively for our customers, our Headless Endpoints offer seamless integration and unparalleled flexibility. These set of services are intended de-couple Documoto’s back-end from front-end and allow customers to access, manage, create, and delete Documoto resources outside of the Documoto user interface.\n\nPurpose-built to bridge the gap between front-end applications and Documoto's robust back-end repository, these endpoints prioritize efficiency and data security. By incorporating user access controls and privileges, they empower you to deliver exceptional experiences to internal support resources, customers, and equipment operators and servicers.\n\nWhether fetching comprehensive resources or specific information via dynamic query parameters, these endpoints facilitate seamless integration into any application or system.\n\n# Getting Started Guide\n\nTo start using the Headless APIs, you need to understand the requirements –\n\n- You must use a valid API Key to send requests to the API endpoints.\n    \n- Understand Documoto API’s rate and usage limits - [linked here](https://support.documoto.com/hc/en-us/articles/4414871920915-REST-API-Web-Services-Reference).\n    \n- All API’s require developers to authenticate via HTTPS-secured communications.\n    \n- Base URL's needed:\n    \n    - Production: [https://documoto.digabit.com/api/ext](https://documoto.digabit.com/api/ext)\n        \n    - Integration: [https://integration.digabit.com/api/ext](https://integration.digabit.com/api/ext)\n        \n- When query parameters include characters that are reserved or potentially unsafe within URLs, you must perform URL encoding before using them in an API Request.\n    \n- The API’s generally returns request responses in JSON format\\*\n    \n    - _Exceptions_: _Downloading Endpoints_, such as download thumbnails, or PDF exports endpoints will respond as an octet-stream, which is a binary file that needs to be ingested and converted into an actual file.\n        \n\n# Authentication\n\nAPI Key is obtained by a Documoto administrator. For more information on creating/obtaining a key please see our Knowledge Base article here: [https://support.documoto.com/hc/en-us/articles/4414871920915-REST-API-Web-Services-Reference](https://support.documoto.com/hc/en-us/articles/4414871920915-REST-API-Web-Services-Reference)\n\nThe Documoto Headless REST APIs will use API Key-based authentication for authentication and authorization. An HTTP Basic header containing an access key is required to authenticate each request.\n\n- API Keys are generated and presented once to the user that generated them.\n    \n- They are not stored or accessible by us (Documoto) or the administrator that created them.\n    \n- API Keys can be regenerated or revoked, but never accessed or viewed again.\n    \n- Users do not have to include credentials when using the API Keys.\n    \n- API Keys are also not supplied to a third party (such as with OAuth).\n    \n\nAll communication with Documoto is also done via HTTPS, which requires TLS.\n\n# Error Handling\n\nWhen interacting with Documoto's API endpoints, you may encounter various response status codes indicating the outcome of your request. Below is a comprehensive list of response status codes along with their meanings:\n\n| Status Code | Description |\n| --- | --- |\n| **200** | Success: The request was successful (applicable for GET, PUT, PATCH, DELETE requests). |\n| **201** | Created: A new item has been successfully created in the database (applicable for POST requests). |\n| **204** | No Content: To be defined based on specific use cases. |\n| **400** | Bad Request: The request contains invalid or malformed parameters that fail validation. |\n| **401** | Unauthorized: Access is denied due to missing or invalid API Key. |\n| **403** | Forbidden: The user does not have permission to access the requested data. |\n| **404** | Not Found: The requested resource is not available, even if it exists in the database but is inaccessible to the end user. |\n| **405** | Method Not Allowed: The HTTP method used is not supported by the endpoint. |\n| **415** | Unsupported Media Type: The format of the data in the request is not supported. |\n| **429** | Too Many Requests: The rate limit for API requests has been exceeded. |\n| **500** | Internal Server Error: Unexpected exceptions occurred beyond normal expectations. |\n| **502** | Bad Gateway: The server received an invalid response from an upstream server. |\n| **503** | Service Unavailable: The server is temporarily unable to handle the request due to maintenance or overload. |\n| **504** | Gateway Timeout: The server did not receive a timely response from an upstream server. |\n\nWhen handling errors, developers should pay close attention to the status code provided in the API response, as it indicates the nature of the issue encountered. Also, accompanying error messages may provide more context to help troubleshoot and resolve the issue effectively.\n\n# Pagination\n\nIn managing large datasets returned by APIs, implementing pagination is a fundamental practice for developers. Pagination empowers developers to efficiently retrieve and display data in manageable chunks, thereby significantly enhancing performance and user experience.\n\nTo optimize data retrieval and navigation, Headless REST endpoints adhere to off-set pagination standards. Below are the specifications for pagination management:\n\n| **Parameter** | **Description** | **Default** |\n| --- | --- | --- |\n| **offset** | Determines the starting point for retrieving items | 0 |\n| **limit** | Specifies the maximum number of items to return per page | 100 |\n\n**Pagination Guidelines:**\n\n- By default, the **offset** parameter is set to 0.\n    \n- The **limit** parameter defines the maximum number of items to retrieve per page. This can be adjusted to any desired value.\n    \n- Each request can fetch a maximum of 100 results at once.\n    \n- Responses include a total count of all available results.\n    \n- Pagination is managed by incrementing the **offset** parameter.\n    \n- The **next_page** attribute provides the URL to access the next page of results.\n    \n- When reaching the last page, the **next_page** attribute will be null.\n    \n\nThese standardized practices ensure smooth and efficient pagination across all Headless REST endpoints, enabling developers to seamlessly retrieve and navigate through data.\n\n# Payloads\n\nFile Size Limits and Rate Multiplier for API Users\n\nIn utilizing Documoto's Headless API, it's important to be mindful of file size constraints and potential rate limits to ensure smooth operation and optimal performance. Here's a breakdown of the limitations and considerations you should be aware of:\n\n1. **File Size Limit:**\n    \n    1. Inbound and Outbound Files: Generally constrained at 1 GB. This means any files being sent to or received from the API should not exceed this size limit.\n        \n    2. Illustrations for Interactive Pages: Limited to 25 MB to maintain consistency with Page Builder file size limits. This restriction applies specifically to illustrations added for interactive pages.  \n        Any files surpassing these size limits will trigger a clear error message, providing feedback to the API user regarding the exceeded limit.\n        \n2. **Rate Multiplier for Resource Intensive Activities:**\n    \n    1. Certain API activities are resource intensive and may require additional processing time and resources. To manage these effectively, a rate multiplier is introduced for such activities, clearly communicated in the documentation for API users.\n        \n    2. For every request against any rate-limited activity, there will be a multiplier of 10 additional requests. This ensures that resource-intensive tasks are processed efficiently while maintaining system stability and performance.  \n        Activities subjected to this rate multiplier include:  \n        • Copy Access Controls  \n        • Print Job PDFs  \n        • Search Export ZIPs  \n        • Media Export Job MDZs/ZIPs  \n        Be mindful of these considerations when designing and implementing your API interactions to ensure smooth operation and adherence to system constraints.\n        \n\n# Throttling\n\nIn Documoto, API usage for each customer is governed by their Subscription Plan, which outlines the allowed number of requests within a one-hour timeframe. To ensure effective enforcement of this limit, Documoto implements throttling based on five-minute intervals.\n\n**Determining Throttling Intervals**  \nThrottling intervals are calculated by dividing the hourly request limit by twelve, resulting in five-minute intervals. Refer to the table below for details:\n\n| **Throttle Limit (Hourly)** | **Throttle Limit (5 Minutes)** | **Response Message for Exceeding Limit** |\n| --- | --- | --- |\n| 5,000 | 416 | Due to system load, we are throttling publishing, indexing, and API activities. |\n| 10,000 | 833 | Due to system load, we are throttling publishing, indexing, and API activities. |\n| 20,000 | 1,666 | Due to system load, we are throttling publishing, indexing, and API activities. |\n\n**Throttling Process**\n\nDocumoto actively monitors API requests, performing checks every ten seconds to determine if the request count exceeds the limit for the current five-minute interval. If the limit is surpassed, subsequent requests are throttled until the end of the five-minute interval. Once the interval concludes, users can resume submitting requests.\n\n# Change Management\n\nAs Documoto's APIs evolve to enhance interoperability features, we strive to make non-breaking changes to continuously improve our Headless REST endpoint offerings. Below, we outline our approach to handling changes and provide guidance on how to adapt your applications accordingly.\n\n**Important Considerations**  \nWe may introduce changes without prior notice in cases of critical product bugs or legal, security, or privacy concerns, especially if they constitute breaking changes.\n\nAs a best practice, we highly recommend implementing client-side handling for unknown response elements. This ensures that your code remains flexible and tolerant of errors, thereby increasing the robustness and interoperability of your integrations and software applications using Documoto APIs.\n\n**Definitions**\n\n- **Breaking Change:** A change that may require modifications to your application to prevent disruption to your integration. In such cases, Documoto will version the endpoint and require migration from the previous version within 6 months. Examples include:\n    \n    - Removing endpoints\n        \n    - Renaming endpoints, request/response attributes, query parameters and headers\n        \n    - Removing non-optional response body attributes\n        \n    - Removing non-optional response headers\n        \n    - Removal of an allowed parameter, request field or response field\n        \n    - Addition of a required parameter or request field without default values\n        \n    - Changes to the intended functionality of an endpoint. For example, if a DELETE request previously used to softdelete the resource but now hard deletes the resource.\n        \n    - Changing the nesting structure of request or response body attributes\\*\n        \n- **Non-breaking Change:** A change that can be adapted to at your discretion and pace without causing disruption. We will communicate such changes after they are implemented. Examples include:\n    \n    - Addition of new endpoints\n        \n    - Addition of new media types\n        \n    - Removal of optional response attributes\n        \n    - Addition of new fields in the following scenarios:\n        \n        - New fields in responses\n            \n        - New optional request fields or parameters\n            \n        - New required request fields that have default values\n            \n    - Addition of a new value returned for an existing text field\n        \n    - Changing non-optional fields in the following scenarios:\n        \n        - Non-optional request body attributes to optional\n            \n        - Non-optional query parameters to optional\n            \n        - Non-optional request headers to optional\n            \n    - Changes to the order of fields returned within a response\n        \n    - Addition of an optional request header\n        \n    - Removal of redundant request header\n        \n    - Changes to the length of data returned within a field\n        \n    - Changes to the overall response size\n        \n    - Changes to error messages. We do not recommend parsing error messages to perform business logic. Instead, you should only rely on HTTP response codes and error codes.\n        \n    - Fixes to HTTP response codes and error codes from incorrect code to correct code\n        \n\n# Communication\n\n- Look out for email communication from Documoto regarding notable non-breaking changes or upcoming new versions for breaking changes.\n    \n- For breaking changes, API responses will include a header indicating that an endpoint has been deprecated and will be removed. Additionally, Documoto Administrators will be notified about deprecated APIs for your tenant.\n    \n- Timelines for API version deprecation will be determined based on customer change management needs. Generally, older versions will be deprecated within 6 months of the release of new versions.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"34649711","team":6232356,"collectionId":"0805743f-4576-4bac-a310-78e82308cedb","publishedId":"2sA3JJAPP7","public":true,"publicUrl":"https://documenter-api.postman.tech/view/34649711/2sA3JJAPP7","privateUrl":"https://go.postman.co/documentation/34649711-0805743f-4576-4bac-a310-78e82308cedb","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"67c9b4"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"Documoto Headless APIs"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/a023280e-e08a-4871-8e8d-c20e0db03f3a/RE0tTG9nby5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"67c9b4"}},{"name":"light","logo":"https://content.pstmn.io/a023280e-e08a-4871-8e8d-c20e0db03f3a/RE0tTG9nby5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"67c9b4"}}]}},"version":"8.11.6","publishDate":"2024-05-07T19:10:53.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Documoto Headless APIs","description":""},"logos":{"logoLight":"https://content.pstmn.io/a023280e-e08a-4871-8e8d-c20e0db03f3a/RE0tTG9nby5wbmc=","logoDark":"https://content.pstmn.io/a023280e-e08a-4871-8e8d-c20e0db03f3a/RE0tTG9nby5wbmc="}},"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/38bf6cf67ca4660db0cda60eb7410a953b70c634917fc212880ce799e13f92b0","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/2sA3JJAPP7"}