Distribution of signing links

When integrating Penneo, you have full control over the communication between the company and the signer(s) incl. how signingLink reach signers. You can choose between two primary distribution flows depending on how much control you wish in your integration flow.

1. Penneo-managed distribution (email)

This is the standard approach where Penneo handles all communication towards the signers.

  • How it works: You create the case file and add the signer's email address. Once the case file is activated, Penneo automatically sends an email to the signer containing the signingLink.
    • In addition Penneo sends additional reminders, completion emails, etc. to the signer(s) based on the customer settings.
  • Best for: Integrations that wish to rely on Penneo’s service for email distribution and are happy with the the email capabilities Penneo offer.

You can read more about sending your first case file here.

📘

If you wish to use the approach Penneo-managed distribution and wish to avoid the branding on Penneo's emails, you can contact our support team to discuss full customisation of Penneo email templates.

2. Integrator-managed distribution (custom)

This approach allows you to be in full control of all communication to signer(s) incl. the distribution of signingLinks.

  • How it works: You create the case file but do not rely on Penneo's email triggers. Instead, you create the case file, query the API to fetch the generated signingLink for each signer, and distribute that signingLink through your desired channels.
    • Penneo do not communicate to the signer(s) when you rely on this approach. Hence, you are as an integrator responsible for all communication towards the signer(s).
  • Best for: Integrations with a need for distribution via e.g. your own email servers, your customers email servers, SMS, or embedding the link in an internal webportal.

Integrator-managed distribution example

First, create the case file using this endpoint. In the response, you must capture the UUID and the payloadHash. You will need the UUID and the payloadHash to retrieve the signingLinks securely.

Example request of a case file with two signers and one document:

{
  "caseFile": {
    "title": "<insert casefile name>",
    "signers": [
      { 
        "name": "<signer name 1>",
      },
      { 
        "name": "<signer name 2>",
      }
    ],
    "documents": [
      { 
        "name": "<name of the file>", 
        "title": "<enter a document title>"
      }
    ]
  }
}
📘

Do not add email in the signer array as this will trigger Penneo to send the automatic emails.

Once the case file is send, use the check job status endpoint to fetch the generated signingLinks for your signers.

{
  "uuid": "550e8400-e29b-41d4-a716-4...",
  "payloadHash": "a1b2c3d4e5f6..."
}

With the UUID and the payloadHash you will receive a response similar to the following.

{
    "uuid": "550e8400-e29b-41d4-a716-4...",
    "type": "etl-queue",
    "payloadHash": "a1b2c3d4e5f6...",
    "jobStatus": "completed",
    "errorMessage": null,
    "retries": 0,
    "maxRetries": 0,
    "createdAt": "2026-01-16T10:24:20.721Z",
    "updatedAt": "2026-01-16T10:24:24.427Z",
    "result": {
        "data": {
            "caseFile": {
                "id": 1234567
            },
            "signingLinks": [
                {
                    "name": "<signer name 1>",
                    "role": "Signer",
                    "signerId": 1234567,
                    "signingLink": "https://sandbox.penneo.com/signing/<unique>"
                },
                {
                    "name": "<signer name 2>",
                    "role": "Signer",
                    "signerId": 1234576,
                    "signingLink": "https://sandbox.penneo.com/signing/<unique>"
                }
            ]
        },
        "errors": null,
        "success": true
    }
}

Fetch the signingLinks and distribute through desired channels.