Skip to content

Developers

Priva6 API

Send a Priva6 document for signature from your own tools (your CRM, your onboarding flow or your back office) with a single HTTP call.

Overview

The Priva6 API does one thing well: it sends an existing document for signature to a client. You prepare the document once in Priva6 (its content, annexes, requested fields, emails and reminders), and your software sends it to as many clients as needed.

  • REST + JSON
    One endpoint, JSON in and out.
  • API keys
    Created by your organization admins.
  • 100 sends / hour
    Per API key.
  • Audited
    Each send is in the audit trail.

The client receives an email with a secure signing link, and is saved in your organization’s clients: a new client, or the existing client with the same email (case-insensitive), updated with the details sent. Every send is recorded in the document’s audit trail, with the API key’s name.

Quickstart

  1. In Priva6, an organization admin creates an API key in Settings → API keys. Copy it: it is shown only once.
  2. Open the document to send and copy its ID, shown on the document page.
  3. Call the endpoint below from your server with the client’s name and email.
cURL
curl -X POST "https://api.priva6.com/functions/v1/api/documents/3f1c9a52-7b4e-4c1d-9a2f-5e8b6d0c1a23/send" \
  -H "X-API-Key: $PRIVA6_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Jane Doe",
    "email": "jane@acme.com",
    "company": "Acme SAS",
    "position": "Data Protection Officer",
    "country": "FR",
    "expiry_days": 7,
    "sender_email": "alice@yourcompany.com"
}'

Authentication

Authenticate every request with your API key in the X-API-Key header. Keys start with p6_.

Header
X-API-Key: p6_…

Keep your key secret, on your server only: never in a browser, a mobile app or a public repository. Priva6 only stores a fingerprint of each key; if a key leaks, revoke it in Settings and create a new one. Revoked keys stop working immediately.

Send a document

POSThttps://api.priva6.com/functions/v1/api/documents/{documentId}/send

Sends the latest revision of the document to the client. The ID of any revision (or the document key) can be used: the latest revision is always sent. The subject, message and link expiry default to the document’s settings, and the document’s reminders follow until the client signs.

Path parameter

Path parameters
FieldTypeDescription
documentIdrequireduuidThe document’s ID, as shown on the document page in Priva6.

Request body (JSON)

Only name and email are required. Optional client fields that are empty or omitted leave the existing client’s details unchanged.

Request body fields
FieldTypeDescription
namerequiredstring (≤ 200)The client’s full name.
emailrequiredemail (≤ 254)Where the signing link is sent. Also identifies the client (case-insensitive); the signer can’t change it.
companystring (≤ 200)Company name.
vatstring (≤ 50)Company VAT number.
registration_numberstring (≤ 50)Company registration number (e.g. SIREN / RCS, company number).
websitestring (≤ 200)Company website.
positionstring (≤ 200)Position in the company.
departmentstring (≤ 100)Department in the company.
phonestring (≤ 30)Phone number.
addressstring (≤ 300)Company address: street and number.
zipcodestring (≤ 20)Company address: zip / postal code.
citystring (≤ 100)Company address: city.
countrystring (2)Company address: ISO 3166-1 alpha-2 country code, e.g. FR (case-insensitive).
email_subjectstring (≤ 200)Subject of the first email. Default: the document’s. Placeholders: {client}, {document}, {organization}, {link}, {expiry_date}.
email_bodystring (≤ 10,000)Plain-text message of the first email. Default: the document’s. Placeholders: {client}, {document}, {organization}, {link}, {expiry_date}; the link is added at the end if not placed.
expiry_daysinteger (1–365)How many days the signing link stays valid. Default: the document’s (14 days unless changed).
sender_emailemail (≤ 254)A team member of the organization, recorded as the sender. They receive the signed document and its audit trail once everyone has signed.

Response

On success, the API answers 201 Created with the signing request and the client as saved.

Response fields
FieldTypeDescription
signature.iduuidThe signing request created.
signature.statusstringAlways "pending" right after sending.
signature.expires_atdate-timeWhen the signing link expires.
signature.document_iduuidThe ID of the revision that was sent (always the latest).
signature.revisionintegerThe revision number that was sent.
clientobjectThe client as saved after the send: id, name, email and company details (null when unknown).
201 Created
{
    "signature": {
        "id": "8d2e4f10-1c3b-4a5d-8e7f-9a0b1c2d3e4f",
        "status": "pending",
        "expires_at": "2026-10-29T15:04:05.000Z",
        "document_id": "3f1c9a52-7b4e-4c1d-9a2f-5e8b6d0c1a23",
        "revision": 2
    },
    "client": {
        "id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
        "name": "Jane Doe",
        "email": "jane@acme.com",
        "company": "Acme SAS",
        "vat": null,
        "registration_number": null,
        "website": null,
        "position": "Data Protection Officer",
        "department": null,
        "phone": null,
        "address": null,
        "zipcode": null,
        "city": null,
        "country": "FR"
    }
}

Email placeholders

The email_subject and email_body fields accept these placeholders, replaced for each client:

Email placeholders
FieldTypeDescription
{client}stringThe client’s name.
{document}stringThe document’s name.
{organization}stringYour organization’s name.
{link}stringThe signing link.
{expiry_date}stringWhen the signing link expires.

If {link} isn’t placed in the body, the signing link is added at the end.

Errors

Errors use standard HTTP status codes and a JSON body with an error message in plain English:

400 Bad Request
{ "error": "A valid \"email\" is required" }
Error status codes
StatusMeaning
400Bad RequestThe body isn’t JSON, name or email is missing or invalid, a field is too long, country isn’t a known ISO code, expiry_days is out of range, or sender_email isn’t a member of the organization.
401UnauthorizedThe X-API-Key header is missing, or the key is invalid or revoked.
404Not FoundNo document with this ID in the API key’s organization (or an unknown path).
405Method Not AllowedOnly POST is supported.
409ConflictThe document is archived: unarchive it in Priva6 before sending it.
429Too Many RequestsMore than 100 sends in the last hour with this API key.
500Server ErrorUnexpected error. Nothing was sent; you can retry later.
502Bad GatewayThe email could not be sent. No signing request is left behind; you can retry. (The client may have been saved.)

Rate limits

  • 100 sends per hour per API key; beyond that, the API answers 429.
  • Client emails are also subject to your organization’s sending quotas, which are lower during a new workspace’s first 14 days.
  • Signing links stay valid from 1 to 365 days (expiry_days), 14 days unless the document says otherwise.
  • An archived document can’t be sent (409) until it is restored in Priva6.

OpenAPI specification

The full API is described in an OpenAPI 3.1 document you can import in Postman, Insomnia or your code generator.

Download openapi.json

Need another endpoint? Tell us what you are building at contact@priva6.com.