Documenso

Recipients API

Add and manage envelope recipients via API.

This guide may not reflect the latest endpoints or parameters. For an always up-to-date reference, see the OpenAPI Reference.

Recipient Object

{
  "id": 123,
  "envelopeId": "clu1abc2def3ghi4jkl",
  "email": "signer@example.com",
  "name": "John Doe",
  "role": "SIGNER",
  "signingOrder": 1,
  "token": "abc123...",
  "signedAt": "2024-01-15T10:30:00Z",
  "readStatus": "OPENED",
  "signingStatus": "SIGNED",
  "sendStatus": "SENT"
}
FieldTypeDescription
idnumberUnique recipient identifier
envelopeIdstringID of the associated envelope
emailstringRecipient's email address
namestringRecipient's display name
rolestringRecipient role (see below)
signingOrdernumber | nullOrder in sequential signing
tokenstringUnique token for signing URL
signedAtstring | nullISO timestamp when signed
readStatusstringNOT_OPENED or OPENED
signingStatusstringNOT_SIGNED, SIGNED, or REJECTED
sendStatusstringNOT_SENT or SENT

Recipient Roles

RoleDescription
SIGNERMust sign the document. Required fields must be completed.
APPROVERMust approve the document before signers can proceed.
VIEWERCan view the document but takes no action.
CCReceives a copy of the completed document. No action required.
ASSISTANTCan fill in fields on behalf of another recipient.

Get Recipient

Retrieve a single recipient by ID.

GET /api/v2/envelope/recipient/{recipientId}

Example

curl "https://app.documenso.com/api/v2/envelope/recipient/789" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx"
const response = await fetch(
  'https://app.documenso.com/api/v2/envelope/recipient/789',
  {
    headers: {
      Authorization: 'api_xxxxxxxxxxxxxxxx',
    },
  },
);

const recipient = await response.json();

Response

Returns the full recipient object including fields.


Create Recipients

Add one or more recipients to an envelope.


POST /api/v2/envelope/recipient/create-many

Request Body

FieldTypeRequiredDescription
envelopeIdstringYesID of the envelope to add recipients to
dataarrayYesArray of recipient objects

Each item in the data array:

FieldTypeRequiredDescription
emailstringYesRecipient's email address
namestringYesRecipient's display name (max 255 chars)
rolestringYesRecipient role (see Recipient Roles above)
signingOrdernumberNoPosition in sequential signing
accessAuthstring[]NoAccess authentication types
actionAuthstring[]NoAction authentication types

Example

curl -X POST "https://app.documenso.com/api/v2/envelope/recipient/create-many" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "envelopeId": "clu1abc2def3ghi4jkl",
    "data": [
      {
        "email": "signer@example.com",
        "name": "John Doe",
        "role": "SIGNER",
        "signingOrder": 1
      },
      {
        "email": "approver@example.com",
        "name": "Jane Smith",
        "role": "APPROVER",
        "signingOrder": 0
      }
    ]
  }'
const response = await fetch(
  'https://app.documenso.com/api/v2/envelope/recipient/create-many',
  {
    method: 'POST',
    headers: {
      Authorization: 'api_xxxxxxxxxxxxxxxx',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      envelopeId: 'clu1abc2def3ghi4jkl',
      data: [
        {
          email: 'signer@example.com',
          name: 'John Doe',
          role: 'SIGNER',
          signingOrder: 1,
        },
        {
          email: 'approver@example.com',
          name: 'Jane Smith',
          role: 'APPROVER',
          signingOrder: 0,
        },
      ],
    }),
  },
);

const { data: recipients } = await response.json();

Response

{
  "data": [
    {
      "id": 789,
      "envelopeId": "clu1abc2def3ghi4jkl",
      "email": "signer@example.com",
      "name": "John Doe",
      "role": "SIGNER",
      "signingOrder": 1,
      "token": "abc123def456",
      "signedAt": null,
      "readStatus": "NOT_OPENED",
      "signingStatus": "NOT_SIGNED",
      "sendStatus": "NOT_SENT"
    },
    {
      "id": 790,
      "envelopeId": "clu1abc2def3ghi4jkl",
      "email": "approver@example.com",
      "name": "Jane Smith",
      "role": "APPROVER",
      "signingOrder": 0,
      "token": "def456ghi789",
      "signedAt": null,
      "readStatus": "NOT_OPENED",
      "signingStatus": "NOT_SIGNED",
      "sendStatus": "NOT_SENT"
    }
  ]
}

Update Recipients

Update one or more recipients on an envelope. Only available for envelopes that are not yet completed.

POST /api/v2/envelope/recipient/update-many

Request Body

FieldTypeRequiredDescription
envelopeIdstringYesID of the envelope containing the recipients
dataarrayYesArray of recipient update objects

Each item in the data array:

FieldTypeRequiredDescription
idnumberYesID of the recipient to update
emailstringNoNew email address
namestringNoNew display name (max 255 chars)
rolestringNoNew recipient role
signingOrdernumberNoNew position in sequential signing
accessAuthstring[]NoAccess authentication types
actionAuthstring[]NoAction authentication types

Example

curl -X POST "https://app.documenso.com/api/v2/envelope/recipient/update-many" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "envelopeId": "clu1abc2def3ghi4jkl",
    "data": [
      {
        "id": 789,
        "name": "Jane Doe",
        "signingOrder": 2
      }
    ]
  }'
const response = await fetch(
  'https://app.documenso.com/api/v2/envelope/recipient/update-many',
  {
    method: 'POST',
    headers: {
      Authorization: 'api_xxxxxxxxxxxxxxxx',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      envelopeId: 'clu1abc2def3ghi4jkl',
      data: [
        {
          id: 789,
          name: 'Jane Doe',
          signingOrder: 2,
        },
      ],
    }),
  },
);

const { data: updatedRecipients } = await response.json();

Response

Returns the updated recipient objects in a data array.


Delete Recipient

Remove a recipient from an envelope. Only available for envelopes that are not yet completed.


POST /api/v2/envelope/recipient/delete

Request Body

FieldTypeRequiredDescription
recipientIdnumberYesID of the recipient to remove

Example

curl -X POST "https://app.documenso.com/api/v2/envelope/recipient/delete" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "recipientId": 789
  }'
const response = await fetch(
  'https://app.documenso.com/api/v2/envelope/recipient/delete',
  {
    method: 'POST',
    headers: {
      Authorization: 'api_xxxxxxxxxxxxxxxx',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      recipientId: 789,
    }),
  },
);

const result = await response.json();
// { "success": true }

Response

{
  "success": true
}

Signing Order

When an envelope uses sequential signing, recipients sign in a specific order defined by signingOrder.

Setting Signing Order

When creating recipients, assign signingOrder values to control the sequence:

const response = await fetch('https://app.documenso.com/api/v2/envelope/recipient/create-many', {
  method: 'POST',
  headers: {
    Authorization: 'api_xxxxxxxxxxxxxxxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    envelopeId: 'clu1abc2def3ghi4jkl',
    data: [
      {
        email: 'approver@example.com',
        name: 'Approver',
        role: 'APPROVER',
        signingOrder: 0, // Approvers typically go first
      },
      {
        email: 'first@example.com',
        name: 'First Signer',
        role: 'SIGNER',
        signingOrder: 1,
      },
      {
        email: 'second@example.com',
        name: 'Second Signer',
        role: 'SIGNER',
        signingOrder: 2,
      },
    ],
  }),
});

To enable sequential signing, set signingOrder to SEQUENTIAL in the envelope metadata when creating or updating the envelope. See the Documents API for details.

Signing Order Behavior

  • Recipients with lower signingOrder values sign first
  • Recipients with the same signingOrder can sign simultaneously
  • CC recipients receive the document after all signing is complete
  • APPROVER recipients must approve before signers with higher order values

Authentication Options

For enhanced security, you can require additional authentication when recipients access or sign a document.

Access Authentication

Controls who can view the document:

TypeDescription
ACCOUNTRecipient must be logged in
TWO_FACTOR_AUTHRecipient must verify with 2FA

Action Authentication

Controls who can sign the document:

TypeDescription
ACCOUNTRecipient must be logged in
PASSKEYRequire passkey authentication
TWO_FACTOR_AUTHRequire 2FA code
PASSWORDRequire password verification
EXPLICIT_NONEExplicitly disable action authentication

Example

const response = await fetch('https://app.documenso.com/api/v2/envelope/recipient/create-many', {
  method: 'POST',
  headers: {
    Authorization: 'api_xxxxxxxxxxxxxxxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    envelopeId: 'clu1abc2def3ghi4jkl',
    data: [
      {
        email: 'signer@example.com',
        name: 'John Doe',
        role: 'SIGNER',
        accessAuth: ['ACCOUNT'],
        actionAuth: ['PASSKEY', 'TWO_FACTOR_AUTH'],
      },
    ],
  }),
});

Error Responses

StatusDescription
400Invalid request body or recipient already exists
400Envelope is already completed
401Invalid or missing API key
404Envelope or recipient not found
500Server error

Example Error Response

{
  "message": "Recipient already exists"
}

See Also

On this page