DoConure

La firma da sola

Se il documento esiste già — l'hai generato prima, o vuoi rivederlo prima di chiedere a qualcuno di firmarlo — l'API di firma è separata:

ChiamataCosa fa
POST /api/v1/sign/filesCarica un PDF che hai già e ricevi un fileId. Non addebita nulla; vedi sotto.
GET /api/v1/sign/files, GET /api/v1/sign/files/{fileId}, DELETE /api/v1/sign/files/{fileId}Elenca i tuoi PDF, leggi i dati di uno (mai i suoi byte), eliminane uno che non serve più.
POST /api/v1/sign/envelopesPrepara una busta in bozza su un documento che hai prodotto o su un PDF che hai caricato. Non si invia nulla, non si addebita nulla — a meno che tu non aggiunga ?send=true, che prepara e invia in una chiamata (ed è allora il momento che si paga).
POST /api/v1/sign/envelopes/{id}/sendGenera i link e li manda via email. È il momento che si paga.
GET /api/v1/sign/envelopes/{id}A che punto è, e cosa ha fatto ogni firmatario.
GET /api/v1/sign/envelopes/{id}/documentIl PDF firmato, una volta completato.
GET /api/v1/sign/envelopes/{id}/evidenceUno ZIP con il PDF firmato, il documento sorgente e l'intera traccia degli eventi in JSON — tutto quello che serve per difendere la firma fuori da questo sistema. Qualunque busta chiusa, non solo una completata.
POST /api/v1/sign/envelopes/{id}/cancelLa revoca (il pulsante della console dice Revoca; il percorso resta /cancel). Ogni link muore, e ogni firmatario a cui era stato chiesto viene avvisato della revoca.
POST /api/v1/sign/envelopes/{id}/recipients/{recipientId}/replaceMette qualcun altro al posto di un firmatario (email, fullName, reason facoltativo; phone quando il firmatario conferma con un codice via SMS): i campi e il posto nell'ordine di firma passano a lui, il vecchio link muore e chi lo aveva viene avvisato. Su una bozza corregge semplicemente il firmatario, senza avvisare nessuno. Una firma già data non si annulla mai. Non è un addebito.
POST /api/v1/sign/envelopes/{id}/recipients/{recipientId}/resendRigenera il link di un firmatario — il vecchio muore subito. Non è un secondo addebito.

Sostituire un firmatario

Quando è stata indicata la persona sbagliata, o qualcuno non è più disponibile, sostituisci il firmatario invece di lasciare la richiesta aperta. Manda {"email": "...", "fullName": "...", "reason": "..."} a .../recipients/{recipientId}/replace mentre la busta è una draft o è aperta (sent o in_progress). Su una bozza non è stato inviato nulla e nessuno ha un link, quindi la chiamata corregge semplicemente nome, indirizzo (e telefono) del firmatario: non parte nessun messaggio, nessuna callback, e la modifica resta come un evento nella traccia della busta e una riga nel registro delle attività. Un firmatario che conferma con un codice via SMS (validationMode: "sms") ha bisogno anche del "phone" della nuova persona: il vecchio numero non si tiene mai, e senza la richiesta è rifiutata (INVALID_REQUEST_BODY, details.field: "phone"; un numero che il codice non può raggiungere è SMS_VALIDATION_UNAVAILABLE). Un firmatario che ha firmato o rifiutato, o il cui gruppo è stato completato da qualcun altro (skipped), non si può sostituire. Il posto viene ceduto sul posto, quindi i campi di firma e l'ordine di firma restano esattamente dov'erano; il vecchio link smette subito di funzionare e chi lo aveva riceve un messaggio che la richiesta è stata ritirata; la nuova persona viene invitata quando è il suo turno. Il delegatedFrom della risposta indica chi aveva il posto, con replacedBy valorizzato (è vuoto quando un firmatario ha passato lui il proprio turno), e il certificato di completamento dice a parole che il mittente l'ha sostituito; la sua traccia degli eventi elenca ogni evento sotto la persona che aveva il posto in quel momento. Chi apre un link sostituito, ritirato o scaduto prima di essere usato viene informato di quale dei tre si tratta, nella lingua della busta; la pagina non mostra altro e il link non può fare nulla. Un firmatario che passa il proprio turno (quando lo permetti) segue le stesse regole: per un firmatario che conferma con un codice via SMS la pagina di firma chiede il cellulare della nuova persona, e il vecchio numero non si tiene mai. Usa cancel per chiudere tutta la richiesta. Quando una richiesta è annullata o scade, ogni firmatario a cui era stato chiesto e che non aveva finito viene avvisato; chi non era mai stato invitato (un gruppo successivo di una richiesta ordinata) no. Le organizzazioni possono anche far portare alle email dei loro firmatari il proprio logo, colori, piè di pagina e testi, e far ricevere a ogni firmatario il documento firmato: il primo è in Branding (come), il secondo in Impostazioni, sotto Notifiche.

L'oggetto delle email

Ogni email che inviamo senza il tuo marchio ha un oggetto che inizia con “DoConure - ”, così un firmatario la riconosce nella casella: l'invito si legge DoConure - seguito dal tuo subject. Un'email con il marchio tiene l'oggetto della tua organizzazione come l'hai scritto, senza il nostro nome. Nel testo di ogni email un orario è scritto nella localizzazione della tua organizzazione, con il suo fuso. Il pulsante sta al centro dell'email con il suo indirizzo scritto per esteso sotto, per un programma di posta che non mostra i pulsanti.

Le email che ricevono i tuoi firmatari, con il tuo aspetto

Spento finché non lo attivi (Branding → Marchio). Imposti un colore per l'intestazione, uno per il pulsante, uno per il piè di pagina e un testo di piè di pagina (una riga di contatto, un avviso) in italiano e in inglese, e il logo che hai già caricato compare in alto. Ogni email porta il testo di piè di pagina della language della sua busta; quando quello è vuoto, l'altro. Non è mai HTML scritto da te: il nostro unico template applica quei valori, e la parte di solo testo di ogni email è lo stesso messaggio con dentro il tuo testo di piè di pagina. Il logo viaggia dentro l'email, quindi all'apertura non si scarica nulla. Il saluto usa il nome del firmatario come l'hai inviato, intero. Copre l'invito, il promemoria, gli avvisi di revoca e di scadenza e la copia firmata.

Due cose non cambiano mai. L'email con il codice di verifica è sempre nostra: un codice non è un posto per il marchio. E un'email con il marchio perde la nostra riga “DoConure by Limepeak”, visto che il piè di pagina è tuo, ma tiene la nota di messaggio automatico e il link per segnalare un documento che la persona non si aspettava. L'email di una busta di prova si apre comunque con l'avviso rosso TEST.

Il pacchetto di prove è fatto per uscire da questo sistema: dallo a un avvocato, a un revisore o all'archivio di un cliente senza dar loro accesso qui. Anche una busta rifiutata o annullata può produrne uno — dimostrare che qualcuno ha rifiutato di firmare è comunque una prova. Le prove della firma si conservano 10 anni dalla chiusura di una busta e il documento sorgente 365 giorni dalla sua generazione; oltre l'una o l'altra finestra il file corrispondente viene semplicemente omesso invece di far fallire tutta l'esportazione, e i campi di evidence.json (impronte, orari, closedReason) dicono comunque cosa è successo.

Firmare un PDF che hai già

Signer Fly funziona senza Composer Fly. Carica il PDF una volta, poi indica il suo fileId in quante buste vuoi:

POST /api/v1/sign/files
Idempotency-Key: nda-2026-contract-v3

{ "fileName": "nda.pdf", "fileBase64": "JVBERi0xLjQK..." }

201 Created
{ "output": { "sign": { "file": {
    "fileId": "6d1c...", "sha256": "ab12...", "pageCount": 3,
    "sizeBytes": 48211, "created": true } } } }

POST /api/v1/sign/envelopes?send=true
{ "signers": { "A": { "email": "anna@acme.example", "fullName": "Anna Rossi",
                      "fields": [ { "kind": "signature", "page": 3,
                                    "x": 0.1, "y": 0.78 } ] } },
  "settings": { "documents": [ { "fileId": "6d1c..." } ],
                "subject": "NDA" } }
  • Un file, molte buste. Il file è richiamato, mai copiato, e non cambia mai: una nuova versione è un nuovo caricamento e un nuovo fileId. Ogni busta registra lo sha256 del file; aggiungi "sha256": "..." accanto a un fileId per essere rifiutato (SOURCE_FILE_CHANGED) se non è il file che intendi.
  • Byte identici sono un file solo. Caricare un PDF che la tua organizzazione ha già risponde 200 con il fileId esistente e created: false. Il file di un'altra organizzazione non viene mai rivelato: il suo id è un 404.
  • In un colpo solo. { "fileBase64": "...", "fileName": "nda.pdf" } in settings.documents è lo stesso caricamento in linea: stessa validazione, stessa conservazione, e il file è poi sul tuo account come ogni altro. I documents aggiuntivi di un flusso prendono le stesse tre forme; il documento che compone un flusso è sempre il primo.
  • Cosa viene rifiutato (FILE_REJECTED, con details.reason): non un PDF, malformato, cifrato, più di 200 pagine, oltre il limite di dimensione, o con JavaScript, un'azione di avvio, un file allegato, XFA o contenuti multimediali — il firmatario apre il file nel suo browser, quindi non si accetta nulla che si esegua. Non si riscrive nulla: il certificato calcola l'impronta dei byte che hai inviato.
  • Eliminare. Un file che una busta aperta usa ancora non si può eliminare (STORED_FILE_IN_USE). Uno usato solo da buste finite sì; i suoi byte restano per il loro pacchetto di prove finché la loro conservazione non finisce. I file non usati scadono come ogni file conservato.
  • Il certificato dice di chi è. Una sorgente che hai caricato non è stata prodotta da questo servizio, quindi il certificato e il manifesto delle prove la elencano come caricata dal cliente, con la sua impronta.
  • La console ha lo stesso: Firme → Nuova richiesta di firma carica o sceglie un PDF e lo invia, senza chiave API.

Dove firma il firmatario

L'esperienza di firma è ospitata da DoConure a un URL pubblico sicuro: il firmatario segue un link a /sign/… sul nostro dominio. Oggi il prodotto è tutto qui. Non c'è firma incorporata o in iframe e nessun SDK per mettere la pagina dentro il tuo sito, e non è promessa: è una possibile evoluzione futura non ancora progettata, non una funzione in calendario. (La pagina rifiuta di essere incorniciata, di proposito.)

Buste di prova

settings.isTest: true (serve l'ambito isTest del token) crea una busta di prova: spende la dotazione di prova giornaliera condivisa e mai credito; ogni email che la riguarda porta [TEST] nell'oggetto e si apre con una riga rossa di avviso (“TEST — questo documento non ha valore legale”, nella lingua della busta, italiano o inglese); la pagina di firma e il file firmato (una fascia rossa TEST e testo ripetuto su ogni pagina, blocco firma e certificato) dicono TEST e che non ha valore legale; e non può mai raggiungere un terzo a pagamento. Chiedere un codice SMS, un sigillo o una marca temporale insieme a isTest è rifiutato con FEATURE_NOT_AVAILABLE_IN_TEST_MODE prima di creare qualunque cosa. Rileggilo come output.sign.isTest.

La richiesta: firmatari e impostazioni

Il corpo è { signers, settings } — la stessa forma del { data, settings } di Generare un documento. signers è un oggetto con chiavi scelte da te ("A", "B", …) — identifica ogni firmatario per te, e da solo non dà alcun ordine:

POST /api/v1/sign/envelopes
Authorization: Bearer lpdc_...

{
  "signers": {
    "A": {
      "email": "anna@acme.example",
      "fullName": "Anna Rossi",
      "validationMode": "sign",
      "fields": [
        { "kind": "signature", "page": 1,
          "x": 0.1, "y": 0.78, "width": 0.32, "height": 0.09 }
      ]
    }
  },
  "settings": {
    "documentId": "9b21...",
    "subject": "Contratto di servizio 2026",
    "hasSigningOrder": false,
    "expirationDate": null,
    "reminderFrequencyHours": 0,
    "cc": [], "ccNotifyOn": "none",
    "bcc": [], "bccNotifyOn": "none",
    "watchers": [],
    "language": "it",
    "callbackUrl": { "onSuccess": null, "onError": null }
  }
}
ImpostazionePredefinitoSignifica
subjectl'oggetto predefinito della tua organizzazione Di cosa tratta la richiesta, fino a 200 caratteri: l'oggetto dell'email, e ripetuto nel suo testo. Obbligatorio, a meno che la tua organizzazione non ne abbia impostato uno predefinito in Impostazioni.
messageil messaggio predefinito della tua organizzazione, o nessuno Le tue parole nell'email di richiesta, fino a 2.000 caratteri, sopra il pulsante di firma. Capisce gli a capo e il **grassetto**: Scrivere il messaggio.
hasSigningOrderfalse false: tutti i firmatari sono un gruppo, avvisati insieme. true: l'order di ciascun firmatario (un numero intero, obbligatorio solo quando questo è true) li regola — due firmatari con lo stesso numero firmano come gruppo, e il gruppo successivo viene avvisato solo quando questo ha finito del tutto, o quando uno di loro ha firmato se il groupMode del gruppo è "OR". Non c'è un valore "sequential" a parte: la firma in sequenza normale è semplicemente ogni firmatario con un numero diverso. Al massimo 5 gruppi di al massimo 4 firmatari — riferimento completo e forma OR: Chiedere le firme in un ordine preciso.
expirationDateil predefinito della tua organizzazione (30 giorni) Un istante preciso, strettamente nel futuro, al massimo a un anno. Se lo ometti la busta scade dopo la scadenza predefinita della tua organizzazione, 30 giorni se non l'hai cambiata in Impostazioni. L'invito e ogni promemoria dicono per esteso giorno e ora entro cui firmare, nel fuso orario della tua organizzazione; l'API risponde in UTC. Non c'è di proposito un'opzione "mai" — oltre quel tetto la prova su chi aveva una casella di posta si è indebolita abbastanza che reinviare è la scelta onesta, non prorogare.
reminderFrequencyHoursil predefinito della tua organizzazione (48) 0 spegne i promemoria. Sopra zero, chi deve firmare in quel momento viene sollecitato ogni tante ore da quando lui è stato avvisato. Un promemoria rigenera il link di quel firmatario, come un reinvio, perché il testo in chiaro di un vecchio link non si conserva da nessuna parte per poterlo rimandare.
cc / bcc[] Indirizzi semplici che vengono informati della busta ma a cui non si chiede mai di firmare. Riferimento completo: Cc e bcc su una busta.
watchers[] Persone che seguono la busta senza firmare, ciascuna {"email", "notifyOn"} con il suo livello (everything, il predefinito; completion; none). Mai un firmatario della stessa busta. Vedi watcher.
languagela lingua della tua organizzazione "en" o "it". Sceglie in quale lingua è scritta ogni email di questa busta, e quale dei tuoi due testi di piè di pagina con il marchio porta. Un firmatario può indicare la sua (sotto); se qui lo ometti vale la lingua della tua organizzazione (Impostazioni, Lingua dell'organizzazione).
callbackUrl.onSuccess / onError / onEventnull Dove facciamo una POST quando la busta si chiude — completed al primo, declined/expired/cancelled al secondo. Deve essere https e risolvere su un indirizzo pubblico. Ogni richiesta porta X-Signer-Signature: sha256=<hmac> sul corpo grezzo, con la chiave segreta della tua organizzazione — verificala. Il corpo porta anche un blocco event il cui id è stabile tra i tentativi, così una consegna ripetuta si può ignorare invece di elaborarla due volte — vedi Seguire una chiamata. Se resta null non si invia nulla e l'interrogazione funziona esattamente come prima. Con callbackUrl.env, i due valori sono percorsi aggiunti all'URL base di quell'ambiente di callback e la callback porta la sua autenticazione (token Bearer, chiave API o OAuth2); i percorsi senza env vanno al tuo ambiente predefinito — ambienti di callback. onEvent è facoltativo e separato: riceve recipient.replaced quando un firmatario viene sostituito, firmato e ritentato come gli altri due, che continuano a dire solo come è finita la busta (Sapere quando un firmatario viene sostituito).

Scrivere il messaggio

Il message è testo semplice, lo stesso nell'API, nella signature di un flusso e nel Messaggio predefinito di Impostazioni (usato quando una richiesta non ne manda uno). Ogni email parte doppia in una: una parte HTML, e una di solo testo per i programmi di posta che mostrano solo il testo. Quello che scrivi diventa entrambe:

ScriviParte HTMLParte di testo
**clausola 4**clausola 4, in grassetto clausola 4, senza gli asterischi
un a capo (\n nel JSON)una nuova rigauna nuova riga
una riga vuota (\n\n)un nuovo paragrafouna riga vuota
https://acme.example/terms l'indirizzo, scritto per esteso e cliccabile (un punto subito dopo chiude la frase, non il link)l'indirizzo
<b>, [testo](url), *uno* mostrati esattamente come scrittimostrati esattamente come scritti
  • Il grassetto è due asterischi per lato, su una riga, al massimo 60 caratteri, senza spazio appena dentro i segni: **entro il 30 giugno** è in grassetto, ** entro il 30 giugno ** è stampato com'è. È l'unica formattazione che c'è: niente corsivo, colori o font, e niente HTML.
  • Un link si mostra come il suo indirizzo; non c'è modo di dargli altre parole. Tienilo dentro una frase (I termini sono su https://acme.example/terms.): un paragrafo che è solo un indirizzo viene disegnato come un pulsante, e l'email ne ha già uno, il pulsante di firma.
  • Non rientrare ogni riga di un paragrafo: un blocco rientrato si mostra come codice, in un riquadro.
"message": "Leggi la **clausola 4** prima di firmare.\n\nDomande? Scrivi a legal@acme.example."

I segni ** valgono solo per i messaggi delle email. In un documento il grassetto viene dal template stesso: Scrivere un template.

Ogni firmatario prende anche un validationMode: "sign" (predefinito — una firma più un gesto esplicito di scorrimento per confermare, nessun codice), "email" (un codice monouso mandato via email al firmatario, il flusso con cui è nato questo prodotto), o "sms" (un codice monouso via SMS — richiede un campo "phone" su quel firmatario). Il codice SMS è un servizio che la tua organizzazione acquista, ogni SMS accettato dal gateway costa due crediti, e dove non si può consegnare la busta è rifiutata alla creazione con SMS_VALIDATION_UNAVAILABLE: Come scelgo il modo in cui un firmatario dimostra che è lui?

Una persona, più posti. Due o più etichette di firmatario con la stessa email sono una persona sola: un invito, un link, un codice, un consenso, e la firma su ogni campo di ogni etichetta (un template a 3 posti serve una, due o tre persone). Devono coincidere su fullName, phone, validationMode, language e signatureMeaning, e in una busta ordinata su order; altrimenti la richiesta è rifiutata con INVALID_REQUEST_BODY, indicando il campo. La busta si paga una firma, come sempre.

Ogni firmatario può indicare la sua language, "en" o "it": il suo invito, codice, promemoria, pagine di firma e avvisi sono scritti in quella, mentre gli altri firmatari tengono quella della busta. Vince il JSON: la lingua di un firmatario su quella della busta, quella della busta su quella della tua organizzazione. La risposta dà la language di ogni firmatario, sempre valorizzata.

Ogni firmatario può anche dichiarare un signatureMeaning — cosa significa la sua firma, che il 21 CFR Part 11 §11.50(c) chiede a un documento firmato di indicare accanto al nome e all'ora. Uno tra "approved", "reviewed", "authored", "verified" o "responsibility_accepted"; il testo libero è rifiutato, perché un significato che nessuno può confrontare con qualcosa non è un significato. È per firmatario, non per busta: in un documento reale una persona approva e un'altra prende atto.

Se lo ometti non si stampa nulla. È voluto, non un valore predefinito da impostare: la maggior parte dei documenti non si firma secondo una procedura regolamentata, e stampare “Approvato” su uno di cui nessuno l'ha detto inventerebbe proprio il fatto che la regola esiste per registrare. Quando è impostato compare sotto la firma, sul certificato di completamento e nel campo signatureMeaning di ogni destinatario restituito dall'API e dal pacchetto di prove.

Ritentare senza rischi

Manda una Idempotency-Key su ogni POST di questa API — creazione, invio, reinvio, sostituzione, annullamento. L'invio è quello che conta di più: l'invio è il momento che si paga, quindi un nuovo tentativo dopo un timeout ti addebita di nuovo e manda una seconda email a ogni firmatario — il costo arriva insieme sulla tua fattura e sulla pazienza della tua controparte.

POST /api/v1/sign/envelopes/7a04…/send
Authorization: Bearer lpdc_…
Idempotency-Key: contract-2026-114

Lo stato stesso della busta è una seconda protezione — inviare una busta già inviata è rifiutato — ma quel rifiuto è un errore, e un chiamante che ritenta una richiesta di cui non ha mai avuto risposta merita la risposta, non una lamentela. Con una chiave riceve la risposta.

Anche la bozza ne prende una. Una bozza non si paga, e una ritentata lascia comunque dietro una seconda busta che qualcuno deve ripulire a mano.

Anche il reinvio: un reinvio non è una seconda firma e non costa nulla, ma un firmatario che riceve lo stesso link due volte a trenta secondi di distanza viene confuso senza motivo. E anche la sostituzione di un firmatario: una sostituzione ritentata e non riconosciuta sarebbe rifiutata, perché il posto non è più della vecchia persona.

E l'annullamento, il caso che non ci si aspetta. Annullare due volte non fa danni — e la seconda risposta è un rifiuto, perché la busta non è più annullabile. Se non hai mai visto la prima risposta leggeresti quel rifiuto come un annullamento non avvenuto, cioè esattamente il contrario.

Le regole complete, i tre codici di esito e la finestra di 24 ore: Ritentare senza rischi.

La risposta

Ogni chiamata di questa API — creazione, invio, reinvio, annullamento, lettura — risponde con la stessa busta, con la busta stessa sotto output.sign:

{
  "output": {
    "status": "pending",
    "compose": null,
    "sign": {
      "envelopeId": "7a04...",
      "status": "sent",
      "level": "SES",
      "seal": false,
      "timestamp": false,
      "allowDelegation": false,
      "expiresAt": "2027-09-20T20:32:43Z",
      "documentId": "9b21...",
      "sourceSha256": "cdc82a...",
      "signedSha256": null,
      "signedDocumentUrl": null,
      "padesProfile": null,
      "recipients": [
        { "id": "c81e...", "email": "anna@acme.example", "status": "notified",
          "order": 0, "validationMode": "sign", "signedAt": null }
      ]
    },
    "flow": null,
    "credits": { "used": 15, "left": 1232 },
    "warnings": [],
    "error": null
  }
}
ChiaveSignificato
output.status"pending" finché la busta può ancora cambiare, "succeeded" quando tutti i firmatari hanno firmato, "failed" se si è chiusa senza — rifiutata, annullata o scaduta. Interroga su questo; output.sign.status è il vocabolario di sette parole che ci sta sotto.
output.sign.envelopeIdL'id che prende ogni altra chiamata di questa API. Chiamato così per corrispondere a output.compose.documentId e output.flow.flowId, così la risposta di un flusso — che li porta tutti e tre — non ti lascia mai a chiederti quale id è quale.
seal, timestamp, allowDelegation, expiresAtLe tue settings, effettive. Ognuna è filtrata o limitata dalla configurazione dell'organizzazione, quindi una richiesta accettata non implica il valore che hai mandato. Per questo qui non c'è una ripetizione separata di settings: è questa.
output.creditsused è quello che questa busta ha regolato — la firma, il sigillo e la marca quando la invii, poi ogni codice SMS quando parte, così la lettura che la trova chiusa riporta la cifra definitiva; items la elenca voce per voce; left è il tuo saldo dal registro adesso. Creare una bozza non addebita nulla (used: 0). Vedi I crediti in ogni risposta.
output.warningsDove un filtro che ti ha scavalcato lo dice, con un codice stabile. Un array per chiamata — vedi Avvisi.
recipientsCosa ne è stato di ogni persona. Li mandi come signers, perché nella tua richiesta firmano tutti; tornano come recipients, perché questo prodotto avrà approvatori e lettori che non firmano.

GET /api/v1/sign/envelopes risponde { "envelopes": [ … ], "count": n }, dove ogni elemento è esattamente l'oggetto qui sopra — un elenco è un elenco di risposte, così leggi una forma e non due. Restringilo con ?status=, ?limit= (fino a 200) e ?kind=production o ?kind=test: prova e produzione non sono mai un elenco solo a meno che tu non chieda all (il predefinito, come per ogni valore che non conosce). Lo stesso kind funziona su GET /api/v1/flow.

Modifica incompatibile, 2026-09-20. Queste risposte prima erano la busta piatta alla radice, con id invece di envelopeId e un array warnings dentro la busta. Le chiavi si sono spostate; non sono state duplicate. Lo stesso rilascio ha dato a /api/v1/compose e /api/v1/flow la stessa busta, che è il punto: la sezione prende il nome dell'URL che hai chiamato.

Quando la persona a cui hai chiesto non è quella giusta

Un firmatario può passare la richiesta a un altro dal proprio link. Il suo smette subito di funzionare, la nuova persona ne riceve uno, e il certificato di completamento dice chi l'ha passata — un documento firmato da qualcuno che il mittente non aveva mai indicato è proprio il fatto su cui gira una contestazione, quindi è scritto a parole e non lasciato in una tabella.

È spento a meno che l'organizzazione non lo attivi, in Impostazioni. Quando è attivo, una richiesta può chiedere meno:

"settings": { "allowDelegation": false }

L'impostazione dell'organizzazione è un tetto, non un valore predefinito. Se vieta la delega, chiederla non fa fallire la chiamata — la busta viene creata senza e la risposta porta DELEGATION_NOT_ENABLED. Rileggi allowDelegation dalla risposta invece di dare per scontato che sia stato usato quello che hai mandato.

Una volta che un posto è passato di mano, il destinatario nella risposta porta delegatedFrom con chi lo aveva prima, quando è successo e perché. Un'interrogazione che legge solo email riporterebbe altrimenti la persona sbagliata come firmatario.

Rifiutati, ciascuno per una sua ragione: ripassarla allo stesso indirizzo; passarla a qualcuno che sta già firmando questo documento, il che gli chiederebbe di firmare due volte e, in una busta ordinata, di aspettare se stesso; e più di tre passaggi, perché ognuno uccide un link e manda un'email.

Dove vanno le coordinate di un campo: Dove va la firma sulla pagina. Cosa vede un firmatario, e la traccia delle prove: Cosa vede il firmatario. Il valore legale di quello che si produce: Livelli di firma: SES, AES, QES.