openapi: 3.2.0 info: version: 1.0.0 title: Paperform Papersign Documents API contact: name: Paperform API Support url: https://paperform.co email: support@paperform.co servers: - url: https://api.paperform.co/v1 security: - bearerAuth: [] tags: - name: Papersign Documents paths: /papersign/documents: get: parameters: - $ref: '#/components/parameters/papersignDocumentSearch' - $ref: '#/components/parameters/papersignDocumentSubmissionId' - $ref: '#/components/parameters/papersignDescendantOfFolderId' - $ref: '#/components/parameters/papersignDocumentSpaceId' - $ref: '#/components/parameters/papersignDocumentStatus' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/afterId' - $ref: '#/components/parameters/beforeId' - $ref: '#/components/parameters/beforeDate' - $ref: '#/components/parameters/afterDate' - $ref: '#/components/parameters/sort' description: 'This endpoint returns a list of documents. Please note that this feature is exclusively available as part of the Papersign API.' operationId: listPapersignDocuments tags: - Papersign Documents responses: '200': description: 'Successfully returned a list of documents ' content: application/json: schema: type: object allOf: - properties: status: type: string enum: - ok results: type: object properties: documents: type: array items: $ref: '#/components/schemas/Document' - $ref: '#/components/schemas/Pagination' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: List papersign documents x-summary-source: derived /papersign/documents/{id}: get: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint returns a document by ID. Please note that this feature is exclusively available as part of the Papersign API.' operationId: getPapersignDocument tags: - Papersign Documents responses: '200': description: Successfully returned a document content: application/json: schema: type: object allOf: - properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Get papersign document x-summary-source: derived /papersign/documents/{id}/completed-document-url: get: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint returns a link to download the completed (fully signed) document as a PDF. A fresh link is generated on every request and is valid for one week, so download or store the file promptly. The document must be completed — every signer must have finished signing — before a link is available. A draft document returns `400`, and a document that has been sent but is not yet completed returns `422`. Please note that this feature is exclusively available as part of the Papersign API.' operationId: getPapersignCompletedDocumentUrl tags: - Papersign Documents responses: '200': description: 'Successfully generated a download link for the completed document ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: completed_document_url: type: string format: uri description: A link to download the completed document as a PDF. Freshly generated on each request and valid for one week. example: https://api.paperform.co/storage/download/5d40fdaf174b4c0007043072?expires=1751760000&signature=8f2c1d expires_at_utc: type: - string - 'null' format: date-time description: When the returned `completed_document_url` expires (RFC 3339, UTC). Request the endpoint again after this time to get a fresh link. example: '2026-07-14T23:00:00+00:00' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Get papersign completed document url x-summary-source: derived /papersign/documents/{id}/download: get: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'Downloads the completed (fully signed) document as a PDF. This endpoint responds with a `302` redirect to a short-lived signed URL for the file — follow the redirect (most HTTP clients do so automatically, e.g. `curl -L`) to receive the PDF. If you want the link itself as JSON rather than the file, use `GET /papersign/documents/{id}/completed-document-url` instead. The document must be completed — every signer must have finished signing — before it can be downloaded. A draft document returns `400`, and a document that has been sent but is not yet completed returns `422`. Please note that this feature is exclusively available as part of the Papersign API.' operationId: downloadPapersignCompletedDocument tags: - Papersign Documents responses: '302': description: 'Redirect to a short-lived signed URL for the completed document PDF. ' headers: Location: description: The signed URL for the completed document. Valid for one week. schema: type: string format: uri '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Download papersign completed document x-summary-source: derived /papersign/documents/{id}/send: post: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint sends a document. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignSendDocument tags: - Papersign Documents requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentSend' responses: '200': description: 'Successfully sent a document ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign send document x-summary-source: derived /papersign/documents/{id}/create-draft: post: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint creates a draft document without sending it. Unlike the send endpoint, this does not validate the document completeness, does not check owner verification, and does not create a sign request or send notifications. This is useful for preparing documents programmatically before sending them. You can optionally copy the document and/or update signers and variables in a single operation. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignCreateDraftDocument tags: - Papersign Documents requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentCreateDraft' responses: '200': description: 'Successfully created a draft document ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign create draft document x-summary-source: derived /papersign/documents/{id}/copy: post: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint copies a document. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignCopyDocument tags: - Papersign Documents requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentCopy' responses: '200': description: 'Successfully copied a document ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign copy document x-summary-source: derived /papersign/documents/{id}/cancel: put: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint cancels a document. Document must be in progress to be cancelled. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignCancelDocument tags: - Papersign Documents responses: '200': description: 'Successfully cancelled a document ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign cancel document x-summary-source: derived /papersign/documents/{id}/move: post: parameters: - $ref: '#/components/parameters/papersignDocumentID' description: 'This endpoint moves a document to a new location. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignMoveDocument tags: - Papersign Documents requestBody: content: application/json: schema: $ref: '#/components/schemas/DocumentMove' responses: '200': description: 'Successfully moved a document to a new location ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: document: $ref: '#/components/schemas/Document' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign move document x-summary-source: derived /papersign/documents/{id}/participants/{participantKey}/link: post: parameters: - $ref: '#/components/parameters/papersignDocumentID' - $ref: '#/components/parameters/papersignParticipantKey' description: 'This endpoint generates a signing link for a signer, which you can share with them directly instead of having Paperform email them a notification. The link is returned only in this response and cannot be retrieved again, so store it when you receive it. Generating a link invalidates any link previously generated for the same signer — only the most recently generated link will work. The link is valid for one week. The document must have been sent (be in progress) and the signer must be pending a signature. Please note that this feature is exclusively available as part of the Papersign API.' operationId: papersignGenerateSignerLink tags: - Papersign Documents responses: '200': description: 'Successfully generated a signing link for the signer ' content: application/json: schema: type: object properties: status: type: string enum: - ok results: type: object properties: link: $ref: '#/components/schemas/GeneratedLink' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/Validation' '429': $ref: '#/components/responses/Throttled' 5XX: $ref: '#/components/responses/Unexpected' summary: Papersign generate signer link x-summary-source: derived components: schemas: PapersignFolder: type: object properties: id: type: number format: int32 readOnly: true description: The unique identifier of the folder. example: 9999 name: type: string description: The name of the document. example: My Document parent_id: type: - number - 'null' format: int32 description: The unique identifier of the parent folder. example: 9999 space_id: type: number format: int32 description: The unique identifier of the space. example: 8888 required: - name DocumentCopy: type: object properties: name: type: string description: The new name of the document. example: My Copied Document space_id: type: number format: int32 description: The unique identifier of the space to copy the document to. example: 8888 path: type: string maxLength: 100 description: The path to copy the document to. Maximum depth is 4 levels. Any missing folders will be created. example: /path/to/folder folder_id: type: number format: int32 description: The unique identifier of the folder to copy the document to. Required when space_id and path are not present. example: 9999 GeneratedLink: type: object properties: participant_key: type: string description: The key of the signer the link belongs to. example: akdj17 participant_name: type: string description: The name of the signer the link belongs to. example: Jack Smith link: type: string format: uri description: The signing link for the signer. Valid for one week. example: https://sign.paperform.co/sign/5d40fdaf174b4c0007043072/akdj17/view/manual_link?action=5f80fdaf174b4c0007043099&expires=1751760000&signature=8f2c1d required: - participant_key - participant_name - link PapersignVariable: type: object properties: key: type: string readOnly: true description: The key for the variable. Must be unique for the document. example: adk123 name: type: string description: The name of the signer. example: Variable 1 value: type: string description: The value of the variable. example: value 1 required: - key Signer: type: object properties: key: type: string description: The key for the signer. example: akdj17 name: type: string description: The name of the signer. example: Jack Smith email: type: string format: email description: The signer's email address. example: signer@example.com phone: type: - string - 'null' description: The signer's phone number. example: 123 456 7899 job_title: type: - string - 'null' description: The signer's job title. example: Account Manager company: type: - string - 'null' description: The signer's company. example: Explosive Startup custom_attributes: type: array description: Custom attributes for the signer. items: type: object properties: key: type: string example: Relationship label: type: - string - 'null' example: Relationship to the company value: type: - string - 'null' example: CEO required: - key - label - value required: - key - name - email Pagination: type: object properties: total: type: integer description: The total number of items. readOnly: true example: 57 has_more: description: Whether there are more items. type: boolean example: true readOnly: true limit: description: The limit of items per page. type: integer example: 20 default: 20 skip: description: The number of items to skip. type: integer default: 0 example: 0 Document: type: object properties: id: type: string format: uuid readOnly: true description: The unique identifier of the document. example: 5d40fdaf174b4c0007043072 name: type: string description: The name of the document. example: My Document status: type: string enum: - draft - archived - in_progress - canceled - completed - expired - rejected description: The status of the document. example: completed folder: $ref: '#/components/schemas/PapersignFolder' space: $ref: '#/components/schemas/PapersignSpace' signers: type: array items: $ref: '#/components/schemas/Signer' variables: type: array items: $ref: '#/components/schemas/PapersignVariable' created_at_utc: type: string format: date-time description: A formatted date-time string in UTC indicating the time the document was created. readOnly: true example: '2019-04-14T09:00:00.000Z' updated_at_utc: type: string format: date-time description: A formatted date-time string in UTC indicating the time the document was last updated. readOnly: true example: '2019-04-14T09:00:00.000Z' sent_at_utc: type: string format: date-time description: A formatted date-time string in UTC indicating the time the document was sent. readOnly: true example: '2019-04-14T09:00:00.000Z' completed_at_utc: type: string format: date-time description: A formatted date-time string in UTC indicating the time the document was completed. readOnly: true example: '2019-04-14T09:00:00.000Z' source: type: - object - 'null' readOnly: true description: 'Where the document originated. For a document created from a Paperform submission this carries the originating form and submission IDs, letting you correlate a submission with its signed document without relying on the `document.sent` webhook. ' properties: type: type: string enum: - paperform_submission - manual - public_api description: How the document was created. example: paperform_submission paperform_form_id: type: - string - 'null' description: The Paperform form ID the document was created from. Only present for `paperform_submission`. example: iwl6j5lh paperform_submission_id: type: - string - 'null' description: The Paperform submission ID the document was created from. Only present for `paperform_submission`. Filter the list endpoint by this via `?paperform_submission_id=`. example: 6a18dfcdcc9dc182fc0031cc PapersignSpace: type: object properties: id: type: number format: int32 readOnly: true description: The unique identifier of the folder. example: 9999 name: type: string description: The name of the space. example: My Space root_folder_id: type: number format: int32 description: The unique identifier of the root folder. example: 9999 allow_team_access: type: boolean description: Whether to allow team access to this space. example: true Error: type: object properties: status: type: string enum: - error example: error message: type: string description: An error message. example: Invalid request details: type: array description: Suggested actions to resolve the error. items: type: string DocumentSend: type: object properties: expiration: type: string format: date-time description: The expiration date of the document. Must be at least 30 minutes in the future. example: '2020-12-31T23:59:59Z' invite_message: type: string maxLength: 1000 description: The message to include in the invitation email. example: Please sign this document. from_user_email: type: string format: email description: The email address of a User on your teams account to send the document from. The User's name and email will appear on the notification email. example: example@paperform.co document_recipient_emails: type: array maxItems: 5 items: type: string format: email description: The email address of the recipient. example: signer@example.com automatic_reminders: type: object properties: first_after_days: type: number format: int32 description: The number of days after the document is sent to send the reminder. minimum: 1 example: 3 follow_up_every_days: type: number format: int32 description: The number of days to wait between reminders. minimum: 1 example: 3 required: - first_after_days - follow_up_every_days signers: type: array items: $ref: '#/components/schemas/Signer' variables: type: array items: $ref: '#/components/schemas/PapersignVariable' copy: description: Whether to copy before sending. Can be a boolean or an object. If value is true, the document will be copied with the same name and location. oneOf: - type: boolean example: true - $ref: '#/components/schemas/DocumentCopy' DocumentMove: type: object properties: name: type: string description: The new name of the document. example: My Copied Document space_id: type: number format: int32 description: The unique identifier of the space to move the document to. example: 8888 path: type: string maxLength: 100 description: The path to move the document to. Maximum depth is 4 levels. Any missing folders will be created. example: /path/to/folder folder_id: type: number format: int32 description: The unique identifier of the folder to move the document to. Required when space_id and path are not present. example: 9999 DocumentCreateDraft: type: object properties: signers: type: array description: An array of signers with updated data. All signers must be present with the same keys as the original document. items: $ref: '#/components/schemas/Signer' variables: type: array description: An array of variables with updated values. Only the variables you want to update need to be included. items: $ref: '#/components/schemas/PapersignVariable' copy: description: Whether to copy before creating the draft. Can be a boolean or an object. If value is true, the document will be copied with the same name and location. oneOf: - type: boolean example: true - $ref: '#/components/schemas/DocumentCopy' parameters: papersignParticipantKey: in: path required: true name: participantKey schema: type: string description: The key of the signer (participant) on the document. example: akdj17 papersignDocumentSubmissionId: in: query name: paperform_submission_id schema: type: string description: Filter to documents created from the given Paperform submission ID (matches `source.paperform_submission_id`). Use this to correlate a Paperform submission with its Papersign document without relying on the `document.sent` webhook. example: 6a18dfcdcc9dc182fc0031cc beforeDate: in: query name: before_date schema: type: string format: date-time description: Return results created on or after this date-time (UTC). Overwritten by `before_id`. example: '2019-06-11T20:36:29Z' afterDate: in: query name: after_date schema: type: string format: date-time description: Return results created before this date (UTC). Overwritten by `after_id`. example: '2019-06-11T20:36:29Z' papersignDescendantOfFolderId: in: query name: folder_id schema: type: string description: Search folders that are descendants of folder id. Accepts either a current folder id or one issued before your account moved to unified spaces. Responds `422` if the id is not a positive integer, or names a folder that does not exist, has been deleted, or belongs to another team. example: '9999' papersignDocumentSpaceId: in: query name: space_id schema: type: string description: Filter to documents anywhere within the given space, including documents in its nested folders. Accepts either a space id from `GET /papersign/spaces` or a space id issued before your account moved to unified spaces — both resolve to the same space, so an integration holding an older id keeps working. Responds `422` if the id is not a positive integer, or names a space that does not exist, has been deleted, or belongs to another team; the listing is never returned unfiltered in place of a rejected filter. example: '9999' skip: in: query name: skip schema: type: integer default: 0 description: Number of results to skip in the result set. papersignDocumentSearch: in: query name: search schema: type: string description: Search documents by name. example: John Doe sort: in: query name: sort schema: type: string enum: - ASC - DESC default: DESC description: The direction to sort in. Results are sorted by `created_at`, and defaults to `"DESC"`. example: ASC papersignDocumentStatus: in: query name: status schema: type: array items: type: string enum: - draft - inProgress - archived - canceled - expired - rejected - completed style: form explode: true description: Search documents by status. example: draft,inProgress limit: in: query name: limit schema: type: integer maximum: 100 default: 20 description: The number or results to return. afterId: in: query name: after_id schema: type: string description: Return results after the provided ID. example: 5d40fdaf174b4c0007043072 beforeId: in: query name: before_id schema: type: string description: Return results before the provided ID. example: 5d40fdaf174b4c0007043072 papersignDocumentID: in: path required: true name: id schema: type: string description: The ID of the Papersign document. example: 5d40fdaf174b4c0007043072 responses: Throttled: description: Too Many Requests content: text/html: schema: type: string enum: - Too many requests. Unauthorized: description: Unauthorized content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - authentication description: Token not provided for not valid. Forbidden: description: Not Permitted content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - permission description: Not permitted to access requested resource. Validation: description: Validation Error content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - validation description: Invalid parameters provided. BadRequest: description: Invalid Request content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - validation description: Invalid parameters provided. Unexpected: description: Unexpected Error content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - server_error description: An unexpected error. NotFound: description: Not Found content: application/json: schema: type: object allOf: - $ref: '#/components/schemas/Error' - properties: error_type: type: string enum: - not_found description: The requested resource was not found. securitySchemes: bearerAuth: type: http scheme: bearer x-readme: explorer-enabled: true proxy-enabled: true