---
title: "Send a draft for signature"
method: POST
path: "/api/v1/firme/{id}/send"
tags: ["Signatures (app routes)"]
---

# Send a draft for signature

`POST /api/v1/firme/{id}/send`

## Request

- Base URL: `https://api.custodo.ai`
- URL: `https://api.custodo.ai/api/v1/firme/{id}/send`
- Auth: HTTP bearer

The invitations leave from a job (by email, or WhatsApp where asked); the deadline starts. Emits `firme.envelope.sent`, then `firme.signer.invited` per invitation.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant-Id` string, uuid

## Response `202`

Out for signature.

- object
  - `ok` true, required
  - `data` FirmeEnvelopeDetail, required
    - `hasCertificate` boolean
    - `certificateDocumentId` string, nullable: A UUID.
    - `id` string, required: A UUID.
    - `documentId` string, nullable, required: A UUID.
    - `title` string, required
    - `message` string, nullable, required
    - `level` 'ses', required
    - `status` 'draft' | 'sent' | 'partially_signed' | 'completed' | 'declined' | 'expired' | 'voided', required
    - `routing` 'sequential' | 'parallel', required
    - `source` object, required
      - `filename` string, required
      - `sizeBytes` number, required
      - `contentType` string, required
    - `bundle` boolean, required
    - `format` 'pades' | 'cades', required
    - `preparation` 'queued' | 'ready' | 'failed', required
    - `preparationError` string, nullable, required
    - `hasSignedArtifact` boolean, required: True once the first signature is on the PDF.
    - `validation` object, nullable, required: The ETSI verdict on the completed PDF: TOTAL_PASSED, INDETERMINATE, TOTAL_FAILED.
      - `indication` string, required
      - `subIndication` string, nullable, required
    - `archiveOnComplete` boolean, required
    - `mailAccountId` string, nullable, required: A UUID.
    - `whatsappAccountId` string, nullable, required: A UUID.
    - `expiresAt` string, nullable, required: ISO 8601, UTC.
    - `createdAt` string, required: ISO 8601, UTC.
    - `updatedAt` string, required: ISO 8601, UTC.
    - `completedAt` string, nullable, required: ISO 8601, UTC.
    - `signers` object[], required
      - `id` string, required: A UUID.
      - `seq` number, required: Signing order, from 1.
      - `name` string, required
      - `email` string, nullable, required
      - `whatsapp` string, nullable, required
      - `delivery` 'email' | 'whatsapp', required
      - `userId` string, nullable, required: A UUID.
      - `role` 'signer' | 'cc', required: `signer` signs; `cc` receives a read-only link when the envelope is sent and the signed copy when it is complete, and never signs.
      - `authMethod` 'none' | 'otp_email' | 'in_person' | 'otp_whatsapp' | 'code_email', required
      - `status` 'pending' | 'sent' | 'viewed' | 'signed' | 'declined', required
      - `fields` object[], required
        - `type` 'signature' | 'initial' | 'date' | 'text', required
        - `page` number, required
        - `x` number, required
        - `y` number, required
        - `w` number, required
        - `h` number, required
        - `required` boolean, required
        - `documentKey` string
      - `declineReason` string, nullable, required
      - `sendCopy` boolean, required
      - `signedAt` string, nullable, required: ISO 8601, UTC.
      - `timestamp` boolean, required
      - `documents` object[], required
        - `key` string, required
        - `placement` union
          - object
            - `page` integer, required
            - `x` number, required
            - `y` number, required
            - `w` number, required
            - `h` number, required
            - `mode` 'coordinates', required
          - object
            - `mode` 'default', required
            - `w` number, required
            - `h` number, required
          - object
            - `mode` 'tag', required
            - `tag` string, required
            - `occurrence` integer, required
            - `w` number, required
            - `h` number, required
            - `offsetX` number, required
            - `offsetY` number, required
      - `signingPending` boolean, required
      - `signingError` string, nullable, required

## Other responses

- `400`: The request did not validate: `error.details` names the fields.
- `401`: No API key, or one that is malformed, unknown, revoked or expired.
- `403`: The module is off for this organisation, the credential lacks the permission, or the tier does not cover it.
- `404`: Nothing with that id in this organisation.
- `409`: Not a draft, or nobody on it signs.
- `429`: The API key has spent its minute, or its day. See `Retry-After`.

---

[API](https://skmtc.dev/custodo/apis/custodo-integrazioni.md) · [All operations](https://skmtc.dev/custodo/apis/custodo-integrazioni/llms.txt) · [OpenAPI document](https://skmtc.dev/custodo/apis/custodo-integrazioni/revisions/16d336d3ec2a?raw)
