How to Send a Document via API

Send a document to recipients for viewing and signing via the PandaDoc API, with options for silent delivery, approval workflows, and forwarding control.

Problem

You have created a document via the API and it has reached document.draft status. Now you need to send it to recipients for viewing and signing, and you want to control the delivery method, notification behavior, and forwarding permissions.

Prerequisites

Solution

Step 1: Confirm the document is in draft status

You can only send a document that is in document.draft status. After creation, documents briefly remain in document.uploaded (typically 3-5 seconds) while processing. Use the Document Status endpoint or webhooks to confirm the transition.

❗️

Attempting to send a document that is still in document.uploaded status returns a 409 Conflict response.

Step 2: Build the send request

At minimum, the request body can be empty ({}). PandaDoc will send a default notification email to all recipients. To customize delivery, include any of the following:

POST /public/v1/documents/{id}/send

{
  "message": "Hello! Please review and sign this agreement.",
  "subject": "Action required: Partnership Agreement",
  "silent": false
}
ParameterPurpose
messageCustom body text included in the notification email
subjectCustom email subject line (default: "[Sender] sent you '[Document name]'")
silentIf true, disables all recipient email/SMS notifications (see Step 3)
senderOverride the sender (email or membership_id)
forwarding_settingsControl whether recipients can forward the document or reassign their fields
selected_approversSelect an approver from a group when an approval workflow is configured (see Step 5)

See the Send Document API reference for the full parameter schema.

Step 3: Choose between notified and silent delivery

By default (silent: false), PandaDoc sends a notification email (and/or SMS if configured) to recipients with a link to the document.

Set silent: true when you are delivering the document through an alternative channel:

  • Embedded signing -- you display the signing session inside your app
  • Shared links -- you send the document link yourself via your own email, chat, or portal

Silent mode disables sent, viewed, comment, and completed email notifications. It does not affect approval workflow notifications.

📘

For guidance on choosing between email delivery and embedded signing, see How to Choose Between Shared Links and Embedded Signing.

Step 4: Control forwarding permissions (optional)

You can restrict whether recipients can forward the document or reassign their signing rights:

{
  "silent": false,
  "forwarding_settings": {
    "forwarding_allowed": true,
    "forwarding_with_reassigning_allowed": false
  }
}
  • forwarding_allowed -- recipients can forward the document link to another email address
  • forwarding_with_reassigning_allowed -- recipients can transfer their field assignments (including signature) to someone else

Step 5: Handle approval workflows (if applicable)

If the document's template has an approval workflow enabled, sending moves the document to document.waiting_approval instead of document.sent. Once approved, you need to call the Send endpoint again to move it to document.sent.

To select a specific approver from a selectable group:

  1. Call Document Details and find the approval_execution.steps section
  2. Copy the steps into the selected_approvers field of your send request
  3. Set is_selected: true for the approver you want
{
  "selected_approvers": {
    "steps": [
      {
        "id": "LzWmancTxrgfTMpsJP9Eqd",
        "group": {
          "id": "op9MA75HygJHiV4aeVHXCH",
          "type": "selectable",
          "assignees": [
            {
              "user": "tpBLrk3vJoLggypMSRt92i",
              "is_selected": true
            }
          ]
        }
      }
    ]
  }
}
📘

You can change the selected approver only by reverting the document back to document.draft status.

Verification

  1. Check the API response -- a successful send returns the document with status document.sent (or document.waiting_approval if an approval workflow is active).
  2. If silent: false, verify that recipients received the notification email.
  3. Use the Document Status endpoint or webhooks to track subsequent status changes (document.viewed, document.completed).

Troubleshooting

ErrorCauseFix
409 ConflictDocument is still in document.uploaded statusWait for it to reach document.draft; poll status or use webhooks
404 Not FoundInvalid document ID or document not yet processedVerify the ID and confirm the document exists
403 Permission ErrorSending outside your organization with a sandbox key, or insufficient permissionsUse a production API key, or check account permissions

Related