openapi: 3.0.0 info: description: "> **Note**\n>\n> Looking for documentation for **Public API v2**? Click [here](https://api.contractbook.com/v2/docs).\n>\n>\n> Please, provide your feedback via `#help-public-api` channel at [Contractbook Friends](https://contractbook-friends.slack.com/join/shared_invite/zt-953ed23n-oboQCnDCZIO4CyBjkF4iAg#/shared-invite/email)\n> Slack or by sending an email at [help-public-api@contractbook.dk](mailto:help-public-api@contractbook.dk).\n\n## Table of Contents\n\n- [Introduction](#introduction)\n- [Migration from Public API v2](#migration-from-public-api-v2)\n- [Authentication](#authentication)\n- [Use cases](#use-cases)\n - [Scenario 1: Sending multiple contracts for signature](#scenario-1-sending-multiple-contracts-for-signature-based-on-a-single-document-template)\n - [Scenario 2: Uploading attachments to a document](#scenario-2-uploading-attachments-to-a-document)\n - [Scenario 3: Deleting a document](#scenario-3-deleting-a-document)\n - [Scenario 4: Using data fields](#scenario-4-using-data-fields)\n - [Scenario 5: Downloading the contract as PDF](#scenario-5-downloading-the-contract-as-pdf)\n - [Scenario 6: Sharing a document with collaborators](#scenario-6-sharing-a-document-with-collaborators)\n - [Scenario 7: Receiving notifications for document life-cycle events](#scenario-7-receiving-notifications-for-document-life-cycle-events)\n- [Appendix A: Enhancing the /v3/documents](#appendix-a---enhancing-the-v3documents)\n\n\n## Introduction\n\nContractbook turns static contracts into a database for your entire\norganization, unlocking the full value of your data while ensuring transparency\nand a seamless data flow between tools.\n\nOur API allows you to generate pre-filled drafts from any data source, stay\nupdated on contract activity, and quickly export an overview of all contracts\nand drafts.\n\n> Note: Whenever your user needs to access the Contractbook editor, we expect\n> you to redirect their browser to the appropriate page.\n\n\n## Migration from Public API v2\n\n\nPublic API v3 introduces several breaking changes focused on simplifying the document and template structure.\n\n### Restructured parties and signees\n\nThe most significant change is the restructuring of document parties and signees. In v2, you had two separate but overlapping structures that created data redundancy:\n\n- `visible_parties`: Basic party info (name, address, type, reference, number)\n- `parties`: Signee details with redundant company/personal fields\n\nIn v3, this has been unified and simplified:\n- **v2 `visible_parties`** → **v3 `parties`**: Contains essential party information\n- **v2 `parties`** → **v3 `signees`**: Nested within parties, contains only signee-related information\n\n**Field changes in the restructuring:**\n- `personal_title` (personal party) and `representative_title` (company party) → unified as `title` in signees\n- `company_representative` (company party) → `full_name` in signees\n- **Removed redundant fields**: `company_address`, `company_name`, `company_number`, `personal_number` (already available in the parent party)\n- **Removed internal references**: `user_id`, `profile_id`, `visible_party_id`\n\n**Signee structure** now contains only signee-related information:\n- `email`, `full_name`, `title`,`order`, `signature_verification_methods`\n- `signed_at`, `opened_at`, `rejected_at`, `changes_requested_at`\n\n### Other removed attributes**\n\n**From documents:**\n- `folders` (folders are deprecated in favor of workspaces)\n\n**From templates:**\n- `target_shared_folder` (folders are deprecated in favor of workspaces)\n- Party structure follows the same pattern as documents\n\n### Migration strategy\n\nWhen migrating from v2 to v3:\n\n1. **Update all endpoint URLs** by replacing `/v2/` with `/v3/`\n2. **Restructure party data** in your requests and response handling:\n - Map `visible_parties` to `parties`\n - Move signee information from old `parties` to `signees` array within each party\n3. **Remove deprecated fields** from your payloads (company_*, personal_*, representative_* fields)\n4. **Update response parsing** to handle the new nested signee structure\n5. **Test thoroughly** as the party/signee relationship is now more structured\n\n## Authentication\n\nTo use the API, you'll need to get your own API key. For that, log into\nContractbook and navigate to your profile settings. There you can create an API\nkey which is going to be shown only once upon creation.\n\nThere are two environments for API:\n\n* **[staging](https://api-staging.contractbook.com/v3/docs)**: this environment should\n only be used for testing purposes only. Here's where you'll be spending most of\n your time when developing new features for your app(s).\n\n To obtain an account on staging environment, please contact [help-public-api@contractbook.dk](mailto:help-public-api@contractbook.dk)\n or ping the team on Slack (see detail at the top of this page).\n\n* **[production](https://api.contractbook.com/v3/docs)**: when you're ready to release\n your feature, you can switch your app(s) from staging environment to production\n environment.\n\n> Note: If your application consist of multiple self-sufficient services, it's\n> recommended to use separate tokens for different subparts of your system to be\n> able to revoke them in a more granular way.\n\n## Use cases\n\nPublic API v3 offers an unprecedented level of flexibility when creating and managing documents on Contractbook platform. Examples for how to use the API are presented below.\n\n### Scenario 1. Sending multiple contracts for signature, based on a single document template\n\nOftentimes it's useful to prepare a single document to serve as a template, then send multiple copies of that document for signature to different parties. it's possible to implement this scenario by employing Public API v3. Below is a step-by-step guide how to implement this:\n\n1. Using in-browser document editor, prepare a common template putting \"placeholders\" across it, make note of its id; \"placeholders\" are places in the document text that will be substituted with actual values during template->draft creation process,\n\n2. Prepare request data containing values to put in the placeholders and party details,\n\n3. Use `template_id` obtained in step 1 to create a draft by issuing an HTTP request to the API,\n\n > **Note**\n >\n > To better understand the distinction between the draft and template, see \"[The difference between a draft and a template](https://contractbook.freshdesk.com/support/solutions/articles/206000046352-the-difference-between-a-draft-and-a-template)\"\n\n4. Use `document_id` obtained in step 3 to send the draft for signature by issuing an HTTP request to the API, effectively converting draft into contract pending a signature.\n\nBelow is a closer look at these steps:\n\n1. **visit https://app.contractbook.com, find, open and edit the desired template using the in-browser editor**.\n\n There are a few things to keep in mind while preparing the template:\n\n * refer to \"[How to create a contract template from scratch](https://contractbook.freshdesk.com/support/solutions/articles/206000046197-how-can-i-create-a-template-from-scratch-)\" for exhaustive tutorial on how to create templates,\n\n * be sure to turn text that must be customized by employing \"**Data fields**\" functionality (see \"Using data fields\" scenario for more details on using data fields); later, when preparing the payload for an HTTP API call, actual values to be put in place of data fields will have to be set in the `data_fields` list of maps,\n\n * while technically this step could be done through an API endpoint too, there's currently no API endpoint to create a template.\n\n This limitation exists mainly due to the contents of template - what you see in the UI when viewing the template, being a Prosemirror-compatible AST, represented in a JSON format. it's considered an implementation detail such that isn't to be relied on. Contractbook is constantly working on evolving the document format, and is unable to provide a guarantee for the format to not change in future.\n\n However, if you find yourself still in need of setting the contents of template, consider scenario called \"Creating a draft specifying the contents of the document\"\n\n * if you choose to use the conditions functionality available in the template editor, it will be resolved in the same way in the Public API as it is when using the Contractbook app. If the data field value used in a condition is provided when creating a document from a template, it will be used to resolve the condition. If the value is not present, the condition will be resolved as `false`, and the content that is guarded by the condition will not be included in the created document.\n\n * after creating the template, make sure to save the template ID from browser's address bar. For the purpose of this example, a template with ID value of `1c843255-9203-4e46-9030-cb966b94359b` is used,\n\n2. **create draft by sending a `POST` HTTP request to `/v3/templates/:id/create_document` API endpoint** using desired payload. In the request examples below tools called `curl` (to make HTTP requests) and `jq` (to extract the ID of resulting draft by parsing the JSON from the HTTP response) are used:\n\n * create the first draft from the template and save the value of `document_id` from response:\n\n ```shell\n curl https://api-staging.contractbook.com/v3/templates/1c843255-9203-4e46-9030-cb966b94359b/create_document \\\n --request POST \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"data_fields\": [],\n \"message\": {\n \"content\": \"Hi, Kenneth! Please review and sign this.\"\n },\n \"parties\": [\n {\n \"address\": \"3722 Crestview Terrace, Del Rio, TX 78840\",\n \"id\": \"e5300b40-3053-4d0e-a881-182cd3b31a57\",\n \"name\": \"Paul C. Caudillo\",\n \"number\": \"409-645-2567\",\n \"reference\": \"Sender\",\n \"signees\": [\n {\n \"email\": \"paul@example.com\",\n \"full_name\": \"Paul C. Caudillo\",\n \"id\": \"2da88cc0-3158-4541-af34-bd633591c31a\",\n \"order\": 0,\n \"title\": \"CEO\"\n }\n ],\n \"type\": \"company\"\n },\n {\n \"address\": \"664 Campfire Ave. Lemont, IL 60439\",\n \"id\": \"7ca7c4f9-56f4-4d4d-b016-d8391b2375a4\",\n \"name\": \"Kenneth B. Rojas\",\n \"number\": \"412-786-7983\",\n \"reference\": \"Recipient\",\n \"signees\": [\n {\n \"email\": \"kenneth@example.com\",\n \"full_name\": \"Kenneth B. Rojas\",\n \"id\": \"cdf01430-4da0-4768-b3be-c8800f6aba9f\",\n \"order\": 1,\n \"title\": \"Dr.\"\n }\n ],\n \"type\": \"personal\"\n }\n ],\n \"signing_order_mode\": \"strict\",\n \"title\": \"Cooperation agreement between X and Y\",\n \"to_be_signed_by\": \"others_only\"\n }\n }'\n ```\n\n * create the second draft from the template and save the value of `document_id` from response:\n\n ```shell\n curl https://api-staging.contractbook.com/v3/templates/1c843255-9203-4e46-9030-cb966b94359b/create_document \\\n --request POST \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"data_fields\": [],\n \"message\": {\n \"content\": \"Hi, Kenneth! Please review and sign this.\"\n },\n \"parties\": [\n {\n \"address\": \"3722 Crestview Terrace, Del Rio, TX 78840\",\n \"id\": \"e5300b40-3053-4d0e-a881-182cd3b31a57\",\n \"name\": \"Paul C. Caudillo\",\n \"number\": \"409-645-2567\",\n \"reference\": \"Sender\",\n \"signees\": [\n {\n \"email\": \"paul@example.com\",\n \"full_name\": \"Paul C. Caudillo\",\n \"id\": \"2da88cc0-3158-4541-af34-bd633591c31a\",\n \"order\": 0,\n \"title\": \"CEO\"\n }\n ],\n \"type\": \"company\"\n },\n {\n \"address\": \"664 Campfire Ave. Lemont, IL 60439\",\n \"id\": \"7ca7c4f9-56f4-4d4d-b016-d8391b2375a4\",\n \"name\": \"Kenneth B. Rojas\",\n \"number\": \"412-786-7983\",\n \"reference\": \"Recipient\",\n \"signees\": [\n {\n \"email\": \"kenneth@example.com\",\n \"full_name\": \"Kenneth B. Rojas\",\n \"id\": \"cdf01430-4da0-4768-b3be-c8800f6aba9f\",\n \"order\": 1,\n \"title\": \"Dr.\"\n }\n ],\n \"type\": \"personal\"\n }\n ],\n \"signing_order_mode\": \"strict\",\n \"title\": \"Cooperation agreement between X and Y\",\n \"to_be_signed_by\": \"others_only\"\n }\n }'\n ```\n\n * please note that it is possible to set the allowed signature verification methods for each signee. This can be done by specifying them in `signature_verification_methods` field, as defined in the `DocumentCreateRequest` schema.\n\n > **Note**\n >\n > It worth mentioning, that at this point it's possible to open the drafts in UI, and perform a review or edit the draft contents. This may be useful in document workflow scenarios that depend on manual approval of documents to be sent for signature.\n >\n > This \"pause\" in the flow could also be used to upload file attachments to the draft, either from UI or via API, such that have to differ from attachments in the original templates, if any.\n\n3. the response contains two drafts with IDs `bd272a06-6ee3-4d49-9e73-f7a129b5c673` and `f6ee8b19-cfda-44eb-acf5-b53d28871ea5` respectively. Now, turn each draft into contract pending a signature by sending a `POST` HTTP request to `/v3/documents/:id/send` API endpoint:\n\n * send the first contract:\n\n ```shell\n curl https://api-staging.contractbook.com/v3/documents/bd272a06-6ee3-4d49-9e73-f7a129b5c673/send \\\n --request POST \\\n --oauth2-bearer \"\" \\\n --header \"Content-Type: application/json\" \\\n --silent\n ```\n\n * send the second contract:\n\n ```shell\n curl https://api-staging.contractbook.com/v3/documents/f6ee8b19-cfda-44eb-acf5-b53d28871ea5/send \\\n --request POST \\\n --oauth2-bearer \"\" \\\n --header \"Content-Type: application/json\" \\\n --silent\n ```\n\nAt this point depending on the draft signature order settings, one or more recipients will receive an email informing them of a new document pending their signature.\n\nA few things to keep in mind:\n\n* typically, the signee receives an email with link to signing the document. It's possible to expose the link to sign the document in the response of the `POST /v3/documents/:id/send` HTTP API request.\n\n Exposing the signing link, however requires an additional agreement to be signed between Contractbook and the party who's willing to integrate. The agreement states that integrator takes responsibility for handling this signing link and verifying that the user has provided an email address they have access to.\n\n After the agreement is signed, the API key used by integrator will be granted special permission, which will expose the signing link located at `.contract.parties[].preview_url` in the HTTP response.\n\n* when the contract contains multiple parties, by default parties will sign the contract in what's known as a \"strict\" order: in an order they're displayed when viewing the contract from the UI.\n\n In cases when strict order of signing isn't necessary, it may be desirable, for example to shorten the time before the document is fully signed, to send it to all parties for signature, at once. This way parties will sign the contract in a non-determined order.\n\n The order can be changed during the `POST /v3/documents/:id/send` HTTP API request, via an option called `signing_order_mode`. This option takes one of three values:\n\n * `random` signing order (also known as signing out of order) means all signees will receive the contract for signing at the same time and there is no order of signing imposed\n * `strict` signing order means only the first signee will gain access to the contract and only once they sign the second signee will receive access to the contract and once the second signee signs the next signee gains access until all signed.\n * `grouped` signing order is a mix of the previous two modes. Signees will be grouped and these groups will have a signing order. However, within the same group, signees can sign in a non-determined order.\n\n* it is possible to redirect the signee to a custom URL once the contract has been signed. However, in order to do so, you will need to contact the Contractbook support team. Currently, it is not possible to set the `redirect_url` parameter via the Public API. This setting applies to the API key that is used for Public API requests. Once the setting has been applied, all contracts created with that API key will have the specified redirect behavior after being signed.\n\n### Scenario 2. Uploading attachments to a document\n\nAlong with the document itself, it's oftentimes useful to bundle some files to be signed with document as a single package. For example, the text of the document may refer to some other media, such as images or PDF files, that must be taking into account during the signature process. In the context of document such uploads are called \"attachments.\" Public API v3 offers a way to upload files, attaching them to the document to be signed and thus allowing for scenarios like this.\n\nNote, that documents to which file scan be attached, include:\n\n- a draft created in UI,\n- a draft created using API,\n- a draft created from template using API.\n\nThere's virtually no difference between drafts created from UI and by employing API.\n\nBelow is a step-by-step guide how to attach two files to a document.\n\n1. upload file (or files) by sending a `POST` HTTP request to `/v3/upload` API endpoint containing the file. After a successful upload, store the response:\n\n\n *\n ```shell title=\"Request example 1\"\n curl https://api-staging.contractbook.com/v3/upload \\\n --request POST \\\n --oauth2-bearer \"\" \\\n --silent \\\n --form \"file=/tmp/rfc1149.txt.pdf\"\n ```\n\n ```json title=\"Response example 1\"\n {\n \"original\": \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/rfc1149.txt.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135916Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=7a6170358dfb8da424d3af1036b5c59defc5ee2040bdbef0cc4444bf134b6f194697932b8d1f6334bc2eefdd28a4faf6a7748c047224d20fbecf5ff3051e622debec330aa2265d34893e25972f0c8cc6017833d0702034969b26fceaf33112a34ba8baaf34b00f9464dd3803c00f6a2cb425cb188f154cb94248bffc136f9f5c21c7326dc2325e878d3b5b291f73a9d9b0fda1247ae37c679716aeb2635f9132b23c1a05b810f9776c0ca0aabffdd28e203dca4d23ff511c0f43cc132ce6973eb3687d49c97cb37d41a67aacdf2b5a3e6ca27fb9ba34da1a7b4229e09c158f2f2ed4295333a82320081c4906f3b918d5095de30ad4000536a31d1ae7865ede07d5beb25861289014212fbb93900d6cedd451258e5a3e13cb805b9368d71d0b35f539980b7b367e1b59fb3712f9949df599adfb180b58836c27a531ff88587b47cefb86eb32012ae51134fc858967f4ee2dd43ff702e31f3d77ce0bd74c90bf42f39bb670ffc2e5d3a1d8fd216a3668831be0863dcdf17c1f59cf3ddb1765a6b0cfbfbc346e61d937369c3d57daa845a4aea4a303436a4b20b7ab966f7432353f881cd04f358f7593c53cdea88c6bca035718bbfdd54c098fb25d06007a1788b59d2b610197b94b39ee897d8d55050f959e7051613d2c0ee9a4ab05b211da7d3e2727436d7dc6ee3ee2b07219cfd7fb6b5c26732ef618d69105616999a346e89d\",\n \"preview\": [\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/preview/preview-001.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=6f2b24e15e4f0300ea79ded51432f4e12e85e979d18e47052cde403336a5016d6d6f00b4973af204e6fd95576ecccce4e93c9e266100864adf73c7fbb479cca2d0342fff85f9a0978ad47326de465b7ea6edafff4edccbd18f1a25e76a0b639c7cd98c68c9679ebbfb6490fc4b31009cbb2340ee47032b267c1da353b8d078ef641cfbb2bf892a69917f01e4b87c613a3202b2d28a2b36b6e8c1603b02bff84c96003836f6e1b5698d1aae3faa7e488db85c1f2defda416f93119e6a73b58b7d772129e3118f9ebf994e1ece58916baabdcc19a1df7aea6d53966f98e903f47f00b24e939e62657e56aef97d6243269be70b740f0c8746cc07afa4bc8ab31d2e0e62ccc06d63a43c482590efe55a82e53949eaad332daa196f6990c6705d4e76f4d548a8c6a3bd0345c135bf2ba32e8b1aeab6521348008b71a2ae318d50227e4d22a06cfdc582cfaa6efc6396ddf59c2460861e49bfc1aed009acdb22fc18d9adebe01fa5682aed3978cbc8553fc0f104978db062afc510c7b32bb61ea93532602c912cc02bedb1b3e4a95500888f1ef1e67f6a2fb060484c194b6ffa3a42879401dc14e940e407dee4a0cf38d83af2c8296b7accfb731215b52ada4747552c9fd35c6af6869cc7c5dc70138a3a1d406b4405fb6f42d16c7f63965386aac4feabb7a38eb402982763f84034e66bc303500875303ef89f1f2bff782f4e5fed77\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/preview/preview-002.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=7eeb48316088f9dd77c16e9caa78010705d1df4390b9d54256d318ad51a653f155b891e3699f792603103ab4d915ab01f9b31b768d797929740d0e0292b76c388f2f45111af6ec79092eae267dfdf9747cbf97051fcb39b793528446cf51885ca0d049c7956d2ed065b0bdd494de6bc0272f4ee039ed564259fe2056d8bcab76e16ae27c2ad433c2f89c58665c2ce26e7604d8fdd47f5730b2067e44268bd8c8684d3ec3b9baf7271462152729c9ce0df13d874bfd03422274936aab35537d6b41e3033fe30e4990f95eaca9b36aa569c7d01b21220304da620f163e1d26cc2b2dd95fa240cecf94a8d05c829ab962d091ad857e0947ea456d9f7cd1f922eb28289273625a1f1ac48ef1a5b6b730759af72898e2d97f4845c52b1aed808fd55d75b21cd0be9963b4b771ee48e0f300eb1dbdca82923909c89a501fad6d294bd1912cc8829494d9a27ffb64c0a8bca02a58ed7d5942dac084222019f1257e9ea75a3f7358b91b758f3a2dba8ae7bd264ff428021fb70cd8e05f08b3465a2c85ed6eb31fd3ef2117291a2f9bc7fb8e421c9fdb8b25f2cfe28fd39b72f1a33c13a8f0f7071df96b4c35bb77ce12b52c639500ccd622d063f823dba180d48c7137c62b876a5980bcc6392d899a2ec84c5cf64f77ad683cfd357819515b669de877654bf8e213e73c04df2d613bf522f5c6675518211eb6fb7e9ea39b0cbb12463357\"\n ]\n }\n ```\n\n *\n ```shell title=\"Request example 2\"\n curl https://api-staging.contractbook.com/v3/upload \\\n --request POST \\\n --oauth2-bearer \"\" \\\n --silent \\\n --form \"file=/tmp/rfc2346.txt.pdf\"\n ```\n\n ```json title=\"Response example 2\"\n {\n \"original\": \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/rfc2346.txt.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=656753c0d2e0a3c0c87bff8c2e9ac9244c7a254ee0c81f95bdca69a2c1b796287c64dd5803c61fc0ef9bd371e4d63a9908141b1ec28a96f2f6a195d7f8c4b3edb6e1da491474c697dfa6d93f771651ea03701eba4ea111dd60b36fe1111fe868539a4cd4ce8b49c04506d2d9f02caf25f33f98db787aca3f7b02ba7d74953e8dbcfb15598e810274252a6322d07604dbd015da51f663a52de6643500e0fb40145e69910b9ec00ca49ae76248947657adb6db624075545ed6edfbdb1e03f8a160a8b76f800ec8c40f5f64c14e10630364edf42aa4859913b8da10627d59e4826048b83256ea94e94d79d82c92553ec004c1a975f5c1eec50220ac021c0abd954c6825b4652c13aac87b4d5a7758e0318e69825e18af1e0f8bfd77021e8f6ce3d383723ad346053dea4404276e010de9e10cc3338073ed82456024092467d4bb5bd403beaedaeedcecc7b9467a031c30f01dfd65bbb256192b51775220adb40a4c696b169b8d961360e9173557fe15b1286c9d59abb02d9b5b4e7814f1091fc5033e0c548e0ad04047ee318d1e60565e999967cf856a55892ad51e6902064339782a4d467ea556b4623cb58c659c7412e9ecb7c810cc81e21eeba2d59fbb4bf5fb59a7e6e414937b9227642881f036a14bbfee61aa3e42d29dc7d4989e8b7f330029aaee0e0a16779ae6d4d65e54f4b94e9d08c7fc7af0b545dfa9dff9669a0756\",\n \"preview\": [\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-001.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=b97dcad3c613004ca9b297e26af6fbf0ea82a82bac097d44a5c7e4ef3486cb63f87f3aaad016350a2c6e85d0009a09b77711837c61630c1f7ee4c1e8db23df531dbc559f9066e6f27ebe7f3ede938cb0bbf9ddde35367e69d8cedd7ef654d4dda1959e2fb66cae837365b254c764444a77b330b29870b58962855bc9c99933c7779a19bbedd285ba791a0ae24a8e204e31271e9f44862d9db20d891d2fba50b9c63f5137f9c9cc993d5c181d6f3e9b57b3a824db70f09c66831f26428f63879452627871f8ebe0b6ba79dc49cd2f6a35f2862e381477757f4a4e4bb2bba32f4b2991d126770e4175c84030604494111cdda6e36e0a347d0b5903330efd85078e6077ad1ac7ae9a84d2d3a6b030989e30d5fbf976f7f2a965dcccd6e7b203290b97494ef2e5c0c15e109f4342127998f928cdff2cd3bd6591fd6ae6fff4282213956127515a3ae2cd304407cd5f8701672e8be855017e0fe5676e46b0a42b4713303a4861d0cc4192f3b6bfb54908a1fa5afee3eceebfb83ee7e2c1068631432493d8216c8bbe3c1522cf9653e3f2e99f73995c957d1a6f33e76d344edc7fbf7f66b7c8bb95be2c9bb3798808f3f1674cb096817e3a07a9ef831fd68a55d9f4241c668f1d2a9ff2d49ae2d56b7648f2bb51eaa91710e04b862340bb1971715e677d6aa4d54e068cdd4af2682fb41de9f7d09a47298c2fef0d369ec63f6f32a65d\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-002.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=98a210b7dd1d733670325618da9f5d91a64d369a82c3aeb443e91f2444a1a6e3ba17a052bca017a57fe6440d5b15cfd1f0c6000a7a1a8767a28ad5606280076fe1480e1838f63fc6b5435f6f24909357b4bd9fce9f1714296edf91bd6631116ba93952587fd6a5dacb0a56979e98daa5cbd7bb544f3f77aed97c5b80c334aa753551658b240aa5558bec4e0ad645d69fd508039525d4fefa3a4af8e89c465480f75bb79c3dfb623649767f6442b81d3f54d6e398afc3a6ac1f1ad59a983f6310ab70ec441c7c529d6a11576a50be449ebafa8f8749f1ec13d67f8c3d5cb1e09558ce17c4ab556d60b599d423f8acc121b3061a6348cb061f2643e5e02bef74f853cafc750711a285fd37830274c5c2ae066e203324bcc766901ebdc3d1710b412888ad81b3edd5823dab6577dbb6210ae0f88e604ba2aca585bd07d340fc3b8a38696075e8025ae85ee02423152dc39a5c858fc7a564471c9d44a089ef36c382e41630631c9fc82fd20f096883b17ef7fa42393fcd922103789ef21199c2e15efc9f25053024c422101c2198a1254edeb2c49e389d067a0711e658c977bdcea480e8a362ee1fce081d60fa4437b900732f51c604e4add7bdd6fc5554d47aef2c7821638232e1c31da51bedc06ae693887020806094c901d5618188df3d657c32b2c0aacd009660f60be0aede50b7c3edb6474ac421c6b94ad4384e7d8905df53\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-003.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=29e4d42b4eae2ff0f1caae7bfbf56ec06235de561044088a92534bfea4891b32034801f2f77a86344661b36a74c08f11851a31c119b8930cf200fff815035bee9d002255aa1425177a4f649b03fdc81de0ed53b09d05d28788c5002f0c0a82146b4d2466a4bb1c0f11816a1972712d36a1a00f2873b6c9c51854f7045120f7be2cb524888340b9c7d4c7d8cb1630ddae7dbcd3121681d91f398617c2b19420ca7ec77cd15bf772481385a0317142db137169470572f9ef7ee9409cbbda9b3bfceaea4745a92a25625a897cc2d472430382daadad6cd6615ddb46f6791a7065fc2d88d2e66532e0c4626259b595d6df83d4e81fdd2696ffb810069ff3f4a272c4dcc9e0969c8354b6764a52c3b9e20ce49cc9c48145b0ed7610bca60e33dbb77d4c975730a9d6df8d3fca1014e453e1cfd68d535c801f88c35c3bc0a168c9b0d2daeee50ca72193f94cc137da3d7878666718cb03597670e0ab6d26e03cc343988a44755c436dafe4925370a2bd3ba581c8ed5995d12b06cd4409b871a26e636378c554e1bfe0870690e4c3493dc84798405a4d4b08fb2ef5ca6ced4930620fa016203b72af3b8637dcd239137653f8df5803b77baca3072e1a6974d6f589afabdbc591b502eb8a9b7fa580c0125e1626bbb84b5a96fca5850a6d7d08a6e884d99593488bf5529e68f9ea9102279426f06fd9f1e462a8c22a173c7ee44b9145f3\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-004.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=5309f1a2fe306ba7f4c180e71cb4d2cefb24e9890eccab18402e8b9f4f0a688329430ed06d1e047e628f8b868ea77874299c9e15b8517a54b257a0626a8d3ee9124fc40d90961b3a76e269238a1a0933472c867fc137555c802224caf12547a1e0db99a6c833c0a514712177ebe4cb68dbcc6e1dda433b7bd07b7d480d61e01208f143cf5de36caf54fed9767827d9575c19d4f6d3cbfb8c5877fe08c0ecbc5e13b769583f503756ce243fea76d9a9312beb501ed65dfd87c28e92d02d613af4c059abcfdb0173711c80d179c511455e2ae18d80300fef396b623bf11fc7d0dfcc9e513262174db90619b4ddea472a5746fa5bf830fc677af6b66ff7ad531d5768bc253bdba32a8b6ffdfd756cddfac15bed38fcf7d3b5124017e7d716299dc8885a9b69e814be29c0c4486faed302024a7ba07dfcbbb9557f2f0ccf267e9ee82803bc26332ed098aa654cfe00a0ce45ac42c644d8a049f0452e9c193aedf3dafb1cdd4e08cbc50340cc89a9b2909e8ff8cf0891865d0bb2b118ef438173a4595f953edce037ca97082fc9b1928145d5c03adaab26bcdf4041ba3bb74a34cd13f2be9d0049b231d996671607b5e1ebe83bf57f320e9da6796f98b1980ee20e71a0d8b518ec8ebd64ae7293e973eed41727171d476fc9e012f3847b1b53f5cda9ae49ff3df3365a48f355838fc2a6b47a8a6d2ca19f4de0db0f2bac6f18296a72\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-005.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=33a3819cd56116e1424301aed8bc76bfd262b3ddec89267da0f7c633ab057773af8d0f3828d5f195787f21dd9018a2e48a1caa965d293ebb799b5172aef62b65de5fd9802b71c8cdcacbdd92b3c77f1b395efb5ca8a1eb47e05b977d36331fc7d6eb93927e6f55bae01fa845304c4c5f5d0de634a1a1afa801d11a7460e35cb35e1c2d4b82af702b21834cd5eea5cb41cc7b141190b168bf76a1bcb344364271722e4c5290f38ac210c0376f074d889103141a608824428310f4be725172c536c21da9e912c6c9b871052a2c04decdb628eefe56e4159e9c43a225ae59b08618ba6d7e669059c3224060672e7d31bada6bc5957dea6c6cc438f0c186c5342e0f7efcc238a247beae5644c6892649e1f7c0b8a58102dbb657fecafb0bb66db53785f67452f88a74848e9d09953bc7089324173dd7df1fbdb4ff32f74b05a5cf5f5e226e312dbdde030e89a2916ae8da87733bf483adc8d3414d0cda8eae163a354935d083c76b1724a7f73c9dc70d6e1cf2c30bbb789deee2b5d50455e685ed2aa6ae80c541ff047f67ecc48d2416ad9d9da7cf0ddb5e8ab5225b0e8d2641f328a50e8bbcb91b51f5d51befab2d922a88bd7b4ea3cb71e662f94e09508ef0018d21d379c545f0423bf494f9d38918c9b61863392084f06f557c291e65c3dac679870a09af0d5c2f56d0be9d56a0250f9e1dd2f376c75208384ecf8d49ae5741b2\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-006.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=23e344a76ae26b50fca5d96da6720d2e3e5f5d558dbab361ee97ba7639eb06622d0d9d5159abbc349838b69cd097dca2eb03082eaa2e01834d48a9b8ba7fa9df7bd76965d7661b5c4cb9ead256c4dfdb28c9dfe67107bb037f84d238fb061e386a937b313fdf3cddf4de8e6fc5dfd6946d70f1a6e93198917f90525b5a07d2e411ab3fa4debae97c151bcf8015e1deba554595f3621b802f9bddf1fe67987876ca8869e3a7848f15ca55080802502e1b7f28d66f30e2aa16233754c88bdbc6d0f9b52e09c2a7fb2e4fd9f7a4462c5d7d9bbb8012e93120e901fd2b5a94cb1fb671e6d437fbddd2278bbfab814f57b7941a7ea6eb5e74db190134bcdd27fdc2f13963f7545686a6a9dc8467ebb7500efe813e87c3545d708c3ff9e2c5b9578c3ba6e7dba3e59875656f367e184fa2561a0bb1160c0cde1814b7472c90e5546683efd31d54f08f730ab04a28db6da6f1dda5809aeab51d0bd94cf6230b7c262043a0a2d311e0826cbbc930149db5ca7a28fb89dd55e1a27a28d9a9b307582f4be556c65949d0d87a7e73acba05910bef7ea75e19c9a09ff83935b04b1f6bd1a0bb4fc7ce3234603aeb563c8a362efe2a57d6c3bd6bb559f548f4014dc78f5bd7c5222f1cda76817467dd79bc85a717ef65290043e54341f92ff60a3268389a2dea1cc22570df3ed35499647323a0e085bcdf37e39328c9b275ef9935652f071fce\"\n ]\n }\n ```\n\n > **Note**\n >\n > While preview addresses could be copied and shared, they're not protected by additional authentication mechanisms. It's up to integrator to take care and not expose these URLs to undesirable viewers. At the same time, because part of preview addresses is a UUID string, guessing it by undesirable viewers is virtually impossible.\n\n2. having an ID of existing draft (for the purpose of this example, an ID with a value of `bf1c3b9e-2786-4efb-b0b1-1860d935431b` is used), update it by setting `attachments` field:\n\n ```shell\n curl https://api-staging.contractbook.com/v3/documents/bf1c3b9e-2786-4efb-b0b1-1860d935431b \\\n --request PATCH \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"version\": \"74129abd-36c0-4dac-9d55-4f5be15e226e\",\n \"attachments\": [\n {\n \"original\": \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/rfc1149.txt.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135916Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=7a6170358dfb8da424d3af1036b5c59defc5ee2040bdbef0cc4444bf134b6f194697932b8d1f6334bc2eefdd28a4faf6a7748c047224d20fbecf5ff3051e622debec330aa2265d34893e25972f0c8cc6017833d0702034969b26fceaf33112a34ba8baaf34b00f9464dd3803c00f6a2cb425cb188f154cb94248bffc136f9f5c21c7326dc2325e878d3b5b291f73a9d9b0fda1247ae37c679716aeb2635f9132b23c1a05b810f9776c0ca0aabffdd28e203dca4d23ff511c0f43cc132ce6973eb3687d49c97cb37d41a67aacdf2b5a3e6ca27fb9ba34da1a7b4229e09c158f2f2ed4295333a82320081c4906f3b918d5095de30ad4000536a31d1ae7865ede07d5beb25861289014212fbb93900d6cedd451258e5a3e13cb805b9368d71d0b35f539980b7b367e1b59fb3712f9949df599adfb180b58836c27a531ff88587b47cefb86eb32012ae51134fc858967f4ee2dd43ff702e31f3d77ce0bd74c90bf42f39bb670ffc2e5d3a1d8fd216a3668831be0863dcdf17c1f59cf3ddb1765a6b0cfbfbc346e61d937369c3d57daa845a4aea4a303436a4b20b7ab966f7432353f881cd04f358f7593c53cdea88c6bca035718bbfdd54c098fb25d06007a1788b59d2b610197b94b39ee897d8d55050f959e7051613d2c0ee9a4ab05b211da7d3e2727436d7dc6ee3ee2b07219cfd7fb6b5c26732ef618d69105616999a346e89d\",\n \"preview\": [\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/preview/preview-001.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=6f2b24e15e4f0300ea79ded51432f4e12e85e979d18e47052cde403336a5016d6d6f00b4973af204e6fd95576ecccce4e93c9e266100864adf73c7fbb479cca2d0342fff85f9a0978ad47326de465b7ea6edafff4edccbd18f1a25e76a0b639c7cd98c68c9679ebbfb6490fc4b31009cbb2340ee47032b267c1da353b8d078ef641cfbb2bf892a69917f01e4b87c613a3202b2d28a2b36b6e8c1603b02bff84c96003836f6e1b5698d1aae3faa7e488db85c1f2defda416f93119e6a73b58b7d772129e3118f9ebf994e1ece58916baabdcc19a1df7aea6d53966f98e903f47f00b24e939e62657e56aef97d6243269be70b740f0c8746cc07afa4bc8ab31d2e0e62ccc06d63a43c482590efe55a82e53949eaad332daa196f6990c6705d4e76f4d548a8c6a3bd0345c135bf2ba32e8b1aeab6521348008b71a2ae318d50227e4d22a06cfdc582cfaa6efc6396ddf59c2460861e49bfc1aed009acdb22fc18d9adebe01fa5682aed3978cbc8553fc0f104978db062afc510c7b32bb61ea93532602c912cc02bedb1b3e4a95500888f1ef1e67f6a2fb060484c194b6ffa3a42879401dc14e940e407dee4a0cf38d83af2c8296b7accfb731215b52ada4747552c9fd35c6af6869cc7c5dc70138a3a1d406b4405fb6f42d16c7f63965386aac4feabb7a38eb402982763f84034e66bc303500875303ef89f1f2bff782f4e5fed77\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/7305c1f5-e494-4427-bce9-6485d445932b/preview/preview-002.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=7eeb48316088f9dd77c16e9caa78010705d1df4390b9d54256d318ad51a653f155b891e3699f792603103ab4d915ab01f9b31b768d797929740d0e0292b76c388f2f45111af6ec79092eae267dfdf9747cbf97051fcb39b793528446cf51885ca0d049c7956d2ed065b0bdd494de6bc0272f4ee039ed564259fe2056d8bcab76e16ae27c2ad433c2f89c58665c2ce26e7604d8fdd47f5730b2067e44268bd8c8684d3ec3b9baf7271462152729c9ce0df13d874bfd03422274936aab35537d6b41e3033fe30e4990f95eaca9b36aa569c7d01b21220304da620f163e1d26cc2b2dd95fa240cecf94a8d05c829ab962d091ad857e0947ea456d9f7cd1f922eb28289273625a1f1ac48ef1a5b6b730759af72898e2d97f4845c52b1aed808fd55d75b21cd0be9963b4b771ee48e0f300eb1dbdca82923909c89a501fad6d294bd1912cc8829494d9a27ffb64c0a8bca02a58ed7d5942dac084222019f1257e9ea75a3f7358b91b758f3a2dba8ae7bd264ff428021fb70cd8e05f08b3465a2c85ed6eb31fd3ef2117291a2f9bc7fb8e421c9fdb8b25f2cfe28fd39b72f1a33c13a8f0f7071df96b4c35bb77ce12b52c639500ccd622d063f823dba180d48c7137c62b876a5980bcc6392d899a2ec84c5cf64f77ad683cfd357819515b669de877654bf8e213e73c04df2d613bf522f5c6675518211eb6fb7e9ea39b0cbb12463357\"\n ]\n },\n {\n \"original\": \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/rfc2346.txt.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135917Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=656753c0d2e0a3c0c87bff8c2e9ac9244c7a254ee0c81f95bdca69a2c1b796287c64dd5803c61fc0ef9bd371e4d63a9908141b1ec28a96f2f6a195d7f8c4b3edb6e1da491474c697dfa6d93f771651ea03701eba4ea111dd60b36fe1111fe868539a4cd4ce8b49c04506d2d9f02caf25f33f98db787aca3f7b02ba7d74953e8dbcfb15598e810274252a6322d07604dbd015da51f663a52de6643500e0fb40145e69910b9ec00ca49ae76248947657adb6db624075545ed6edfbdb1e03f8a160a8b76f800ec8c40f5f64c14e10630364edf42aa4859913b8da10627d59e4826048b83256ea94e94d79d82c92553ec004c1a975f5c1eec50220ac021c0abd954c6825b4652c13aac87b4d5a7758e0318e69825e18af1e0f8bfd77021e8f6ce3d383723ad346053dea4404276e010de9e10cc3338073ed82456024092467d4bb5bd403beaedaeedcecc7b9467a031c30f01dfd65bbb256192b51775220adb40a4c696b169b8d961360e9173557fe15b1286c9d59abb02d9b5b4e7814f1091fc5033e0c548e0ad04047ee318d1e60565e999967cf856a55892ad51e6902064339782a4d467ea556b4623cb58c659c7412e9ecb7c810cc81e21eeba2d59fbb4bf5fb59a7e6e414937b9227642881f036a14bbfee61aa3e42d29dc7d4989e8b7f330029aaee0e0a16779ae6d4d65e54f4b94e9d08c7fc7af0b545dfa9dff9669a0756\",\n \"preview\": [\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-001.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=b97dcad3c613004ca9b297e26af6fbf0ea82a82bac097d44a5c7e4ef3486cb63f87f3aaad016350a2c6e85d0009a09b77711837c61630c1f7ee4c1e8db23df531dbc559f9066e6f27ebe7f3ede938cb0bbf9ddde35367e69d8cedd7ef654d4dda1959e2fb66cae837365b254c764444a77b330b29870b58962855bc9c99933c7779a19bbedd285ba791a0ae24a8e204e31271e9f44862d9db20d891d2fba50b9c63f5137f9c9cc993d5c181d6f3e9b57b3a824db70f09c66831f26428f63879452627871f8ebe0b6ba79dc49cd2f6a35f2862e381477757f4a4e4bb2bba32f4b2991d126770e4175c84030604494111cdda6e36e0a347d0b5903330efd85078e6077ad1ac7ae9a84d2d3a6b030989e30d5fbf976f7f2a965dcccd6e7b203290b97494ef2e5c0c15e109f4342127998f928cdff2cd3bd6591fd6ae6fff4282213956127515a3ae2cd304407cd5f8701672e8be855017e0fe5676e46b0a42b4713303a4861d0cc4192f3b6bfb54908a1fa5afee3eceebfb83ee7e2c1068631432493d8216c8bbe3c1522cf9653e3f2e99f73995c957d1a6f33e76d344edc7fbf7f66b7c8bb95be2c9bb3798808f3f1674cb096817e3a07a9ef831fd68a55d9f4241c668f1d2a9ff2d49ae2d56b7648f2bb51eaa91710e04b862340bb1971715e677d6aa4d54e068cdd4af2682fb41de9f7d09a47298c2fef0d369ec63f6f32a65d\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-002.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=98a210b7dd1d733670325618da9f5d91a64d369a82c3aeb443e91f2444a1a6e3ba17a052bca017a57fe6440d5b15cfd1f0c6000a7a1a8767a28ad5606280076fe1480e1838f63fc6b5435f6f24909357b4bd9fce9f1714296edf91bd6631116ba93952587fd6a5dacb0a56979e98daa5cbd7bb544f3f77aed97c5b80c334aa753551658b240aa5558bec4e0ad645d69fd508039525d4fefa3a4af8e89c465480f75bb79c3dfb623649767f6442b81d3f54d6e398afc3a6ac1f1ad59a983f6310ab70ec441c7c529d6a11576a50be449ebafa8f8749f1ec13d67f8c3d5cb1e09558ce17c4ab556d60b599d423f8acc121b3061a6348cb061f2643e5e02bef74f853cafc750711a285fd37830274c5c2ae066e203324bcc766901ebdc3d1710b412888ad81b3edd5823dab6577dbb6210ae0f88e604ba2aca585bd07d340fc3b8a38696075e8025ae85ee02423152dc39a5c858fc7a564471c9d44a089ef36c382e41630631c9fc82fd20f096883b17ef7fa42393fcd922103789ef21199c2e15efc9f25053024c422101c2198a1254edeb2c49e389d067a0711e658c977bdcea480e8a362ee1fce081d60fa4437b900732f51c604e4add7bdd6fc5554d47aef2c7821638232e1c31da51bedc06ae693887020806094c901d5618188df3d657c32b2c0aacd009660f60be0aede50b7c3edb6474ac421c6b94ad4384e7d8905df53\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-003.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=29e4d42b4eae2ff0f1caae7bfbf56ec06235de561044088a92534bfea4891b32034801f2f77a86344661b36a74c08f11851a31c119b8930cf200fff815035bee9d002255aa1425177a4f649b03fdc81de0ed53b09d05d28788c5002f0c0a82146b4d2466a4bb1c0f11816a1972712d36a1a00f2873b6c9c51854f7045120f7be2cb524888340b9c7d4c7d8cb1630ddae7dbcd3121681d91f398617c2b19420ca7ec77cd15bf772481385a0317142db137169470572f9ef7ee9409cbbda9b3bfceaea4745a92a25625a897cc2d472430382daadad6cd6615ddb46f6791a7065fc2d88d2e66532e0c4626259b595d6df83d4e81fdd2696ffb810069ff3f4a272c4dcc9e0969c8354b6764a52c3b9e20ce49cc9c48145b0ed7610bca60e33dbb77d4c975730a9d6df8d3fca1014e453e1cfd68d535c801f88c35c3bc0a168c9b0d2daeee50ca72193f94cc137da3d7878666718cb03597670e0ab6d26e03cc343988a44755c436dafe4925370a2bd3ba581c8ed5995d12b06cd4409b871a26e636378c554e1bfe0870690e4c3493dc84798405a4d4b08fb2ef5ca6ced4930620fa016203b72af3b8637dcd239137653f8df5803b77baca3072e1a6974d6f589afabdbc591b502eb8a9b7fa580c0125e1626bbb84b5a96fca5850a6d7d08a6e884d99593488bf5529e68f9ea9102279426f06fd9f1e462a8c22a173c7ee44b9145f3\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-004.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=5309f1a2fe306ba7f4c180e71cb4d2cefb24e9890eccab18402e8b9f4f0a688329430ed06d1e047e628f8b868ea77874299c9e15b8517a54b257a0626a8d3ee9124fc40d90961b3a76e269238a1a0933472c867fc137555c802224caf12547a1e0db99a6c833c0a514712177ebe4cb68dbcc6e1dda433b7bd07b7d480d61e01208f143cf5de36caf54fed9767827d9575c19d4f6d3cbfb8c5877fe08c0ecbc5e13b769583f503756ce243fea76d9a9312beb501ed65dfd87c28e92d02d613af4c059abcfdb0173711c80d179c511455e2ae18d80300fef396b623bf11fc7d0dfcc9e513262174db90619b4ddea472a5746fa5bf830fc677af6b66ff7ad531d5768bc253bdba32a8b6ffdfd756cddfac15bed38fcf7d3b5124017e7d716299dc8885a9b69e814be29c0c4486faed302024a7ba07dfcbbb9557f2f0ccf267e9ee82803bc26332ed098aa654cfe00a0ce45ac42c644d8a049f0452e9c193aedf3dafb1cdd4e08cbc50340cc89a9b2909e8ff8cf0891865d0bb2b118ef438173a4595f953edce037ca97082fc9b1928145d5c03adaab26bcdf4041ba3bb74a34cd13f2be9d0049b231d996671607b5e1ebe83bf57f320e9da6796f98b1980ee20e71a0d8b518ec8ebd64ae7293e973eed41727171d476fc9e012f3847b1b53f5cda9ae49ff3df3365a48f355838fc2a6b47a8a6d2ca19f4de0db0f2bac6f18296a72\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-005.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=33a3819cd56116e1424301aed8bc76bfd262b3ddec89267da0f7c633ab057773af8d0f3828d5f195787f21dd9018a2e48a1caa965d293ebb799b5172aef62b65de5fd9802b71c8cdcacbdd92b3c77f1b395efb5ca8a1eb47e05b977d36331fc7d6eb93927e6f55bae01fa845304c4c5f5d0de634a1a1afa801d11a7460e35cb35e1c2d4b82af702b21834cd5eea5cb41cc7b141190b168bf76a1bcb344364271722e4c5290f38ac210c0376f074d889103141a608824428310f4be725172c536c21da9e912c6c9b871052a2c04decdb628eefe56e4159e9c43a225ae59b08618ba6d7e669059c3224060672e7d31bada6bc5957dea6c6cc438f0c186c5342e0f7efcc238a247beae5644c6892649e1f7c0b8a58102dbb657fecafb0bb66db53785f67452f88a74848e9d09953bc7089324173dd7df1fbdb4ff32f74b05a5cf5f5e226e312dbdde030e89a2916ae8da87733bf483adc8d3414d0cda8eae163a354935d083c76b1724a7f73c9dc70d6e1cf2c30bbb789deee2b5d50455e685ed2aa6ae80c541ff047f67ecc48d2416ad9d9da7cf0ddb5e8ab5225b0e8d2641f328a50e8bbcb91b51f5d51befab2d922a88bd7b4ea3cb71e662f94e09508ef0018d21d379c545f0423bf494f9d38918c9b61863392084f06f557c291e65c3dac679870a09af0d5c2f56d0be9d56a0250f9e1dd2f376c75208384ecf8d49ae5741b2\",\n \"http://localhost:4443/contractbook-user-uploads-dev/uploads/128d1081-0cb2-4567-ad05-ee5d4b5e3c0e/attachments/967261eb-c5a0-4ae2-8d00-5d80b0961a1b/preview/preview-006.png?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=file-service-mock%40contractbook-staging.iam.gserviceaccount.com%2F20250922%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250922T135918Z&X-Goog-Expires=300&X-Goog-SignedHeaders=host&X-Goog-Signature=23e344a76ae26b50fca5d96da6720d2e3e5f5d558dbab361ee97ba7639eb06622d0d9d5159abbc349838b69cd097dca2eb03082eaa2e01834d48a9b8ba7fa9df7bd76965d7661b5c4cb9ead256c4dfdb28c9dfe67107bb037f84d238fb061e386a937b313fdf3cddf4de8e6fc5dfd6946d70f1a6e93198917f90525b5a07d2e411ab3fa4debae97c151bcf8015e1deba554595f3621b802f9bddf1fe67987876ca8869e3a7848f15ca55080802502e1b7f28d66f30e2aa16233754c88bdbc6d0f9b52e09c2a7fb2e4fd9f7a4462c5d7d9bbb8012e93120e901fd2b5a94cb1fb671e6d437fbddd2278bbfab814f57b7941a7ea6eb5e74db190134bcdd27fdc2f13963f7545686a6a9dc8467ebb7500efe813e87c3545d708c3ff9e2c5b9578c3ba6e7dba3e59875656f367e184fa2561a0bb1160c0cde1814b7472c90e5546683efd31d54f08f730ab04a28db6da6f1dda5809aeab51d0bd94cf6230b7c262043a0a2d311e0826cbbc930149db5ca7a28fb89dd55e1a27a28d9a9b307582f4be556c65949d0d87a7e73acba05910bef7ea75e19c9a09ff83935b04b1f6bd1a0bb4fc7ce3234603aeb563c8a362efe2a57d6c3bd6bb559f548f4014dc78f5bd7c5222f1cda76817467dd79bc85a717ef65290043e54341f92ff60a3268389a2dea1cc22570df3ed35499647323a0e085bcdf37e39328c9b275ef9935652f071fce\"\n ]\n }\n ]\n }\n }'\n ```\n\n > **Note**\n >\n > A few things to keep in mind:\n >\n > * this will overwrite any existing value of `attachments` attribute on the draft. If you wish to preserve existing values, make sure to fetch the draft and save the value of `attachments`, then combine a list of existing and new attachments before calling the API HTTP endpoint to update the draft,\n > * current limit on the uploaded file size is 48 megabytes\n\n### Scenario 3. Deleting a document\n\nSometimes a document has no use anymore and as such it can be desirable to delete such document. Public API v3 offers an endpoint to do just that.\n\nKnowing an ID of existing document (for the purpose of this example, a draft with ID value of `370104af-57de-4699-8998-a81d533540ce` is used), delete it by sending a `DELETE` request to `/v3/documents/:id` HTTP API endpoint:\n\n```shell title=\"Request example\"\ncurl https://api-staging.contractbook.com/v3/documents/370104af-57de-4699-8998-a81d533540ce \\\n --request DELETE \\\n --oauth2-bearer \"\" \\\n --header \"Content-Type: application/json\" \\\n --silent\n```\n\n> **Note**\n>\n> Signed contract can't be deleted through the API. An attempt to do so will result in a error. To delete a signed contract, it's required to submit respective request through the UI. Such requests are reviewed by Contractbook team. More information about deleting signed contracts is available at [\"How to delete a signed contract?\"](https://contractbook.freshdesk.com/support/solutions/articles/206000046288-how-to-delete-a-signed-contract-)\n\n### Scenario 4. Using data fields\n\nData fields (formerly __editable fields__) are placeholders for values that can be filled in at different stages of the template and document lifecycle. Public API v3 allows for adding, updating, and removing them.\n\nData fields are stored in the `data_fields` list. It's a field present in template and document schemas. If making changes to data fields isn't intended, the content of this field shouldn't be touched.\n\nA data field might be present in the document body, but it doesn't have to. If it's not present in the document body, it's often referred to as __metadata__.\n\n#### Adding a data field\n\nTo add a data field to a template or document, add it to the `data_fields` list. Check the `data_fields` schema to see which properties are required.\nIf you are creating a document from a template and want to reuse the data fields from the template, it's enough to send matching `name` and `type` properties to use the existing data fields.\n\n```shell title=\"Request example\"\ncurl https://api-staging.contractbook.com/v3/documents/9f414a75-8ca4-4743-acae-d55fcb1fe228 \\\n --request PATCH \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"version\": \"84097321-d412-4bd2-bdf0-0c454c0fbf8c\",\n \"data_fields\": [\n {\n \"name\": \"compensation\",\n \"type\": \"number\",\n \"value\": \"80000\"\n },\n {\n \"name\": \"length\",\n \"type\": \"number\",\n \"value\": \"24\"\n }\n ]\n }\n }'\n```\n\nThe response looks like this (including only a list of data fields, for brevity):\n\n```shell title=\"Response example\"\n[\n {\n \"config\": {},\n \"description\": null,\n \"formatting\": null,\n \"id\": \"d927a003-f63a-4e89-bc09-b98357337121\",\n \"name\": \"compensation\",\n \"required\": false,\n \"source\": null,\n \"source_mapping\": null,\n \"source_sync_type\": null,\n \"type\": \"number\",\n \"value\": \"80000\"\n },\n {\n \"config\": {},\n \"description\": null,\n \"formatting\": null,\n \"id\": \"3ba3c610-1e8d-4d24-937c-116d197d1b67\",\n \"name\": \"length\",\n \"required\": false,\n \"source\": null,\n \"source_mapping\": null,\n \"source_sync_type\": null,\n \"type\": \"number\",\n \"value\": \"24\"\n }\n]\n```\n\n#### Updating the value of a data field\n\nUpdating of data fields works by replacing entire set of data fields on a document. It means that in case a document has many data fields, while only a single one must be updated - a request must contain all document data fields, including the one to be updated.\n\nUsing data fields from previous example's response, it's possible to add a new data field, as well as modify a value of existing data field by sending a `PATCH` request to `/v3/documents` HTTP API endpoint:\n\n```shell title=\"Request example\"\ncurl https://api-staging.contractbook.com/v3/documents/9f414a75-8ca4-4743-acae-d55fcb1fe228 \\\n --request PATCH \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"version\": \"0385e218-33ad-46d2-9ef7-2c01963b8b85\",\n \"data_fields\": [\n {\n \"name\": \"compensation\",\n \"type\": \"number\",\n \"value\": \"86000\"\n },\n {\n \"name\": \"length\",\n \"type\": \"number\",\n \"value\": \"24\"\n },\n {\n \"name\": \"age\",\n \"type\": \"number\",\n \"value\": \"27\"\n }\n ]\n }\n }'\n```\n\n#### Removing a data field\n\nTo remove a data field, it must be removed from the list of `data_fields` when making a request. It's important to keep in mind, that the data field reference in document's AST will remain.\n\nUsing data fields from previous example's response, two data fields from the draft can be removed by sending a `PATCH` request to `/v3/documents` HTTP API endpoint:\n\n```shell title=\"Request example\"\ncurl https://api-staging.contractbook.com/v3/documents/9f414a75-8ca4-4743-acae-d55fcb1fe228 \\\n --request PATCH \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"version\": \"dfc0270e-10ac-41d8-a917-7fcccf86dbfa\",\n \"data_fields\": [\n {\n \"name\": \"compensation\",\n \"type\": \"number\",\n \"value\": \"80000\"\n }\n ]\n }\n }'\n```\n\n\n### Scenario 5. Downloading the contract as PDF\n\n\nContractbook discourages printing the contracts, while offering a variety of tools for sharing & viewing the documents. It will also store all documents virtually forever too. However, in rare cases it may be necessary to download a document in a form of PDF file. This can be achieved by employing a dedicated endpoint offered by Public API.\n\nKnowing an ID of existing document (for the purpose of this example, an ID with a value of `1f99b233-f660-4ecf-9cf1-9ba6ef299b9d` is used), fetch the link to PDF by sending a `GET` request to `/v3/documents/:id/pdf` HTTP API endpoint and inspect the response:\n\n```shell title=\"Request example\"\ncurl https://api-staging.contractbook.com/v3/documents/1f99b233-f660-4ecf-9cf1-9ba6ef299b9d/pdf \\\n --request GET \\\n --oauth2-bearer \"\" \\\n --header \"Content-Type: application/json\" \\\n --silent\n```\n\nThe response will contain a link to download the actual file, use it to download the file. The response will look like this:\n\n```json title=\"Response example\"\n{\n \"location\": \"http://localhost:5115/static/msmo3r3gdchqdv13m57sq8k9\"\n}\n```\n\n> **Note**\n> In the event when *all* user's documents must be exported to PDF (such as backing them up, externally), make sure to consult one of the following articles:\n\n\n> * [How can I download all contracts at once?](https://contractbook.freshdesk.com/support/solutions/articles/206000046202-how-can-i-download-all-my-contracts-at-once-)\n\n> * [How can I export contract data in a CSV format?](https://contractbook.freshdesk.com/support/solutions/articles/206000046303-can-i-export-my-contract-data-to-csv-)\n\n\n### Scenario 6. Sharing a document with collaborators\n\nSome document automation workflows may require sharing the document with collaborators. For example, a document that was created automatically needs to be manually reviewed or updated by a human. Public API v3 offers endpoints that allow for these kinds of scenarios.\n\nSharing of a document requires to set what's known as a `role` for collaborator. Choosing the role is a powerful way to differentiate what different collaborators are capable of doing with the document. Possible roles include:\n\n* manager,\n* editor,\n* filler,\n* reviewer.\n\nExample of how to share and stop sharing the document can be seen below:\n\n1. knowing an ID of existing document (for the purpose of this example, an ID with a value of `8fae9d83-b965-4642-a2e3-0a16c01c792e` is used) and an email of another person, share the document by sending a POST HTTP request to `/v3/documents/:id/share` API endpoint:\n\n ```shell title=\"Request example 1\"\n curl https://api-staging.contractbook.com/v3/documents/8fae9d83-b965-4642-a2e3-0a16c01c792e/share \\\n --request POST \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"message\": \"Please, look through this one\",\n \"role\": \"reviewer\",\n \"email\": \"user@example.com\"\n }'\n ```\n\n2. to stop sharing document with a collaborator, send a DELETE HTTP request to `/v3/documents/:id/share` API endpoint:\n\n ```shell title=\"Request example 2\"\n curl https://api-staging.contractbook.com/v3/documents/8fae9d83-b965-4642-a2e3-0a16c01c792e/share \\\n --request DELETE \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"email\": \"user@example.com\"\n }'\n ```\n\n### Scenario 7. Receiving notifications for document life-cycle events\n\nIn certain situations, it may be useful to reactively obtain information about events happening to documents in Contractbook. For example, an action must be performed in response to the document being created, updated or signed. One way to know if the document's state has changed would be to fetch the document and inspect its state. However, another, a more efficient way exists, commonly known as \"webhooks\" mechanism.\n\nContractbook Public API v3 implements this mechanism & allows for scenarios which depend on receiving notifications about document's state change. As soon as document's state changes, Contractbook will send an HTTP request to the desired client's address.\n\n> **Note**\n>\n> An important security consideration must be made before using the webhook endpoint. Currently webhooks are unauthenticated. To add a layer of authentication a query parameter with predefined access token can be added. For example, if your endpoint would be:\n>\n> ```\n> https://example.com/webhook_notifications_from_contractbook\n> ```\n>\n> a notification would be sent to:\n>\n> ```\n> https://example.com/webhook_notifications_from_contractbook?access_token=PREDEFINEDVALUE\n> ```\n\nTo ensure security and proper handling of incoming events it's always recommended that, after receiving a webhook notification, your application makes a GET request to `/documents/:id` HTTP API to confirm current status of the document. There are two reasons for this:\n\n* the webhook is unauthenticated but the call to API is authenticated (using provided API key in `Authorization` header), so verifying the state of the document allows you to detect if the webhook notification you received was spoofed,\n\n* webhooks notifications are based on an asynchronous process with automated delivery retries. Inherently, sometimes they can arrive more than once, or with a delay or out of order. Treating them as a trigger for action and getting the state of the document from API allows you to easier handle those edge cases.\n\n> **Note**:\n>\n> Currently, a list of events includes:\n>\n> * `contract.created`,\n> * `contract.signed`,\n> * `contract.rejected`,\n> * `contract.changes_requested`,\n> * `contract.edited`,\n> * `contract.resent`,\n> * `contract.sent_for_signature`,\n> * `draft.created`,\n> * `draft.sent`,\n> * `draft.edited`,\n> * `task.created`,\n> * `task.updated`,\n> * `task.deleted`,\n> * `task.reminder`,\n> * `task.status.updated`,\n> * `template.created`,\n\nBelow scenario will perform two actions to documents, then observe the webhook payloads arriving to designated `callback_url`.\n\n\n1. while creating the API key, make sure to specify the value of `webhooks_url` attribute, see \"[I want to integrate with a tool that can't be found in-app - what should I do?](https://contractbook.freshdesk.com/support/solutions/articles/206000046109-i-want-to-integrate-with-a-tool-i-cannot-find-in-app-what-should-i-do-)\" article. For the purpose of this example, a value of `https://example.com/webhook_notifications_from_contractbook` is used.\n\n\n2. create a draft:\n\n ```shell title=\"Request example 1\"\n curl https://api-staging.contractbook.com/v3/templates/93ab78f1-d02e-4837-86db-63bfded4efdf/create_document \\\n --request POST \\\n --header \"Content-Type: application/json\" \\\n --oauth2-bearer \"\" \\\n --silent \\\n --data '{\n \"document\": {\n \"data_fields\": [],\n \"message\": {\n \"content\": \"Hi, Kenneth! Please review and sign this.\"\n },\n \"parties\": [\n {\n \"address\": \"3722 Crestview Terrace, Del Rio, TX 78840\",\n \"id\": \"e5300b40-3053-4d0e-a881-182cd3b31a57\",\n \"name\": \"Paul C. Caudillo\",\n \"number\": \"409-645-2567\",\n \"reference\": \"Sender\",\n \"signees\": [\n {\n \"email\": \"paul@example.com\",\n \"full_name\": \"Paul C. Caudillo\",\n \"id\": \"2da88cc0-3158-4541-af34-bd633591c31a\",\n \"order\": 0,\n \"title\": \"CEO\"\n }\n ],\n \"type\": \"company\"\n },\n {\n \"address\": \"664 Campfire Ave. Lemont, IL 60439\",\n \"id\": \"7ca7c4f9-56f4-4d4d-b016-d8391b2375a4\",\n \"name\": \"Kenneth B. Rojas\",\n \"number\": \"412-786-7983\",\n \"reference\": \"Recipient\",\n \"signees\": [\n {\n \"email\": \"kenneth@example.com\",\n \"full_name\": \"Kenneth B. Rojas\",\n \"id\": \"cdf01430-4da0-4768-b3be-c8800f6aba9f\",\n \"order\": 1,\n \"title\": \"Dr.\"\n }\n ],\n \"type\": \"personal\"\n }\n ],\n \"signing_order_mode\": \"strict\",\n \"title\": \"Cooperation agreement between X and Y\",\n \"to_be_signed_by\": \"others_only\"\n }\n }'\n ```\n\n3. send the draft for signature,\n\n ```shell title=\"Request example 2\"\n curl https://api-staging.contractbook.com/v3/documents/3c5c2258-9885-4652-aeb3-a1aa8f1b5461/send \\\n --request POST \\\n --oauth2-bearer \"\" \\\n --header \"Content-Type: application/json\" \\\n --silent\n ```\n\n4. wait until the final party signs the contract,\n\n5. expect the following payloads to be sent as a POST request to `https://example.com/webhook_notifications_from_contractbook`:\n\n ```json title=\"Webhook payload example 1\"\n {\n \"draft\": {\n \"id\": \"3c5c2258-9885-4652-aeb3-a1aa8f1b5461\",\n \"message\": {\n \"content\": \"Hi, Kenneth! Please review and sign this.\"\n },\n \"title\": \"Cooperation agreement between X and Y\",\n \"updated_at\": \"2025-09-22T14:00:21.232572Z\"\n },\n \"event\": \"draft.created\",\n \"user\": {\n \"email\": \"api-scenario-test-1758549620@example.com\",\n \"id\": \"99b423a0-093a-402f-84de-5318536bebd3\"\n }\n }\n ```\n\n ```json title=\"Webhook payload example 2\"\n {\n \"comment\": null,\n \"contract\": {\n \"id\": \"3c5c2258-9885-4652-aeb3-a1aa8f1b5461\",\n \"message\": {\n \"content\": \"Hi, Kenneth! Please review and sign this.\"\n },\n \"state\": \"pending\",\n \"title\": \"Cooperation agreement between X and Y\",\n \"updated_at\": \"2025-09-22T14:00:21.455481Z\"\n },\n \"event\": \"contract.created\",\n \"user\": {\n \"email\": \"api-scenario-test-1758549620@example.com\",\n \"id\": \"99b423a0-093a-402f-84de-5318536bebd3\"\n }\n }\n ```\n\n## Appendix A - enhancing the `/v3/documents`\n\n### Overview\n\nThe `/v3/documents` endpoint allows you to retrieve a list of documents from our system. By making a `GET` request to this endpoint, you can access a collection of documents along with additional details. To enhance the information retrieved, you have the option to include more comprehensive data by utilizing the query parameter `full=true`.\n\n### Functionality\n\nWhen you set the `full` parameter to `true`, the following enhancements will be applied to the retrieved documents:\n\n1. **Full Parties Details**: Both company and personal party information associated with each document will be included.\n2. **Data Fields Inclusion**: The document will feature all data fields the requesting user can access.\n" title: Contractbook Attachments Documents API version: '3.0' x-logo: altText: Contractbook logo backgroundColor: '#FFFFFF' url: public/contractbook-logo.svg servers: - description: Production server url: https://api.contractbook.com/v3/ variables: {} - description: Staging server url: https://api-staging.contractbook.com/v3/ variables: {} security: [] tags: - name: Documents paths: /documents: get: callbacks: {} deprecated: false description: "Gets a paginated and filtered list of documents.\n\nThis endpoint supports cursor-based pagination. To fetch several pages of documents, repeat the following steps:\n\n1. fetch a page of documents, without specifying a cursor value,\n2. if there's a next page, the response will contain a non-empty `cursor` value:\n\n ```json\n {\n \"documents\": [...],\n \"pagination_meta\": {\n \"cursor\": \"c3RyaW5nCg\"\n }\n }\n ```\n\n3. make a subsequent `GET /v3/documents` request while including a parameter `cursor=c3RyaW5nCg`, e.g.\n\n ```json\n GET /v3/documents?cursor=c3RyaW5nCg\n ```\n\nRepeat steps 2 and 3 until you fetch all documents. Use `page_size` parameter to control the number of items in the response list.\n" operationId: list_documents parameters: - description: 'Filters contracts by context. Possible values: - `my_documents` - returns only contracts that are directly accessible by the user (contracts owned by the user, contracts directly shared with the user or contracts where the user is a signee). - `team_documents` - returns contracts that are accessible by the user''s team members. - `workspace` - returns contracts that are accessible to the user through contract spaces. Default value is `my_documents`. If you wish to get all available contracts, just pass all 3 values. ' example: '["my_documents", "workspace"]' explode: true in: query name: context[] required: false schema: items: enum: - my_documents - team_documents - workspace type: string type: array style: form - description: Adds extra document data to the response, such as `data_fields` and full party details in: query name: full required: false schema: example: 'false' type: boolean - description: Filter by document title (case insensitive partial match) in: query name: title required: false schema: example: Employment aggrement type: string - description: Filter by document states example: '["pending", "states"]' explode: true in: query name: states[] required: false schema: items: enum: - draft - rejected - changes_requested - pending - signed - irrelevant type: string type: array style: form - description: Filter by document types example: '["draft", "contract"]' explode: true in: query name: types[] required: false schema: items: enum: - draft - stored_contract - contract type: string type: array style: form - description: Filter by tags example: '["deals", "vacation"]' explode: true in: query name: tags[] required: false schema: items: type: string type: array style: form - description: Whether to look for documents owned by the requester or not in: query name: owned required: false schema: example: 'false' type: boolean - description: Page identifier. The next page identifier will be found in the response body in: query name: cursor required: false schema: example: OGUzOTlmZjAK format: byte type: string - description: Filter by maximum date when the documents were signed (non-inclusive) in: query name: signed_at_lt required: false schema: example: '2022-01-02T00:00:00Z' format: date-time type: string - description: Filter by minimum date when the documents were signed (inclusive) example: '2022-01-02T00:00:00Z' in: query name: signed_at_gte required: false schema: format: date-time type: string - description: Filter by maximum date when the documents were updated (non-inclusive) example: '2022-01-02T00:00:00Z' in: query name: updated_at_lt required: false schema: format: date-time type: string - description: Filter by minimum date when the documents were updated (inclusive) example: '2022-01-02T00:00:00Z' in: query name: updated_at_gte required: false schema: format: date-time type: string - description: Page size. The default is 25 and the max value is 100 example: 7 in: query name: page_size required: false schema: default: 25 maximum: 100 minimum: 0 type: integer - description: Column to use for sorting the documents (defaults to `created_at`) example: title in: query name: sort_column required: false schema: default: created_at enum: - created_at - updated_at - title type: string - description: Order direction when sorting the documents example: asc in: query name: sort_direction required: false schema: default: desc enum: - asc - desc type: string - description: Filter by the ID of the integration object which the document is related to (e.g. Salesforce Opportunity ID) example: 00189000008btXMAAY in: query name: integration_object_id required: false schema: format: string type: string - description: Workspace ID where documents are contained. It should be used in combination with `context` parameter with value `workspace` in: query name: workspace_id required: false schema: example: 059fb683-a2d9-4c3a-b134-6f5e7282d499 type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/DocumentIndexResponse' description: Paginated list of documents '400': content: application/json: schema: $ref: '#/components/schemas/BadRequestError' description: Bad Request '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: Not Found '422': content: application/json: schema: $ref: '#/components/schemas/UnprocessableContentError' description: Unprocessable request summary: Get a list of documents tags: - Documents /documents/{id}: delete: callbacks: {} deprecated: false description: Deletes a document specified by ID operationId: delete_document parameters: - description: Document ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string responses: '204': content: application/json: {} description: Success '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '422': content: application/json: schema: $ref: '#/components/schemas/UnprocessableContentError' description: Unprocessable request summary: Delete a document tags: - Documents get: callbacks: {} deprecated: false description: Gets a document by ID operationId: get_document_by_id parameters: - description: Document ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/DocumentShowResponse' description: Document '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: Not Found summary: Get a document tags: - Documents patch: callbacks: {} deprecated: false description: Updates a document. Only drafts and stored contracts can be updated. operationId: update_document parameters: - description: Document ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentUpdateRequest' description: Updated document required: false responses: '201': content: application/json: schema: $ref: '#/components/schemas/DocumentShowResponse' description: Document '400': content: application/json: schema: $ref: '#/components/schemas/BadRequestError' description: Bad request '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: Not found '409': content: application/json: schema: $ref: '#/components/schemas/ConflictError' description: Conflict summary: Update a document tags: - Documents /documents/{id}/pdf: get: callbacks: {} deprecated: false description: Gets a PDF copy of a document by ID operationId: get_pdf_document_by_id parameters: - description: Document ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/DocumentPdfShowResponse' description: Document PDF '202': content: application/json: schema: $ref: '#/components/schemas/DocumentPdfShowAcceptedResponse' description: Accepted '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: Not Found '422': content: application/json: schema: $ref: '#/components/schemas/UnprocessableContentError' description: Unprocessable Entity '503': content: application/json: schema: $ref: '#/components/schemas/ServiceUnavailableError' description: Service Unavailable summary: Get a PDF copy of a document tags: - Documents /documents/{id}/send: post: callbacks: {} deprecated: false description: Sends a document in a draft state specified by ID operationId: send_document parameters: - description: Document ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentSendRequest' description: Document send parameters required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/DocumentShowResponse' description: Document '400': content: application/json: schema: $ref: '#/components/schemas/BadRequestError' description: Bad Request '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '402': content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredError' description: Payment requred '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: Not Found '422': content: application/json: schema: $ref: '#/components/schemas/UnprocessableContentError' description: Unprocessable request summary: Send a document for signature tags: - Documents /templates/{id}/create_document: post: callbacks: {} deprecated: false description: Creates a new document from a template. The template must be specified by ID. operationId: create_document_from_template parameters: - description: Template ID in: path name: id required: true schema: example: 1e013958-867e-43fb-8210-c98ab139beb6 format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentCreateRequest' description: Template override parameters required: false responses: '201': content: application/json: schema: $ref: '#/components/schemas/DocumentShowResponse' description: Success '401': content: application/json: schema: $ref: '#/components/schemas/UnauthorizedError' description: Unauthorized '403': content: application/json: schema: $ref: '#/components/schemas/ForbiddenError' description: Forbidden '404': content: application/json: schema: $ref: '#/components/schemas/NotFoundError' description: NotFound summary: Create a new document from a template tags: - Documents components: schemas: ConflictError: additionalProperties: false description: Conflict properties: error: additionalProperties: false properties: message: description: Error details message example: Conflict type: string type: description: HTTP error message example: conflict type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: ConflictError type: object DocumentIndexResponse: additionalProperties: false description: Paginated list of documents properties: documents: items: additionalProperties: false description: Preview of a document properties: active_task_count: description: Number of active tasks minimum: 0 type: integer comment_count: description: Number of comments minimum: 0 type: integer completed_task_count: description: Number of completed tasks minimum: 0 type: integer created_at: description: Date and time the document was created format: date-time type: string data_fields: description: Data fields in this document. Included only when requested with `full=true`. items: $ref: '#/components/schemas/DataField' type: array folders: description: List of folders where the document is present items: additionalProperties: false properties: accessible_by_current_user: description: Whether the folder is accessible to the current user or not type: boolean email: description: Folder's creator email format: email type: string id: anyOf: - format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string - enum: - root type: string description: Folder ID type: string shared: description: Whether the folder is shared or not type: boolean title: description: Folder title type: string required: - id type: object type: array id: description: Document ID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string ocr_status: description: OCR status of the document enum: - none - not_started - pending - success - failure example: pending nullable: true type: string owner: additionalProperties: false description: Document's owner information properties: email: description: Owner's email address format: email type: string full_name: description: Owner's full name example: Jane Doe type: string id: description: Owner's profile ID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string required: - id - email - full_name type: object parties: description: Parties and signees items: additionalProperties: false description: Party properties: address: description: Address example: 123 Main Street nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name example: Jane Doe nullable: true type: string number: description: Company's VAT number or CVR nullable: true type: string reference: description: How the party will be referred to in the document example: Recipient nullable: true type: string signees: description: Party's signees items: additionalProperties: false properties: changes_requested_at: description: Date and time when the signee requested changes to the document format: date-time nullable: true readOnly: true type: string email: description: Signee's email address format: email nullable: true type: string full_name: description: Signee's full name example: Jane Doe nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string opened_at: description: Date and time when the signee opened the document format: date-time nullable: true readOnly: true type: string order: description: Signee's signing order. When the signing order mode is set to `grouped`, then this number represents the signee's group number. minimum: 0 type: integer rejected_at: description: Date and time when the signee rejected the document format: date-time nullable: true readOnly: true type: string signature_verification_methods: description: List of allowed signature types for the signee example: - sms - basic - wet_signature items: enum: - sms - basic - wet_signature - criipto_dk_mitid_substantial - criipto_dk_mitid_business - criipto_no_bankid - criipto_se_bankid_same_device - criipto_se_bankid_another_device - criipto_fi_bankid - criipto_fi_bankid_mobile type: string nullable: true type: array signed_at: description: Date and time when the signee signed the document format: date-time nullable: true readOnly: true type: string title: description: Signee's title example: Software Engineer nullable: true type: string type: object type: array type: description: Type enum: - personal - company nullable: false type: string type: object type: array sample: default: false description: Whether this document exists for demonstration purposes or not type: boolean signed_at: description: Date and time the document was signed format: date-time nullable: true type: string signing_order_mode: description: The signing order mode. When it's set to grouped, each signee in `parties.signees`, should have the order field set to the group's number starting from 0. enum: - random - strict - grouped example: strict type: string state: description: Document state enum: - draft - rejected - changes_requested - pending - signed - irrelevant type: string tags: description: Document's tags items: example: tags type: string nullable: true type: array title: description: Document title type: string to_be_signed_by: description: Who should sign the document enum: - owner_and_others - others_only - owner_only type: string type: description: Document type enum: - draft - contract - stored_contract type: string updated_at: description: Date and time the document was last modified format: date-time type: string version: description: Version format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string visibilities: description: Document's users visibilities items: additionalProperties: false properties: email: description: Email address format: email type: string full_name: description: Full name example: Jane Doe type: string role: description: Role enum: - owner - manager - editor - filler - reviewer type: string required: - email - full_name - role type: object type: array workspace: description: Information about the workspace the document is present in nullable: true properties: id: description: Workspace ID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Workspace name type: string permissions: description: List of permissions of the current user for the workspace items: enum: - view_templates - edit_templates - manage_templates - view_documents - manage_documents - manage type: string type: array type: object title: DocumentPreview type: object type: array pagination_meta: additionalProperties: false description: Pagination metadata properties: cursor: description: Identifier of the next page format: base64 nullable: true type: string type: object title: DocumentIndexResponse type: object DocumentPdfShowResponse: additionalProperties: false description: An object with an URL to the PDF file properties: location: description: The URL, that can be used to download the PDF file format: url type: string required: - location title: DocumentPdfShowResponse type: object BadRequestError: additionalProperties: false description: Bad Request properties: error: additionalProperties: false properties: failures: description: List of request errors items: additionalProperties: false description: Error description properties: detail: description: Details of the error type: string source: additionalProperties: false properties: pointer: description: Failing field name or reference type: string required: - pointer type: object title: description: Title of the error type: string required: - title - detail type: object type: array message: description: Error details message example: Bad Request type: string type: description: HTTP error message example: bad_request type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: BadRequestError type: object DocumentShowResponse: additionalProperties: false description: A single document properties: document: additionalProperties: false properties: attachments: description: Document attachments items: additionalProperties: false description: Document attachment properties: original: description: URL of the attachment example: https://example.com/image.png format: uri type: string preview: description: If the original is a document, this field will hold a list of URLs with image previews of each page items: description: Preview URL example: https://example.com/preview.png format: url type: string type: array type: object type: array comments: description: Comments items: description: Comment properties: account: description: Account information properties: email: description: Email format: email type: string id: description: Account ID format: uuid type: string profile: additionalProperties: false description: Profile of the commenter properties: full_name: description: Full name example: Jane Doe type: string id: description: Profile ID format: uuid type: string type: object type: object body: description: Comment body or suggestion text (if it is a suggestion) type: string document_piece: description: A piece of the document text the comment relates to type: string id: description: Comment ID format: uuid type: string inserted_at: description: Creation date and time of the comment format: date-time type: string resolved: description: Whether the comment has been resolved type: boolean seen: description: Whether the comment has been seen type: boolean thread_id: description: Comment's thread ID format: uuid type: string updated_at: description: Modification date and time of the comment format: date-time type: string type: object type: array company_logo_url: description: The URL of the logo shown in the contract format: uri nullable: true type: string created_at: description: Date and time the document was created format: date-time type: string data_fields: description: Data fields in the document items: $ref: '#/components/schemas/DataField' type: array events: description: Document events items: additionalProperties: false description: Document event properties: action: description: Event action enum: - archived - changes_requested - created - downloaded - edited - edited_properties - opened - rejected - resent - sent_for_signature - shared - signature_updated - signed - task_created - task_deleted - task_status_updated - task_updated - unshared - uploaded type: string comment: description: Event comment type: string email: description: Email address of the account triggering the event format: email type: string metadata: description: Metadata type: object profile_id: description: Profile ID of the account triggering the event format: uuid type: string seen: description: Whether the event has been seen type: boolean timestamp: description: Event date and time format: date-time type: string type: object type: array id: description: Document ID format: uuid type: string language: description: Language enum: - ar - az - be - bg - bn - bs - ca - cs - cy - da - de - el - en-GB - es - et - fi - fil - fo - fr - he - hi - hr - hu - hy - id - is - it - ja - kk - ko - ku - lt - lv - mk - mr - ms - mt - my - nb - nl - pa - pl - pt - ro - ru - sk - sl - so - sq - sr - sr-Latn-ME - sv - sw - ta - th - tr - uk - ur - vi - zh example: uk type: string ocr_status: description: OCR status of the document enum: - none - not_started - pending - success - failure example: none nullable: true type: string owner: additionalProperties: false description: Document's owner information properties: email: description: Owner's email address format: email type: string full_name: description: Owner's full name example: Jane Doe type: string id: description: Owner's profile ID format: uuid type: string type: object parties: description: Parties and signees items: additionalProperties: false description: Party properties: address: description: Address example: 123 Main Street nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name example: Jane Doe nullable: true type: string number: description: Company's VAT number or CVR nullable: true type: string reference: description: How the party will be referred to in the document example: Sender nullable: true type: string signees: description: Party's signees items: additionalProperties: false properties: changes_requested_at: description: Date and time when the signee requested changes to the document format: date-time nullable: true readOnly: true type: string email: description: Signee's email address format: email nullable: true type: string full_name: description: Signee's full name example: Jane Doe nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string opened_at: description: Date and time when the signee opened the document format: date-time nullable: true readOnly: true type: string order: description: Signee's signing order. When the signing order mode is set to `grouped`, then this number represents the signee's group number. minimum: 0 type: integer rejected_at: description: Date and time when the signee rejected the document format: date-time nullable: true readOnly: true type: string signature_verification_methods: description: List of allowed signature types for the signee example: - sms - basic - wet_signature items: enum: - sms - basic - wet_signature - criipto_dk_mitid_substantial - criipto_dk_mitid_business - criipto_no_bankid - criipto_se_bankid_same_device - criipto_se_bankid_another_device - criipto_fi_bankid - criipto_fi_bankid_mobile type: string nullable: true type: array signed_at: description: Date and time when the signee signed the document format: date-time nullable: true readOnly: true type: string title: description: Signee's title example: Software Engineer nullable: true type: string type: object type: array type: description: Type enum: - personal - company nullable: false type: string type: object type: array sample: default: false description: Whether this document exists for demonstration purposes or not type: boolean shared: description: Whether the document is shared or not type: boolean signed_at: description: Date and time the document was signed format: date-time nullable: true type: string signing_order_mode: description: The signing order mode. When it's set to grouped, each signee in `parties.signees`, should have the order field set to the group's number starting from 0. enum: - random - strict - grouped example: grouped type: string source_template_id: description: ID of the template this document was created from format: uuid nullable: true type: string state: description: Document state enum: - draft - rejected - changes_requested - pending - signed - irrelevant type: string tags: description: Document's tags items: example: tags type: string nullable: true type: array template: description: Template nullable: true type: object title: description: Document title type: string to_be_signed_by: description: Who should sign the document enum: - owner_and_others - others_only - owner_only nullable: true type: string type: description: Document type enum: - draft - contract - stored_contract type: string updated_at: description: Date and time the document was last modified format: date-time type: string version: description: Version format: uuid nullable: true type: string visibilities: description: Document's users visibilities items: additionalProperties: false properties: email: description: Email address format: email type: string full_name: description: Full name example: Jane Doe type: string role: description: Role enum: - owner - manager - editor - filler - reviewer type: string type: object type: array workspace: description: Information about the workspace the document is present in nullable: true properties: id: description: Workspace ID format: uuid maxLength: 36 minLength: 36 pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Workspace name type: string permissions: description: List of permissions of the current user for the workspace items: enum: - view_documents - manage_documents - manage type: string type: array type: object title: DocumentShowResponse type: object NotFoundError: additionalProperties: false description: Not Found properties: error: additionalProperties: false properties: message: description: Error details message example: Not Found type: string type: description: HTTP error message example: not_found type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: NotFoundError type: object DataField: description: Data field properties: config: additionalProperties: false description: Additional config for this data field. Contains `options` for `select`, or `label` for `checkbox`. nullable: false properties: label: nullable: true required: false type: string options: items: type: string required: false type: array type: object description: description: Description nullable: true type: string formatting: additionalProperties: false description: Formatting nullable: true properties: fractional: nullable: true type: boolean grouping: enum: - '' - dot - comma - space nullable: true type: string type: object id: description: Unique ID format: uuid nullable: false pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name nullable: false type: string required: description: Whether this data field must be filled to send the document for signature type: boolean source: description: Source of data for this data field enum: - drafter_questionnaire - ai - salesforce nullable: true type: string source_mapping: description: Integration data mapping for this data field. Revealed only when connected to the same integration instance. nullable: true type: string source_sync_type: description: Integration sync mode for this data field. Revealed only when connected to the same integration instance. enum: - downstream - upstream - bidirectional nullable: true type: string type: description: Type enum: - text - number - date - select - checkbox nullable: false type: string value: description: Value nullable: true type: string required: - id - value - formatting - description - config - name - type - required - source - source_mapping - source_sync_type title: DataField type: object DocumentSendRequest: additionalProperties: false description: Document send parameters properties: autosign: default: true description: "Whether to automatically sign the document by the sending party during sending.\n\nThis flag will work only if owner of the account which holds the API key is\none of the signees and:\n\n1. The order of signatures on the document is set to:\n - `random`.\n - `strict` and the owner is the first signee.\n - `grouped` and the owner is in the first group of signees.\n2. The owner signature method is any of the following:\n - SMS (`sms`)\n - sign with a click (`basic`)\n" type: boolean title: DocumentSendRequest type: object UnprocessableContentError: additionalProperties: false description: Unprocessable Content properties: error: additionalProperties: false properties: failures: description: List of request errors items: additionalProperties: false description: Error description properties: detail: description: Details of the error type: string source: additionalProperties: false properties: pointer: description: Failing field name or reference type: string required: - pointer type: object title: description: Title of the error type: string required: - title - detail type: object type: array message: description: Error details message example: Unprocessable Content type: string type: description: HTTP error message example: unprocessable_entity type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: UnprocessableContentError type: object DocumentPdfShowAcceptedResponse: additionalProperties: false description: Used to indicate the PDF is not yet ready for download properties: message: description: Information message containing details type: string title: DocumentPdfShowAcceptedResponse type: object PaymentRequiredError: additionalProperties: false description: Payment Required properties: error: additionalProperties: false properties: message: description: Error details message example: Payment Required type: string type: description: HTTP error message example: payment_required type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: PaymentRequiredError type: object ServiceUnavailableError: additionalProperties: false description: Service Unavailable properties: error: additionalProperties: false properties: message: description: Error details message example: Service Unavailable type: string type: description: HTTP error message example: service_unavailable type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: ServiceUnavailableError type: object DocumentCreateRequest: additionalProperties: false description: Used to create document draft from a template properties: document: additionalProperties: false description: Document parameters properties: attachments: description: Document attachments items: additionalProperties: false description: Document attachment properties: filename: description: 'Optional attachment name. We will use it when the user downloads the attachment, as well as display it next to the attachment in the app and in the PDF. ' example: Document attachment 1 nullable: true type: string original: description: URL of the attachment example: https://example.com/image.png format: uri type: string preview: description: 'If the original is a document, this field will hold an list URL with image previews of each page ' items: description: Preview URL example: https://example.com/preview.png format: url type: string type: array type: object nullable: true type: array attachments_signed_separately: description: Indicates if the attachments should be signed and sealed separately example: true type: boolean company_logo_url: description: The URL of the logo shown in the contract format: uri nullable: true type: string data_fields: description: Data fields in the document items: description: Create or update data field schema properties: config: additionalProperties: false description: Additional config for this data field. Contains `options` for `select`, or `label` for `checkbox`. nullable: false properties: label: nullable: true required: false type: string options: items: type: string required: false type: array type: object description: description: Description nullable: true type: string formatting: additionalProperties: false description: Formatting nullable: true properties: fractional: nullable: true type: boolean grouping: enum: - '' - dot - comma - space nullable: true type: string type: object id: description: Unique ID format: uuid nullable: false pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name nullable: false type: string required: description: Whether this data field must be filled to send the document for signature type: boolean source: description: Source of data for this data field enum: - drafter_questionnaire - ai - salesforce nullable: true type: string source_mapping: description: Integration data mapping for this data field. Revealed only when connected to the same integration instance. nullable: true type: string source_sync_type: description: Integration sync mode for this data field. Revealed only when connected to the same integration instance. enum: - downstream - upstream - bidirectional nullable: true type: string type: description: Type enum: - text - number - date - select - checkbox nullable: false type: string value: description: Value nullable: true type: string required: - value - name - type title: DataFieldCreateOrUpdate type: object type: array dynamic_tables: items: additionalProperties: false description: Fill the data of the dynamic tables placeholders placed inside your template properties: attrs: description: Attributes of the dynamic table properties: columns: description: Column names items: description: Column name type: string type: array id: description: Dynamic table ID type: string rows: description: Data for the table rows items: description: Table row items: description: Cell value type: string type: array type: array required: - id - columns - rows type: object required: - attrs type: object type: array language: description: Language example: en nullable: true type: string message: additionalProperties: false properties: content: description: Message content example: Hello! type: string type: object parties: description: Parties and signees items: additionalProperties: false description: Party properties: address: description: Address example: 123 Main Street nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name example: Jane Doe nullable: true type: string number: description: Company's VAT number or CVR nullable: true type: string reference: description: How the party will be referred to in the document example: Sender nullable: true type: string signees: description: Party's signees items: additionalProperties: false properties: changes_requested_at: description: Date and time when the signee requested changes to the document format: date-time nullable: true readOnly: true type: string email: description: Signee's email address format: email nullable: true type: string full_name: description: Signee's full name example: Jane Doe nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string opened_at: description: Date and time when the signee opened the document format: date-time nullable: true readOnly: true type: string order: description: Signee's signing order. When the signing order mode is set to `grouped`, then this number represents the signee's group number. minimum: 0 type: integer rejected_at: description: Date and time when the signee rejected the document format: date-time nullable: true readOnly: true type: string signature_verification_methods: description: List of allowed signature types for the signee example: - sms - basic - wet_signature items: enum: - sms - basic - wet_signature - criipto_dk_mitid_substantial - criipto_dk_mitid_business - criipto_no_bankid - criipto_se_bankid_same_device - criipto_se_bankid_another_device - criipto_fi_bankid - criipto_fi_bankid_mobile type: string nullable: true type: array signed_at: description: Date and time when the signee signed the document format: date-time nullable: true readOnly: true type: string title: description: Signee's title example: Software Engineer nullable: true type: string type: object type: array type: description: Type enum: - personal - company nullable: false type: string type: object type: array signing_order_mode: description: The signing order mode. When it's set to grouped, each signee in `parties.signees`, should have the order field set to the group's number starting from 0. enum: - random - strict - grouped example: strict type: string tags: description: Document's tags items: example: tags minLength: 1 type: string nullable: false type: array title: description: Document title type: string to_be_signed_by: description: Who should sign the document enum: - owner_and_others - others_only - owner_only example: owner_only type: string version: description: 'The version has to be provided on update and match the latest document''s version. You can get it from the response when you get a document by ID. It is also available in the response from document create or update actions. ' format: uuid nullable: false pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string title: DocumentUpdateAttibutes type: object title: DocumentCreateRequest type: object DocumentUpdateRequest: additionalProperties: false description: Used to update the document properties: document: additionalProperties: false description: Document parameters properties: attachments: description: Document attachments items: additionalProperties: false description: Document attachment properties: filename: description: 'Optional attachment name. We will use it when the user downloads the attachment, as well as display it next to the attachment in the app and in the PDF. ' example: Document attachment 1 nullable: true type: string original: description: URL of the attachment example: https://example.com/image.png format: uri type: string preview: description: 'If the original is a document, this field will hold an list URL with image previews of each page ' items: description: Preview URL example: https://example.com/preview.png format: url type: string type: array type: object nullable: true type: array attachments_signed_separately: description: Indicates if the attachments should be signed and sealed separately example: true type: boolean company_logo_url: description: The URL of the logo shown in the contract format: uri nullable: true type: string data_fields: description: Data fields in the document items: description: Create or update data field schema properties: config: additionalProperties: false description: Additional config for this data field. Contains `options` for `select`, or `label` for `checkbox`. nullable: false properties: label: nullable: true required: false type: string options: items: type: string required: false type: array type: object description: description: Description nullable: true type: string formatting: additionalProperties: false description: Formatting nullable: true properties: fractional: nullable: true type: boolean grouping: enum: - '' - dot - comma - space nullable: true type: string type: object id: description: Unique ID format: uuid nullable: false pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name nullable: false type: string required: description: Whether this data field must be filled to send the document for signature type: boolean source: description: Source of data for this data field enum: - drafter_questionnaire - ai - salesforce nullable: true type: string source_mapping: description: Integration data mapping for this data field. Revealed only when connected to the same integration instance. nullable: true type: string source_sync_type: description: Integration sync mode for this data field. Revealed only when connected to the same integration instance. enum: - downstream - upstream - bidirectional nullable: true type: string type: description: Type enum: - text - number - date - select - checkbox nullable: false type: string value: description: Value nullable: true type: string required: - value - name - type title: DataFieldCreateOrUpdate type: object type: array dynamic_tables: items: additionalProperties: false description: Fill the data of the dynamic tables placeholders placed inside your template properties: attrs: description: Attributes of the dynamic table properties: columns: description: Column names items: description: Column name type: string type: array id: description: Dynamic table ID type: string rows: description: Data for the table rows items: description: Table row items: description: Cell value type: string type: array type: array required: - id - columns - rows type: object required: - attrs type: object type: array language: description: Language example: en nullable: true type: string message: additionalProperties: false properties: content: description: Message content example: Hello! type: string type: object parties: description: Parties and signees items: additionalProperties: false description: Party properties: address: description: Address example: 123 Main Street nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string name: description: Name example: Jane Doe nullable: true type: string number: description: Company's VAT number or CVR nullable: true type: string reference: description: How the party will be referred to in the document example: Sender nullable: true type: string signees: description: Party's signees items: additionalProperties: false properties: changes_requested_at: description: Date and time when the signee requested changes to the document format: date-time nullable: true readOnly: true type: string email: description: Signee's email address format: email nullable: true type: string full_name: description: Signee's full name example: Jane Doe nullable: true type: string id: description: Unique ID format: uuid nullable: true pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string opened_at: description: Date and time when the signee opened the document format: date-time nullable: true readOnly: true type: string order: description: Signee's signing order. When the signing order mode is set to `grouped`, then this number represents the signee's group number. minimum: 0 type: integer rejected_at: description: Date and time when the signee rejected the document format: date-time nullable: true readOnly: true type: string signature_verification_methods: description: List of allowed signature types for the signee example: - sms - basic - wet_signature items: enum: - sms - basic - wet_signature - criipto_dk_mitid_substantial - criipto_dk_mitid_business - criipto_no_bankid - criipto_se_bankid_same_device - criipto_se_bankid_another_device - criipto_fi_bankid - criipto_fi_bankid_mobile type: string nullable: true type: array signed_at: description: Date and time when the signee signed the document format: date-time nullable: true readOnly: true type: string title: description: Signee's title example: Software Engineer nullable: true type: string type: object type: array type: description: Type enum: - personal - company nullable: false type: string type: object type: array signing_order_mode: description: The signing order mode. When it's set to grouped, each signee in `parties.signees`, should have the order field set to the group's number starting from 0. enum: - random - strict - grouped example: grouped type: string tags: description: Document's tags items: example: tags minLength: 1 type: string nullable: false type: array title: description: Document title type: string to_be_signed_by: description: Who should sign the document enum: - owner_and_others - others_only - owner_only example: owner_only type: string version: description: 'The version has to be provided on update and match the latest document''s version. You can get it from the response when you get a document by ID. It is also available in the response from document create or update actions. ' format: uuid nullable: false pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ type: string title: DocumentUpdateAttibutes type: object required: - document title: DocumentUpdateRequest type: object UnauthorizedError: additionalProperties: false description: Unauthorized properties: error: additionalProperties: false properties: message: description: Error details message example: Unauthorized type: string type: description: HTTP error message example: unauthorized type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: UnauthorizedError type: object ForbiddenError: additionalProperties: false description: Forbidden properties: error: additionalProperties: false properties: message: description: Error details message example: Forbidden type: string type: description: HTTP error message example: forbidden type: string readOnly: true required: - type - message type: object readOnly: true required: - error title: ForbiddenError type: object securitySchemes: authorization: scheme: bearer type: http