PandaDoc E-Signature API

The PandaDoc E-Signature API enables developers to embed legally binding e-signature workflows directly within their applications using a white-label signing experience. It supports sending signature requests via email or SMS, configuring multiple recipients with defined roles and signing order, and collecting signatures without signers needing a PandaDoc account. The API provides real-time status tracking and generates audit trails and signed PDF copies upon completion. It is designed for use cases in contract management, sales, finance, and any workflow requiring legally compliant electronic signatures.

OpenAPI Specification

pandadoc-rest-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: PandaDoc REST API
  description: >-
    The PandaDoc REST API provides programmatic access to PandaDoc's document
    automation platform, enabling developers to create, send, track, and manage
    documents within their own applications. The API supports the full document
    lifecycle including generating documents from templates with dynamic data,
    collecting e-signatures, managing recipients, and tracking document status.
    Authentication is handled via API keys or OAuth 2.0, and a free sandbox
    environment is available for testing integrations before moving to
    production. An active Enterprise plan is required to access the production
    API.
  version: '7.18.0'
  contact:
    name: PandaDoc API Support
    url: https://developers.pandadoc.com/
    email: [email protected]
  termsOfService: https://www.pandadoc.com/master-services-agreement/
externalDocs:
  description: PandaDoc API Reference
  url: https://developers.pandadoc.com/reference/about
servers:
  - url: https://api.pandadoc.com/public/v1
    description: Production Server
tags:
  - name: API Logs
    description: >-
      Operations for retrieving API request logs useful for debugging and
      auditing integration activity.
  - name: Contacts
    description: >-
      Operations for managing the PandaDoc contacts directory, including
      creating, reading, updating, and deleting contact records.
  - name: Document Attachments
    description: >-
      Operations for managing file attachments associated with a document,
      including uploading and downloading attachment files.
  - name: Document Fields
    description: >-
      Operations for retrieving and updating field values within a document,
      such as text fields, checkboxes, signatures, and date fields.
  - name: Document Link to CRM
    description: >-
      Operations for managing links between PandaDoc documents and external
      CRM entities such as contacts, deals, or accounts.
  - name: Document Recipients
    description: >-
      Operations for managing recipients within documents, including adding,
      editing, reassigning, and deleting recipients.
  - name: Document Reminders
    description: >-
      Operations for configuring automatic reminders sent to document recipients
      who have not yet completed their actions.
  - name: Documents
    description: >-
      Operations for creating, retrieving, sending, and managing the full
      lifecycle of documents including drafting, sending for signature,
      downloading, and deleting.
  - name: Folders
    description: >-
      Operations for organizing documents and templates into folders, including
      creating, renaming, and listing folder contents.
  - name: Forms
    description: >-
      Operations for retrieving and managing forms, which are publicly shareable
      document templates that can be filled and signed without a predefined
      recipient list.
  - name: Members
    description: >-
      Operations for managing and retrieving details about workspace members,
      including listing members and generating member API tokens.
  - name: Templates
    description: >-
      Operations for managing document templates, including listing available
      templates, retrieving template details, creating templates from file
      upload, and deleting templates.
  - name: Webhook Events
    description: >-
      Operations for querying the log of webhook events that have been
      dispatched, including filtering by type and delivery status.
  - name: Webhook Subscriptions
    description: >-
      Operations for managing webhook subscriptions that deliver real-time event
      notifications for document lifecycle and other platform events.
  - name: Workspaces
    description: >-
      Operations for managing organization workspaces, including listing,
      creating, and deactivating workspaces.
security:
  - apiKey: []
  - oauth2: []
paths:
  /documents:
    get:
      operationId: listDocuments
      summary: List Documents
      description: >-
        Returns a paginated list of documents accessible to the authenticated
        user. Supports filtering by template, form, folder, contact, status,
        tag, owner, and date ranges. Results can be ordered by various fields.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/QueryCount'
        - $ref: '#/components/parameters/QueryPage'
        - name: template_id
          in: query
          description: Filter by the parent template identifier.
          schema:
            type: string
        - name: form_id
          in: query
          description: Filter by the parent form identifier.
          schema:
            type: string
        - name: folder_uuid
          in: query
          description: Filter by the folder where documents are stored.
          schema:
            type: string
        - name: contact_id
          in: query
          description: Filter by recipient or approver contact identifier.
          schema:
            type: string
        - name: status
          in: query
          description: Filter by document status.
          schema:
            $ref: '#/components/schemas/DocumentStatus'
        - name: tag
          in: query
          description: Filter by document tag (exact match).
          schema:
            type: string
        - name: q
          in: query
          description: Search by document name substring.
          schema:
            type: string
        - name: id
          in: query
          description: Filter by a specific document identifier.
          schema:
            type: string
        - name: owner_id
          in: query
          description: Filter by the document owner member identifier.
          schema:
            type: string
        - name: order_by
          in: query
          description: Sort field for results.
          schema:
            type: string
            enum:
              - name
              - date_created
              - date_modified
              - date_status_changed
        - name: asc
          in: query
          description: Set to true for ascending order, false for descending.
          schema:
            type: boolean
      responses:
        '200':
          description: Paginated list of documents.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createDocument
      summary: Create Document
      description: >-
        Creates a new document from a template, an uploaded file, or a URL.
        The document is created in draft status and can be customized with
        recipient details, field values, pricing table data, and metadata
        tokens before being sent for signature.
      tags:
        - Documents
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentCreateRequest'
      responses:
        '201':
          description: Document created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentCreateResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}:
    get:
      operationId: getDocumentDetails
      summary: Get Document Details
      description: >-
        Retrieves comprehensive details for a specific document including its
        status, recipients, fields, pricing tables, tokens, tags, and metadata.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: Document details retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentDetailsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      operationId: deleteDocument
      summary: Delete Document
      description: >-
        Permanently deletes a specific document by its identifier. This action
        is irreversible and removes the document and all associated data.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '204':
          description: Document deleted successfully.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/status:
    get:
      operationId: getDocumentStatus
      summary: Get Document Status
      description: >-
        Returns the current status of a document. Use this endpoint to poll
        for status transitions after creating or sending a document.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: Document status retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentStatusResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/send:
    post:
      operationId: sendDocument
      summary: Send Document
      description: >-
        Sends a document in draft status to its recipients for e-signature
        collection or review. Optionally includes a subject line, custom
        message, and controls whether email notifications are sent silently.
        The document must be in document.draft status before it can be sent.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentSendRequest'
      responses:
        '200':
          description: Document sent successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentSendResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/download:
    get:
      operationId: downloadDocument
      summary: Download Document
      description: >-
        Downloads the signed PDF for a completed document. The document must
        be in document.completed status. Returns the binary PDF file content
        with appropriate Content-Disposition headers.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
        - name: watermark_color
          in: query
          description: Hex color code for watermark text applied to the downloaded PDF.
          schema:
            type: string
        - name: watermark_font_size
          in: query
          description: Font size for watermark text in points.
          schema:
            type: integer
        - name: watermark_opacity
          in: query
          description: Opacity of the watermark from 0.0 to 1.0.
          schema:
            type: number
            format: float
        - name: watermark_text
          in: query
          description: Text to render as a watermark on every page of the PDF.
          schema:
            type: string
        - name: separate_files
          in: query
          description: >-
            If true, returns a ZIP archive containing each document section
            as a separate PDF file.
          schema:
            type: boolean
      responses:
        '200':
          description: PDF file content.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/session:
    post:
      operationId: createDocumentSession
      summary: Create Document Session
      description: >-
        Creates a time-limited session token for embedded document viewing or
        signing. The returned session ID is used to embed the PandaDoc document
        viewer within an iframe in the host application. Session lifetime and
        recipient scope are configurable.
      tags:
        - Documents
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentSessionCreateRequest'
      responses:
        '201':
          description: Document session created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentSessionCreateResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/recipients:
    get:
      operationId: listDocumentRecipients
      summary: List Document Recipients
      description: >-
        Returns the list of recipients associated with a document, including
        their roles, completion status, signing order, and contact information.
      tags:
        - Document Recipients
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: List of document recipients.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentRecipientsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: addDocumentRecipient
      summary: Add Document Recipient
      description: >-
        Adds a new recipient to a document that is in draft status. Recipients
        can be assigned roles that map to signature and form fields within the
        document. The recipient will receive signing instructions when the
        document is sent.
      tags:
        - Document Recipients
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentRecipientCreateRequest'
      responses:
        '201':
          description: Recipient added to document.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentRecipient'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/recipients/{recipient_id}:
    patch:
      operationId: updateDocumentRecipient
      summary: Update Document Recipient
      description: >-
        Updates the details of an existing recipient on a document, such as
        their name, email, role, or signing order. The document must be in
        an editable state.
      tags:
        - Document Recipients
      parameters:
        - $ref: '#/components/parameters/DocumentId'
        - $ref: '#/components/parameters/RecipientId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentRecipientUpdateRequest'
      responses:
        '200':
          description: Recipient updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentRecipient'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      operationId: deleteDocumentRecipient
      summary: Delete Document Recipient
      description: >-
        Removes a recipient from a document. The document must not have been
        sent yet. If the recipient has associated fields, those fields will
        be unassigned.
      tags:
        - Document Recipients
      parameters:
        - $ref: '#/components/parameters/DocumentId'
        - $ref: '#/components/parameters/RecipientId'
      responses:
        '204':
          description: Recipient removed from document.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/fields:
    get:
      operationId: listDocumentFields
      summary: List Document Fields
      description: >-
        Returns all fields defined in a document, including their identifiers,
        types, values, roles, and positions. Supports filtering by field type
        and recipient role.
      tags:
        - Document Fields
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: List of document fields.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentFieldsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      operationId: updateDocumentFields
      summary: Update Document Fields
      description: >-
        Updates the values of one or more fields in a document that is in
        draft status. Supports updating text fields, checkboxes, dropdowns,
        dates, and other field types by name.
      tags:
        - Document Fields
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DocumentFieldsUpdateRequest'
      responses:
        '200':
          description: Fields updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentFieldsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/attachments:
    get:
      operationId: listDocumentAttachments
      summary: List Document Attachments
      description: >-
        Returns a list of all file attachments associated with a document.
        Includes attachment metadata such as name, size, and upload date.
      tags:
        - Document Attachments
      parameters:
        - $ref: '#/components/parameters/DocumentId'
      responses:
        '200':
          description: List of document attachments.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentAttachmentsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{id}/attachments/{attachment_id}/download:
    get:
      operationId: downloadDocumentAttachment
      summary: Download Document Attachment
      description: >-
        Downloads a specific attachment file associated with a document.
        Returns the binary file content with appropriate content type headers.
      tags:
        - Document Attachments
      parameters:
        - $ref: '#/components/parameters/DocumentId'
        - name: attachment_id
          in: path
          required: true
          description: Unique identifier of the document attachment.
          schema:
            type: string
      responses:
        '200':
          description: Attachment file content.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/{document_id}/auto-reminders:
    get:
      operationId: getDocumentAutoReminders
      summary: Get Document Auto-Reminders
      description: >-
        Retrieves the automatic reminder configuration for a specific document,
        including the schedule and message used for outstanding recipient
        notification emails.
      tags:
        - Document Reminders
      parameters:
        - $ref: '#/components/parameters/DocumentIdByDocumentId'
      responses:
        '200':
          description: Auto-reminder configuration retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocumentAutoReminderResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/linked-objects:
    get:
      operationId: listLinkedObjects
      summary: List Linked Objects
      description: >-
        Returns a list of documents that are linked to a specified CRM object.
        Supports filtering by CRM provider, object type, and object identifier.
      tags:
        - Document Link to CRM
      parameters:
        - name: provider
          in: query
          required: true
          description: CRM provider name (e.g., salesforce, hubspot).
          schema:
            type: string
        - name: entity_type
          in: query
          required: true
          description: CRM entity type (e.g., contact, deal, account).
          schema:
            type: string
        - name: entity_id
          in: query
          required: true
          description: Unique identifier of the CRM entity.
          schema:
            type: string
      responses:
        '200':
          description: List of documents linked to the CRM object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LinkedObjectsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /templates:
    get:
      operationId: listTemplates
      summary: List Templates
      description: >-
        Returns a paginated list of templates available in the authenticated
        workspace. Supports filtering by tag, folder, and search query.
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/QueryCount'
        - $ref: '#/components/parameters/QueryPage'
        - name: q
          in: query
          description: Search by template name substring.
          schema:
            type: string
        - name: tag
          in: query
          description: Filter by template tag (exact match).
          schema:
            type: string
        - name: folder_uuid
          in: query
          description: Filter by folder identifier.
          schema:
            type: string
        - name: deleted
          in: query
          description: If true, include deleted templates in the results.
          schema:
            type: boolean
        - name: id
          in: query
          description: Filter by specific template identifier.
          schema:
            type: string
      responses:
        '200':
          description: Paginated list of templates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /templates/{id}/details:
    get:
      operationId: getTemplateDetails
      summary: Get Template Details
      description: >-
        Retrieves detailed information about a specific template including its
        roles, fields, tokens, pricing tables, and content configuration.
        Use this information to determine the data needed when creating
        documents from this template.
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/TemplateId'
      responses:
        '200':
          description: Template details retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateDetailsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /templates/{id}:
    delete:
      operationId: deleteTemplate
      summary: Delete Template
      description: >-
        Permanently deletes a template by its identifier. This action cannot
        be undone and will prevent creation of new documents from this template.
        Existing documents created from this template are not affected.
      tags:
        - Templates
      parameters:
        - $ref: '#/components/parameters/TemplateId'
      responses:
        '204':
          description: Template deleted successfully.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /forms:
    get:
      operationId: listForms
      summary: List Forms
      description: >-
        Returns a paginated list of forms in the authenticated workspace.
        Forms are publicly shareable documents that allow recipients to fill
        and sign without being pre-specified as named recipients.
      tags:
        - Forms
      parameters:
        - $ref: '#/components/parameters/QueryCount'
        - $ref: '#/components/parameters/QueryPage'
        - name: name
          in: query
          description: Filter forms by name substring.
          schema:
            type: string
        - name: status
          in: query
          description: Filter forms by status.
          schema:
            type: string
            enum:
              - active
              - disabled
      responses:
        '200':
          description: Paginated list of forms.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /documents/folders:
    get:
      operationId: listDocumentFolders
      summary: List Document Folders
      description: >-
        Returns a list of folders used to organize documents in the workspace.
        Supports filtering by parent folder and search by name.
      tags:
        - Folders
      parameters:
        - $ref: '#/components/parameters/QueryCount'
        - $ref: '#/components/parameters/QueryPage'
        - name: parent_uuid
          in: query
          description: >-
            Filter by parent folder UUID to retrieve sub-folders. Omit to
            retrieve root-level folders.
          schema:
            type: string
        - name: name
          in: query
          description: Filter folders by name substring.
          schema:
            type: string
      responses:
        '200':
          description: List of document folders.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolderListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createDocumentFolder
      summary: Create Document Folder
      description: >-
        Creates a new folder for organizing documents. An optional parent UUID
        may be specified to create a nested sub-folder within an existing folder.
      tags:
        - Folders
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FolderCreateRequest'
      responses:
        '201':
          description: Folder created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Folder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /contacts:
    get:
      operationId: listContacts
      summary: List Contacts
      description: >-
        Returns a paginated list of contacts from the workspace contacts
        directory. Supports search by name, email, or company. Contacts can
        be used to pre-populate recipient data when creating documents.
      tags:
        - Contacts
      parameters:
        - $ref: '#/components/parameters/QueryCount'
        - $ref: '#/components/parameters/QueryPage'
        - name: q
          in: query
          description: Search contacts by name, email, or company substring.
          schema:
            type: string
      responses:
        '200':
          description: Paginated list of contacts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createContact
      summary: Create Contact
      description: >-
        Creates a new contact record in the workspace contacts directory.
        The email field is optional. Contacts can be referenced when adding
        recipients to documents.
      tags:
        - Contacts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreateRequest'
      responses:
        '201':
          description: Contact created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /contacts/{id}:
    get:
      operationId: getContact
      summ

# --- truncated at 32 KB (85 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pandadoc/refs/heads/main/openapi/pandadoc-rest-api-openapi.yml