Document packs

Overview

The document_packs API allows you to create multiple child documents and merge them into a single document_pack. This enables you to:

  • Merge templates, syntax documents, or form field documents into a single pack.
  • Assign fields and signers to each document.
  • Customise email notifications and the signer experience.
  • Manage all child documents in a single API request.

This allows templates, syntax documents, and form field documents to be combined into a single request while controlling how the document pack behaves during the signing process and after completion.

Migration Reminder

For migrating from v0 to v1, see: Migrating from V0 to V1

🎥 Demo Watch the walkthrough: Creating a Document Pack Using an Existing Template


Document Pack Structure

A document_pack consists of several sections. Each section manages a different part of the document workflow including recipients, signers, documents, and signing behaviour.


CC Recipients

Optional. Specifies recipients who should receive a final completed copy of the document pack.

Multiple CC recipients can be configured.

Properties

PropertyDescription
emailEmail address that will receive the completed document
mobile_numberMobile number that will receive the completed document
nameName of the CC recipient
can_track_progressAllows the recipient to receive email updates when document status changes and provides a link to track signing progress

Example

"cc_recipients": [
  {
    "email": "[email protected]",
    "mobile_number": "+27000000000",
    "name": "Joe Soaps Brother",
    "can_track_progress": false
  }
]

Document Pack Name

Sets the name for the document pack. Each child document will retain its own name but will belong to this pack.

Example

"document_pack_name": "my first document_pack"

Signatories

Defines the users who will sign documents in the pack.

Properties

PropertyDescription
nameSigner’s name used in notifications
emailDefault communication channel for signing notifications
mobile_numberUsed for OTP verification or SMS/WhatsApp notifications
primary_communication_channelDetermines how notifications and OTPs are sent (email, SMS, or whatsapp)
roleMatches the signer role configured in a template (not required for syntax or form field documents)
uuidOptional identifier used to link a signer to fields within data_fields

If the uuid is not specified, the system will generate one automatically.

Note: Mobile numbers must be in international format and include the dialing code (e.g. +27XXXXXXXXX). Numbers without a country code may fail for SMS or WhatsApp delivery.

Communication Channel Permissions

The primary_communication_channel field supports email, sms, and whatsapp.

Access to sms and whatsapp must be enabled on your account before use.

If you would like to send signing requests via SMS or WhatsApp, please contact [email protected] to have these channels enabled.

Example

"signatories": [
  {
    "name": "Joe Soap",
    "email": "[email protected]",
    "mobile_number": "+27000000000",
    "role": "signer-1",
    "primary_communication_channel": "whatsapp"
  },
  {
    "name": "Joe Soaps Brother",
    "email": "[email protected]",
    "role": "signer-2"
  }
]

Note: If primary_communication_channel is not specified, it will default to email. You only need to include this field when using sms or whatsapp.


Mail Settings

Optional. Controls how emails are sent to signers.

Properties

PropertyDescription
exclude_created_by_from_final_mailPrevents the creator of the document pack from receiving the final signed document
include_attachments_in_final_mailIncludes the completed document as an attachment in the final email
messageCustom email body message
subjectEmail subject line
reply_emailReply-to email address for signatories to use
sender_nameSender name displayed in notification emails

Note The default wording of system-generated emails cannot be modified. Only the subject, custom message, sender name, and reply email can be configured.

Example

"mail_settings": {
  "exclude_created_by_from_final_mail": false,
  "include_attachments_in_final_mail": false,
  "message": "Custom email body message",
  "subject": "My First Document Pack",
  "reply_email": "[email protected]",
  "sender_name": "Example Name"
}

Documents

This is where the child documents are added to the document pack.

Each document can be created using a template, a syntax document, or a form field PDF.

Properties

PropertyDescription
document_creation_settingsSpecifies the document type and required flags
document_nameName of the child document
data_fieldsOptional fields used to pre-populate or assign fields to signers

Document Creation Settings

Template Document

"create_from_template_key": "<template_key>"

Syntax Document (Base64)

The document must be supplied as a Base64 encoded file.

Required flag:

"extract_fields_by_tag": true

Form Field Document

The document can be supplied using either:

  • base_64_document
  • document_url

Required flags:

"extract_fields_from_form_fields_with_metadata": true,
"apply_extracted_fields": true

These flags instruct the API to extract and apply fields from the PDF.


Data Fields

The data_fields section allows fields within documents to be:

  • Pre-filled with data
  • Assigned to specific signers

Properties

PropertyDescription
custom_idMatches the field identifier defined in a template, syntax document, or form field PDF
dataValue used to populate the field
signatory_uuidAssigns the field to a specific signer

For example, if a document contains a field with custom_id first_name, you can pre-populate it using:

{
  "custom_id": "first_name",
  "data": "Joe"
}

Example

"documents": [
  {
    "document_creation_settings": {
      "base_64_document": "<base_64_string>",
      "extract_fields_by_tag": true
    },
    "document_name": "my base_64 syntax child document",
    "data_fields": [
      {"custom_id": "first_name", "data": "Joe", "signatory_uuid": "signer_1"},
      {"custom_id": "last_name", "data": "Soap", "signatory_uuid": "signer_1"},
      {"custom_id": "employee_signature", "signatory_uuid": "signer_1"}
    ]
  },
  {
    "document_creation_settings": {
      "document_url": "https://www.quicklysign.com/s/example_form_field.pdf",
      "extract_fields_from_form_fields_with_metadata": true,
      "apply_extracted_fields": true
    },
    "document_name": "my hosted form field child document",
    "data_fields": [
      {"custom_id": "company_name", "data": "QuicklySign", "signatory_uuid": "signer_2"},
      {"custom_id": "registration_number", "signatory_uuid": "signer_2"},
      {"custom_id": "employer_signature", "signatory_uuid": "signer_2"}
    ]
  },
  {
    "document_creation_settings": {
      "create_from_template_key": "<template_key>"
    },
    "document_name": "my template child document"
  }
]

Signing Settings

Controls the behaviour of the signing process.

Properties

PropertyDescription
attachments_visible_to_all_signersDetermines whether all signers can view attachments
branding_keyApplies custom branding (see Branding API documentation)
can_use_drawn_signatureAllows signers to draw their signature
can_use_one_click_initialAllows existing users to apply saved initials
can_use_one_click_signatureAllows existing users to apply saved signatures
can_use_typed_signatureAllows signers to type their signature
can_use_uploaded_signatureAllows uploading an image of a signature
post_signing_urlRedirect URL after signing is completed
sequential_signingControls whether signers sign one after another or simultaneously
use_signing_wizardGuides users through required fields
use_two_factor_authenticationRequires OTP verification via email, SMS, or WhatsApp

Example

"signing_settings": {
  "attachments_visible_to_all_signers": true,
  "branding_key": null,
  "can_use_drawn_signature": true,
  "can_use_one_click_initial": true,
  "can_use_one_click_signature": true,
  "can_use_typed_signature": true,
  "can_use_uploaded_signature": true,
  "post_signing_url": "",
  "sequential_signing": true,
  "use_signing_wizard": true,
  "use_two_factor_authentication": true
}

Retrieve Document Packs

All retrieval requests require a valid access_token.

Get All Document Packs

GET /v1/document_packs

Example:

https://sandboxapi.quicklysign.com/v1/document_packs

Get a Specific Document Pack

GET /v1/document_packs/<document_pack_key>

Get Document Packs for a Team / Workspace

GET /v1/document_packs?team_key=<team_key>

Download Completed Document

Once a document pack has been fully signed, the completed PDF can be downloaded using the serve_pdf_url.

Method 1 - Retrieve from Creation Response

After creating and sending a document pack, the API response will include serve_pdf_url. Once signing is complete, this URL can be used to download the document.


Method 2 - Retrieve via Document Pack Endpoint

GET /v1/document_packs/<document_pack_key>

The response will include serve_pdf_url once the document has been finalized.


Delete Document Pack

To delete a document pack you must provide the document_pack_key.

Important: The API requires the DOCUMENT_PACK_KEY, not the child document key.

DELETE /v1/document_packs/<document_pack_key>

Example:

https://sandboxapi.quicklysign.com/v1/document_packs/<document_pack_key>

Advanced Signing Settings

If the first signer needs permission to edit document data (for example an advisor or preparer role), enable:

"signing_settings": {
  "first_signer_has_multi_edit_role": true
}

This allows the first signer to:

  • Edit multiple fields
  • Correct information before the client signs the document

Advanced Data Field Placement

Optional. Used when fields need to be positioned manually.

Field positioning uses pixel coordinates relative to the top-left corner of the document (page 0).

If each page is 800px high and the document has 10 pages, the final page fields will have y values between 7200 and 8000 pixels.

Fields can be positioned by:

  • manually specifying coordinates, or
  • extracting fields from another document with the same layout.

(See image below)

549

Data field positioning.