> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iinkedsign.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Signing

> Learn how to create and send a signing package to signers.

## Overview

This guide will walk you through the process of sending documents to one or more signers for their signatures using our API.

## Steps

<Steps>
  <Step title="Upload Documents">
    First, upload the documents that need to be signed. You can upload multiple documents in various formats such as PDF, DOCX, etc.

    ```http Request theme={null}
    POST /files/upload
    Content-Type: multipart/form-data

    Content-Disposition: form-data; filename="document.pdf"
    Content-Type: application/pdf

    <FILE_CONTENTS>
    ```

    ```json Response theme={null}
    {
        "fileId": "51400d7a-4f34-4844-9138-46a365130f97",
        "name": "document.pdf",
        "timeCreated": "2025-11-06T16:07:16.1913089Z",
        "fileName": "document.pdf",
        "type": "temporary"
    }
    ```

    <Note>
      Make sure to store the returned `fileId` for use in next steps.
    </Note>

    See the [Files upload API](/v4/api/files/upload) for more information.
  </Step>

  <Step title="Add Package">
    Next, create a signing package by providing details such as the package name, description, sign by date, signers, and documents.

    ```http Request highlight={16} theme={null}
    POST /packages/add
    {
        "name": "New Package",
        "timeSignBy": "2025-12-31T23:59:59Z",
        "type": "concurrent",
        "signers": [
            {
                "firstName": "Signer",
                "lastName": "One",
                "email": "signer.one@example.com"
            }
        ],
        "documents": [
            {
                "fileName": "document.pdf",
                "fileId": "51400d7a-4f34-4844-9138-46a365130f97"
            }
        ],
        "returnPackage": false
    }
    ```

    <Tip>
      Make sure you reference the correct `fileId` obtained from the document upload step.
    </Tip>

    ```json Response theme={null}
    {
        "packageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "package": null,
    }
    ```

    <Note>
      Make sure to store the returned `packageId` for use in next steps.
    </Note>

    See the [Packages add API](/v4/api/packages/add) for more information.
  </Step>

  <Step title="Check Package Status">
    You can check the status of the package at any time using the package ID.

    <Note>
      This step is useful for tracking the progress of the signing process if you are not using [webhooks](/v4/guides/webhooks).
    </Note>

    ```http Request highlight={3} theme={null}
    GET  /packages/{packageId}/status
    ```

    ```json Response theme={null}
    {
        "packageId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "name": "New Package",
        "type": "concurrent",
        "state": "executed",
        "documents": [
            {
                "documentId": "f3223ba8-ed0e-44eb-bee3-e99b03ff1b1f",
                "revisions": [
                    {
                    "revisionId": "4ee3d092-a390-4459-b5e1-753575d66af9",
                    "signerId": "30d4193b-81d6-463e-a861-4e272c324991"
                    }
                ]
            }
        ],
        "signers": [
            {
            "signerId": "30d4193b-81d6-463e-a861-4e272c324991",
            "firstName": "signer",
            "lastName": "one",
            "email": "signer.one@syngrafii.com"
            }
        ]
    }
    ```

    <Tip>
      The `state` field indicates the current status of the package. Once all signers have signed their documents, the state will be `executed`.
    </Tip>

    <Expandable title="states">
      <Tip>
        New package states may be added in future releases. It is recommended that you always validate your integration against the sandbox before new releases are deployed into production.
      </Tip>

      <Note>
        Release 4.0 introduces two new package states, `executed` and `expired`. In 3.6 both executed and expired packages were in an `open` state.
      </Note>

      | Value     | Version | Description                                                                                                                                                                                                                                                                                                          |
      | :-------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
      | draft     | 1.0     | Package will be added in a draft state. Notifications will not be sent to the signer(s). You must call the send API, or the package owner must manually send the package from within iinked Sign.                                                                                                                    |
      | open      | 1.0     | The package will be ready for signing, and notifications will be sent to the signer(s) if enabled.                                                                                                                                                                                                                   |
      | executed  | 4.0     | The package has been fully executed by all signers.                                                                                                                                                                                                                                                                  |
      | expired   | 4.0     | The package was not signed by the sign by date and has now expired. VSR packages will expire 7 days after their scheduled meeting date.                                                                                                                                                                              |
      | rescinded | 3.5     | The package was rescinded and is no longer available for signing.                                                                                                                                                                                                                                                    |
      | select    | 3.6     | Use the select state only when the package will be opened in the **embedded package editor** and you want the workflow to prompt the user to choose a package type. Packages in the select state will be automatically deleted if not converted to draft or open within 24 hours.                                    |
      | add       | 2.9     | Use the add state only when the package will be opened in the **embedded package editor** and you want the workflow to function as if you're creating a new package, rather than editing an existing one. Packages in the add state will be automatically deleted if not converted to draft or open within 24 hours. |
    </Expandable>

    See the [Packages status API](/v4/api/packages/status) for more information.
  </Step>

  <Step title="Download Signed Documents">
    After all signers have completed signing, you can download the signed documents.

    ```http Request theme={null}
    GET /packages/{packageId}/documents/{documentId}/pdf/executed/download
    ```

    <Tip>
      Use the package status endpoint from the previous step to retrieve the document IDs of the signed documents to download.
    </Tip>

    See the [Packages download API](/v4/api/packages/download) for more information.
  </Step>
</Steps>
