---
title: "POST /papersign/documents/{id}/create-draft"
method: POST
path: "/papersign/documents/{id}/create-draft"
tags: ["Papersign Documents"]
---

# POST /papersign/documents/{id}/create-draft

`POST /papersign/documents/{id}/create-draft`

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](https://paperform.co/products/papersign/#pricing).

## Path parameters

- `id` string, required

## Request body

- DocumentCreateDraft
  - `signers` Signer[] — An array of signers with updated data. All signers must be present with the same keys as the original document.
    - `key` string, required — The key for the signer.
    - `name` string, required — The name of the signer.
    - `email` string, email, required — The signer's email address.
    - `phone` string, nullable — The signer's phone number.
    - `job_title` string, nullable — The signer's job title.
    - `company` string, nullable — The signer's company.
    - `custom_attributes` object[] — Custom attributes for the signer.
      - `key` string
      - `label` string, nullable
      - `value` string, nullable
  - `variables` PapersignVariable[] — An array of variables with updated values. Only the variables you want to update need to be included.
    - `key` string, required — The key for the variable. Must be unique for the document.
    - `name` string — The name of the signer.
    - `value` string — The value of the variable.
  - `copy` union — 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.
    - boolean
    - DocumentCopy
      - `name` string — The new name of the document.
      - `space_id` number — The unique identifier of the space to copy the document to.
      - `path` string — The path to copy the document to. Maximum depth is 4 levels. Any missing folders will be created.
      - `folder_id` number — The unique identifier of the folder to copy the document to. Required when space_id and path are not present.

## Response `200`

Successfully created a draft document

- object
  - `status` 'ok'
  - `results` object
    - `document` Document
      - `id` string, uuid — The unique identifier of the document.
      - `name` string — The name of the document.
      - `status` 'draft' | 'archived' | 'in_progress' | 'canceled' | 'completed' | 'expired' | 'rejected' — The status of the document.
      - `folder` PapersignFolder
        - `id` number — The unique identifier of the folder.
        - `name` string, required — The name of the document.
        - `parent_id` number, nullable — The unique identifier of the parent folder.
        - `space_id` number — The unique identifier of the space.
      - `space` PapersignSpace
        - `id` number — The unique identifier of the folder.
        - `name` string — The name of the space.
        - `root_folder_id` number — The unique identifier of the root folder.
        - `allow_team_access` boolean — Whether to allow team access to this space.
      - `signers` Signer[]
        - `key` string, required — The key for the signer.
        - `name` string, required — The name of the signer.
        - `email` string, email, required — The signer's email address.
        - `phone` string, nullable — The signer's phone number.
        - `job_title` string, nullable — The signer's job title.
        - `company` string, nullable — The signer's company.
        - `custom_attributes` object[] — Custom attributes for the signer.
          - `key` string
          - `label` string, nullable
          - `value` string, nullable
      - `variables` PapersignVariable[]
        - `key` string, required — The key for the variable. Must be unique for the document.
        - `name` string — The name of the signer.
        - `value` string — The value of the variable.
      - `created_at_utc` string, date-time — A formatted date-time string in UTC indicating the time the document was created.
      - `updated_at_utc` string, date-time — A formatted date-time string in UTC indicating the time the document was last updated.
      - `sent_at_utc` string, date-time — A formatted date-time string in UTC indicating the time the document was sent.
      - `completed_at_utc` string, date-time — A formatted date-time string in UTC indicating the time the document was completed.
      - `source` object, nullable — 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.
        - `type` 'paperform_submission' | 'manual' | 'public_api' — How the document was created.
        - `paperform_form_id` string, nullable — The Paperform form ID the document was created from. Only present for `paperform_submission`.
        - `paperform_submission_id` string, nullable — The Paperform submission ID the document was created from. Only present for `paperform_submission`. Filter the list endpoint by this via `?paperform_submission_id=`.

## Other responses

- `400` — Invalid Request
- `401` — Unauthorized
- `403` — Not Permitted
- `404` — Not Found
- `422` — Validation Error
- `429` — Too Many Requests
- `5XX` — Unexpected Error

---

[API](https://skmtc.net/paperform/apis/paperform-api.md) · [All operations](https://skmtc.net/paperform/apis/paperform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/paperform/paperform-api/versions/dc1e62b7063d/schema)
