# Table of Contents - [Documentation | DocuSeal](#documentation-docuseal) - [Embedded Signature Maker | DocuSeal Docs](#embedded-signature-maker-docuseal-docs) - [Update DocuSeal on Render | DocuSeal Docs](#update-docuseal-on-render-docuseal-docs) - [Welcome to DocuSeal | DocuSeal Docs](#welcome-to-docuseal-docuseal-docs) - [Update DocuSeal to the latest version in Docker | DocuSeal Docs](#update-docuseal-to-the-latest-version-in-docker-docuseal-docs) - [Configuring with environment variables | DocuSeal Docs](#configuring-with-environment-variables-docuseal-docs) - [Update DocuSeal on Heroku | DocuSeal Docs](#update-docuseal-on-heroku-docuseal-docs) - [Update DocuSeal on Railway | DocuSeal Docs](#update-docuseal-on-railway-docuseal-docs) - [Deploying DocuSeal on Azure web apps | DocuSeal Docs](#deploying-docuseal-on-azure-web-apps-docuseal-docs) - [Deploying DocuSeal on Google Cloud Run | DocuSeal Docs](#deploying-docuseal-on-google-cloud-run-docuseal-docs) - [Embedded Signing Form | DocuSeal Docs](#embedded-signing-form-docuseal-docs) - [Update DocuSeal on DigitalOcean | DocuSeal Docs](#update-docuseal-on-digitalocean-docuseal-docs) - [On-premises server requirements | DocuSeal Docs](#on-premises-server-requirements-docuseal-docs) - [Configuring SAML with Okta | DocuSeal Docs](#configuring-saml-with-okta-docuseal-docs) - [Configuring DocuSeal behind an existing Reverse proxy (nginx) | DocuSeal Docs](#configuring-docuseal-behind-an-existing-reverse-proxy-nginx-docuseal-docs) - [Convert legacy .p12 .pfx files to support OpenSSL 3 | DocuSeal Docs](#convert-legacy-p12-pfx-files-to-support-openssl-3-docuseal-docs) - [Embedded Form Builder | DocuSeal Docs](#embedded-form-builder-docuseal-docs) - [Configuring SAML with Keycloak | DocuSeal Docs](#configuring-saml-with-keycloak-docuseal-docs) - [Configure SAML with Authentic | DocuSeal Docs](#configure-saml-with-authentic-docuseal-docs) - [Configuring SAML with Google Workspace | DocuSeal Docs](#configuring-saml-with-google-workspace-docuseal-docs) - [Configuring SAML with Microsoft Entra ID | DocuSeal Docs](#configuring-saml-with-microsoft-entra-id-docuseal-docs) - [API Reference | DocuSeal Docs](#api-reference-docuseal-docs) --- # Documentation | DocuSeal Welcome to the DocuSeal Documentation Hub ========================================= Ask AI [Developer Guides\ ----------------\ \ Step-by-step guides on DocuSeal's functionalities. Learn to set up, integrate, and optimize your document processes efficiently.\ \ Open](https://www.docuseal.com/guides) [API and Webhooks\ ----------------\ \ Detailed documentation on DocuSeal's API endpoints and webhook configurations.\ \ Open](https://www.docuseal.com/docs/api) [Embedded\ --------\ \ Documentation and examples of how to integrate a signing form and document builder\ \ Open](https://www.docuseal.com/docs/embedded/form) [How-To's\ --------\ \ Detailed tutorials on how to use DocuSeal features.\ \ Open](https://www.docuseal.com/resources) [On-premises\ -----------\ \ Documentation and guides specifically for on-premises deployment.\ \ Open](https://www.docuseal.com/docs/welcome-to-docuseal) Community and Support --------------------- Engage with our developer community for insights, troubleshooting, and best practices. [Join Now](https://discord.gg/qygYCDGck9) --- # Embedded Signature Maker | DocuSeal Docs Menu Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied [Signing Form](https://www.docuseal.com/docs/embedded/form) [Form Builder](https://www.docuseal.com/docs/embedded/builder) [Signature Maker](https://www.docuseal.com/docs/embedded/signature) This component allows you to seamlessly add drawing signature functionality to your website or mobile app. It supports [JS+HTML](https://github.com/docusealco/signature-maker-js) , [Vue](https://github.com/docusealco/signature-maker-vue) and [React](https://github.com/docusealco/signature-maker-react) . * JavaScript * React * Vue Copy Copied [View LIVE DEMO](https://www.docuseal.com/docs/embedded/signature#live_example) ### Attributes data-download-on-save Boolean Set \`false\` to disable downloading the signature image on save. It's useful when you want to handle the image data yourself. Default: false data-with-typed Boolean Set \`false\` to disable text signature input panel. Default: true data-with-drawn Boolean Set \`false\` to disable drawing signature panel. Default: true data-with-upload Boolean Set \`false\` to disable uploading signature image panel. Default: true data-with-color-select Boolean Set \`false\` to disable color selection. Only black color will be available. Default: true data-with-submit Boolean Set \`false\` to disable the submit button. Any changes will be available as a base64 string in the \`change\` event. Custom event 'save' will be triggered on clicking the submit button. Default: true data-save-button-text String Default: Submit data-control-buttons-container-class String Custom CSS class for the control buttons container. Example: flex gap-2 data-control-buttons-container-style String Custom CSS styles for the control buttons container. Default CSS styles will be disabled Default: display: flex; align-items: center; justify-content: space-between; text-align: center; margin: 1rem 0; data-save-button-class String Custom CSS class for the save button Example: btn btn-neutral text-white text-base w-full data-save-button-style String Custom CSS styles for the save button Default: color: #ffffff; font-family: ui-sans-serif, system-ui, sans-serif font-size: 16px; font-weight: 600; line-height: 24px; padding: 0px 16px; text-transform: uppercase; background-color: #222222; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; text-decoration-line: none; width: 100%; border: 1px solid #222222; data-save-button-disabled-class String Custom CSS class for the disabled save button. Example: btn-disabled data-save-button-disabled-style String Custom CSS styles for the disabled save button. Default: background-color: #D3D3D3; color: #808080; cursor: not-allowed; border: 0; data-undo-button-text String Default: Undo data-undo-button-class String Custom CSS class for the undo button. Example: btn btn-outline btn-sm font-medium data-undo-button-style String Custom CSS styles for the undo button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; data-clear-button-text String Custom text for the clear button. Default: Clear data-clear-button-class String Custom CSS class for the clear button. Example: btn btn-outline btn-sm font-medium data-clear-button-style String Custom CSS styles for the clear button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; data-text-input-placeholder String Custom placeholder text for the text input field. Default: Type signature here data-text-input-class String Custom CSS class for the text input field. Example: input mb-4 input-bordered bg-white text-2xl w-full h-14 rounded-2xl data-text-input-style String Custom CSS styles for the text input field. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 24px; font-weight: 400; line-height: 32px; margin: 0px 0px 16px; padding: 0px 16px; background-color: #ffffff; border-radius: 8px; flex-shrink: 1; height: 56px; outline: #222222 none 0px; outline-offset: 0px; width: 100%; text-align: start; border: 1px solid #D3D3D3; data-canvas-class String Custom CSS class for the canvas element. Example: bg-white border border-base-300 rounded-2xl w-full data-canvas-style String Custom CSS styles for the canvas element. Default: display: block; vertical-align: middle; width: 100%; border-radius: 8px; background-color: #ffffff; padding: 1px; touch-action: none; user-select: none; text-align: center; line-height: 24px; border: 1px solid #D3D3D3; data-type-buttons-container-class String Custom CSS class for the type buttons container. Example: flex gap-2 mb-4 justify-center data-type-buttons-container-style String Custom CSS styles for the type buttons container. Default: margin-bottom: 1rem; display: flex; justify-content: center; flex-wrap: wrap; gap: 0.5rem; data-draw-type-button-text String Custom text for the draw type button. Default: Draw data-draw-type-button-class String Custom CSS class for the draw type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold data-draw-type-button-style String Custom CSS styles for the draw type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; data-draw-type-button-active-class String Custom CSS class for the active draw type button. Example: bg-neutral text-white font-semibold data-draw-type-button-active-style String Custom CSS styles for the active draw type button. Default: color: #fff; background-color: #222222; font-weight: 500; data-text-type-button-text String Custom text for the text type button. Default: Type data-text-type-button-class String Custom CSS class for the text type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold data-text-type-button-style String Custom CSS styles for the text type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; data-text-type-button-active-class String Custom CSS class for the active text type button. Example: bg-neutral text-white font-semibold data-text-type-button-active-style String Custom CSS styles for the active text type button. Default: color: #fff; background-color: #222222; font-weight: 500; data-upload-type-button-text String Custom text for the upload type button. Default: Type data-upload-type-button-class String Custom CSS class for the upload type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold data-upload-type-button-style String Custom CSS styles for the upload type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; data-upload-type-button-active-class String Custom CSS class for the active upload type button. Example: bg-neutral text-white font-semibold data-upload-type-button-active-style String Custom CSS styles for the active upload type button. Default: color: #fff; background-color: #222222; font-weight: 500; data-font-url String Custom font URL to be used for the text signature input panel. Default: https://cdn.jsdelivr.net/npm/@fontsource/dancing-script/files/dancing-script-latin-400-normal.woff ### Callbacks change Event Custom event to be triggered every time a change to the signature is made. Example: document.querySelector('signature-maker').addEventListener('change', (e) => e.detail) save Event Custom event to be triggered on saving changes of the signature. data-with-submit attribute should be enabled to trigger this event. Example: document.querySelector('signature-maker').addEventListener('save', (e) => e.detail) Copy Copied import React from 'react' import { SignatureMaker } from '@docuseal/signature-maker-react' export function App() { return (
console.log(data)} onChange={(data) => console.log(data)} />
); } [View LIVE DEMO](https://www.docuseal.com/docs/embedded/signature#live_example) ### Attributes downloadOnSave Boolean Set \`false\` to disable downloading the signature image on save. It's useful when you want to handle the image data yourself. Default: false withTyped Boolean Set \`false\` to disable text signature input panel. Default: true withDrawn Boolean Set \`false\` to disable drawing signature panel. Default: true withUpload Boolean Set \`false\` to disable uploading signature image panel. Default: true withColorSelect Boolean Set \`false\` to disable color selection. Only black color will be available. Default: true withSubmit Boolean Set \`false\` to disable the submit button. Any changes will be available as a base64 string in the \`change\` event. Custom event 'save' will be triggered on clicking the submit button. Default: true saveButtonText String Default: Submit controlButtonsContainerClass String Custom CSS class for the control buttons container. Example: flex gap-2 controlButtonsContainerStyle String Custom CSS styles for the control buttons container. Default CSS styles will be disabled Default: display: flex; align-items: center; justify-content: space-between; text-align: center; margin: 1rem 0; saveButtonClass String Custom CSS class for the save button Example: btn btn-neutral text-white text-base w-full saveButtonStyle String Custom CSS styles for the save button Default: color: #ffffff; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 600; line-height: 24px; padding: 0px 16px; text-transform: uppercase; background-color: #222222; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; text-decoration-line: none; width: 100%; border: 1px solid #222222; saveButtonDisabledClass String Custom CSS class for the disabled save button. Example: btn-disabled saveButtonDisabledStyle String Custom CSS styles for the disabled save button. Default: background-color: #D3D3D3; color: #808080; cursor: not-allowed; border: 0; undoButtonText String Default: Undo undoButtonClass String Custom CSS class for the undo button. Example: btn btn-outline btn-sm font-medium undoButtonStyle String Custom CSS styles for the undo button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; clearButtonText String Custom text for the clear button. Default: Clear clearButtonClass String Custom CSS class for the clear button. Example: btn btn-outline btn-sm font-medium clearButtonStyle String Custom CSS styles for the clear button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; textInputPlaceholder String Custom placeholder text for the text input field. Default: Type signature here textInputClass String Custom CSS class for the text input field. Example: input mb-4 input-bordered bg-white text-2xl w-full h-14 rounded-2xl textInputStyle String Custom CSS styles for the text input field. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 24px; font-weight: 400; line-height: 32px; margin: 0px 0px 16px; padding: 0px 16px; background-color: #ffffff; border-radius: 8px; flex-shrink: 1; height: 56px; outline: #222222 none 0px; outline-offset: 0px; width: 100%; text-align: start; border: 1px solid #D3D3D3; canvasClass String Custom CSS class for the canvas element. Example: bg-white border border-base-300 rounded-2xl w-full canvasStyle String Custom CSS styles for the canvas element. Default: display: block; vertical-align: middle; width: 100%; border-radius: 8px; background-color: #ffffff; padding: 1px; touch-action: none; user-select: none; text-align: center; line-height: 24px; border: 1px solid #D3D3D3; typeButtonsContainerClass String Custom CSS class for the type buttons container. Example: flex gap-2 mb-4 justify-center typeButtonsContainerStyle String Custom CSS styles for the type buttons container. Default: margin-bottom: 1rem; display: flex; justify-content: center; flex-wrap: wrap; gap: 0.5rem; drawTypeButtonText String Custom text for the draw type button. Default: Draw drawTypeButtonClass String Custom CSS class for the draw type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold drawTypeButtonStyle String Custom CSS styles for the draw type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; drawTypeButtonActiveClass String Custom CSS class for the active draw type button. Example: bg-neutral text-white font-semibold drawTypeButtonActiveStyle String Custom CSS styles for the active draw type button. Default: color: #fff; background-color: #222222; font-weight: 500; textTypeButtonText String Custom text for the text type button. Default: Type textTypeButtonClass String Custom CSS class for the text type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold textTypeButtonStyle String Custom CSS styles for the text type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; textTypeButtonActiveClass String Custom CSS class for the active text type button. Example: bg-neutral text-white font-semibold textTypeButtonActiveStyle String Custom CSS styles for the active text type button. Default: color: #fff; background-color: #222222; font-weight: 500; uploadTypeButtonText String Custom text for the upload type button. Default: Upload uploadTypeButtonClass String Custom CSS class for the upload type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold uploadTypeButtonStyle String Custom CSS styles for the upload type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; uploadTypeButtonActiveClass String Custom CSS class for the active upload type button. Example: bg-neutral text-white font-semibold uploadTypeButtonActiveStyle String Custom CSS styles for the active upload type button. Default: color: #fff; background-color: #222222; font-weight: 500; fontUrl String Custom font URL to be used for the text signature input panel. Default: https://cdn.jsdelivr.net/npm/@fontsource/dancing-script/files/dancing-script-latin-400-normal.woff ### Callbacks onChange Function Function to be called when changes are made to the signature. Example: (data) => { console.log(data) } onSave Function Function to be called on saving changes of the signature. withSubmit attribute should be enabled to trigger this function. Example: (data) => { console.log(data) } Copy Copied [View LIVE DEMO](https://www.docuseal.com/docs/embedded/signature#live_example) ### Attributes download-on-save Boolean Set \`false\` to disable downloading the signature image on save. It's useful when you want to handle the image data yourself. Default: false with-typed Boolean Set \`false\` to disable text signature input panel. Default: true with-drawn Boolean Set \`false\` to disable drawing signature panel. Default: true with-upload Boolean Set \`false\` to disable uploading signature image panel. Default: true with-color-select Boolean Set \`false\` to disable color selection. Only black color will be available. Default: true with-submit Boolean Set \`false\` to disable the submit button. Any changes will be available as a base64 string in the \`change\` event. Custom event 'save' will be triggered on clicking the submit button. Default: true save-button-text String Default: Submit control-buttons-container-class String Custom CSS class for the control buttons container. Example: flex gap-2 control-buttons-container-style String Custom CSS styles for the control buttons container. Default CSS styles will be disabled Default: display: flex; align-items: center; justify-content: space-between; text-align: center; margin: 1rem 0; save-button-class String Custom CSS class for the save button Example: btn btn-neutral text-white text-base w-full save-button-style String Custom CSS styles for the save button Default: color: #ffffff; font-family: ui-sans-serif, system-ui, sans-serif font-size: 16px; font-weight: 600; line-height: 24px; padding: 0px 16px; text-transform: uppercase; background-color: #222222; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; text-decoration-line: none; width: 100%; border: 1px solid #222222; save-button-disabled-class String Custom CSS class for the disabled save button. Example: btn-disabled save-button-disabled-style String Custom CSS styles for the disabled save button. Default: background-color: #D3D3D3; color: #808080; cursor: not-allowed; border: 0; undo-button-text String Default: Undo undo-button-class String Custom CSS class for the undo button. Example: btn btn-outline btn-sm font-medium undo-button-style String Custom CSS styles for the undo button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; clear-button-text String Custom text for the clear button. Default: Clear clear-button-class String Custom CSS class for the clear button. Example: btn btn-outline btn-sm font-medium clear-button-style String Custom CSS styles for the clear button. Default: color: #222222; background-color: transparent; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14px; font-weight: 500; line-height: 14px; padding: 0px 12px; text-transform: uppercase; appearance: button; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 32px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; text-input-placeholder String Custom placeholder text for the text input field. Default: Type signature here text-input-class String Custom CSS class for the text input field. Example: input mb-4 input-bordered bg-white text-2xl w-full h-14 rounded-2xl text-input-style String Custom CSS styles for the text input field. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 24px; font-weight: 400; line-height: 32px; margin: 0px 0px 16px; padding: 0px 16px; background-color: #ffffff; border-radius: 8px; flex-shrink: 1; height: 56px; outline: #222222 none 0px; outline-offset: 0px; width: 100%; text-align: start; border: 1px solid #D3D3D3; canvas-class String Custom CSS class for the canvas element. Example: bg-white border border-base-300 rounded-2xl w-full canvas-style String Custom CSS styles for the canvas element. Default: display: block; vertical-align: middle; width: 100%; border-radius: 8px; background-color: #ffffff; padding: 1px; touch-action: none; user-select: none; text-align: center; line-height: 24px; border: 1px solid #D3D3D3; type-buttons-container-class String Custom CSS class for the type buttons container. Example: flex gap-2 mb-4 justify-center type-buttons-container-style String Custom CSS styles for the type buttons container. Default: margin-bottom: 1rem; display: flex; justify-content: center; flex-wrap: wrap; gap: 0.5rem; draw-type-button-text String Custom text for the draw type button. Default: Draw draw-type-button-class String Custom CSS class for the draw type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold draw-type-button-style String Custom CSS styles for the draw type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; draw-type-button-active-class String Custom CSS class for the active draw type button. Example: bg-neutral text-white font-semibold draw-type-button-active-style String Custom CSS styles for the active draw type button. Default: color: #fff; background-color: #222222; font-weight: 500; text-type-button-text String Custom text for the text type button. Default: Type text-type-button-class String Custom CSS class for the text type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold text-type-button-style String Custom CSS styles for the text type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; text-type-button-active-class String Custom CSS class for the active text type button. Example: bg-neutral text-white font-semibold text-type-button-active-style String Custom CSS styles for the active text type button. Default: color: #fff; background-color: #222222; font-weight: 500; upload-type-button-text String Custom text for the upload type button. Default: Type upload-type-button-class String Custom CSS class for the upload type button. Example: flex items-center justify-center py-3 w-40 uppercase border-neutral-focus space-x-2 border rounded-3xl cursor-pointer hover:bg-neutral hover:text-white hover:font-semibold upload-type-button-style String Custom CSS styles for the upload type button. Default: color: #222222; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 16px; font-weight: 500; line-height: 24px; padding: 0px 40px; text-transform: uppercase; background-color: transparent; cursor: pointer; align-items: center; border-radius: 8px; gap: 8px; display: inline-flex; flex-shrink: 0; flex-wrap: wrap; height: 48px; justify-content: center; outline-color: #222222; text-align: center; border: 1px solid #222222; upload-type-button-active-class String Custom CSS class for the active upload type button. Example: bg-neutral text-white font-semibold upload-type-button-active-style String Custom CSS styles for the active upload type button. Default: color: #fff; background-color: #222222; font-weight: 500; font-url String Custom font URL to be used for the text signature input panel. Default: https://cdn.jsdelivr.net/npm/@fontsource/dancing-script/files/dancing-script-latin-400-normal.woff ### Callbacks @save Function Function to be called on saving the signature. data-with-submit attribute should be enabled to trigger this function. Example: onSignatureSave @change Function Function to be called on changing the signature. Example: onSignatureChange Live Example ------------ Text Signature Drawing Signature Upload Signature Color Selection Submit Button Download on Save --- # Update DocuSeal on Render | DocuSeal Docs Menu Update DocuSeal on Render ========================= **Step 1: Open the dashboard and select the deployed DocuSeal instance** To begin, go to the following link to access the dashboard https://dashboard.render.com/blueprints **Step 2: Select the deployed DocuSeal instance** In the table of instances, locate and click on the deployed DocuSeal instance that you wish to update. **Step 3: Click on the “Manual Deploy” drop-down menu** Once you are on the instance dashboard, locate and click on the “Manual Deploy” drop-down menu. It should be located in the top right corner of the page. **Step 4: Wait for the deployment process to complete** Please wait patiently for it to complete. The time taken for deployment may vary depending on the complexity of the application. Once the deployment process is finished, your DocuSeal instance will be successfully deployed and ready to use. You can now access and utilize it as needed. --- # Welcome to DocuSeal | DocuSeal Docs Menu Welcome to DocuSeal =================== DocuSeal is an open-source platform that provides a secure and efficient solution for digital document signing and processing. It’s a modern web platform that allows you to create, fill, and sign digital documents, offering a user-friendly alternative to platforms like DocuSign and PandaDoc. Key Features ------------ * **PDF Form Builder**: A powerful WYSIWYG builder allows you to create complex fillable PDF forms. With 10 field types available, such as Checkbox, Image, Date, Multi-select, and Cells, you can customize your forms to fit your needs. * **Multiple Submitters**: DocuSeal supports multiple submitters per document. Two or more parties can review, fill, and sign the documents. Each of them will receive their own copy of filled and signed files. * **Automated Emails**: With SMTP settings, users can receive automated emails from the platform with an invitation to sign the documents or with a copy of their signed documents. * **Automatic eSignature**: All documents are automatically signed with a digital industry-standard PDF eSignature. Signed files can be verified through the platform for authenticity. * **Mobile Optimization**: Review and sign digital documents online from any device. DocuSeal document forms are optimized for screens of all sizes. * **Users Management**: Invite your team members into the platform to create, share, and manage documents with ease. * **Robust File Storage**: Files can be stored locally on disk or on your private AWS S3, Google Cloud Storage, or Azure Storage. * **Security**: You can host DocuSeal on your hardware under a VPN to ensure that important documents can be accessed only within your organization. * **Easy to Start**: You can run DocuSeal on your own host using a Docker container, or deploy it on your favorite managed PaaS with a single click. DocuSeal is designed to be easy to use, yet powerful enough to handle any document signing task. It’s the perfect solution for businesses of all sizes, and because it’s open-source, it’s constantly improving and evolving. Thank you for your interest in DocuSeal. We’re excited to see how you’ll use this platform to streamline your document handling process. For more information, please visit our [website](https://www.docuseal.com/) or our [GitHub repository](https://github.com/docusealco/docuseal) . --- # Update DocuSeal to the latest version in Docker | DocuSeal Docs Menu Update DocuSeal to the latest version in Docker =============================================== Using basic Docker commands: ---------------------------- **Step 1: Pull the Latest Image** Use the following command to download the latest image: docker pull docuseal/docuseal **Step 2: Recreate the container** * If you have an existing container, you’ll need to remove it first and then create a new one using the latest image: docker rm docuseal -f * Run a new container with the latest image: docker run --name docuseal -p 3000:3000 -v.:/data docuseal/docuseal Using Docker-Compose: --------------------- If you’re using docker-compose, you can simply use the following command to recreate the container with the latest image: docker-compose up --force-recreate --- # Configuring with environment variables | DocuSeal Docs Menu Configuring with environment variables ====================================== General Configuration --------------------- * `DATABASE_URL` - The URL for connecting to the database. * `SECRET_KEY_BASE` - A secret key used for various security purposes in the application. Can be generated with `openssl rand -hex 64`. * `FORCE_SSL` - Set to `true` to enforce SSL. * `HOST` - The domain name for your application. SMTP Configuration ------------------ * `SMTP_USERNAME` - The username for the SMTP server for sending emails. * `SMTP_ADDRESS` - The address of the SMTP server. * `SMTP_PORT` - The port number for the SMTP server. * `SMTP_DOMAIN` - The domain used in the HELO command. * `SMTP_PASSWORD` - The password for authenticating with the SMTP server. * `SMTP_AUTHENTICATION` - The authentication method for the SMTP server (**plain** or **login**). * `SMTP_FROM` - Email address to send emails from. * `SMTP_ENABLE_STARTTLS` - Pass `false` to disable STARTTLS. Enabled by default. * `SMTP_SSL_VERIFY` - Pass `false` to disable trusted certificate chain verification. Enabled by default. AWS S3 Configuration -------------------- * `AWS_ACCESS_KEY_ID` - The AWS access key ID for S3. * `AWS_SECRET_ACCESS_KEY` - The AWS secret access key for S3. * `AWS_REGION` - The AWS region where the S3 bucket is located. * `S3_ATTACHMENTS_BUCKET` - The name of the S3 bucket for storing attachments. GCP Storage Configuration ------------------------- * `GCS_CREDENTIALS` - JSON string containing GCP credentials. * `GCS_PROJECT` - The GCP project ID. * `GCS_BUCKET` - The name of the GCP Storage bucket. Azure Cloud Configuration ------------------------- * `AZURE_STORAGE_ACCOUNT_NAME` - The name of the Azure Storage account. * `AZURE_STORAGE_ACCESS_KEY` - The access key for the Azure Storage account. * `AZURE_CONTAINER` - The name of the Azure Storage container. Misc (optional) --------------- * `WEB_CONCURRENCY` - the number of web processes to launch. By default, 1 process is launched, which utilizes 1 CPU core. * `SESSION_REMEMBER_DAYS` - login session duration in days, default 730 days * `PRESIGNED_URLS_EXPIRE_MINUTES` - expiration duration of presigned file urls, default 240 minutes * `STRIPE_SECRET_KEY` - Stripe API key * `GOTENBERG_URL` - Gotenberg app URL for DOCX and HTML support (Pro) --- # Update DocuSeal on Heroku | DocuSeal Docs Menu Update DocuSeal on Heroku ========================= **Step 0: Make sure you have the Heroku CLI installed.** If you don’t have the Heroku CLI installed, you can follow the instructions provided here: https://devcenter.heroku.com/articles/heroku-cli#install-the-heroku-cli **Step 1: Log in to the Heroku CLI** heroku login **Step 2: Clone [the repository](https://github.com/docusealco/docuseal-heroku) ** git clone https://github.com/docusealco/docuseal-heroku.git **Step 3: Go to the folder** cd docuseal-heroku **Step 4: Change the last commit** git commit --amend --no-edit **Step 5: Deploy the changes to your Heroku instance** You can find the git URL in the settings of your Heroku instance: _Settings_ -> _App Information section_ -> _Heroku git URL_ git push YOUR_HEROKU_GIT_URL master -f --- # Update DocuSeal on Railway | DocuSeal Docs Menu Update DocuSeal on Railway ========================== **Step 1: Open the dashboard and select the deployed DocuSeal instance** To get started, access the dashboard by visiting the following link: https://railway.app/dashboard **Step 2: Go to the Deployment tab** After accessing the dashboard, navigate to the “Deployment” tab. ![Railway Deployments Tab](https://www.docuseal.com/packs/static/images/pages/railway-deployments-tab-0d51aa87f0cfc0ce4d37.webp) **Step 3: Select “Redeploy” from the last active commit drop-down menu** Once you are in the “Deployment” tab, locate the last active commit drop-down menu. Click on it and choose the option labeled “Redeploy.” ![Railway Redeploy Button](https://www.docuseal.com/packs/static/images/pages/railway-redeploy-button-5beb3e040675a348d53e.webp) **Step 4: Wait for the deployment process to complete** After selecting “Redeploy,” the deployment process will commence. Please be patient and wait for the process to complete. The duration of deployment may vary depending on the complexity of the application and the server’s performance. Once the deployment process is finished, the DocuSeal instance will be successfully redeployed, and any changes in the last active commit will be applied to the application. You can now use the updated version as needed. --- # Deploying DocuSeal on Azure web apps | DocuSeal Docs Menu Deploying DocuSeal on Azure web apps ==================================== Before you begin, ensure that you have an active Azure account. If you do not have one, you can create it on the [Azure website](https://azure.microsoft.com/) . Although DocuSeal is open-source, you will still incur costs for using Azure services, such as PostgreSQL databases, servers, and file storage. The total cost will vary depending on your specific needs. However, DocuSeal operates efficiently even on smaller servers, so you can opt for the smallest server offering from Azure. How to deploy DocuSeal on Azure? -------------------------------- 1. [Create a resource group](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#create-a-resource-group) 2. [Create a PostgreSQL server](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#create-a-postgresql-server) 3. [Create a web app](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#create-a-web-app) 4. [Configure environment variables](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#configure-environment-variables) 5. [Create file storage](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#create-file-storage) 6. [Set up access to storage](https://www.docuseal.com/docs/deploying-docuseal-on-azure-web-apps#set-up-access-to-storage) ### Create a resource group Before creating any resources, you need to establish a resource group. A resource group is a container that holds various resources you create on Azure, facilitating better interaction among them. To create a resource group, go to the [Azure website](https://portal.azure.com/) , log into your account, and navigate to the **Resource groups** page. You can also locate this page using the search function. 1. On the **Resource groups** page, click the **Create** button. 2. This will open the resource group creation page. 3. Enter a name for your resource group. You can choose any name, but it should be unique and allow you to quickly identify resources associated with DocuSeal. 4. Select the region. Choose a region based on your location or the location of your target audience. ![Select a resource group](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-resouce-group-fabbb1fed0a8a1d5ab01.jpg) 5. Click the **Review + create** button. 6. Review the information and then click the **Create** button. ### Create a PostgreSQL server After creating the resource group, you need to set up a PostgreSQL server. This will serve as the database used by DocuSeal. 1. Navigate to the **Azure Database for PostgreSQL servers** page via the search function. 2. On the **Azure Database for PostgreSQL servers** page, click the **Create** button. 3. On the PostgreSQL server creation page, select the resource group you previously created. 4. Also, select the region. It is recommended that the region of the resource group and the PostgreSQL server be the same to optimize performance and reduce latency. ![Create a resource group](https://www.docuseal.com/packs/static/images/docs/azure-create-resource-group-eb7435de5951c1b5c7e0.jpg) 5. Select the version of PostgreSQL. It is recommended to choose the latest available version for better performance and security features. 6. Enter a name for the server. This can be any name, but it should be unique and clearly identifiable within the context of your project. 7. Then, choose the type of workload you intend to use. This decision depends on your specific needs, but keep in mind that it’s usually better to opt for a larger capacity rather than more power, as DocuSeal does not require high computing power. ![Azure PostgreSQL server Workload type](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-workload-b45dc63dee6dd72e43d8.jpg) 8. For authentication, select **“PostgreSQL authentication only”** if your company’s security policy allows the use of passwords. Otherwise, choose the option that applies to your company’s standards. 9. Enter a username and password. This will be the database administrator credentials (you can change this password later). ![Setting up PostgreSQL authentication](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-authentication-4b68e0f614b42d987416.jpg) 10. Click the **Review + create** button. 11. Review the details and click the **Create** button. 12. After successfully creating the PostgreSQL server, go to the PostgreSQL server page and navigate to the **Settings** - **Databases** tab. 13. You need to create a database. To do this, click the **Add** button. ![Create PostgreSQL database](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-create-database-2c9f918607ec3355f137.jpg) 14. Enter the desired name for the database and click the **Save** button. 15. Now you need to configure access to the database. To do this, go to your PostgreSQL server page and navigate to the **Favorites** - **Networking** tab. 16. Check the box next to **Allow public access to this resource through the internet using a public IP address** and **Allow public access from any Azure service within Azure to this server**. Also, click on the link **\+ Add 0.0.0.0 - 255.255.255.255** to open access to the database from any IP address, but ensure it meets your security requirements and that you are using a strong, complex password for database access. ![Azure PostgreSQL server Networking](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-networking-b3f6a7548056f3d9857d.jpg) 17. Click the **Save** button. 18. Done! You now have a PostgreSQL server and a database set up. ### Create a web app Now you have everything you need to deploy a web application. We’ll use Azure Web Apps and Docker for this. 1. Go to the **App Services** page either through search or from the Azure homepage by selecting **Create a resource** and then find **Web App**. 2. Click the **Create** button. 3. On the web app creation page, select the resource group you created earlier. 4. Enter a name for the web app. It can be any name but must be unique (possibly even a unique set of characters). 5. For the **Publish** option, choose **“Container”** and select the **“Linux”** operating system. 6. Also, select the region. It is recommended that the region for the resource group and the web app be the same. ![Azure Web App instance details](https://www.docuseal.com/packs/static/images/docs/azure-web-app-instance-details-4f57537b7f195fc0b4dc.jpg) 7. Click the **Next: Container** button. 8. In the opened tab, select **Docker Hub and other registries**. 9. Subsequently, an additional field called **Options** will appear where you should choose **“Single Container”**. 10. Choose **“Public”** for **Access type**. 11. Leave the **Server URL** unchanged. 12. Enter the name of the DocuSeal image for **Image and tag**: docuseal/docuseal:latest You can use any version of the image, but it is recommended to use the latest one. ![Azure Web App container options](https://www.docuseal.com/packs/static/images/docs/azure-web-app-container-options-ff3801ee7e89ad430521.jpg) 13. Click the **Review + create** button. 14. Review the information and click the **Create** button. 15. Wait for the web app to finish deploying. ### Configure environment variables To ensure that DocuSeal operates on Azure, you need to configure just 2 environment variables - **DATABASE\_URL** and **SECRET\_KEY\_BASE**. 1. First, generate the **SECRET\_KEY\_BASE** using the command: openssl rand -hex 64 Save this value, as you will use it later. Note that you can use any other method to generate this key. 2. After that, gather all the necessary information for connecting to the PostgreSQL database. 3. Go to your PostgreSQL server page. You can do this by searching for **Azure Database for PostgreSQL servers** and selecting your server. You can also find this page via the **Resource groups** page. 4. On the PostgreSQL server page, navigate to the **Settings** - **Connect** tab and in the database name selector, choose your database. ![Azure PostgreSQL server Connect](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-connect-04ec65f84ee55b743a74.jpg) 5. You will be provided with the connection details for the database, such as PGHOST, PGPORT, PGUSER, PGPASSWORD, and PGDATABASE. ![Azure PostgreSQL server connection details](https://www.docuseal.com/packs/static/images/docs/azure-postgresql-server-connection-details-e06d696c1e6268af8491.jpg) 6. Once you have gathered all the data, you need to construct the connection URL for the database. The URL should be formatted as follows: postgres://[PGUSER]:[PGPASSWORD]@[PGHOST]:[PGPORT]/[PGDATABASE] As a result, you will obtain a URL that looks something like this: postgres://ds_admin:123456789@docusealdb.postgres.database.azure.com:5432/docuseal 7. Save this URL, as you will need it later. 8. Navigate to your web app’s page. 9. In the left menu, select **Settings** - **Configuration**. 10. Click the **New application setting** button. 11. Enter the variable name **DATABASE\_URL** and input the value you previously constructed. ![Azure PostgreSQL server connection details](https://www.docuseal.com/packs/static/images/docs/azure-web-new-app-application-setting-f2a87390fc02a50999bf.jpg) 12. Click the **OK** button. After this, the new environment variable **DATABASE\_URL** will appear in the list of environment settings. 13. Click the **Save** button. 14. Similarly, create a new environment variable **SECRET\_KEY\_BASE** and enter the value you generated previously. 15. Navigate to the **Overview** page and click the **Restart** button to restart the web application. 16. Done! Your web application is now ready to operate. ### Create file storage DocuSeal offers several methods for file storage, but since Azure has its own file storage service, you can utilize it. Here’s how to set it up: 1. Navigate to the **Storage accounts** page either through search or from the Azure homepage by selecting **Create a resource** and then finding **Storage account**. 2. On the storage account creation page, select the resource group to which your deployed DocuSeal and PostgreSQL server belong. 3. Enter a name for the storage account. It can be any name, but it must be unique. Save this name, as you will need it later. 4. Select the region. It is recommended that the region for the resource group and the storage account be the same to optimize performance and reduce latency. ![Azure new storage account](https://www.docuseal.com/packs/static/images/docs/azure-new-storage-account-65e254e19e3f2e2866ad.jpg) 5. For the **Performance** option, select **Standard**. 6. Click the **Review + create** button. 7. Review the details and click the **Create** button. 8. Wait for the storage account to be created. 9. Once created, open the storage account page and navigate to the **Data storage** - **Containers** tab. 10. Click on **Container** and enter a name for the container. This can be any name, but it must be unique. Save this name, as you will need it later. ![Azure storage account new container](https://www.docuseal.com/packs/static/images/docs/azure-storage-account-new-container-c6c2883caa8cc7c293df.jpg) 11. Click the **Create** button. 12. Now you have a file storage container that can be accessed from DocuSeal. 13. Next, you need to obtain the access key for this storage to enable DocuSeal to access it. To do this, go to the **Data storage** - **Access keys** tab in the storage account. Save this key, as you will need it later. ![Azure storage account new container](https://www.docuseal.com/packs/static/images/docs/azure-storage-account-access-keys-f40485b4df9f4576beb1.jpg) ### Set up access to storage 1. Log in to DocuSeal as an administrator. 2. Navigate to the **Settings** - **Storage** page. 3. Select **Azure** under the **Storage** section. 4. Enter the storage account name, container name, and access key that you previously saved. ![DocuSeal Azure storage settings](https://www.docuseal.com/packs/static/images/docs/docuseal-azure-storage-45a789d0bfa24fc51e3a.jpg) 5. Click the **Save** button. 6. Done! DocuSeal can now store files in the Azure storage. In this guide, we explored how to deploy DocuSeal on Azure, but it’s important to remember that this is just one of the deployment options available. Your company might use other methods to organize resources and access them. --- # Deploying DocuSeal on Google Cloud Run | DocuSeal Docs Menu Deploying DocuSeal on Google Cloud Run ====================================== Before you start, make sure you have an active Google Cloud account. If you don’t have one yet, you can sign up on the [Google Cloud website](https://cloud.google.com/) . Although DocuSeal is open-source, you will incur expenses for utilizing Google Cloud services, such as PostgreSQL databases, compute instances, and storage. The overall cost will depend on your specific requirements. However, DocuSeal is optimized to run efficiently on smaller instances, so you can choose the most affordable server option from Google Cloud. How to deploy DocuSeal on Google Cloud Run? ------------------------------------------- 1. [Create a new project on Google Cloud Platform](https://www.docuseal.com/docs/deploying-docuseal-on-google-cloud-run#create-a-new-project-on-google-cloud-platform) 2. [Create a PostgreSQL server](https://www.docuseal.com/docs/deploying-docuseal-on-google-cloud-run#create-a-postgresql-server) 3. [Create a Cloud Run Service](https://www.docuseal.com/docs/deploying-docuseal-on-google-cloud-run#create-a-cloud-run-service) 4. [Create file storage](https://www.docuseal.com/docs/deploying-docuseal-on-google-cloud-run#create-file-storage) 5. [Set up access to storage](https://www.docuseal.com/docs/deploying-docuseal-on-google-cloud-run#set-up-access-to-storage) ### Create a new project on Google Cloud Platform Before you begin, you need to create a new project on the Google Cloud platform. To do this, go to the [Google Cloud website](https://cloud.google.com/) and sign in to your account. To create a new project, click on the **Console** button in the upper right corner of the screen and select **New Project**. 1. On the **New Project** page, enter the name of your project. You can choose any name, but it must be unique. 2. If the project should be part of an organization, select the appropriate organization in the **Organization** dropdown. ![Create a new project on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-create-new-project-be1b802bcbe0b98fd5e1.jpg) 3. Click on the **Create** button to create a new project. ### Create a PostgreSQL server After creating the resource group, you need to set up a PostgreSQL server. This will serve as the database used by DocuSeal. 1. Navigate to **SQL** in the **Databases** menu on the Google Cloud toolbar or use the search function. 2. Click on the **Create Instance** button to create a new PostgreSQL server. 3. Select PostgreSQL as the database type. 4. On the page that opens, enter the instance name and the password for the database administrator. Do not use the symbols **!, ‘, or “** in the password, as they may cause the application to malfunction. 5. Select the version of PostgreSQL. It is recommended to choose the latest available version for better performance and security features. ![Create a PostgreSQL instance on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-postgresql-create-instance-78c00ed4fe866713ee6d.jpg) 6. Next, choose the Cloud SQL edition. We recommend selecting the cheaper option (e.g., Enterprise) as DocuSeal operates efficiently on smaller servers. 7. Select a region for the server location. We recommend choosing a region closest to your users’ location. 8. Go to the **Storage** tab and select the disk size for the database. We recommend using a small server to save costs but enabling automatic disk space increase. ![Select storage size for PostgreSQL instance on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-postgresql-instance-storage-245fe3d0b5f2bc793223.jpg) 9. Go to the **Connections** tab and select **Public IP** for internet access to the database. ![Select connection type for PostgreSQL instance on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-postgresql-connections-fb3102dd9ff770886d72.jpg) 10. Click on the **Add a network** button and enter the following value for **Network**: 0.0.0.0/0 Note: If your organization’s security policy does not allow internet access to the database, skip this step. In this case, you will need to enter the IP address of your server (which you will create later) or network in this field. ![Add authorized network for PostgreSQL instance on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-authorized-networks-c25fd8ea30ef38b17c41.jpg) 11. If needed, select additional options for the database and click on the **Create Instance** button to create the PostgreSQL server. 12. Now you need to create a database for DocuSeal. Open the page of the instance you created and go to the **Databases** tab. 13. On the opened page, click on the **Create database** button and enter the desired name for the database. ![Create a database for PostgreSQL instance on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-postgresql-create-database-9e6ca84b81dad5c1b901.jpg) 14. Now you need to create the database connection string. To do this, go to the **Overview** tab and copy the value of **Public IP address**. 15. Next, you need to create the database connection string. Use the value of **Public IP address** which can be found on the **Connections** or **Overview** page of the PostgreSQL instance. 16. Form the database connection string in the format: postgresql://postgres:password@ip:5432/database As a result, you will obtain a URL that looks something like this: postgresql://postgres:123456789@35.193.16.230:5432/docuseal_production * **postgres** - this is the database username (default is **postgres**). You can create another user on the **Users** page of the PostgreSQL instance. * **password** - this is the database user’s password that you specified when creating the PostgreSQL server. * **ip** - this is the IP address of the PostgreSQL server which you found on the **Connections** or **Overview** page. * **database** - this is the name of the database you created for DocuSeal. 17. Save the formed database connection string, as you will need it later. ### Create a Cloud Run Service 1. Navigate to **Cloud Run** on the Google Cloud toolbar or use the search function. 2. Click on the **Create Service** button to create a new Cloud Run service. 3. Select **Deploy one revision from an existing container image**. 4. Enter the Container image URL: docker.io/docuseal/docuseal:latest You can use any version of the image, but it is recommended to use the latest one. _To deploy the Pro Docker image, it is required to use a [Remote Repository](https://cloud.google.com/artifact-registry/docs/repositories/remote-repo) ._ 5. Enter the service name. It can be any name, but it must be unique. 6. Select a region for the service location. We recommend choosing a region closest to your users’ location. ![Create a Cloud Run service on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-run-create-service-docker-image-366135122e4545e11377.jpg) 7. Select **Allow unauthenticated invocations** for Authentication to allow access to the service without authorization. 8. After this, select **All** for Ingress control to allow access to the service from the internet. 9. Now you need to configure the port and environment variables for the service. To do this, go to **Container(s), Volumes, Networking, Security** and select the **Container(s)** tab. 10. In the opened tab, enter 3000 for **Container port**. This is the port on which DocuSeal operates. 11. Go to the **Variables & Secrets** tab. You need to set up two environment variables - **DATABASE\_URL** and **SECRET\_KEY\_BASE**. 12. First, let’s generate **SECRET\_KEY\_BASE**. Open the console and enter the following command: openssl rand -hex 64 Copy the generated key and paste it into the **SECRET\_KEY\_BASE** environment variable. Note that you can use any other method to generate the key. 13. Next, paste the database connection string you generated earlier into the **DATABASE\_URL** environment variable. ![Configure container settings for Cloud Run service on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-container-settings-2a6b5ca316292d17da6f.jpg) 14. Click on the **Create** button to create the Cloud Run service. ### Create file storage DocuSeal offers several methods for file storage, but since Google Cloud has its own file storage service, you can utilize it. Here’s how to set it up: 1. Navigate to the **Cloud Storage** section on the Google Cloud Platform dashboard or use the search bar. 2. Click on the **Create Bucket** button to create a new storage bucket. 3. Enter the name of the bucket. You can choose any name, but it must be unique. 4. If needed, select a region for file storage. We recommend choosing a region closest to your users’ location. ![Create a bucket on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-create-bucket-d854db5c47ca8313b0a0.jpg) 5. Click on the **Create** button to create a new bucket. 6. Now you need to configure access to the bucket. To do this, go to **APIs & Services** and select **Credentials**. 7. Click on the **Create credentials** button and select the required service account. If it does not exist, create a new service account. 8. On the service account page, go to the **Keys** tab and click on the **Add Key** button to create a new access key. 9. In the window that appears, select **JSON** as the key format and click on the **Create** button to create a new access key. ![Create an access key for Google Cloud Storage on Google Cloud Platform](https://www.docuseal.com/packs/static/images/docs/google-cloud-service-create-account-key-d88ab17c5a46d71d84f6.jpg) 10. After this, a file with the access key will be downloaded. Save it, as you will need it later. ### Set up access to storage 1. Log in to DocuSeal as an administrator. 2. Navigate to the **Settings** - **Storage** page. 3. Select **GCP** under the **Storage** section. 4. Enter the project id, bucket name, and credentials that you previously created. * Project ID - the ID of the project you created on Google Cloud Platform. * Bucket name - the name of the bucket you created on Google Cloud Storage. * Credentials - the secret key you generated for the bucket. ![Set up Google Cloud Storage access in DocuSeal](https://www.docuseal.com/packs/static/images/docs/docuseal-google-cloud-storage-97bdc3e9a04986b68f91.jpg) 5. Click the **Save** button. 6. Done! DocuSeal can now store files in the Google Cloud storage. In this guide, we explored how to deploy DocuSeal on Google Cloud Run, but it’s important to remember that this is just one of the deployment options available. Your company might use other methods to organize resources and access them. --- # Embedded Signing Form | DocuSeal Docs Menu Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied [Signing Form](https://www.docuseal.com/docs/embedded/form) [Form Builder](https://www.docuseal.com/docs/embedded/builder) This component enables seamless integration of a signing form within any section of your website or application. It offers compatibility with **JS+HTML**, **Vue**, **Angular** and **React**, providing you with versatile options for integration. * JavaScript * React * Vue * Angular Copy Copied [View LIVE DEMO](https://www.docuseal.com/docs/embedded/form#live_example) ### Related Guides [Embed document signing into web app with JavaScript](https://www.docuseal.com/guides/embed-document-signing-into-web-app-with-javascript) ### Attributes data-src String required Public URL of the document signing form. There are two types of URLs: * `/d/{slug}` - template form signing URL can be copied from the template page in the admin dashboard. Also template "slug" key can be obtained via the `/templates` API. * `/s/{slug}` - individual signer URL. Signer "slug" key can be obtained via the `/submissions` API which is used to initiate signature requests for a template form with recipients. data-email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified. data-name String Name of the signer. data-role String The role name or title of the signer. Example: First Party data-token String JSON Web Token (JWT HS256) with a payload signed using the API key. **JWT can be generated only on the backend.**. slug String required Template or Submitter slug. When Submitter slug is used no need to pass additional email param. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified with Template slug. external\_id String Your application-specific unique string key to identify signer within your app. preview Boolean Show form in preview mode without ability to submit it. Default: false Show All data-preview Boolean Show form in preview mode without ability to submit it. Completed documents embedded in preview mode require \`data-token\` authentication. Default: false data-expand Boolean Expand form on open. Default: true data-minimize Boolean Set to \`true\` to always minimize form fields. Requires to click on the field to expand the form. Default: false data-order-as-on-page Boolean Order form fields based on their position on the pages. Default: false data-logo String Public logo image URL to use in the signing form. data-language String UI language: en, es, it, de, fr, nl, pl, uk, cs, pt, he, ar, kr, ja languages are available. By default the form is displayed in the user browser language automatically. data-i18n String JSON encoded string that contains i18n keys to replace the default UI text with custom values. See [submission\_form/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/submission_form/i18n.js) for available i18n keys. Default: {} data-go-to-last Boolean Navigate to the last unfinished step. Default: true data-skip-fields Boolean Allow skipping form fields. Default: false data-autoscroll-fields Boolean Set \`false\` to disable auto-scrolling to the next document field. Default: true data-send-copy-email Boolean Set \`false\` to disable automatic email sending with signed documents to the signers. Emails with signed documents are sent to the signers by default. Default: true data-with-title Boolean Set \`false\` to remove the document title from the form. Default: true data-with-decline Boolean Set \`true\` to display the decline button in the form. Default: false data-with-field-names Boolean Set \`false\` to hide field name. Hiding field names can be useful for when they are not in the human readable format. Field names are displayed by default. Default: true data-with-field-placeholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false data-with-download-button Boolean Set \`false\` to remove the signed document download button from the completed form card. Default: true data-with-send-copy-button Boolean Set \`false\` to remove the signed document send email button from the completed form card. Default: true data-with-complete-button Boolean Set \`true\` to display the complete button in the form header. Default: false data-only-required-fields Boolean Set to \`true\` to display only required fields in the step-by-step form, hiding all optional fields. Default: false data-allow-to-resubmit Boolean Set \`false\` to disallow users to re-submit the form. Default: true data-allow-typed-signature Boolean Set \`false\` to disallow users to type their signature. Default: true data-signature String Allows pre-filling signature fields. The value can be a base64 encoded image string, a public URL to an image, or plain text that will be rendered as a typed signature using a standard font. data-remember-signature Boolean Allows to specify whether the signature should be remembered for future use. Remembered signatures are stored in the signer's browser local storage and can be automatically reused to prefill signature fields in new forms for the signer when the value is set to \`true\`. data-reuse-signature Boolean Set \`false\` to not reuse the signature in the second signature field and collect a new one. Default: true data-background-color String Form background color. Only HEX color codes are supported. Example: #d9d9d9 data-values Object Pre-assigned values for form fields. Example: {"First Name":"Jon","Last Name":"Doe"} data-external-id String Your application-specific unique string key to identify signer within your app. data-metadata Object Signer metadata Object in JSON format. Example: {"customData":"customValue"} data-readonly-fields String Comma separated read-only field names Example: First Name,Last Name data-completed-redirect-url String URL to redirect to after the submission completion. Example: https://docuseal.com/success data-completed-message-title String Message title displayed after the form completion. Example: Documents have been completed data-completed-message-body String Message body displayed after the form completion. Example: If you have any questions, please contact us. data-completed-button-title String Button title displayed after the form completion. Example: Go Back data-completed-button-url String URL of the button displayed after the form completion. Example: https://example.com data-custom-css String Custom CSS styles to be applied to the form. Example: #submit\_form\_button { background-color: #d9d9d9; } ### Callbacks init Event Custom event to be triggered on initializing the form component. Example: document.querySelector('docuseal-form').addEventListener('init', () => console.log('init')) load Event Custom event to be triggered on loading the form data. Example: document.querySelector('docuseal-form').addEventListener('load', (e) => e.detail) completed Event Custom event to be triggered after form completion. Example: document.querySelector('docuseal-form').addEventListener('completed', (e) => e.detail) declined Event Custom event to be triggered after form decline. Example: document.querySelector('docuseal-form').addEventListener('declined', (e) => e.detail) Copy Copied import React from "react" import { DocusealForm } from '@docuseal/react' export function App() { return (
console.log(data)} />
); } [View LIVE DEMO](https://www.docuseal.com/docs/embedded/form#live_example) ### Related Guides [Embed document signing into React app](https://www.docuseal.com/guides/embed-document-signing-into-react-app) [Embed document signing into React Native app](https://www.docuseal.com/guides/embed-document-signing-into-react-native-app) ### Attributes src String required Public URL of the document signing form. There are two types of URLs: * `/d/{slug}` - template form signing URL can be copied from the template page in the admin dashboard. Also template "slug" key can be obtained via the `/templates` API. * `/s/{slug}` - individual signer URL. Signer "slug" key can be obtained via the `/submissions` API which is used to initiate signature requests for a template form with recipients. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified. name String Name of the signer. role String The role name or title of the signer. Example: First Party token String JSON Web Token (JWT HS256) with a payload signed using the API key. **JWT can be generated only on the backend.**. slug String required Template or Submitter slug. When Submitter slug is used no need to pass additional email param. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified with Template slug. external\_id String Your application-specific unique string key to identify signer within your app. preview Boolean Show form in preview mode without ability to submit it. Default: false Show All preview Boolean Show form in preview mode without ability to submit it. Completed documents embedded in preview mode require \`token\` authentication. Default: false expand Boolean Expand form on open. Default: true minimize Boolean Set to \`true\` to always minimize form fields. Requires to click on the field to expand the form. Default: false orderAsOnPage Boolean Order form fields based on their position on the pages. Default: false logo String Public logo image URL to use in the signing form. language String UI language: en, es, it, de, fr, nl, pl, uk, cs, pt, he, ar, kr, ja languages are available. By default the form is displayed in the user browser language automatically. i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [submission\_form/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/submission_form/i18n.js) for available i18n keys. Default: {} goToLast Boolean Navigate to the last unfinished step. Default: true withFieldNames Boolean Set \`false\` to hide field name. Hiding field names can be useful for when they are not in the human readable format. Field names are displayed by default. Default: true withFieldPlaceholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false skipFields Boolean Allow skipping form fields. Default: false autoscrollFields Boolean Set \`false\` to disable auto-scrolling to the next document field. Default: true sendCopyEmail Boolean Set \`false\` to disable automatic email sending with signed documents to the signers. Emails with signed documents are sent to the signers by default. backgroundColor String Form background color. Only HEX color codes are supported. Example: #d9d9d9 completedRedirectUrl String URL to redirect to after the submission completion. Example: https://docuseal.com/success completedMessage Object Message displayed after the form completion. title String Message title. Example: Documents have been signed! body String Message content. Example: If you have any questions, please contact us. completedButton Object Customizable button after form completion. title String required Button label. Example: Go Back url String required Button link. Only absolute URLs are supported. Example: https://example.com withTitle Boolean Set \`false\` to remove the document title from the form. Default: true withDecline Boolean Set \`true\` to display the decline button in the form. Default: false withDownloadButton Boolean Set \`false\` to remove the signed document download button from the completed form card. Default: true withSendCopyButton Boolean Set \`false\` to remove the signed document send email button from the completed form card. Default: true withCompleteButton Boolean Set \`true\` to display the complete button in the form header. Default: false onlyRequiredFields Boolean Set to \`true\` to display only required fields in the step-by-step form, hiding all optional fields. Default: false allowToResubmit Boolean Set \`false\` to disallow user to re-submit the form. Default: true allowTypedSignature Boolean Set \`false\` to disallow users to type their signature. Default: true signature String Allows pre-filling signature fields. The value can be a base64 encoded image string, a public URL to an image, or plain text that will be rendered as a typed signature using a standard font. rememberSignature Boolean Allows to specify whether the signature should be remembered for future use. Remembered signatures are stored in the signer's browser local storage and can be automatically reused to prefill signature fields in new forms for the signer when the value is set to \`true\`. reuseSignature Boolean Set \`false\` to not reuse the signature in the second signature field and collect a new one. Default: true values Object Pre-assigned values for form fields. Example: { 'First Name': 'Jon', 'Last Name': 'Doe' } externalId String Your application-specific unique string key to identify signer within your app. metadata Object Metadata object with additional signer information. Example: { customData: 'custom value' } readonlyFields Array List of read-only fields. Example: \['First Name','Last Name'\] customCss String Custom CSS styles to be applied to the form. Example: #submit\_form\_button { background-color: #d9d9d9; } ### Callbacks onInit Function Function to be called on initializing the form component. Example: () => { console.log("Loaded") } onLoad Function Function to be called on loading the form data. Example: (data) => { console.log(data) } onComplete Function Function to be called after the form completion. Example: (data) => { console.log(data) } onDecline Function Function to be called after the form decline. Example: (data) => { console.log(data) } Copy Copied [View LIVE DEMO](https://www.docuseal.com/docs/embedded/form#live_example) ### Related Guides [Embed document signing into Vue app](https://www.docuseal.com/guides/embed-document-signing-into-vue-app) ### Attributes src String required Public URL of the document signing form. There are two types of URLs: * `/d/{slug}` - template form signing URL can be copied from the template page in the admin dashboard. Also template "slug" key can be obtained via the `/templates` API. * `/s/{slug}` - individual signer URL. Signer "slug" key can be obtained via the `/submissions` API which is used to initiate signature requests for a template form with recipients. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified. name String Name of the signer. role String The role name or title of the signer. Example: First Party token String JSON Web Token (JWT HS256) with a payload signed using the API key. **JWT can be generated only on the backend.**. slug String required Template or Submitter slug. When Submitter slug is used no need to pass additional email param. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified with Template slug. external\_id String Your application-specific unique string key to identify signer within your app. preview Boolean Show form in preview mode without ability to submit it. Default: false Show All preview Boolean Show form in preview mode without ability to submit it. Completed documents embedded in preview mode require \`data-token\` authentication. Default: false expand Boolean Expand form on open. Default: true minimize Boolean Set to \`true\` to always minimize form fields. Requires to click on the field to expand the form. Default: false order-as-on-page Boolean Order form fields based on their position on the pages. Default: false logo String Public logo image URL to use in the signing form. language String UI language: en, es, it, de, fr, nl, pl, uk, cs, pt, he, ar, kr, ja languages are available. By default the form is displayed in the user browser language automatically. i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [submission\_form/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/submission_form/i18n.js) for available i18n keys. Default: {} go-to-last Boolean Navigate to the last unfinished step. Default: true skip-fields Boolean Allow skipping form fields. Default: false autoscroll-fields Boolean Set \`false\` to disable auto-scrolling to the next document field. Default: true with-field-names Boolean Set \`false\` to hide field name. Hiding field names can be useful for when they are not in the human readable format. Field names are displayed by default. Default: true with-field-placeholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false send-copy-email Boolean Set \`false\` to disable automatic email sending with signed documents to the signers. Emails with signed documents are sent to the signers by default. Default: true background-color String Form background color. Only HEX color codes are supported. Example: #d9d9d9 with-title Boolean Set \`false\` to remove the document title from the form. Default: true with-decline Boolean Set \`true\` to display the decline button in the form. Default: false with-download-button Boolean Set \`false\` to remove the signed document download button from the completed form card. Default: true with-send-copy-button Boolean Set \`false\` to remove the signed document send email button from the completed form card. Default: true with-complete-button Boolean Set \`true\` to display the complete button in the form header. Default: false only-required-fields Boolean Set to \`true\` to display only required fields in the step-by-step form, hiding all optional fields. Default: false allow-to-resubmit Boolean Set \`false\` to disallow user to re-submit the form. Default: true signature String Allows pre-filling signature fields. The value can be a base64 encoded image string, a public URL to an image, or plain text that will be rendered as a typed signature using a standard font. remember-signature Boolean Allows to specify whether the signature should be remembered for future use. Remembered signatures are stored in the signer's browser local storage and can be automatically reused to prefill signature fields in new forms for the signer when the value is set to \`true\`. reuse-signature Boolean Set \`false\` to not reuse the signature in the second signature field and collect a new one. Default: true allow-typed-signature Boolean Set \`false\` to disallow users to type their signature. Default: true completed-redirect-url String URL to redirect to after the submission completion. Example: https://docuseal.com/success completed-message Object Message displayed after the form completion. title String Message title. Example: Documents have been signed! body String Message content. Example: If you have any questions, please contact us. completed-button Object Customizable button after form completion. title String required Button label. Example: Go Back url String required Button link. Only absolute URLs are supported. Example: https://example.com values Object Pre-assigned values for form fields. Example: { 'First Name': 'Jon', 'Last Name': 'Doe' } external-id String Your application-specific unique string key to identify signer within your app. metadata Object Metadata object with additional signer information. Example: { customData: 'custom value' } readonly-fields Array List of read-only fields. Example: \['First Name','Last Name'\] custom-css String Custom CSS styles to be applied to the form. Example: #submit\_form\_button { background-color: #d9d9d9; } ### Callbacks @init Function Function to be called on initializing the form component. Example: onFormLoad @load Function Function to be called on loading the form data. Example: onFormLoad @complete Function Function to be called after the form completion. Example: onFormComplete @decline Function Function to be called after the form decline. Example: onFormDecline Copy Copied import { Component } from '@angular/core'; import { DocusealFormComponent } from '@docuseal/angular'; @Component({ selector: 'app-root', standalone: true, imports: [DocusealFormComponent], template: `
` }) export class AppComponent {} [View LIVE DEMO](https://www.docuseal.com/docs/embedded/form#live_example) ### Related Guides [Embed document signing into Angular app](https://www.docuseal.com/guides/embed-document-signing-into-angular-app) ### Attributes src String required Public URL of the document signing form. There are two types of URLs: * `/d/{slug}` - template form signing URL can be copied from the template page in the admin dashboard. Also template "slug" key can be obtained via the `/templates` API. * `/s/{slug}` - individual signer URL. Signer "slug" key can be obtained via the `/submissions` API which is used to initiate signature requests for a template form with recipients. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified. name String Name of the signer. role String The role name or title of the signer. Example: First Party token String JSON Web Token (JWT HS256) with a payload signed using the API key. **JWT can be generated only on the backend.**. slug String required Template or Submitter slug. When Submitter slug is used no need to pass additional email param. email String Email address of the signer. Additional email form step will be displayed if the email attribute is not specified with Template slug. external\_id String Your application-specific unique string key to identify signer within your app. preview Boolean Show form in preview mode without ability to submit it. Default: false Show All preview Boolean Show form in preview mode without ability to submit it. Completed documents embedded in preview mode require \`data-token\` authentication. Default: false expand Boolean Expand form on open. Default: true minimize Boolean Set to \`true\` to always minimize form fields. Requires to click on the field to expand the form. Default: false orderAsOnPage Boolean Order form fields based on their position on the pages. Default: false logo String Public logo image URL to use in the signing form. language String UI language: en, es, it, de, fr, nl, pl, uk, cs, pt, he, ar, kr, ja languages are available. By default the form is displayed in the user browser language automatically. i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [submission\_form/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/submission_form/i18n.js) for available i18n keys. Default: {} goToLast Boolean Navigate to the last unfinished step. Default: true withFieldNames Boolean Set \`false\` to hide field name. Hiding field names can be useful for when they are not in the human readable format. Field names are displayed by default. Default: true withFieldPlaceholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false skipFields Boolean Allow skipping form fields. Default: false autoscrollFields Boolean Set \`false\` to disable auto-scrolling to the next document field. Default: true sendCopyEmail Boolean Set \`false\` to disable automatic email sending with signed documents to the signers. Emails with signed documents are sent to the signers by default. backgroundColor String Form background color. Only HEX color codes are supported. Example: #d9d9d9 completedRedirectUrl String URL to redirect to after the submission completion. Example: https://docuseal.com/success completedMessage Object Message displayed after the form completion. title String Message title. Example: Documents have been signed! body String Message content. Example: If you have any questions, please contact us. completedButton Object Customizable button after form completion. title String required Button label. Example: Go Back url String required Button link. Only absolute URLs are supported. Example: https://example.com withTitle Boolean Set \`false\` to remove the document title from the form. Default: true withDecline Boolean Set \`true\` to display the decline button in the form. Default: false withDownloadButton Boolean Set \`false\` to remove the signed document download button from the completed form card. Default: true withSendCopyButton Boolean Set \`false\` to remove the signed document send email button from the completed form card. Default: true withCompleteButton Boolean Set \`true\` to display the complete button in the form header. Default: false onlyRequiredFields Boolean Set to \`true\` to display only required fields in the step-by-step form, hiding all optional fields. Default: false allowToResubmit Boolean Set \`false\` to disallow user to re-submit the form. Default: true signature String Allows pre-filling signature fields. The value can be a base64 encoded image string, a public URL to an image, or plain text that will be rendered as a typed signature using a standard font. rememberSignature Boolean Allows to specify whether the signature should be remembered for future use. Remembered signatures are stored in the signer's browser local storage and can be automatically reused to prefill signature fields in new forms for the signer when the value is set to \`true\`. reuseSignature Boolean Set \`false\` to not reuse the signature in the second signature field and collect a new one. Default: true allowTypedSignature Boolean Set \`false\` to disallow users to type their signature. Default: true values Object Pre-assigned values for form fields. Example: { 'First Name': 'Jon', 'Last Name': 'Doe' } externalId String Your application-specific unique string key to identify signer within your app. metadata Object Metadata object with additional signer information. Example: { customData: 'custom value' } readonlyFields Array List of read-only fields. Example: \['First Name','Last Name'\] customCss String Custom CSS styles to be applied to the form. Example: #submit\_form\_button { background-color: #d9d9d9; } ### Callbacks onInit Event emitter Event emitted on initializing the form component. Example: handleInit($event) onLoad Event emitter Event emitted on loading the form data. Example: handleLoad($event) onComplete Event emitter Event emitted on form completion. Example: handleComplete($event) onDecline Event emitter Event emitted after the form decline. Example: handleDecline($event) Live Example ------------ Email passed Custom Logo Document Title Language Custom CSS --- # Update DocuSeal on DigitalOcean | DocuSeal Docs Menu Update DocuSeal on DigitalOcean =============================== **Step 1: Open the dashboard and select the deployed DocuSeal instance** To begin, go to the following link to access the dashboard: https://cloud.digitalocean.com/apps **Step 2: Click on the “Actions” drop-down menu** Once you are on the dashboard, find and click on the “Actions” drop-down menu. It is typically located next to or above the listed applications. ![DigitalOcean Deploy Action Buttons](https://www.docuseal.com/packs/static/images/pages/digitalocean-deploy-action-buttons-1d841d8ddf2aa95e6a5c.webp) **Step 3: Click on the “Force Rebuild & Deploy” option** From the “Actions” drop-down menu, select the “Force Rebuild & Deploy” option. This action will initiate the rebuild and deployment process for the selected DocuSeal instance. ![DigitalOcean Redeploy Button](https://www.docuseal.com/packs/static/images/pages/digitalocean-redeploy-button-c5773418286362eb6c23.webp) **Step 4: Wait for the deployment process to complete** Once you have clicked on “Force Rebuild & Deploy,” the deployment process will begin. The duration of the process may vary depending on the complexity of the application and server resources. Please be patient and allow the deployment process to complete. After completion, the DocuSeal instance will be successfully rebuilt and deployed with the latest changes. You can now use the updated version of the application. --- # On-premises server requirements | DocuSeal Docs Menu On-premises server requirements =============================== The DocuSeal app is well-optimized to run on servers with limited resources. However, certain scenarios might demand more resources than others. For example, processing large files or handling a significant number of files simultaneously can substantially impact resource requirements. Let’s explore the main use cases of the DocuSeal app and the corresponding resource requirements for each. Requirements ------------ * **Avg Document Size**: This indicates the average size of documents that the DocuSeal app will process. * **vCPU**: The number of virtual CPUs required for document processing. * **RAM**: The amount of memory needed to process documents. * **Disk**: The amount of disk space necessary to store documents and other data. These requirements are calculated for storing 10000 signed documents ### Scenario 1: Each template is used only once and has only one signer | Average document size | vCPU | RAM | Disk | | --- | --- | --- | --- | | 500 KB | 1 | 1 GB | 12 GB | | 5 MB | 1 | 2 GB | 125 GB | | 100 MB | 2 | 4 GB | 2250 GB | ### Scenario 2: Each template is used only once and has multiple signers | Average document size | vCPU | RAM | Disk | | --- | --- | --- | --- | | 500 KB | 1 | 1 GB | 25 GB | | 5 MB | 1 | 2 GB | 225 GB | | 100 MB | 2 | 4 GB | 4500 GB | ### Scenario 3: Each template is reused and has only one signer | Average document size | vCPU | RAM | Disk | | --- | --- | --- | --- | | 500 KB | 1 | 1 GB | 6 GB | | 5 MB | 1 | 2 GB | 60 GB | | 100 MB | 2 | 4 GB | 1100 GB | ### Scenario 4: Each template is reused and has multiple signers per document | Average document size | vCPU | RAM | Disk | | --- | --- | --- | --- | | 500 KB | 1 | 1 GB | 18 GB | | 5 MB | 1 | 2 GB | 175 GB | | 100 MB | 2 | 4 GB | 3500 GB | The specified requirements are approximate and may vary depending on the specific usage conditions of the DocuSeal app. They are intended to provide a general understanding of resource requirements. Database requirements --------------------- DocuSeal’s primary and recommended database is **PostgreSQL**. **SQLite** and **MySQL** are supported with partial compatibility. * **Small business or personal use (fewer than 1,000 documents per year):** PostgreSQL, SQLite, and MySQL are all suitable options. * **Production API and embedding use:** PostgreSQL is recommended for heavy production workloads with 1,000+ documents per year. **Note about MySQL:** MySQL support is limited due to text field length constraints, lack of full-text search support, and lack of partial indexes. Additional recommendations -------------------------- * We recommend using more RAM if you plan to process large files or a large number of files simultaneously. * Use SSD disks if you plan to process large files. --- # Configuring SAML with Okta | DocuSeal Docs Menu Configuring SAML with Okta ========================== ### Step 1: Create a new SAML app in Okta 1. Log in to your Okta admin dashboard. 2. Navigate to **Applications** and click **Create App Integration**. 3. Select **SAML 2.0** as the sign-on method and click **Next**. 4. Enter the **App Name** and optionally add a logo. Click **Next**. ![Create a new SAML app in Okta](https://www.docuseal.com/packs/static/images/docs/okta-saml-new-application-202a6cf81dab50d22069.jpg) ### Step 2: Configure SAML settings 1. In the **General Settings**, pass the SSO URL and Metadata URL from the DocuSeal application settings found on the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. * **SSO URL**: Paste the SSO URL provided by DocuSeal. * **Entity ID**: Use the Metadata URL from DocuSeal. 2. Set the **Name ID Format** to **EmailAddress** and ensure that the **Application username** is also set to **Email**. 3. Click **Next** to proceed to the feedback section. ![Configure SAML settings in Okta](https://www.docuseal.com/packs/static/images/docs/okta-saml-integration-settings-1c595018865bee71ef1f.jpg) ### Step 3: Application feedback 1. Select **I’m an Okta customer adding an internal app**. 2. Check the box **This is an internal app that we have created**. 3. Click **Finish**. ### Step 4: Retrieve Okta Sign-On URL 1. Expand the **Sign-On** tab in the newly created SAML app settings. 2. Copy the **Okta Sign-On URL**. ![Retrieve Okta Sign-On URL](https://www.docuseal.com/packs/static/images/docs/okta-saml-metadata-sin-on-url-cc4acd21c9d0e0ad8bf1.jpg) ### Step 5: Configure DocuSeal with Okta information 1. In the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page, paste the copied **Sign-On URL** to the **SSO Service URL** field. 2. Additionally, download the certificate from Okta: * Go to the **Sign-On** tab and click on **View Setup Instructions**. * Download the certificate in **.pem** format. * Open the **.pem** file in a text editor and copy its contents. 3. Paste the copied certificate content into the **Certificate** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. ![Download Okta certificate](https://www.docuseal.com/packs/static/images/docs/okta-saml-certificate-f3cc1747f2ad43c84808.jpg) ### Step 6: Assign users to the SAML app 1. Go back to the application settings in Okta. 2. Navigate to the **Assignments** tab. 3. Click **Assign** and choose **Assign to People** or **Assign to Groups**. 4. Select the users or groups you want to assign to this SAML app. ![Okta SAML app assignment](https://www.docuseal.com/packs/static/images/docs/okta-saml-app-assignment-ed148bbe4f10b6c03a09.jpg) Ensure that the email addresses of your users in DocuSeal match the assigned Okta user email addresses. This is crucial for the SAML SSO to function correctly. --- # Configuring DocuSeal behind an existing Reverse proxy (nginx) | DocuSeal Docs Menu Configuring DocuSeal behind an existing Reverse proxy (nginx) ============================================================= If you’re deploying DocuSeal behind an existing reverse proxy (such as nginx), you need to ensure that specific headers are set to ensure the proper functioning of the application. Failure to set these headers might result in a 422 error page. If you encounter this issue, you might see the following log entry: ActionController::InvalidAuthenticityToken (HTTP Origin header (https://docuseal.mydomain.com) didn't match request.base_url (http://docuseal.mydomain.com)): To resolve this issue add the following configuration settings inside the `location`: location / { proxy_pass http://yourdocuseal.internal.hostname:3000/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; } --- # Convert legacy .p12 .pfx files to support OpenSSL 3 | DocuSeal Docs Menu Convert legacy .p12 .pfx files to support OpenSSL 3 =================================================== With OpenSSL 3, certain encryption algorithms have been deprecated or removed to prioritize stronger security measures and streamline the library’s codebase. OpenSSL::PKCS12::PKCS12Error (PKCS12_parse: unsupported (Global default library context, Algorithm (RC2-40-CBC : 0), Properties ())) This error message indicates that your .p12 file uses a legacy algorithm not supported by OpenSSL 3.0. Follow these steps to convert your certificate to the new format compatible with the latest OpenSSL version. ### 1\. Creating a temporary legacy certificate copy: Replace **CERTIFICATE\_FILE\_NAME** with the actual name of your PKCS12 certificate file. cp CERTIFICATE_FILE_NAME.p12 temp_certificate.p12 ### 2\. Conversion to PEM Format: Convert the **temp\_certificate.p12** file from PKCS12 format to a **temp\_certificate.pem** file in PEM format without encrypting the private key in the output file. Replace **CERTIFICATE\_PASSWORD** with the actual password of the certificate. openssl pkcs12 -legacy -in temp_certificate.p12 -out temp_certificate.pem -nodes -passin pass:CERTIFICATE_PASSWORD ### 3\. Extracting the Private key: Extract the private key from the **temp\_certificate.p12** file in PKCS12 format and store it in the **temp\_certificate.key** file. The private key in the output file will be encrypted. openssl pkcs12 -legacy -in temp_certificate.p12 -nocerts -out temp_certificate.key -passin pass:CERTIFICATE_PASSWORD -passout pass:'CERTIFICATE_PASSWORD' ### 4\. Creating a new certificate: Generate a new **new\_certificate.p12** file in PKCS12 format based on the private key from the **temp\_certificate.key** file and the certificate from the **temp\_certificate.pem** file. openssl pkcs12 -export -out new_certificate.p12 -inkey temp_certificate.key -in temp_certificate.pem -passin pass:CERTIFICATE_PASSWORD -passout pass:CERTIFICATE_PASSWORD ### 5\. Deleting temporary files: rm -rf temp_certificate.p12 temp_certificate.pem temp_certificate.key Done! Your certificate is now ready and named **new\_certificate.p12**. You can utilize it for document signing. --- # Embedded Form Builder | DocuSeal Docs Menu Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied Copy as Markdown Copy as Markdown Copied [Signing Form](https://www.docuseal.com/docs/embedded/form) [Form Builder](https://www.docuseal.com/docs/embedded/builder) This component allows you to seamlessly integrate an entire document creation and signing form anywhere on your website or application. It supports **JS+HTML**, **Vue**, **Angular** and **React**. * JavaScript * React * Vue * Angular Copy Copied [View LIVE DEMO](https://www.docuseal.com/docs/embedded/builder#live_example) ### Related Guides [Complete document creation and signing process in your SaaS with JavaScript](https://www.docuseal.com/guides/complete-document-creation-and-signing-process-in-your-saas-with-javascript) ### Attributes data-token String required JSON Web Token (JWT HS256) with a payload signed using the API key. **Ensure that the JWT token is generated on the backend to prevent unauthorized access to your documents**. user\_email String required Email of the owner of the API signing key - admin user email. integration\_email String Email of the user to create a template for. Example: signer@example.com template\_id Number ID of the template to open in the form builder. Optional when \`document\_urls\` are specified. external\_id String Your application-specific unique string key to identify this template within your app. folder\_name String The folder name in which the template should be created. document\_urls Array An Array of URLs with PDF files to open in the form builder. Optional when \`template\_id\` is specified. Example: \['https://www.irs.gov/pub/irs-pdf/fw9.pdf'\] name String New template name when creating a template with document\_urls specified. Example: Integration W-9 Test Form extract\_fields Boolean Pass \`false\` to disable automatic PDF form fields extraction. PDF fields are automatically added by default. Show All data-host String DocuSeal host domain name. Only use this attribute if you are using the on-premises DocuSeal installation or docuseal.eu Cloud. Example: yourdomain.com data-roles String Comma separated submitter role names to be used by default in the form. Example: Company,Customer data-fields String A list of default custom fields with \`name\` to be added to the document. Should contain an array of field properties as a JSON encoded string. Example: \[{ "name": "FIELD\_1", "type": "date", "role": "Customer", "default\_value": "2021-01-01" }\] Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All data-submitters String A list of default submitters with \`role\` name to be added to the document. Should contain an array of field properties as a JSON encoded string. Example: \[{ "email": "example@company.com", "name": "John Doe", "phone": "+1234567890", "role": "Customer" }\] Child parameters email String Submitter email. role String required Submitter role name. name String Submitter name. phone String Submitter phone number, formatted according to the E.164 standard. Show All data-required-fields String A list of required default custom fields with \`name\` that should be added to the document. Should contain an array of field properties as a JSON encoded string. Example: \[{ "name": "FIELD\_1", "type": "date", "role": "Customer", "default\_value": "2021-01-01" }\] Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All data-field-types String Comma separated field type names to be used in the form builder. All field types are used by default. Possible values: heading, text, signature, initials, date, datenow, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough Example: text,date data-draw-field-type String Field type to be used by default with the field drawing tool. Default: text Example: signature data-custom-button-title String Custom button title. This button will be displayed on the top right corner of the form builder. data-custom-button-url String Custom button URL. Only absolute URLs are supported. data-with-title Boolean Set \`false\` to remove document title from the builder. Default: true email-subject String Email subject for the signature request. Required if \`email-body\` specified email-body String Email body for the signature request. Required if \`email-subject\` specified data-with-send-button Boolean Show the "Recipients" button. Default: true data-with-upload-button Boolean Show the "Upload" button. Default: true data-with-add-page-button Boolean Show the "Add Blank Page" button. Default: false data-with-sign-yourself-button Boolean Show the "Sign Yourself" button. Default: true data-with-documents-list Boolean Set \`false\` to not show the documents list on the left. Documents list is displayed by default. Default: true data-with-fields-list Boolean Set \`false\` to not show the fields list on the right. Fields list is displayed by default. Default: true data-with-fields-detection Boolean Display a button to automatically detect and add fields to the document with AI. Default: false data-with-field-placeholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false data-with-signature-id Boolean Set to \`true\` to enable Signature ID by default for newly added fields. If set to \`false\`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default. data-preview Boolean Show template in preview mode without ability to edit it. Default: false data-input-mode Boolean Open template in data input mode to prefill fields with default values. Default: false data-only-defined-fields Boolean Allow to add fields only defined in the \`data-fields\` attribute. Default: false data-autosave Boolean Set \`false\` to disable form changes autosaving. Default: true data-i18n String JSON encoded string that contains i18n keys to replace the default UI text with custom values. See [template\_builder/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/template_builder/i18n.js) for available i18n keys. Default: {} data-language String UI language, 'en', 'es', 'de', 'fr', 'pt', 'nl', 'he', 'ar' languages are available. Default: en data-background-color String The form builder background color. Only HEX color codes are supported. Example: #ffffff data-custom-css String Custom CSS styles to be applied to the form builder. Example: #sign\_yourself\_button { background-color: #FFA500; } ### Callbacks load Event Custom event to be triggered on loading the form builder template data. Example: document.querySelector('docuseal-builder').addEventListener('load', (e) => e.detail) upload Event Custom event to be triggered on uploading a document to the template. Example: document.querySelector('docuseal-builder').addEventListener('upload', (e) => e.detail) send Event Custom event to be triggered on sending documents for signature to recipients. Example: document.querySelector('docuseal-builder').addEventListener('send', (e) => e.detail) change Event Custom event to be triggered every time a change to the template is made. Example: document.querySelector('docuseal-builder').addEventListener('change', (e) => e.detail) save Event Custom event to be triggered on saving changes of the template form. Example: document.querySelector('docuseal-builder').addEventListener('save', (e) => e.detail)Frontend Backend Frontend Backend Copy Copied import React, { useState, useEffect } from 'react'; import { DocusealBuilder } from '@docuseal/react' const App = () => { const [token, setToken] = useState(); useEffect(() => { fetch('/api/docuseal/builder_token', { method: 'POST', }) .then((response) => response.json()) .then((data) => { setToken(data.token); }); }, []); return token && ; }; const jwt = require('jsonwebtoken'); const token = jwt.sign({ user_email: 'admin_user@example.com', integration_email: 'signer@example.com', external_id: 'TestForm123', name: 'Integration W-9 Test Form', document_urls: ['https://www.irs.gov/pub/irs-pdf/fw9.pdf'], }, 'API_KEY'); [View LIVE DEMO](https://www.docuseal.com/docs/embedded/builder#live_example) ### Related Guides [Complete document creation and signing process in your React SaaS](https://www.docuseal.com/guides/complete-document-creation-and-signing-process-in-your-react-saas) ### Attributes token String required JSON Web Token (JWT HS256) with a payload signed using the API key. **Ensure that the JWT token is generated on the backend to prevent unauthorized access to your documents**. user\_email String required Email of the owner of the API signing key - admin user email. integration\_email String Email of the user to create a template for. Example: signer@example.com template\_id Number ID of the template to open in the form builder. Optional when \`document\_urls\` are specified. external\_id String Your application-specific unique string key to identify this template within your app. folder\_name String The folder name in which the template should be created. document\_urls Array An Array of URLs with PDF files to open in the form builder. Optional when \`template\_id\` is specified. Example: \['https://www.irs.gov/pub/irs-pdf/fw9.pdf'\] name String New template name when creating a template with document\_urls specified. Example: Integration W-9 Test Form extract\_fields Boolean Pass \`false\` to disable automatic PDF form fields extraction. PDF fields are automatically added by default. Show All host String DocuSeal host domain name. Only use this attribute if you are using the on-premises DocuSeal installation or docuseal.eu Cloud. Example: yourdomain.com customButton Object Custom button will be displayed on the top right corner of the form builder. title String required Custom button title. url String required Custom button URL. Only absolute URLs are supported. roles Array Submitter role names to be used by default in the form. fieldTypes Array Field type names to be used in the form builder. All field types are used by default. Possible values: heading, text, signature, initials, date, datenow, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough drawFieldType String Field type to be used by default with the field drawing tool. Default: text Example: signature fields Array An array of default custom field properties with \`name\` to be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All submitters Array An array of default submitters with \`role\` name to be added to the document. Child parameters email String Submitter email. role String required Submitter role name. name String Submitter name. phone String Submitter phone number, formatted according to the E.164 standard. Show All requiredFields Array An array of default required custom field properties with \`name\` that should be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All emailMessage Object Email subject and body for the signature request. subject String required Email subject for the signature request. body String required Email body for the signature request. withTitle Boolean Set \`false\` to remove document title from the builder. Default: true withSendButton Boolean Show the "Send" button. Default: true withUploadButton Boolean Show the "Upload" button. Default: true withAddPageButton Boolean Show the "Add Blank Page" button. Default: false withSignYourselfButton Boolean Show the "Sign Yourself" button. Default: true withDocumentsList Boolean Set \`false\` to not show the documents list on the left. Documents list is displayed by default. Default: true withFieldsList Boolean Set \`false\` to not show the fields list on the right. Fields list is displayed by default. Default: true withFieldsDetection Boolean Display a button to automatically detect and add fields to the document with AI. Default: false withFieldPlaceholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false withSignatureId Boolean Set to \`true\` to enable Signature ID by default for newly added fields. If set to \`false\`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default. onlyDefinedFields Boolean Allow to add fields only defined in the \`fields\` prop. Default: false preview Boolean Show template in preview mode without ability to edit it. Default: false inputMode Boolean Open template in data input mode to prefill fields with default values. Default: false autosave Boolean Set \`false\` to disable form changes autosaving. Default: true language String UI language, 'en', 'es', 'de', 'fr', 'pt', 'nl', 'he', 'ar' languages are available. Default: en i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [template\_builder/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/template_builder/i18n.js) for available i18n keys. Default: {} backgroundColor String The form builder background color. Only HEX color codes are supported. Example: #ffffff customCss String Custom CSS styles to be applied to the form builder. Example: #sign\_yourself\_button { background-color: #FFA500; } ### Callbacks onLoad Function Function to be called on loading the form builder template data. Example: (data) => { console.log(data) } onUpload Function Function to be called on uploading a document to the template. Example: (data) => { console.log(data) } onSend Function Function to be called on sending documents for signature to recipients. Example: (data) => { console.log(data) } onChange Function Function to be called when changes are made to the template form. Example: (data) => { console.log(data) } onSave Function Function to be called on saving changes of the template form. Example: (data) => { console.log(data) } Frontend Backend Frontend Backend Copy Copied const jwt = require('jsonwebtoken'); const token = jwt.sign({ user_email: 'admin_user@example.com', integration_email: 'signer@example.com', external_id: 'TestForm123', name: 'Integration W-9 Test Form', document_urls: ['https://www.irs.gov/pub/irs-pdf/fw9.pdf'], }, 'API_KEY'); [View LIVE DEMO](https://www.docuseal.com/docs/embedded/builder#live_example) ### Related Guides [Complete document creation and signing process in your Vue SaaS](https://www.docuseal.com/guides/complete-document-creation-and-signing-process-in-your-vue-saas) ### Attributes token String required JSON Web Token (JWT HS256) with a payload signed using the API key. **Ensure that the JWT token is generated on the backend to prevent unauthorized access to your documents**. user\_email String required Email of the owner of the API signing key - admin user email. integration\_email String Email of the user to create a template for. Example: signer@example.com template\_id Number ID of the template to open in the form builder. Optional when \`document\_urls\` are specified. external\_id String Your application-specific unique string key to identify this template within your app. folder\_name String The folder name in which the template should be created. document\_urls Array An Array of URLs with PDF files to open in the form builder. Optional when \`template\_id\` is specified. Example: \['https://www.irs.gov/pub/irs-pdf/fw9.pdf'\] name String New template name when creating a template with document\_urls specified. Example: Integration W-9 Test Form extract\_fields Boolean Pass \`false\` to disable automatic PDF form fields extraction. PDF fields are automatically added by default. Show All host String DocuSeal host domain name. Only use this attribute if you are using the on-premises DocuSeal installation or docuseal.eu Cloud. Example: yourdomain.com custom-button Object Custom button will be displayed on the top right corner of the form builder. title String required Custom button title. url String required Custom button URL. Only absolute URLs are supported. only-defined-fields Boolean Allow to add fields only defined in the \`:fields\` prop. Default: false with-send-button Boolean Show the "Recipients" button. Default: true roles Array Submitter role names to be used by default in the form. field-types Array Field type names to be used in the form builder. All field types are used by default. Possible values: heading, text, signature, initials, date, datenow, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough draw-field-type String Field type to be used by default with the field drawing tool. Default: text Example: signature fields Array An array of default custom field properties with \`name\` to be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All submitters Array An array of default submitters with \`role\` name to be added to the document. Child parameters email String Submitter email. role String required Submitter role name. name String Submitter name. phone String Submitter phone number, formatted according to the E.164 standard. Show All required-fields Array An array of default required custom field properties with \`name\` that should be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All email-message Object Email subject and body for the signature request. subject String required Email subject for the signature request. body String required Email body for the signature request. with-title Boolean Set \`false\` to remove document title from the builder. Default: true with-upload-button Boolean Show the "Upload" button. Default: true with-add-page-button Boolean Show the "Add Blank Page" button. Default: false with-sign-yourself-button Boolean Show the "Sign Yourself" button. Default: true with-documents-list Boolean Set \`false\` to not show the documents list on the left. Documents list is displayed by default. Default: true with-fields-list Boolean Set \`false\` to not show the fields list on the right. Fields list is displayed by default. Default: true with-fields-detection Boolean Display a button to automatically detect and add fields to the document with AI. Default: false with-field-placeholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false with-signature-id Boolean Set to \`true\` to enable Signature ID by default for newly added fields. If set to \`false\`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default. autosave Boolean Set \`false\` to disable form changes autosaving. Default: true preview Boolean Show template in preview mode without ability to edit it. Default: false input-mode Boolean Open template in data input mode to prefill fields with default values. Default: false language String UI language, 'en', 'es', 'de', 'fr', 'pt', 'nl', 'he', 'ar' languages are available. Default: en i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [template\_builder/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/template_builder/i18n.js) for available i18n keys. Default: {} background-color String The form builder background color. Only HEX color codes are supported. Example: #ffffff custom-css String Custom CSS styles to be applied to the form builder. Example: #sign\_yourself\_button { background-color: #FFA500; } ### Callbacks @load Function Function to be called on loading the form builder template data. Example: onBuilderLoad @upload Function Function to be called on uploading a document to the template. Example: onBuilderUpload @send Function Function to be called on sending documents for signature to recipients. Example: onBuilderSend @change Function Function to be called when changes are made to the template form. Example: onBuilderChange @save Function Function to be called on saving changes of the template form. Example: onBuilderSave Frontend Backend Frontend Backend Copy Copied import { Component, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { DocusealBuilderComponent } from '@docuseal/angular'; @Component({ selector: 'app-root', standalone: true, imports: [DocusealBuilderComponent], template: `
` }) export class AppComponent implements OnInit { token: string = '' constructor(private http: HttpClient) {} ngOnInit() { this.http.post('/api/docuseal/builder_token', {}).subscribe((data: any) => { this.token = data.token; }); } } const jwt = require('jsonwebtoken'); const token = jwt.sign({ user_email: 'admin_user@example.com', integration_email: 'signer@example.com', external_id: 'TestForm123', name: 'Integration W-9 Test Form', document_urls: ['https://www.irs.gov/pub/irs-pdf/fw9.pdf'], }, 'API_KEY'); [View LIVE DEMO](https://www.docuseal.com/docs/embedded/builder#live_example) ### Related Guides [Complete document creation and signing process in your Angular SaaS](https://www.docuseal.com/guides/complete-document-creation-and-signing-process-in-your-angular-saas) ### Attributes token String required JSON Web Token (JWT HS256) with a payload signed using the API key. **Ensure that the JWT token is generated on the backend to prevent unauthorized access to your documents**. user\_email String required Email of the owner of the API signing key - admin user email. integration\_email String Email of the user to create a template for. Example: signer@example.com template\_id Number ID of the template to open in the form builder. Optional when \`document\_urls\` are specified. external\_id String Your application-specific unique string key to identify this template within your app. folder\_name String The folder name in which the template should be created. document\_urls Array An Array of URLs with PDF files to open in the form builder. Optional when \`template\_id\` is specified. Example: \['https://www.irs.gov/pub/irs-pdf/fw9.pdf'\] name String New template name when creating a template with document\_urls specified. Example: Integration W-9 Test Form extract\_fields Boolean Pass \`false\` to disable automatic PDF form fields extraction. PDF fields are automatically added by default. Show All host String DocuSeal host domain name. Only use this attribute if you are using the on-premises DocuSeal installation or docuseal.eu Cloud. Example: yourdomain.com customButton Object Custom button will be displayed on the top right corner of the form builder. title String required Custom button title. url String required Custom button URL. Only absolute URLs are supported. roles Array Submitter role names to be used by default in the form. fieldTypes Array Field type names to be used in the form builder. All field types are used by default. Possible values: heading, text, signature, initials, date, datenow, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough drawFieldType String Field type to be used by default with the field drawing tool. Default: text Example: signature fields Array An array of default custom field properties with \`name\` to be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All submitters Array An array of default submitters with \`role\` name to be added to the document. Child parameters email String Submitter email. role String required Submitter role name. name String Submitter name. phone String Submitter phone number, formatted according to the E.164 standard. Show All requiredFields Array An array of default required custom field properties with \`name\` that should be added to the document. Child parameters name String required Field name. type String Field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Submitter role name for the field. default\_value String Default value of the field. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. width Number Field width in pixels. height Number Field height in pixels. format String Field format. Depends on the field type. options Array Field options. Required for the select field type. validation Object Field validation rules. pattern String Field pattern. Example: ^\[0-9\]{5}$ message String Validation error message. Show All emailMessage Object Email subject and body for the signature request. subject String required Email subject for the signature request. body String required Email body for the signature request. withTitle Boolean Set \`false\` to remove document title from the builder. Default: true withSendButton Boolean Show the "Send" button. Default: true withUploadButton Boolean Show the "Upload" button. Default: true withAddPageButton Boolean Show the "Add Blank Page" button. Default: false withSignYourselfButton Boolean Show the "Sign Yourself" button. Default: true withDocumentsList Boolean Set \`false\` to not show the documents list on the left. Documents list is displayed by default. Default: true withFieldsList Boolean Set \`false\` to not show the fields list on the right. Fields list is displayed by default. Default: true withFieldsDetection Boolean Display a button to automatically detect and add fields to the document with AI. Default: false withFieldPlaceholder Boolean Set \`true\` to display field name placeholders instead of the field type icons. Default: false withSignatureId Boolean Set to \`true\` to enable Signature ID by default for newly added fields. If set to \`false\`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default. onlyDefinedFields Boolean Allow to add fields only defined in the \`fields\` prop. Default: false preview Boolean Show template in preview mode without ability to edit it. Default: false inputMode Boolean Open template in data input mode to prefill fields with default values. Default: false autosave Boolean Set \`false\` to disable form changes autosaving. Default: true language String UI language, 'en', 'es', 'de', 'fr', 'pt', 'nl', 'he', 'ar' languages are available. Default: en i18n Object Object that contains i18n keys to replace the default UI text with custom values. See [template\_builder/i18n.js](https://github.com/docusealco/docuseal/blob/master/app/javascript/template_builder/i18n.js) for available i18n keys. Default: {} backgroundColor String The form builder background color. Only HEX color codes are supported. Example: #ffffff customCss String Custom CSS styles to be applied to the form builder. Example: #sign\_yourself\_button { background-color: #FFA500; } ### Callbacks onLoad Event emitter Event emitted on loading the form builder template data. Example: handleLoad($event) onUpload Event emitter Event emitted on uploading a document to the template. Example: handleUpload($event) onSend Event emitter Event emitted on sending documents for signature to recipients. Example: handleSend($event) onChange Function Function to be called when changes are made to the template form. Example: handleChange($event) onSave Event emitter Event emitted on saving changes of the template form. Example: handleSave($event) Live Example ------------ Custom Fields Required Fields Only Defined Fields Preview Autosave Sign Yourself Button Custom CSS Language --- # Configuring SAML with Keycloak | DocuSeal Docs Menu Configuring SAML with Keycloak ============================== ### Step 1: Create a new client in Keycloak 1. Log in to your Keycloak admin console. 2. Navigate to the **Clients** section and click **Create**. 3. In the **Client ID** field, enter the **Metadata URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. 4. In the **Home URL** field, enter the **Single Sign On URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. 5. In the **Valid Redirect URIs** field, enter your domain URL with a wildcard, such as: http://your-domain/* ![Create a new SAML client in Keycloak](https://www.docuseal.com/packs/static/images/docs/keycloak-saml-new-client-1320e399c2b7b0011b56.jpg) ### Step 2: Configure client settings 1. In the newly created client settings, set the **Name ID Format** to **email** . ![Configure SAML client settings in Keycloak](https://www.docuseal.com/packs/static/images/docs/keycloak-saml-name-id-format-a0f63d95cc1bf117bceb.jpg) 2. Disable the **Client Signature Required** option in the **Client** > **Keys** section. ![Client Signature Required in Keycloak](https://www.docuseal.com/packs/static/images/docs/keycloak-saml-client-keys-c935ab67aafa79a18882.jpg) ### Step 3: Retrieve SAML XML metadata 1. Go to your **Realm Settings** and open the **SAML XML Metadata**. ![XML Metadata in Keycloak](https://www.docuseal.com/packs/static/images/docs/keycloak-saml-xml-metadata-f574825d2c401e5cb655.jpg) 2. Copy the **Realm** location URL from the XML and save this URL in the DocuSeal **SSO Service URL** form field. This URL will look something like this: https://your-domain-keycloak.com/realms/Realm-Name/protocol/saml ![DocuSeal SSO Service URL](https://www.docuseal.com/packs/static/images/docs/keycloak-docuseal-sso-service-url-ddabb0a0eb3510b32179.jpg) ### Step 4: Retrieve and configure the certificate 1. Go to your **Realm** and navigate to the **Keys** section. 2. Copy the certificate and save it in the DocuSeal application SAML form. ![Retrieve and configure the certificate in Keycloak](https://www.docuseal.com/packs/static/images/docs/keycloak-saml-certificate-ba29bf6f75c94ec30c6e.jpg) Ensure that the email addresses of your users in DocuSeal match the assigned Keycloak user email addresses. This is crucial for the SAML SSO to function correctly. --- # Configure SAML with Authentic | DocuSeal Docs Menu Configure SAML with Authentic ============================= ### Step 1: Create a new SAML service provider in Authentic 1. Log in to your Authentic admin dashboard. 2. Navigate to **Applications** > **Providers** and click **Create**. 3. Choose **SAML Provider** as the provider type and click **Next**. 4. Fill in the following fields: * **Name**: Enter a name for your service provider, e.g., **docuseal-saml** * **Authentication Flow**: Select the appropriate authentication flow. * **Authorization Flow**: Select the appropriate authorization flow. * **ACS URL**: Enter the **Single Sign On URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. * **Service Provider Binding**: Select the POST binding. * **Audience**: Enter the **Metadata URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. ![Create a new SAML service provider in Authentic](https://www.docuseal.com/packs/static/images/docs/authentic-saml-new-provider-34383065b2dbc4fd77b0.jpg) ### Step 2: Configure advanced SAML settings 1. Expand the **Advanced protocol settings** section. 2. Choose appropriate **Signing Certificate** and **Verification Certificate**. 3. Set the **Email** for the **Property mappings** and for the **Name ID Property Mapping**. 4. Click **Finish** to create the service provider. ![Configure advanced SAML settings in Authentic](https://www.docuseal.com/packs/static/images/docs/authentic-saml-advanced-protocol-settings-d1508121ae7330f4149e.jpg) ### Step 3: Create an application 1. Navigate to the **Applications** > **Applications** and click **Create**. 2. Fill in the following fields: * **Name**: Enter a name for your application, e.g., **DocuSeal** * **Slug**: Enter a slug for your application, e.g., **docuseal** * **Provider**: Select the SAML provider you created earlier. ![Create a new application in Authentic](https://www.docuseal.com/packs/static/images/docs/authentic-saml-new-application-01fe50708e68d3645345.jpg) ### Step 4: Configure DocuSeal with Authentic information 1. Navigate to the **System** > **Certificates** section in Authentic. 2. Click on the certificate that you selected for the SAML provider. 3. Download the certificate in **.pem** format. 4. Open the **.pem** file in a text editor and copy its contents. 5. Paste the copied certificate content into the **Certificate** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. ![Download Authentic certificate](https://www.docuseal.com/packs/static/images/docs/authentic-saml-download-certificate-7e824952a560a9f7bc26.jpg) Ensure that the email addresses of your users in DocuSeal match the assigned Authentic user email addresses. This is crucial for the SAML SSO to function correctly. --- # Configuring SAML with Google Workspace | DocuSeal Docs Menu Configuring SAML with Google Workspace ====================================== ### Step 1: Add custom SAML app in Google Admin Console 1. Log in to [Google Admin Console](https://admin.google.com/) . 2. Navigate to Apps: Go to **Apps** > **Web and mobile apps**. 3. Add Custom SAML App: Click **Add App** and select **Add custom SAML app**. 4. Enter App Details: * **App Name**: Enter a name for your app. * **App Icon**: Optionally, upload an icon. ![Add custom SAML app in Google Admin Console](https://www.docuseal.com/packs/static/images/docs/google-saml-add-custom-app-a6846b86bd31dc61eb7d.jpg) ### Step 2: Google Identity Provider details 1. On the **Google Identity Provider details** page copy SSO URL and Entity ID and the Certificate 2. Copy **SSO URL** and paste it into the **SSO Service URL** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. 3. Copy **Certificate** and paste it into the **Certificate** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. 4. Click **Continue**. ![Google Identity Provider details](https://www.docuseal.com/packs/static/images/docs/google-saml-identity-provider-details-6f794b7235aef726c6c3.jpg) ### Step 3: Service provider details 1. Enter DocuSeal Information: * **ACS URL**: Enter the **Single Sign-On URL** from DocuSeal. * **Entity ID**: Enter the **Metadata URL** from DocuSeal. * **Start URL**: Optionally, enter a URL to redirect users after authentication. * **Name ID Format**: Set to **Email**. * **Name ID**: Select the **Primary Email**. 2. Click **Continue**. ![Google Service provider details](https://www.docuseal.com/packs/static/images/docs/google-saml-service-provider-details-fbb177545f5f0654edea.jpg) ### Step 4: Attribute mapping 1. DocuSeal does not require any attribute mapping. Click **Finish** to complete the setup. 2. Done! You have successfully configured SAML SSO with Google. Ensure that the email addresses of your users in DocuSeal match the assigned Google user email addresses. This is crucial for the SAML SSO to function correctly. --- # Configuring SAML with Microsoft Entra ID | DocuSeal Docs Menu Configuring SAML with Microsoft Entra ID ======================================== ### Step 1: Create a new Entra ID SAML application 1. Log in to [Azure Portal](https://portal.azure.com/) as an administrator. 2. Click on **Microsoft Entra ID** in the control panel, or use the search bar at the top. 3. In the left-hand menu, select **Enterprise applications**. 4. Click on **New application** and choose **Create your own application**. 5. Enter a name for your application and select **Integrate any other application you don’t find in the gallery (Non-gallery)**. ![Microsoft Entra ID Create New Application](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-create-new-application-6408a59c6fc2454a2976.jpg) 6. Click **Create** and wait for the application creation process to complete. 7. Once the application is created, go to the application’s page and click on **Set up single sign-on**. ![Microsoft Entra ID Set Up Single Sign-On](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-set-up-single-sign-on-2814ebb6ced37f801b0c.jpg) ### Step 2: Basic SAML Configuration 1. Click on the edit icon in the top right corner of the **Basic SAML Configuration** block. 2. Enter DocuSeal Information: * **Identifier (Entity ID)**: Enter the **Metadata URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. * **Reply URL (Assertion Consumer Service URL)**: Enter the **Single Sign-On URL** from the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. 3. Click **Save**. ![Microsoft Entra ID Basic SAML Configuration](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-basic-saml-configuration-35fc4fb79217574a49a8.jpg) ### Step 3: Attributes & Claims 1. Click on **Edit** in the **Attributes & Claims** block. 2. Select the **Unique User Identifier (Name ID)** field. 3. For the **Name identifier format**, choose **Email Address**. 4. For the **Source attribute**, select **user.userprincipalname** 5. Click **Save**. ![Microsoft Entra ID Manage Name ID Format](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-manage-name-id-format-2860eeeeb9824f6b6411.webp) ### Step 4: SAML Certificates 1. Click on **Download** next to **Certificate (Base64)** and save the file. 2. Open the **.cer** file in a text editor and copy its contents. 3. Paste the copied certificate content into the **Certificate** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. ![Microsoft Entra ID SAML Certificate](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-saml-certificate-4c5609354a1f4d99db42.jpg) ### Step 5: Set up Login URL 1. Copy **Login URL** and paste it into the **SSO Service URL** field in the [DocuSeal SAML SSO](https://docuseal.com/settings/sso) page. ![Microsoft Entra ID Login URL](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-login-url-a35fdef2fcefe6e297b5.webp) ### Step 6: Test single sign-on 1. Click on **Test** at the bottom of the page. 2. In the panel that opens on the right, click on **Test sign in**. 3. If everything is working correctly, you will be redirected to the DocuSeal dashboard. If you encounter an error indicating that you don’t have access, complete step 7 and try again. ![Microsoft Entra ID Test Single Sign-On](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-test-single-sign-on-0f15cfcd6b5d5f984de1.jpg) ### Step 7: Assign users 1. Click on **Users and groups** in the left-hand menu. 2. Click on **Add user/group** and select the users who should have access to DocuSeal. 3. Click **Select** then **Assign**. ![Microsoft Entra ID Assign Users](https://www.docuseal.com/packs/static/images/docs/microsoft-entra-id-assing-users-b2e8737556d62e4c4e1a.jpg) Ensure that the email addresses of your users in DocuSeal match the assigned Microsoft user email addresses. This is crucial for the SAML SSO to function correctly. --- # API Reference | DocuSeal Docs Menu [Send signature request\ \ Learn More →](https://www.docuseal.com/docs/api#create-a-submission) [Upload PDFs to sign\ \ Learn More →](https://www.docuseal.com/docs/api#create-a-submission-from-pdf) [Download signed PDFs\ \ Learn More →](https://www.docuseal.com/docs/api#webhooks_title) [HTML to signing form\ \ Learn More →](https://www.docuseal.com/docs/api#create-a-submission-from-html) [Learn from Guides →](https://www.docuseal.com/guides) Explore our API You can also discover our API with Postman and OpenAPI. [Get API key](https://docuseal.com/sign_up?redir=https%3A%2F%2Fconsole.docuseal.com%2Fapi) [Run in Postman](https://www.postman.com/docuseal/docuseal/collection/baauu23/docuseal-api) [OpenAPI Specs](https://editor.swagger.io/?url=https%3A%2F%2Fconsole.docuseal.com%2Fopenapi.yml) MCP Choose your language image/svg+xml Official PHP Logo image/svg+xml Official PHP Logo Colin Viebrock Copyright Colin Viebrock 1997 - All rights reserved. 1997 [Github](https://www.docuseal.com/docs/api) Copy Copied curl https://api.docuseal.com/templates -H 'X-Auth-Token: API_KEY' Submissions ----------- Signature requests can be initiated with Submissions API. Submissions can contain one submitter if signed by a single party or multiple submitters if the document template form contains signatures and fields to be collected and filled by multiple parties. Initiate new submissions to request signatures for specified submitters via email or phone number. get /submissions get /submissions/{id} get /submissions/{id}/documents post /submissions post /submissions/pdf post /submissions/docx post /submissions/html delete /submissions/{id} ### List all submissions Copy as Markdown Copy as Markdown Copied get /submissions The API endpoint provides the ability to retrieve a list of available submissions. Parameters template\_id Integer The template ID allows you to receive only the submissions created from that specific template. status String Filter submissions by status. Possible values: pending, completed, declined, expired q String Filter submissions based on submitters name, email or phone partial match. slug String Filter submissions by unique slug. Example: NtLDQM7eJX2ZMd template\_folder String Filter submissions by template folder name. archived Boolean Returns only archived submissions when \`true\` and only active submissions when \`false\`. limit Integer The number of submissions to return. Default value is 10. Maximum value is 100. after Integer The unique identifier of the submission to start the list from. It allows you to receive only submissions with an ID greater than the specified value. Pass ID value from the \`pagination.next\` response to load the next batch of submissions. before Integer The unique identifier of the submission that marks the end of the list. It allows you to receive only submissions with an ID less than the specified value. Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const { data, pagination } = await resp.json(); Example Response Copy Copied { "data": [\ {\ "id": 1,\ "name": null,\ "source": "link",\ "submitters_order": "random",\ "slug": "VyL4szTwYoSvXq",\ "status": "completed",\ "audit_log_url": "https://docuseal.com/file/hash/example.pdf",\ "combined_document_url": null,\ "expire_at": null,\ "completed_at": "2023-12-10T15:49:21.895Z",\ "created_at": "2023-12-10T15:48:17.166Z",\ "updated_at": "2023-12-10T15:49:21.895Z",\ "archived_at": null,\ "submitters": [\ {\ "id": 1,\ "submission_id": 1,\ "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0",\ "email": "submitter@example.com",\ "slug": "dsEeWrhRD8yDXT",\ "sent_at": "2023-12-14T15:45:49.011Z",\ "opened_at": "2023-12-14T15:48:23.011Z",\ "completed_at": "2023-12-14T15:49:21.701Z",\ "declined_at": null,\ "created_at": "2023-12-10T15:48:17.173Z",\ "updated_at": "2023-12-14T15:50:21.799Z",\ "name": "John Doe",\ "phone": "+1234567890",\ "status": "completed",\ "role": "First Party",\ "metadata": {},\ "preferences": {}\ }\ ],\ "template": {\ "id": 1,\ "name": "Example Template",\ "external_id": "Temp123",\ "folder_name": "Default",\ "created_at": "2023-12-14T15:50:21.799Z",\ "updated_at": "2023-12-14T15:50:21.799Z"\ },\ "created_by_user": {\ "id": 1,\ "first_name": "Bob",\ "last_name": "Smith",\ "email": "bob.smith@example.com"\ }\ }\ ], "pagination": { "count": 1, "next": 1, "prev": 1 } } ### Get a submission Copy as Markdown Copy as Markdown Copied get /submissions/{id} The API endpoint provides the functionality to retrieve information about a submission. Parameters id Integer required The unique identifier of the submission. Example: 1001 Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/1001", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const submission = await resp.json(); Example Response Copy Copied { "id": 1, "name": null, "source": "link", "submitters_order": "random", "slug": "VyL4szTwYoSvXq", "audit_log_url": "https://docuseal.com/blobs/proxy/hash/example.pdf", "combined_document_url": null, "completed_at": "2023-12-14T15:49:21.701Z", "expire_at": null, "created_at": "2023-12-10T15:48:17.166Z", "updated_at": "2023-12-10T15:49:21.895Z", "archived_at": null, "submitters": [\ {\ "id": 1,\ "submission_id": 1,\ "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0",\ "email": "submitter@example.com",\ "slug": "dsEeWrhRD8yDXT",\ "sent_at": "2023-12-14T15:45:49.011Z",\ "opened_at": "2023-12-14T15:48:23.011Z",\ "completed_at": "2023-12-14T15:49:21.701Z",\ "declined_at": null,\ "created_at": "2023-12-14T15:48:17.173Z",\ "updated_at": "2023-12-14T15:50:21.799Z",\ "name": "John Doe",\ "phone": "+1234567890",\ "external_id": null,\ "status": "completed",\ "metadata": {},\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "documents": [\ {\ "name": "example",\ "url": "https://docuseal.com/blobs/proxy/hash/example.pdf"\ }\ ],\ "role": "First Party"\ }\ ], "template": { "id": 1, "name": "Example Template", "external_id": "Temp123", "folder_name": "Default", "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z" }, "created_by_user": { "id": 1, "first_name": "Bob", "last_name": "Smith", "email": "bob.smith@example.com" }, "submission_events": [\ {\ "id": 1,\ "submitter_id": 2,\ "event_type": "view_form",\ "event_timestamp": "2023-12-14T15:47:24.566Z",\ "data": {}\ }\ ], "documents": [\ {\ "name": "example",\ "url": "https://docuseal.com/file/hash/example.pdf"\ }\ ], "status": "completed" } ### Get submission documents Copy as Markdown Copy as Markdown Copied get /submissions/{id}/documents This endpoint returns a list of partially filled documents for a submission. If the submission has been completed, the final signed documents are returned. Parameters id Integer required The unique identifier of the submission. Example: 1001 merge Boolean When \`true\`, merges all documents into a single PDF. Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/1001/documents", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const submission = await resp.json(); Example Response Copy Copied { "id": 1, "documents": [\ {\ "name": "example",\ "url": "https://docuseal.com/file/hash/example.pdf"\ }\ ] } ### Create a submission Copy as Markdown Copy as Markdown Copied post /submissions This API endpoint allows you to create signature requests (submissions) for a document template and send them to the specified submitters (signers). **Related Guides** [Send documents for signature via API](https://www.docuseal.com/guides/send-documents-for-signature-via-api) [Pre-fill PDF document form fields with API](https://www.docuseal.com/guides/pre-fill-pdf-document-form-fields-with-api) Request Body Properties template\_id Integer required The unique identifier of the template. Document template forms can be created via the Web UI, [PDF and DOCX API](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form) , or [HTML API](https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api) . Example: 1000001 send\_email Boolean Set \`false\` to disable signature request emails sending. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false order String Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party. Default: preserved Possible values: preserved, random completed\_redirect\_url String Specify URL to redirect to after the submission completion. bcc\_completed String Specify BCC address to send signed documents to after the completion. reply\_to String Specify Reply-To address to use in the notification emails. expire\_at String Specify the expiration date and time after which the submission becomes unavailable for signature. Example: 2024-09-01 12:00:00 UTC variables Object Dynamic content variables object. Variable values can be strings, numbers, arrays, objects, or HTML content used to generate styled text, paragraphs, and tables in dynamic template documents. Example: {"variable\_name":"value"} message Object subject String Custom signature request email subject. body String Custom signature request email body. Can include the following variables: {{template.name}}, {{submitter.link}}, {{account.name}}. submitters Array required The list of submitters for the submission. Child parameters name String The name of the submitter. role String The role name or title of the submitter. Example: First Party email String The email address of the submitter. Example: john.doe@example.com phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. external\_id String Your application-specific unique string key to identify this submitter within your app. completed Boolean Pass \`true\` to mark submitter as completed and auto-signed via API. metadata Object Metadata object with additional submitter information. Example: { "customField": "value" } send\_email Boolean Set \`false\` to disable signature request emails sending only for this submitter. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false reply\_to String Specify Reply-To address to use in the notification emails for this submitter. completed\_redirect\_url String Submitter specific URL to redirect to after the submission completion. order Integer The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array. require\_phone\_2fa Boolean Set to \`true\` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents. Default: false require\_email\_2fa Boolean Set to \`true\` to require email 2FA verification via a one-time code sent to the email address in order to access the documents. Default: false message Object subject String Custom signature request email subject for the submitter. body String Custom signature request email body for the submitter. Can include the following variables: {{template.name}}, {{submitter.link}}, {{account.name}}. fields Array A list of configurations for template document form fields. Child parameters name String required Document template field name. Example: First Name default\_value String | Number | Boolean | Array Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields. Example: Acme readonly Boolean Set \`true\` to make it impossible for the submitter to edit predefined field value. Default: false required Boolean Set \`true\` to make the field required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All roles Array A list of roles for the submitter. Use this param to merge multiple roles into one submitter. Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ template_id: 1000001, send_email: true, submitters: [\ {\ role: "First Party",\ email: "john.doe@example.com"\ }\ ] }) }); const submitters = await resp.json(); Example Response Copy Copied [\ {\ "id": 1,\ "submission_id": 1,\ "uuid": "884d545b-3396-49f1-8c07-05b8b2a78755",\ "email": "john.doe@example.com",\ "slug": "pAMimKcyrLjqVt",\ "sent_at": "2023-12-13T23:04:04.252Z",\ "opened_at": null,\ "completed_at": null,\ "declined_at": null,\ "created_at": "2023-12-14T15:50:21.799Z",\ "updated_at": "2023-12-14T15:50:21.799Z",\ "name": "string",\ "phone": "+1234567890",\ "external_id": "2321",\ "metadata": {\ "customData": "custom value"\ },\ "status": "sent",\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "preferences": {\ "send_email": true,\ "send_sms": false\ },\ "role": "First Party",\ "embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"\ }\ ] ### Create a submission from PDF [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /submissions/pdf The API endpoint provides the functionality to create one-off submission request from a PDF. Use `{{Field Name;role=Signer1;type=date}}` text tags to define fillable fields in the document. See [https://www.docuseal.com/examples/fieldtags.pdf](https://www.docuseal.com/examples/fieldtags.pdf) for more text tag formats. Or specify the exact pixel coordinates of the document fields using \`fields\` param. **Related Guides** [Use embedded text field tags to create a fillable form](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form) Request Body Properties name String Name of the document submission. Example: Test Submission Document send\_email Boolean Set \`false\` to disable signature request emails sending. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false order String Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party. Default: preserved Possible values: preserved, random completed\_redirect\_url String Specify URL to redirect to after the submission completion. bcc\_completed String Specify BCC address to send signed documents to after the completion. reply\_to String Specify Reply-To address to use in the notification emails. expire\_at String Specify the expiration date and time after which the submission becomes unavailable for signature. Example: 2024-09-01 12:00:00 UTC template\_ids Array An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates. documents Array required Child parameters name String required Name of the document. file String required Base64-encoded content of the PDF file or downloadable file URL. Example: base64 fields Array Fields are optional if you use {{...}} text tags to define fields in the document. Child parameters name String Name of the field. type String Type of the field (e.g., text, signature, date, initials). Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Role name of the signer. required Boolean Indicates if the field is required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. areas Array Child parameters x Number required X-coordinate of the field area. y Number required Y-coordinate of the field area. w Number required Width of the field area. h Number required Height of the field area. page Integer required Page number of the field area. Starts from 1. Example: 1 option String Option string value for 'radio' and 'multiple' select field types. options Array An array of option values for 'select' field type. Example: \["Option A","Option B"\] Show All position Integer Document position in the submission. If not specified, the document will be added in the order it appears in the documents array. submitters Array required The list of submitters for the submission. Child parameters name String The name of the submitter. role String The role name or title of the submitter. Example: First Party email String The email address of the submitter. Example: john.doe@example.com phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. external\_id String Your application-specific unique string key to identify this submitter within your app. completed Boolean Pass \`true\` to mark submitter as completed and auto-signed via API. metadata Object Metadata object with additional submitter information. Example: { "customField": "value" } send\_email Boolean Set \`false\` to disable signature request emails sending only for this submitter. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false reply\_to String Specify Reply-To address to use in the notification emails for this submitter. completed\_redirect\_url String Submitter specific URL to redirect to after the submission completion. order Integer The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array. require\_phone\_2fa Boolean Set to \`true\` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents. Default: false require\_email\_2fa Boolean Set to \`true\` to require email 2FA verification via a one-time code sent to the email address in order to access the documents. Default: false invite\_by String Set the role name of the previous party that should invite this party via email. fields Array A list of configurations for document form fields. Child parameters name String required Document field name. Example: First Name default\_value String | Number | Boolean | Array Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields. Example: Acme readonly Boolean Set \`true\` to make it impossible for the submitter to edit predefined field value. Default: false required Boolean Set \`true\` to make the field required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All roles Array A list of roles for the submitter. Use this param to merge multiple roles into one submitter. message Object subject String Custom signature request email subject. body String Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}. flatten Boolean Remove PDF form fields from the documents. Default: false merge\_documents Boolean Set \`true\` to merge the documents into a single PDF file. Default: false remove\_tags Boolean Pass \`false\` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing. Default: true Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/pdf", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Test Submission Document", documents: [\ {\ name: "string",\ file: "base64",\ fields: [\ {\ name: "string",\ areas: [\ {\ x: 0,\ y: 0,\ w: 0,\ h: 0,\ page: 1\ }\ ]\ }\ ]\ }\ ], submitters: [\ {\ role: "First Party",\ email: "john.doe@example.com"\ }\ ] }) }); const submission = await resp.json(); Example Response Copy Copied { "id": 5, "name": "Test Submission", "submitters": [\ {\ "id": 1,\ "uuid": "884d545b-3396-49f1-8c07-05b8b2a78755",\ "email": "john.doe@example.com",\ "slug": "pAMimKcyrLjqVt",\ "sent_at": "2025-06-02T15:55:51.310Z",\ "opened_at": null,\ "completed_at": null,\ "declined_at": null,\ "created_at": "2025-06-02T15:55:50.320Z",\ "updated_at": "2025-06-02T15:55:50.320Z",\ "name": "string",\ "phone": "+1234567890",\ "external_id": "2321",\ "metadata": {\ "customData": "custom value"\ },\ "status": "sent",\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "preferences": {\ "send_email": true,\ "send_sms": false,\ "reply_to": "reply@example.com",\ "completed_redirect_url": "https://example.com/"\ },\ "role": "First Party",\ "embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"\ }\ ], "source": "api", "submitters_order": "preserved", "status": "pending", "schema": [\ {\ "name": "Demo PDF",\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf"\ }\ ], "fields": [\ {\ "name": "Name",\ "type": "text",\ "required": true,\ "uuid": "d0bf3c0c-1928-40c8-80f9-d9f3c6ad4eff",\ "submitter_uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7",\ "areas": [\ {\ "page": 1,\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "expire_at": null, "created_at": "2025-06-02T15:55:50.270Z" } ### Create a submission from DOCX [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /submissions/docx The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use `[[variable_name]]` text tags to define dynamic content variables in the document. See [https://www.docuseal.com/examples/demo\_template.docx](https://www.docuseal.com/examples/demo_template.docx) for the specific text variable syntax, including dynamic content tables and list. You can also use the `{{signature}}` field syntax to define fillable fields, as in a PDF. **Related Guides** [Use dynamic content variables in DOCX to create personalized documents](https://www.docuseal.com/guides/use-dynamic-content-variables-in-docx-to-create-personalized-documents) Request Body Properties name String Name of the document submission. Example: Test Submission Document send\_email Boolean Set \`false\` to disable signature request emails sending. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false variables Object Dynamic content variables object. Variable values can be strings, numbers, arrays, objects, or HTML content used to generate styled text, paragraphs, and tables in DOCX. Example: {"variable\_name":"value"} order String Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party. Default: preserved Possible values: preserved, random completed\_redirect\_url String Specify URL to redirect to after the submission completion. bcc\_completed String Specify BCC address to send signed documents to after the completion. reply\_to String Specify Reply-To address to use in the notification emails. expire\_at String Specify the expiration date and time after which the submission becomes unavailable for signature. Example: 2024-09-01 12:00:00 UTC template\_ids Array An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates. documents Array required Child parameters name String required Name of the document. file String required Base64-encoded content of the PDF or DOCX file or downloadable file URL. Example: base64 position Integer Document position in the submission. If not specified, the document will be added in the order it appears in the documents array. submitters Array required The list of submitters for the submission. Child parameters name String The name of the submitter. role String The role name or title of the submitter. Example: First Party email String The email address of the submitter. Example: john.doe@example.com phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. external\_id String Your application-specific unique string key to identify this submitter within your app. completed Boolean Pass \`true\` to mark submitter as completed and auto-signed via API. metadata Object Metadata object with additional submitter information. Example: { "customField": "value" } send\_email Boolean Set \`false\` to disable signature request emails sending only for this submitter. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false reply\_to String Specify Reply-To address to use in the notification emails for this submitter. completed\_redirect\_url String Submitter specific URL to redirect to after the submission completion. order Integer The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array. require\_phone\_2fa Boolean Set to \`true\` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents. Default: false require\_email\_2fa Boolean Set to \`true\` to require email 2FA verification via a one-time code sent to the email address in order to access the documents. Default: false invite\_by String Set the role name of the previous party that should invite this party via email. fields Array A list of configurations for document form fields. Child parameters name String required Document field name. Example: First Name default\_value String | Number | Boolean | Array Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields. Example: Acme readonly Boolean Set \`true\` to make it impossible for the submitter to edit predefined field value. Default: false required Boolean Set \`true\` to make the field required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All roles Array A list of roles for the submitter. Use this param to merge multiple roles into one submitter. message Object subject String Custom signature request email subject. body String Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}. merge\_documents Boolean Set \`true\` to merge the documents into a single PDF file. Default: false remove\_tags Boolean Pass \`false\` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing. Default: true Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/docx", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Test Submission Document", variables: { variable_name: "value" }, documents: [\ {\ name: "string",\ file: "base64"\ }\ ], submitters: [\ {\ role: "First Party",\ email: "john.doe@example.com"\ }\ ] }) }); const submitters = await resp.json(); Example Response Copy Copied { "id": 5, "name": "Test Submission", "submitters": [\ {\ "id": 1,\ "uuid": "884d545b-3396-49f1-8c07-05b8b2a78755",\ "email": "john.doe@example.com",\ "slug": "pAMimKcyrLjqVt",\ "sent_at": "2025-06-02T15:55:51.310Z",\ "opened_at": null,\ "completed_at": null,\ "declined_at": null,\ "created_at": "2025-06-02T15:55:50.320Z",\ "updated_at": "2025-06-02T15:55:50.320Z",\ "name": "string",\ "phone": "+1234567890",\ "external_id": "2321",\ "metadata": {\ "customData": "custom value"\ },\ "status": "sent",\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "preferences": {\ "send_email": true,\ "send_sms": false,\ "reply_to": "reply@example.com",\ "completed_redirect_url": "https://example.com/"\ },\ "role": "First Party",\ "embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"\ }\ ], "source": "api", "submitters_order": "preserved", "status": "pending", "schema": [\ {\ "name": "Demo PDF",\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf"\ }\ ], "fields": [\ {\ "name": "Name",\ "type": "text",\ "required": true,\ "uuid": "d0bf3c0c-1928-40c8-80f9-d9f3c6ad4eff",\ "submitter_uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7",\ "areas": [\ {\ "page": 1,\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "expire_at": null, "created_at": "2025-06-02T15:55:50.270Z" } ### Create a submission from HTML [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /submissions/html This API endpoint allows you to create a one-off submission request document using the provided HTML content, with special field tags rendered as a fillable and signable form. **Related Guides** [Create PDF document fillable form with HTML](https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api) Request Body Properties name String Name of the document submission Example: Test Submission Document send\_email Boolean Set \`false\` to disable signature request emails sending. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false order String Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party. Default: preserved Possible values: preserved, random completed\_redirect\_url String Specify URL to redirect to after the submission completion. bcc\_completed String Specify BCC address to send signed documents to after the completion. reply\_to String Specify Reply-To address to use in the notification emails. expire\_at String Specify the expiration date and time after which the submission becomes unavailable for signature. Example: 2024-09-01 12:00:00 UTC template\_ids Array An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates. documents Array required The list of documents built from HTML. Can be used to create a submission with multiple documents. Child parameters name String Document name. Random uuid will be assigned when not specified. Example: Test Document html String required HTML document content with field tags. Example:

Lorem Ipsum is simply dummy text of the and typesetting industry

html\_header String HTML document content of the header to be displayed on every page. html\_footer String HTML document content of the footer to be displayed on every page. size String Page size. Letter 8.5 x 11 will be assigned when not specified. Default: Letter Possible values: Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6 Example: A4 position Integer Document position in the submission. If not specified, the document will be added in the order it appears in the documents array. submitters Array required The list of submitters for the submission. Child parameters name String The name of the submitter. role String The role name or title of the submitter. Example: First Party email String The email address of the submitter. Example: john.doe@example.com phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. external\_id String Your application-specific unique string key to identify this submitter within your app. completed Boolean Pass \`true\` to mark submitter as completed and auto-signed via API. metadata Object Metadata object with additional submitter information. Example: { "customField": "value" } send\_email Boolean Set \`false\` to disable signature request emails sending only for this submitter. Default: true send\_sms Boolean Set \`true\` to send signature request via phone number and SMS. Default: false reply\_to String Specify Reply-To address to use in the notification emails for this submitter. completed\_redirect\_url String Submitter specific URL to redirect to after the submission completion. order Integer The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array. require\_phone\_2fa Boolean Set to \`true\` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents. Default: false require\_email\_2fa Boolean Set to \`true\` to require email 2FA verification via a one-time code sent to the email address in order to access the documents. Default: false invite\_by String Set the role name of the previous party that should invite this party via email. fields Array A list of configurations for document form fields. Child parameters name String required Document field name. Example: First Name default\_value String | Number | Boolean | Array Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields. Example: Acme readonly Boolean Set \`true\` to make it impossible for the submitter to edit predefined field value. Default: false required Boolean Set \`true\` to make the field required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All roles Array A list of roles for the submitter. Use this param to merge multiple roles into one submitter. message Object subject String Custom signature request email subject. body String Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}. merge\_documents Boolean Set \`true\` to merge the documents into a single PDF file. Default: false Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/html", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Test Submission Document", documents: [\ {\ name: "Test Document",\ html: `

Lorem Ipsum is simply dummy text of the\ \ \ and typesetting industry

\ `\ }\ ], submitters: [\ {\ role: "First Party",\ email: "john.doe@example.com"\ }\ ] }) }); const submission = await resp.json(); Example Response Copy Copied { "id": 5, "name": "Test Submission", "submitters": [\ {\ "id": 1,\ "uuid": "884d545b-3396-49f1-8c07-05b8b2a78755",\ "email": "john.doe@example.com",\ "slug": "pAMimKcyrLjqVt",\ "sent_at": "2025-06-02T15:55:51.310Z",\ "opened_at": null,\ "completed_at": null,\ "declined_at": null,\ "created_at": "2025-06-02T15:55:50.320Z",\ "updated_at": "2025-06-02T15:55:50.320Z",\ "name": "string",\ "phone": "+1234567890",\ "external_id": "2321",\ "metadata": {\ "customData": "custom value"\ },\ "status": "sent",\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "preferences": {\ "send_email": true,\ "send_sms": false,\ "reply_to": "reply@example.com",\ "completed_redirect_url": "https://example.com/"\ },\ "role": "First Party",\ "embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt"\ }\ ], "source": "api", "submitters_order": "preserved", "status": "pending", "schema": [\ {\ "name": "Demo PDF",\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf"\ }\ ], "fields": [\ {\ "name": "Name",\ "type": "text",\ "required": true,\ "uuid": "d0bf3c0c-1928-40c8-80f9-d9f3c6ad4eff",\ "submitter_uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7",\ "areas": [\ {\ "page": 1,\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "expire_at": null, "created_at": "2025-06-02T15:55:50.270Z" } ### Archive a submission Copy as Markdown Copy as Markdown Copied delete /submissions/{id} The API endpoint allows you to archive a submission. Parameters id Integer required The unique identifier of the submission. Example: 1001 Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submissions/1001", { method: "DELETE", headers: { "X-Auth-Token": "API_KEY" } }); await resp.json(); Example Response Copy Copied { "id": 1, "archived_at": "2023-12-14T15:50:21.799Z" } Submitters ---------- Submitters API allows you to load all details provided by the signer of the document. get /submitters get /submitters/{id} put /submitters/{id} ### List all submitters Copy as Markdown Copy as Markdown Copied get /submitters The API endpoint provides the ability to retrieve a list of submitters. Parameters submission\_id Integer The submission ID allows you to receive only the submitters related to that specific submission. q String Filter submitters on name, email or phone partial match. slug String Filter submitters by unique slug. Example: zAyL9fH36Havvm completed\_after String The date and time string value to filter submitters that completed the submission after the specified date and time. Example: 2024-03-05 9:32:20 completed\_before String The date and time string value to filter submitters that completed the submission before the specified date and time. Example: 2024-03-06 19:32:20 external\_id String The unique applications-specific identifier provided for a submitter when initializing a signature request. It allows you to receive only submitters with a specified external id. limit Integer The number of submitters to return. Default value is 10. Maximum value is 100. after Integer The unique identifier of the submitter to start the list from. It allows you to receive only submitters with id greater than the specified value. Pass ID value from the \`pagination.next\` response to load the next batch of submitters. before Integer The unique identifier of the submitter to end the list with. It allows you to receive only submitters with id less than the specified value. Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submitters", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const { data, pagination } = await resp.json(); Example Response Copy Copied { "data": [\ {\ "id": 7,\ "submission_id": 3,\ "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0",\ "email": "submitter@example.com",\ "slug": "dsEeWrhRD8yDXT",\ "sent_at": "2023-12-14T15:45:49.011Z",\ "opened_at": "2023-12-14T15:48:23.011Z",\ "completed_at": "2023-12-14T15:49:21.701Z",\ "declined_at": null,\ "created_at": "2023-12-14T15:48:17.173Z",\ "updated_at": "2023-12-14T15:50:21.799Z",\ "name": "John Doe",\ "phone": "+1234567890",\ "status": "completed",\ "external_id": null,\ "preferences": {},\ "metadata": {},\ "template": {\ "id": 2,\ "name": "Example Template",\ "created_at": "2023-12-14T15:50:21.799Z",\ "updated_at": "2023-12-14T15:50:21.799Z"\ },\ "submission_events": [\ {\ "id": 12,\ "submitter_id": 7,\ "event_type": "view_form",\ "event_timestamp": "2023-12-14T15:48:17.351Z",\ "data": {}\ }\ ],\ "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ],\ "documents": [\ {\ "name": "sample-document",\ "url": "https://docuseal.com/file/eyJfcmFpbHMiOnsiIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f9758362acced0f3c86cdffad02800e/sample-document.pdf"\ }\ ],\ "role": "First Party"\ }\ ], "pagination": { "count": 1, "next": 1, "prev": 1 } } ### Get a submitter Copy as Markdown Copy as Markdown Copied get /submitters/{id} The API endpoint provides functionality to retrieve information about a submitter, along with the submitter documents and field values. Parameters id Integer required The unique identifier of the submitter. Example: 500001 Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submitters/500001", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const submitter = await resp.json(); Example Response Copy Copied { "id": 7, "submission_id": 3, "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0", "email": "submitter@example.com", "slug": "dsEeWrhRD8yDXT", "sent_at": "2023-12-14T15:45:49.011Z", "opened_at": "2023-12-14T15:48:23.011Z", "completed_at": "2023-12-10T15:49:21.701Z", "declined_at": null, "created_at": "2023-12-14T15:48:17.173Z", "updated_at": "2023-12-14T15:50:21.799Z", "name": "John Doe", "phone": "+1234567890", "status": "completed", "external_id": null, "metadata": {}, "preferences": {}, "template": { "id": 2, "name": "Example Template", "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z" }, "submission_events": [\ {\ "id": 12,\ "submitter_id": 7,\ "event_type": "view_form",\ "event_timestamp": "2023-12-14T15:47:17.351Z",\ "data": {}\ }\ ], "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ], "documents": [\ {\ "name": "sample-document",\ "url": "https://docuseal.com/file/hash/sample-document.pdf"\ }\ ], "role": "First Party" } ### Update a submitter Copy as Markdown Copy as Markdown Copied put /submitters/{id} The API endpoint allows you to update submitter details, pre-fill or update field values and re-send emails. **Related Guides** [Automatically sign documents via API](https://www.docuseal.com/guides/pre-fill-pdf-document-form-fields-with-api#automatically_sign_documents_via_api) Parameters id Integer required The unique identifier of the submitter. Example: 500001 Request Body Properties name String The name of the submitter. email String The email address of the submitter. Example: john.doe@example.com phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. external\_id String Your application-specific unique string key to identify this submitter within your app. send\_email Boolean Set \`true\` to re-send signature request emails. send\_sms Boolean Set \`true\` to re-send signature request via phone number SMS. Default: false reply\_to String Specify Reply-To address to use in the notification emails. completed Boolean Pass \`true\` to mark submitter as completed and auto-signed via API. metadata Object Metadata object with additional submitter information. Example: { "customField": "value" } completed\_redirect\_url String Submitter specific URL to redirect to after the submission completion. require\_phone\_2fa Boolean Set to \`true\` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents. Default: false require\_email\_2fa Boolean Set to \`true\` to require email 2FA verification via a one-time code sent to the email address in order to access the documents. Default: false message Object subject String Custom signature request email subject. body String Custom signature request email body. Can include the following variables: {{template.name}}, {{submitter.link}}, {{account.name}}. fields Array A list of configurations for template document form fields. Child parameters name String required Document template field name. Example: First Name default\_value String | Number | Boolean | Array Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields. Example: Acme readonly Boolean Set \`true\` to make it impossible for the submitter to edit predefined field value. Default: false required Boolean Set \`true\` to make the field required. validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/submitters/500001", { method: "PUT", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ email: "john.doe@example.com", fields: [\ {\ name: "First Name",\ default_value: "Acme"\ }\ ] }) }); const submitter = await resp.json(); Example Response Copy Copied { "id": 1, "submission_id": 12, "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0", "email": "submitter@example.com", "slug": "dsEeWrhRD8yDXT", "sent_at": "2023-12-14T15:45:49.011Z", "opened_at": "2023-12-14T15:48:23.011Z", "completed_at": "2023-12-10T15:49:21.701Z", "declined_at": null, "created_at": "2023-12-14T15:48:17.173Z", "updated_at": "2023-12-14T15:50:21.799Z", "name": "John Doe", "phone": "+1234567890", "status": "completed", "external_id": null, "metadata": {}, "preferences": {}, "values": [\ {\ "field": "Full Name",\ "value": "John Doe"\ }\ ], "documents": [], "role": "First Party", "embed_src": "https://docuseal.com/s/pAMimKcyrLjqVt" } Templates --------- Templates represent reusable document signing forms with fields and signatures to be collected. It's possible to create unique template forms with fields and signatures using HTML or with tagged PDFs. get /templates get /templates/{id} post /templates/pdf post /templates/docx post /templates/html post /templates/{id}/clone post /templates/merge put /templates/{id} put /templates/{id}/documents delete /templates/{id} ### List all templates Copy as Markdown Copy as Markdown Copied get /templates The API endpoint provides the ability to retrieve a list of available document templates. Parameters q String Filter templates based on the name partial match. slug String Filter templates by unique slug. Example: opaKWh8WWTAcVG external\_id String The unique applications-specific identifier provided for the template via API or Embedded template form builder. It allows you to receive only templates with your specified external id. folder String Filter templates by folder name. archived Boolean Get only archived templates instead of active ones. limit Integer The number of templates to return. Default value is 10. Maximum value is 100. after Integer The unique identifier of the template to start the list from. It allows you to receive only templates with id greater than the specified value. Pass ID value from the \`pagination.next\` response to load the next batch of templates. before Integer The unique identifier of the template to end the list with. It allows you to receive only templates with id less than the specified value. Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const { data, pagination } = await resp.json(); Example Response Copy Copied { "data": [\ {\ "id": 1,\ "slug": "iRgjDX7WDK6BRo",\ "name": "Example Template",\ "preferences": {},\ "schema": [\ {\ "attachment_uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "name": "example-document"\ }\ ],\ "fields": [\ {\ "uuid": "594bdf04-d941-4ca6-aa73-93e61d625c02",\ "submitter_uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0",\ "name": "Full Name",\ "type": "text",\ "required": true,\ "preferences": {},\ "areas": [\ {\ "x": 0.2638888888888889,\ "y": 0.168958742632613,\ "w": 0.325,\ "h": 0.04616895874263263,\ "attachment_uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "page": 0\ }\ ]\ }\ ],\ "submitters": [\ {\ "name": "First Party",\ "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0"\ }\ ],\ "author_id": 1,\ "archived_at": null,\ "created_at": "2023-12-14T15:21:57.375Z",\ "updated_at": "2023-12-14T15:22:55.094Z",\ "source": "native",\ "folder_id": 1,\ "folder_name": "Default",\ "external_id": "c248ffba-ef81-48b7-8e17-e3cecda1c1c5",\ "shared_link": true,\ "author": {\ "id": 1,\ "first_name": "John",\ "last_name": "Doe",\ "email": "john.doe@example.com"\ },\ "documents": [\ {\ "id": 5,\ "uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "url": "https://docuseal.com/file/hash/sample-document.pdf",\ "preview_image_url": "https://docuseal.com/file/hash/0.jpg",\ "filename": "example-document.pdf"\ }\ ]\ }\ ], "pagination": { "count": 1, "next": 1, "prev": 2 } } ### Get a template Copy as Markdown Copy as Markdown Copied get /templates/{id} The API endpoint provides the functionality to retrieve information about a document template. Parameters id Integer required The unique identifier of the document template. Example: 1000001 Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/1000001", { method: "GET", headers: { "X-Auth-Token": "API_KEY" } }); const template = await resp.json(); Example Response Copy Copied { "id": 1, "slug": "iRgjDX7WDK6BRo", "name": "Example Template", "preferences": {}, "schema": [\ {\ "attachment_uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "name": "example-document"\ }\ ], "fields": [\ {\ "uuid": "594bdf04-d941-4ca6-aa73-93e61d625c02",\ "submitter_uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0",\ "name": "Full Name",\ "type": "text",\ "required": true,\ "preferences": {},\ "areas": [\ {\ "x": 0.2638888888888889,\ "y": 0.168958742632613,\ "w": 0.325,\ "h": 0.04616895874263263,\ "attachment_uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "page": 0\ }\ ]\ }\ ], "submitters": [\ {\ "name": "First Party",\ "uuid": "0954d146-db8c-4772-aafe-2effc7c0e0c0"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:21:57.375Z", "updated_at": "2023-12-14T15:22:55.094Z", "source": "native", "folder_id": 1, "folder_name": "Default", "external_id": "c248ffba-ef81-48b7-8e17-e3cecda1c1c5", "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 5,\ "uuid": "d94e615f-76e3-46d5-8f98-36bdacb8664a",\ "url": "https://docuseal.com/file/hash/sample-document.pdf",\ "preview_image_url": "https://docuseal.com/file/hash/0.jpg",\ "filename": "example-document.pdf"\ }\ ] } ### Create a template from PDF [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /templates/pdf The API endpoint provides the functionality to create a fillable document template for a PDF file. Use `{{Field Name;role=Signer1;type=date}}` text tags to define fillable fields in the document. See [https://www.docuseal.com/examples/fieldtags.pdf](https://www.docuseal.com/examples/fieldtags.pdf) for more text tag formats. Or specify the exact pixel coordinates of the document fields using \`fields\` param. **Related Guides** [Use embedded text field tags to create a fillable form](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form) Request Body Properties name String Name of the template Example: Test PDF folder\_name String The folder's name in which the template should be created. external\_id String Your application-specific unique string key to identify this template within your app. Existing template with specified \`external\_id\` will be updated with a new PDF. Example: unique-key shared\_link Boolean Set to \`true\` to make the template available via a shared link. This will allow anyone with the link to create a submission from this template. Default: true documents Array required Child parameters name String required Name of the document. file String required Base64-encoded content of the PDF file or downloadable file URL. Example: base64 fields Array Fields are optional if you use {{...}} text tags to define fields in the document. Child parameters name String Name of the field. type String Type of the field (e.g., text, signature, date, initials). Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Role name of the signer. required Boolean Indicates if the field is required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. areas Array Child parameters x Number required X-coordinate of the field area. y Number required Y-coordinate of the field area. w Number required Width of the field area. h Number required Height of the field area. page Integer required Page number of the field area. Starts from 1. Example: 1 option String Option string value for 'radio' and 'multiple' select field types. options Array An array of option values for 'select' field type. Example: \["Option A","Option B"\] validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All flatten Boolean Remove PDF form fields from the documents. Default: false remove\_tags Boolean Pass \`false\` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing. Default: true Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/pdf", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Test PDF", documents: [\ {\ name: "string",\ file: "base64",\ fields: [\ {\ name: "string",\ areas: [\ {\ x: 0,\ y: 0,\ w: 0,\ h: 0,\ page: 1\ }\ ]\ }\ ]\ }\ ] }) }); const template = await resp.json(); Example Response Copy Copied { "id": 5, "slug": "s3ff992CoPjvaX", "name": "Demo PDF", "schema": [\ {\ "name": "Demo PDF",\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf"\ }\ ], "fields": [\ {\ "name": "Name",\ "type": "text",\ "required": true,\ "uuid": "d0bf3c0c-1928-40c8-80f9-d9f3c6ad4eff",\ "submitter_uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7",\ "areas": [\ {\ "page": 1,\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "Submitter",\ "uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 1, "folder_name": "Default", "external_id": "c248ffba-ef81-48b7-8e17-e3cecda1c1c5", "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 7,\ "uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "url": "https://docuseal.com/file/hash/Demo%20PDF.pdf"\ }\ ] } ### Create a template from Word DOCX [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /templates/docx The API endpoint provides the functionality to create a fillable document template for existing Microsoft Word document. Use `{{Field Name;role=Signer1;type=date}}` text tags to define fillable fields in the document. See [https://www.docuseal.com/examples/fieldtags.docx](https://www.docuseal.com/examples/fieldtags.docx) for more text tag formats. Or specify the exact pixel coordinates of the document fields using \`fields\` param. **Related Guides** [Use embedded text field tags to create a fillable form](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form) Request Body Properties name String Name of the template Example: Test DOCX external\_id String Your application-specific unique string key to identify this template within your app. Existing template with specified \`external\_id\` will be updated with a new document. Example: unique-key folder\_name String The folder's name in which the template should be created. shared\_link Boolean Set to \`true\` to make the template available via a shared link. This will allow anyone with the link to create a submission from this template. Default: true documents Array required Child parameters name String required Name of the document. file String required Base64-encoded content of the DOCX file or downloadable file URL Example: base64 fields Array Fields are optional if you use {{...}} text tags to define fields in the document. Child parameters name String Name of the field. type String Type of the field (e.g., text, signature, date, initials). Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough role String Role name of the signer. required Boolean Indicates if the field is required. title String Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown. description String Field description displayed on the signing form. Supports Markdown. areas Array Child parameters x Number X-coordinate of the field area. y Number Y-coordinate of the field area. w Number Width of the field area. h Number Height of the field area. page Integer Page number of the field area. Starts from 1. option String Option string value for 'radio' and 'multiple' select field types. options Array An array of option values for 'select' field type. Example: \["Option A","Option B"\] validation Object pattern String HTML field validation pattern string based on [https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern) specification. Example: \[A-Z\]{4} message String A custom error message to display on validation failure. min Number | String Minimum allowed number value or date depending on field type. max Number | String Maximum allowed number value or date depending on field type. step Number Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency. preferences Object font\_size Integer Font size of the field value in pixels. Example: 12 font\_type String Font type of the field value. Possible values: bold, italic, bold\_italic font String Font family of the field value. Possible values: Times, Helvetica, Courier color String Font color of the field value. Default: black Possible values: black, white, blue background String Field box background color. Possible values: black, white, blue align String Horizontal alignment of the field text value. Default: left Possible values: left, center, right valign String Vertical alignment of the field text value. Default: center Possible values: top, center, bottom format String The data format for different field types. \- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY). \- Signature field: accepts drawn, typed, drawn\_or\_typed (default), or upload. \- Number field: accepts currency formats such as usd, eur, gbp. Example: DD/MM/YYYY price Number Price value of the payment field. Only for payment fields. Example: 99.99 currency String Currency value of the payment field. Only for payment fields. Default: USD Possible values: USD, EUR, GBP, CAD, AUD mask Integer | Boolean Set \`true\` to make sensitive data masked on the document. Default: false reasons Array An array of signature reasons to choose from. Show All Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/docx", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Test DOCX", documents: [\ {\ name: "string",\ file: "base64"\ }\ ] }) }); const template = await resp.json(); Example Response Copy Copied { "id": 5, "slug": "s3ff992CoPjvaX", "name": "Demo PDF", "schema": [\ {\ "name": "Demo PDF",\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf"\ }\ ], "fields": [\ {\ "name": "Name",\ "type": "text",\ "required": true,\ "uuid": "d0bf3c0c-1928-40c8-80f9-d9f3c6ad4eff",\ "submitter_uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7",\ "areas": [\ {\ "page": 1,\ "attachment_uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "Submitter",\ "uuid": "0b0bff58-bc9a-475d-b4a9-2f3e5323faf7"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 1, "folder_name": "Default", "external_id": "c248ffba-ef81-48b7-8e17-e3cecda1c1c5", "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 7,\ "uuid": "48d2998f-266b-47e4-beb2-250ab7ccebdf",\ "url": "https://docuseal.com/hash/DemoPDF.pdf"\ }\ ] } ### Create a template from HTML [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /templates/html The API endpoint provides the functionality to seamlessly generate a PDF document template by utilizing the provided HTML content while incorporating pre-defined fields. **Related Guides** [Create PDF document fillable form with HTML](https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api) Request Body Properties html String required HTML template with field tags. Example:

Lorem Ipsum is simply dummy text of the and typesetting industry

html\_header String HTML template of the header to be displayed on every page. html\_footer String HTML template of the footer to be displayed on every page. name String Template name. Random uuid will be assigned when not specified. Example: Test Template size String Page size. Letter 8.5 x 11 will be assigned when not specified. Default: Letter Possible values: Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6 Example: A4 external\_id String Your application-specific unique string key to identify this template within your app. Existing template with specified \`external\_id\` will be updated with a new HTML. Example: 714d974e-83d8-11ee-b962-0242ac120002 folder\_name String The folder's name in which the template should be created. shared\_link Boolean Set to \`true\` to make the template available via a shared link. This will allow anyone with the link to create a submission from this template. Default: true documents Array The list of documents built from HTML. Can be used to create a template with multiple documents. Leave \`documents\` param empty when using a top-level \`html\` param for a template with a single document. Child parameters html String required HTML template with field tags. Example:

Lorem Ipsum is simply dummy text of the and typesetting industry

name String Document name. Random uuid will be assigned when not specified. Example: Test Document Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/html", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ html: `

Lorem Ipsum is simply dummy text of the and typesetting industry

`, name: "Test Template" }) }); const template = await resp.json(); Example Response Copy Copied { "id": 3, "slug": "ZQpF222rFBv71q", "name": "Demo Template", "schema": [\ {\ "name": "Demo Template",\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5"\ }\ ], "fields": [\ {\ "name": "Name",\ "required": false,\ "type": "text",\ "uuid": "a06c49f6-4b20-4442-ac7f-c1040d2cf1ac",\ "submitter_uuid": "93ba628c-5913-4456-a1e9-1a81ad7444b3",\ "areas": [\ {\ "page": 0,\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "Submitter",\ "uuid": "93ba628c-5913-4456-a1e9-1a81ad7444b3"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 1, "folder_name": "Default", "external_id": "f0b4714f-e44b-4993-905b-68b4451eef8c", "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 3,\ "uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "url": "https://docuseal.com/file/hash/Test%20Template.pdf"\ }\ ] } ### Clone a template Copy as Markdown Copy as Markdown Copied post /templates/{id}/clone The API endpoint allows you to clone an existing template into a new template. Parameters id Integer required The unique identifier of the documents template. Example: 1000001 Request Body Properties name String Template name. Existing name with (Clone) suffix will be used if not specified. Example: Cloned Template folder\_name String The folder's name to which the template should be cloned. external\_id String Your application-specific unique string key to identify this template within your app. Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/1000001/clone", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "Cloned Template" }) }); const template = await resp.json(); Example Response Copy Copied { "id": 6, "slug": "Xc7opTqwwV9P7x", "name": "Cloned Template", "schema": [\ {\ "attachment_uuid": "68aa0716-61f0-4535-9ba4-6c00f835b080",\ "name": "sample-document"\ }\ ], "fields": [\ {\ "uuid": "93c7065b-1b19-4551-b67b-9946bf1c11c9",\ "submitter_uuid": "ad128012-756d-4d17-b728-6f6b1d482bb5",\ "name": "Name",\ "type": "text",\ "required": true,\ "areas": [\ {\ "page": 0,\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "First Party",\ "uuid": "ad128012-756d-4d17-b728-6f6b1d482bb5"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 2, "folder_name": "Default", "external_id": null, "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 9,\ "uuid": "ded62277-9705-4fac-b5dc-58325d4102eb",\ "url": "https://docuseal.com/file/hash/sample-document.pdf",\ "filename": "sample-document.pdf"\ }\ ] } ### Merge templates [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied post /templates/merge The API endpoint allows you to merge multiple templates with documents and fields into a new combined template. Request Body Properties template\_ids Array required An array of template ids to merge into a new template. Example: \[321,432\] name String Template name. Existing name with (Merged) suffix will be used if not specified. Example: Merged Template folder\_name String The name of the folder in which the merged template should be placed. external\_id String Your application-specific unique string key to identify this template within your app. shared\_link Boolean Set to \`true\` to make the template available via a shared link. This will allow anyone with the link to create a submission from this template. Default: true roles Array An array of submitter role names to be used in the merged template. Example: \["Agent","Customer"\] Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/merge", { method: "POST", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ template_ids: [\ 321,\ 432\ ], name: "Merged Template" }) }); const template = await resp.json(); Example Response Copy Copied { "id": 6, "slug": "Xc7opTqwwV9P7x", "name": "Merged Template", "schema": [\ {\ "attachment_uuid": "68aa0716-61f0-4535-9ba4-6c00f835b080",\ "name": "sample-document"\ }\ ], "fields": [\ {\ "uuid": "93c7065b-1b19-4551-b67b-9946bf1c11c9",\ "submitter_uuid": "ad128012-756d-4d17-b728-6f6b1d482bb5",\ "name": "Name",\ "type": "text",\ "required": true,\ "areas": [\ {\ "page": 0,\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "First Party",\ "uuid": "ad128012-756d-4d17-b728-6f6b1d482bb5"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 2, "folder_name": "Default", "external_id": null, "shared_link": true, "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 9,\ "uuid": "ded62277-9705-4fac-b5dc-58325d4102eb",\ "url": "https://docuseal.com/file/hash/sample-document.pdf",\ "filename": "sample-document.pdf"\ }\ ] } ### Update a template Copy as Markdown Copy as Markdown Copied put /templates/{id} The API endpoint provides the functionality to move a document template to a different folder and update the name of the template. Parameters id Integer required The unique identifier of the document template. Example: 1000001 Request Body Properties name String The name of the template Example: New Document Name folder\_name String The folder's name to which the template should be moved. Example: New Folder roles Array An array of submitter role names to update the template with. Example: \["Agent","Customer"\] archived Boolean Set \`false\` to unarchive template. Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/1000001", { method: "PUT", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ name: "New Document Name", folder_name: "New Folder" }) }); const template = await resp.json(); Example Response Copy Copied { "id": 1, "updated_at": "2023-12-14T15:50:21.799Z" } ### Update template documents [Pro](https://www.docuseal.com/pricing) Copy as Markdown Copy as Markdown Copied put /templates/{id}/documents The API endpoint allows you to add, remove or replace documents in the template with provided PDF/DOCX file or HTML content. Parameters id Integer required The unique identifier of the documents template. Example: 1000001 Request Body Properties documents Array The list of documents to add or replace in the template. Child parameters name String Document name. Random uuid will be assigned when not specified. Example: Test Template file String Base64-encoded content of the PDF or DOCX file or downloadable file URL. Leave it empty if you create a new document using HTML param. html String HTML template with field tags. Leave it empty if you add a document via PDF or DOCX base64 encoded file param or URL. position Integer Position of the document. By default will be added as the last document in the template. Example: 0 replace Boolean Set to \`true\` to replace existing document with a new file at \`position\`. Existing document fields will be transferred to the new document if it doesn't contain any fields. Default: false remove Boolean Set to \`true\` to remove existing document at given \`position\` or with given \`name\`. Default: false merge Boolean Set to \`true\` to merge all existing and new documents into a single PDF document in the template. Default: false Node.js JSON JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/1000001/documents", { method: "PUT", headers: { "X-Auth-Token": "API_KEY" }, body: JSON.stringify({ documents: [\ {\ file: "string"\ }\ ] }) }); const template = await resp.json(); Example Response Copy Copied { "id": 3, "slug": "ZQpF222rFBv71q", "name": "Demo Template", "schema": [\ {\ "name": "Demo Template",\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5"\ }\ ], "fields": [\ {\ "name": "Name",\ "required": false,\ "type": "text",\ "uuid": "a06c49f6-4b20-4442-ac7f-c1040d2cf1ac",\ "submitter_uuid": "93ba628c-5913-4456-a1e9-1a81ad7444b3",\ "areas": [\ {\ "page": 0,\ "attachment_uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "x": 0.403158189124654,\ "y": 0.04211750189825361,\ "w": 0.100684625476058,\ "h": 0.01423690205011389\ }\ ]\ }\ ], "submitters": [\ {\ "name": "Submitter",\ "uuid": "93ba628c-5913-4456-a1e9-1a81ad7444b3"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2023-12-14T15:50:21.799Z", "updated_at": "2023-12-14T15:50:21.799Z", "source": "api", "folder_id": 1, "folder_name": "Default", "external_id": "f0b4714f-e44b-4993-905b-68b4451eef8c", "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 3,\ "uuid": "09a8bc73-a7a9-4fd9-8173-95752bdf0af5",\ "url": "https://docuseal.com/file/hash/Test%20Template.pdf"\ }\ ] } ### Archive a template Copy as Markdown Copy as Markdown Copied delete /templates/{id} The API endpoint allows you to archive a document template. Parameters id Integer required The unique identifier of the document template. Example: 1000001 Node.js JavaScript TypeScript Python Ruby PHP PHP (cURL) Go C# Java cURL CLI Copy Copied const fetch = require("node-fetch"); const resp = await fetch("https://api.docuseal.com/templates/1000001", { method: "DELETE", headers: { "X-Auth-Token": "API_KEY" } }); await resp.json(); Example Response Copy Copied { "id": 1, "archived_at": "2023-12-14T15:50:21.799Z" } Webhooks -------- Send document signing events to a preconfigured webhook URL. You can use this feature to capture and process document-related events in real-time. [Set Webhook URL](https://console.docuseal.com/webhooks) Form Webhook ------------ During the form filling and signing process, 4 types of events may occur and are dispatched at different stages: * **'form.viewed'** event is triggered when the submitter first opens the form. * **'form.started'** event is triggered when the submitter initiates filling out the form. * **'form.completed'** event is triggered upon successful form completion and signing by one of the parties. * **'form.declined'** event is triggered when a signer declines the submission. It's important to note that each of these events contain information available at the time of dispatch, so some data may be missing or incomplete depending on the specific event. Failed webhook requests (4xx, 5xx) are automatically retried multiple times within 48 hours (every 2^attempt minutes) for all production accounts. **Related Guides** [Download Signed Documents](https://www.docuseal.com/guides/download-signed-documents) event\_type String The event type. Possible values: form.viewed, form.started, form.completed, form.declined timestamp String The event timestamp. Example: 2023-09-24T11:20:42Z data Object Submitted data object. id Number The submitter's unique identifier. email String The submitter's email address Example: john.doe@example.com ua String The user agent string that provides information about the submitter's web browser. Example: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_15\_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 ip String The submitter's IP address. name String The submitter's name. phone String The submitter's phone number, formatted according to the E.164 standard. Example: +1234567890 role String The submitter's role name or title. Example: First Party external\_id String Your application-specific unique string key to identify submitter within your app. decline\_reason String Submitter provided decline message. sent\_at String The date and time when the signing request was sent to the submitter. status String The submitter status. Possible values: completed, declined, opened, sent, awaiting opened\_at String The date and time when the submitter opened the signing form. completed\_at String The date and time when the submitter completed the signing form. declined\_at String The date and time when the submitter declined the signing form. created\_at String The date and time when the submitter was created. updated\_at String The date and time when the submitter was last updated. submission Object The submission details. id Number The submission's unique identifier. audit\_log\_url String The audit log PDF URL. Available only if the submission was completed by all submitters. combined\_document\_url String The URL of the combined documents with audit log. Combined documents can be enabled via [/settings/accounts](https://docuseal.com/settings/account) . status String The submission status. Possible values: completed, declined, expired, pending url String The submission URL. variables Object Dynamic content variables object. created\_at String The submission creation date. template Object Base template details. id Number The template's unique identifier. name String The template's name. external\_id String Your application-specific unique string key to identify template within your app. created\_at String updated\_at String folder\_name String Template folder name. preferences Object Submitter preferences for notifications. send\_email Boolean The flag indicating whether the submitter has opted to receive an email. send\_sms Boolean The flag indicating whether the submitter has opted to receive an SMS. values Array List of the filled values passed by the submitter. Child parameters field String The field name. value String The field value. metadata Object Metadata object with additional submitter information. audit\_log\_url String The audit log PDF URL. Available only if the submission was completed by all submitters. submission\_url String The submission URL. documents Array List of completed documents signed by the submitter. Child parameters name String The document file name. url String The document file URL. Copy as Markdown Copy as Markdown Copied Copy Copied { "event_type": "form.completed", "timestamp": "2023-09-24T13:48:36Z", "data": { "id": 1, "email": "john.doe@example.com", "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", "ip": "132.216.88.83", "sent_at": "2023-08-20T10:09:05.459Z", "opened_at": "2023-08-20T10:10:00.451Z", "completed_at": "2023-08-20T10:12:47.579Z", "declined_at": null, "created_at": "2023-08-20T10:09:02.459Z", "updated_at": "2023-08-20T10:12:47.907Z", "name": null, "phone": null, "role": "First Party", "external_id": null, "decline_reason": null, "status": "completed", "preferences": { "send_email": true, "send_sms": false }, "submission": { "id": 12, "audit_log_url": "https://docuseal.com/blobs/proxy/eyJfcmFpbHMiOnsib/audit-log.pdf", "combined_document_url": "https://docuseal.com/blobs/proxy/eyJfcmFpbHMiOnsib/document.pdf", "status": "completed", "url": "https://docuseal.com/e/N5JsdkFGPeQF7J", "variables": { "custom_variable": "value" }, "created_at": "2023-08-20T10:09:05.258Z" }, "template": { "id": 6, "name": "Invoice", "external_id": null, "created_at": "2023-08-19T11:09:21.487Z", "updated_at": "2023-08-19T11:11:47.804Z", "folder_name": "Default" }, "values": [\ {\ "field": "First Name",\ "value": "John"\ },\ {\ "field": "Last Name",\ "value": "Doe"\ },\ {\ "field": "Signature",\ "value": "https://docuseal.com/blobs/proxy/eyJfcmFpbHMiOnsib/signature.png"\ },\ {\ "field": "Signature",\ "value": "John Doe"\ }\ ], "metadata": { "customData": "custom value" }, "audit_log_url": "https://docuseal.com/blobs/proxy/eyJfcmFpbHMiOnsib/audit-log.pdf", "submission_url": "https://docuseal.com/e/N5JsdkFGPeQF7J", "documents": [\ {\ "name": "sample-document",\ "url": "https://docuseal.com/blobs/proxy/eyJfcmFpbHMiOnsib/sample-document.pdf"\ }\ ] } } Submission Webhook ------------------ Get submission creation, completion, expiration, and archiving notifications using these events: * **'submission.created'** event is triggered when the submission is created. * **'submission.completed'** event is triggered when the submission is completed by all signing parties. * **'submission.expired'** event is triggered when the submission expires. * **'submission.archived'** event is triggered when the submission is archived. event\_type String The event type. Possible values: submission.created, submission.archived timestamp String The event timestamp. Example: 2023-09-24T11:20:42Z data Object Submitted data object. id Number The submission's unique identifier. name String Name of the document submission. slug String Unique slug of the submission. expire\_at String The date and time when the submission will expire. archived\_at String The submission archive date. created\_at String The submission creation date. updated\_at String The submission update date. source String The submission source. Possible values: invite, bulk, api, embed, link submitters\_order String The submitters order. Possible values: random, preserved audit\_log\_url String Audit log file URL. combined\_document\_url String Combined PDF file URL with documents and Audit Log. submitters Array The list of submitters for the submission. Child parameters id Number The submitter's unique identifier. submission\_id Number The unique submission identifier. uuid String The submitter UUID. email String The email address of the submitter. Example: john.doe@example.com slug String The unique slug of the document template. sent\_at String The date and time when the signing request was sent to the submitter. opened\_at String The date and time when the submitter opened the signing form. completed\_at String The date and time when the submitter completed the signing form. declined\_at String The date and time when the submitter declined the signing form. created\_at String The date and time when the submitter was created. updated\_at String The date and time when the submitter was last updated. name String The name of the submitter. phone String The phone number of the submitter, formatted according to the E.164 standard. Example: +1234567890 role String The role name or title of the submitter. Example: First Party external\_id String Your application-specific unique string key to identify this submitter within your app. metadata Object Metadata object with additional submitter information. Example: { 'customField': 'value' } status String The submitter status. Possible values: completed, declined, opened, sent, awaiting ua String The user agent string that provides information about the submitter's web browser. ip String The submitter's IP address. decline\_reason String Submitter provided decline message. values Object An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see \`fields\` param. documents Array The list of documents for the submission. Child parameters name String The document file name. url String The document file URL. preferences Object The submitter preferences. template Object Base template details. id Number The template's unique identifier. name String The template's name. external\_id String Your application-specific unique string key to identify template within your app. folder\_name String The folder name. created\_at String The date and time when the template was created. updated\_at String The date and time when the template was last updated. variables Object Dynamic content variables object. created\_by\_user Object User who created the submission. id Integer Unique identifier of the user who created the submission. first\_name String The first name of the user who created the submission. last\_name String The last name of the user who created the submission. email String The email address of the user who created the submission. submission\_events Array List of submission events. Child parameters id Integer Submission event unique ID number. submitter\_id Integer Unique identifier of the submitter that triggered the event. event\_type String Event type. Possible values: send\_email, bounce\_email, complaint\_email, send\_reminder\_email, send\_sms, send\_2fa\_sms, open\_email, click\_email, click\_sms, phone\_verified, start\_form, start\_verification, complete\_verification, view\_form, invite\_party, complete\_form, decline\_form, api\_complete\_form event\_timestamp String Date and time when the event was triggered. data Object Additional event details object. documents Array Child parameters name String Document name. url String Document URL. status String The status of the submission. Possible values: completed, declined, expired, pending completed\_at String The date and time when the submission was fully completed. Copy as Markdown Copy as Markdown Copied Copy Copied { "event_type": "submission.created", "timestamp": "2024-05-26T17:32:33.518Z", "data": { "id": 1, "name": "Sample Submission", "slug": "VyL4szTwYoSvXq", "expire_at": null, "archived_at": null, "created_at": "2024-05-26T17:32:33.447Z", "updated_at": "2024-05-26T17:32:33.447Z", "source": "invite", "submitters_order": "random", "audit_log_url": null, "combined_document_url": null, "submitters": [\ {\ "id": 1,\ "submission_id": 1,\ "uuid": "6b92a2d0-b511-4678-bccf-1e8a131f5030",\ "email": "mike@example.com",\ "slug": "S6fWFYRZus6suW",\ "sent_at": null,\ "opened_at": null,\ "completed_at": null,\ "declined_at": null,\ "created_at": "2024-05-26T17:32:33.466Z",\ "updated_at": "2024-05-26T17:32:33.466Z",\ "name": null,\ "phone": null,\ "external_id": null,\ "metadata": {},\ "status": "awaiting",\ "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",\ "ip": "156.195.105.196",\ "decline_reason": null,\ "values": [],\ "documents": [],\ "preferences": {},\ "role": "First Party"\ }\ ], "template": { "id": 1, "name": "Sample Document", "created_at": "2024-05-26T16:57:28.092Z", "updated_at": "2024-05-26T16:58:07.314Z", "external_id": null, "folder_name": "Default" }, "variables": { "custom_variable": "value" }, "created_by_user": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "submission_events": [], "documents": [], "status": "pending", "completed_at": null } } Template Webhook ---------------- Get template creation and update notifications using these events: * **'template.created'** is triggered when the template is created. * **'template.updated'** is triggered when the template is updated. * **'template.archived'** is triggered when the template is archived. event\_type String The event type. Possible values: template.created, template.updated, template.archived timestamp String The event timestamp. Example: 2023-09-24T11:20:42Z data Object Submitted data object. id Number The template's unique identifier. slug String The template's unique slug. name String The template's name. schema Array The template document files. Child parameters attachment\_uuid String The attachment UUID. name String The attachment name. fields Array The template fields. Child parameters uuid String The field UUID. submitter\_uuid String The submitter role UUID. name String The field name. type String The field type. Possible values: heading, text, signature, initials, date, number, image, checkbox, multiple, file, radio, select, cells, stamp, payment, phone, verification, kba, strikethrough required Boolean The flag indicating whether the field is required. preferences Object The field preferences. areas Array List of areas where the field is located in the document. Child parameters x Number X coordinate of the area where the field is located in the document. y Number Y coordinate of the area where the field is located in the document. w Number Width of the area where the field is located in the document. h Number Height of the area where the field is located in the document. attachment\_uuid String Unique identifier of the attached document where the field is located. page Integer Page number of the attached document where the field is located. Show All submitters Array List of submitter roles defined in the template. Child parameters name String Submitter name. uuid String Unique identifier of the submitter. author\_id Integer Unique identifier of the author of the template. archived\_at String Date and time when the template was archived. created\_at String Date and time when the template was created. updated\_at String Date and time when the template was updated. source String Source of the template. Possible values: native, api, embed external\_id String Identifier of the template in the external system. folder\_id Integer Unique identifier of the folder where the template is placed. folder\_name String Folder name where the template is placed. preferences Object Template preferences object. shared\_link Boolean Flag indicating whether the shared link is enabled for the template. author Object Author of the template. id Integer Unique identifier of the author. first\_name String First name of the author. last\_name String Last name of the author. email String Author email. documents Array List of documents attached to the template. Child parameters id Integer Unique identifier of the document. uuid String Unique identifier of the document. url String URL of the document. preview\_image\_url String Document preview image URL. filename String Document filename. Copy as Markdown Copy as Markdown Copied Copy Copied { "event_type": "template.created", "timestamp": "2024-05-26T16:59:47.237Z", "data": { "id": 1, "slug": "UwRU9ir5dvhSRY", "name": "Sample Document", "schema": [\ {\ "attachment_uuid": "84fa7c01-8b89-47e2-83f0-8623e7e4aa1c",\ "name": "sample-document"\ }\ ], "fields": [\ {\ "uuid": "f86dbf07-2d84-490c-b372-1aaaaf0549c1",\ "submitter_uuid": "6b92a2d0-b511-4678-bccf-1e8a131f5030",\ "name": "First Name",\ "type": "text",\ "required": true,\ "preferences": {},\ "areas": [\ {\ "x": 0.2541666666666667,\ "y": 0.2266854052667579,\ "w": 0.3132975260416667,\ "h": 0.04878270348837208,\ "attachment_uuid": "84fa7c01-8b89-47e2-83f0-8623e7e4aa1c",\ "page": 0\ }\ ]\ },\ {\ "uuid": "1b41711b-f765-41c5-b2b9-000b88b96c6e",\ "submitter_uuid": "6b92a2d0-b511-4678-bccf-1e8a131f5030",\ "name": "Last Name",\ "type": "text",\ "required": true,\ "preferences": {},\ "areas": [\ {\ "x": 0.5419813368055556,\ "y": 0.3057829599863201,\ "w": 0.2188802083333333,\ "h": 0.05516843365253077,\ "attachment_uuid": "84fa7c01-8b89-47e2-83f0-8623e7e4aa1c",\ "page": 0\ }\ ]\ }\ ], "submitters": [\ {\ "name": "First Party",\ "uuid": "6b92a2d0-b511-4678-bccf-1e8a131f5030"\ }\ ], "author_id": 1, "archived_at": null, "created_at": "2024-05-26T16:57:28.092Z", "updated_at": "2024-05-26T16:57:28.092Z", "source": "native", "folder_id": 1, "external_id": null, "preferences": {}, "shared_link": false, "folder_name": "Default", "author": { "id": 1, "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, "documents": [\ {\ "id": 12,\ "uuid": "84fa7c01-8b89-47e2-83f0-8623e7e4aa1c",\ "url": "https://docuseal.com/file/hash/sample-document.pdf",\ "preview_image_url": "https://docuseal.com/file/hash/0.jpg",\ "filename": "sample-document.pdf"\ }\ ] } } ---