Koperty i odbiorcy
Koperta to jedna umowa w drodze do podpisania: wersja szablonu wyrenderowana z Twoimi zmiennymi, odbiorcy,
którzy wykonują na niej działania, oraz dowody wszystkiego, co się z nią dzieje. Utworzysz ją za pomocą POST /v1/envelopes.
Tworzenie koperty
Dział zatytułowany „Tworzenie koperty”| Pole | Typ | Uwagi |
|---|---|---|
template |
tpl_… |
Wymagane |
version |
liczba lub "latest" |
Domyślnie latest; ustalana i przypinana w chwili utworzenia. Musi być opublikowana |
variables |
obiekt | Walidowane względem JSON Schema danej wersji |
recipients |
tablica | Jeden na rolę (role, name, email; opcjonalnie externalUserId, verification, fields do wstępnego wypełnienia według identyfikatora pola, order do zmiany kolejności podpisywania) |
subject, message |
ciąg znaków | Używane w wiadomościach e-mail z prośbą o podpis i wyświetlane na stronie podpisywania |
delivery |
email · embedded · none |
Domyślnie email |
expiresAt |
RFC 3339 | Musi wskazywać przyszłość; w tym momencie koperta wygasa, a linki do podpisu i linki obserwatorów przestają działać |
cc |
tablica | Dodatkowi odbiorcy CC (name, email) poza rolami CC szablonu; maksymalnie 50 |
viewers |
tablica | Osoby, które śledzą kopertę, nie podpisując jej (name, email, opcjonalnie notifyOnSignature); liczba na kopertę zależy od planu |
viewerDocumentAccess |
wartość logiczna | Pozwala obserwatorom otworzyć dokument na stronie statusu. Domyślnie false (tylko status); od planu Team |
reminders |
obiekt | { "enabled": false } wyłącza przypomnienia; { "enabled": true, "intervalHours": 24 } zmienia odstęp (od 1 do 720) |
externalId |
ciąg znaków | Twój własny identyfikator, do 200 znaków |
dedupeOn |
"external_id" |
Zwraca istniejącą kopertę z tym externalId zamiast tworzyć kolejną |
metadata |
obiekt z ciągami znaków | Do 500 znaków na wartość; zwracane w kopercie i w webhookach |
Każdy odbiorca musi mieć rolę z danej wersji; każda rola inna niż CC musi mieć dokładnie jednego odbiorcę. Błędy
są zgłaszane łącznie, ze wskaźnikami takimi jak /recipients/1/role lub /recipients/0/fields/start_date.
Odpowiedzi: 201 z kopertą i nagłówkiem Location; 200 z istniejącą kopertą i
x-deduplicated: true, gdy zadziałało dedupeOn; 200 z podsumowaniem przebiegu próbnego dla ?dry_run=true; 402, gdy
przestrzeń robocza w planie Free wykorzystała zawarte w nim koperty; 403 plan-upgrade-required, gdy liczba obserwatorów przekracza limit planu
lub viewerDocumentAccess nie jest dostępne w planie (Plany i limity). Przebiegi próbne również
sprawdzają limity planu.
Każde pole dodane po pierwszym wydaniu jest opcjonalne: żądanie bez niego działa dokładnie tak jak wcześniej.
Opcje przy wysyłce
Dział zatytułowany „Opcje przy wysyłce”Szablon określa, kto podpisuje i w jakiej kolejności. Dla pojedynczej koperty możesz to zmienić bez modyfikowania szablonu:
{ "template": "tpl_9fK2mQ7xLp", "variables": { "client": { "name": "Jane Doe" } }, "recipients": [ { "role": "client", "name": "Jane Doe", "email": "jane@acme.dev", "order": 2 }, { "role": "company", "name": "Sam Lee", "email": "sam@bonafide.dev", "order": 1 }, { "role": "witness", "name": "Kim Park", "email": "kim@acme.dev", "order": 1 } ], "cc": [{ "name": "Legal", "email": "legal@acme.dev" }], "viewers": [{ "name": "Alex Chen", "email": "alex@acme.dev", "notifyOnSignature": true }], "reminders": { "enabled": true, "intervalHours": 48 }, "expiresAt": "2026-11-30T23:59:59Z"}- Kolejność:
recipients[].orderto krok, w którym odbiorca podpisuje; odbiorcy z tym samym numerem podpisują jednocześnie. Bez tego pola obowiązujeorderroli z szablonu. Wartości kolejności to dodatnie liczby całkowite; ról CC nie można ustawiać w kolejności; każda rola nadal potrzebuje swojego odbiorcy (dzięki temu pola szablonu zachowują osobę podpisującą); co najmniej jeden odbiorca musi podpisać. Zdarzenieenvelope.createdzapisujeroutingOverridden: true. - CC: dodatkowi odbiorcy CC dostają wiadomość z zakończonym dokumentem i nigdy nie podpisują. Pojawiają się
w
recipientszkind: "cc"i rolą_cc. - Przypomnienia: osoba, na którą przypada kolej, otrzymuje przypomnienie co
intervalHours(domyślnie wartośćREMINDER_INTERVAL_HOURSwdrożenia, czyli 72), najwyżej trzy razy;enabled: falsewyłącza je całkowicie. Przypomnienia dotyczą dostarczaniaemail. - Uwierzytelnianie osoby podpisującej ustawia się dla każdego odbiorcy:
verificationnadpisuje metodę roli. Obecnie dostępne sąnone(sam unikalny link do podpisu, domyślnie dla ról, które nie ustawiają metody) iemail_otp(link plus kod wysłany e-mailem);passkeyiid_checksą odrzucane jako jeszcze niedostępne. Zobacz weryfikację osoby podpisującej. - Język:
localeu odbiorcy, odbiorcy CC lub obserwatora (albo w kopercie – dla wszystkich bez własnego ustawienia) określa język jego strony podpisywania i wiadomości e-mail; to jeden z 50 języków podpisywania. Bez tego ustawienia strona podpisywania dopasowuje się do przeglądarki, a wiadomości e-mail są po angielsku.
Ekran wysyłki w panelu oferuje te same opcje: przesuwanie kroków wcześniej lub później, zaznaczenie Podpisz w tym samym czasie, dodawanie odbiorców CC i obserwatorów, wybór uwierzytelniania (Tylko link e-mail lub Link e-mail + kod) i języka dla każdej osoby podpisującej oraz ustawienie daty wygaśnięcia i harmonogramu przypomnień.
Dostarczanie
Dział zatytułowany „Dostarczanie”email: każdy odbiorca otrzymuje e-mailem link do hostowanej strony podpisywania, gdy nadejdzie jego kolej. Odbiorcy, którzy nie podpisali, co kilka dni dostają przypomnienie (maksymalnie trzy), a po zakończeniu koperty wszyscy dostają wiadomość e-mail.embedded: brak wiadomości e-mail do osób podpisujących. Utwórz sesję podpisywania, gdy osoba podpisująca jest w Twoim produkcie. Obserwatorzy nadal otrzymują e-mailem link do statusu.none: żadnych wiadomości e-mail (także do obserwatorów); używaj, gdy dostarczasz linki samodzielnie (sesje hostowane).
POST /v1/envelopes/{id}/recipients/{recipient}/resend wysyła e-mailem nowy link do odbiorcy, na którego przypada
kolej (najwyżej raz na minutę).
Cykl życia
Dział zatytułowany „Cykl życia” ┌──────────── declined (a signer declined) │sent ─────┼──────────── voided (POST /v1/envelopes/{id}/void) │ ├──────────── expired (expiresAt passed) │ └──────────── completed ──► seal: pending ──► sealedstatus |
Znaczenie |
|---|---|
rendering |
Trwa przygotowywanie |
sent |
W toku: odbiorcy podpisują w kolejności kierowania |
completed |
Wszyscy odbiorcy zakończyli. Rozpoczyna się pieczętowanie |
declined |
Odbiorca odmówił; koperta się kończy |
voided |
Unieważniono ją ({ "reason": "…" }); otwarte sesje podpisywania przestają działać |
expired |
expiresAt minęło przed zakończeniem |
seal śledzi zapieczętowany PDF: not_started, pending (zakończona, w trakcie pieczętowania),
sealed lub failed. Pieczętowanie nigdy nie blokuje zakończenia: koperta najpierw zostaje zakończona, a zaraz potem zapieczętowana.
Odbiorcy i kierowanie
Dział zatytułowany „Odbiorcy i kierowanie”{ "id": "rcp_5Jw0pLs9Xe", "role": "client", "name": "Jane Doe", "email": "jane@acme.dev", "order": 1, "status": "viewed", "verification": "email_otp", "completedAt": null}status odbiorcy to pending (jeszcze nie jego kolej), sent, viewed, completed lub declined, a kind to
rodzaj roli: signer, approver, form_filler lub cc. Kierowanie odbywa się według order (z roli lub z
nadpisania przy wysyłce): wszyscy odbiorcy z najniższej niezakończonej pozycji działają równolegle, a
kolejna grupa zaczyna, gdy skończą. Odbiorcy CC nigdy nie blokują kierowania.
Obserwatorzy
Dział zatytułowany „Obserwatorzy”Obserwator śledzi kopertę, nie podpisując jej: menedżer, asystent prawny, opiekun klienta po stronie klienta. Obserwatorzy nie są odbiorcami. Nie mają roli ani kolejki, nigdy niczego nie blokują ani nie kończą i nigdy nie pojawiają się na liście osób podpisujących w certyfikacie.
- Gdy koperta zostaje wysłana (lub gdy dodasz ich później za pomocą
POST /v1/envelopes/{id}/viewers), każdy obserwator dostaje wiadomość e-mail z Twoim brandingiem i linkiem do strony statusu tylko do odczytu: tytuł koperty, nadawca, każdy krok z imionami i nazwiskami odbiorców, rolami, statusem i znacznikami czasu – aktualizowane na bieżąco w miarę podpisywania. Adresy e-mail odbiorców nie są wyświetlane. - Obserwatorzy otrzymują kolejną wiadomość, gdy koperta zostanie zakończona, odrzucona lub unieważniona, a także po każdym podpisie, jeśli
notifyOnSignaturema wartośćtrue(domyślnie wyłączone). - Dokument jest na stronie tylko wtedy, gdy ustawisz
viewerDocumentAccess: true(od planu Team): oryginał w trakcie procesu, zapieczętowany PDF po zapieczętowaniu. W przeciwnym razie obserwatorzy widzą tylko status. DELETE /v1/envelopes/{id}/viewers/{viewer}odwołuje obserwatora: każdy wysłany mu link natychmiast przestaje działać.- Linki są osobistymi adresami URL dającymi dostęp. Przechowywany jest wyłącznie skrót SHA-256 tokenu każdego linku. Link działa do wygaśnięcia koperty (najwyżej 90 dni), przez 30 dni po zakończeniu koperty i nigdy po odwołaniu obserwatora.
- Dodanie, otwarcie (pierwsze wyświetlenie strony i dokumentu) oraz odwołanie są zapisywane w ścieżce audytu jako
viewer.added,viewer.viewed,viewer.document_viewediviewer.revoked, a więc także w certyfikacie.
Odpowiedzi dotyczące pojedynczej koperty (utworzenie, pobranie, unieważnienie) zawierają ich listę:
{ "viewers": [ { "id": "vwr_2Hc8sQ1nVt", "name": "Alex Chen", "email": "alex@acme.dev", "notifyOnSignature": true, "status": "active", "invitedAt": "2026-10-13T13:58:04.512Z", "firstViewedAt": "2026-10-13T14:05:41.090Z", "lastViewedAt": "2026-10-13T15:12:09.337Z", "revokedAt": null, "createdAt": "2026-10-13T13:58:04.512Z" } ], "viewerDocumentAccess": false}Liczba obserwatorów na kopertę zależy od planu (Free 1, Pay-as-you-go 2, Team 5, Business 20, Platform bez limitu); odbiorcy CC nie są wliczani. Odwołani obserwatorzy zwalniają swoje miejsce.
Dokumenty
Dział zatytułowany „Dokumenty”GET /v1/envelopes/{id}/document?version=… pobiera plik PDF, a jego SHA-256 podaje w x-document-sha256:
version |
Plik |
|---|---|
original (domyślnie) |
Wyrenderowany dokument w postaci wysłanej do podpisu |
sealed |
Końcowy PDF: wartości spłaszczone, dołączony certyfikat ukończenia, znacznik czasu dokumentu. Po envelope.sealed |
certificate |
Sam certyfikat ukończenia |
documentHash koperty to SHA-256 oryginału, a sealedDocumentHash – SHA-256 zapieczętowanego pliku;
to właśnie ich szuka weryfikacja.
Ścieżka audytu
Dział zatytułowany „Ścieżka audytu”Każde działanie jest zdarzeniem w łańcuchu hashy danej koperty: hash = SHA-256(prevHash ‖ canonical JSON of the event), przy czym pierwszy prevHash to 64 zera. GET /v1/envelopes/{id}/events zwraca zdarzenia i sprawdza
łańcuch:
{ "data": [ { "id": "evt_…", "envelope": "env_8Gm2kQ4rT1", "seq": 1, "type": "envelope.created", "createdAt": "2026-10-13T13:58:04.512Z", "recipient": null, "actor": { "kind": "api_key", "id": "…", "name": null, "email": null }, "ip": "203.0.113.7", "userAgent": null, "data": { "template": "tpl_…", "templateVersion": 3, "documentHash": "9f2c…" }, "hash": "4b1d…", "prevHash": "0000000000000000000000000000000000000000000000000000000000000000" } ], "chain": { "valid": true, "brokenAt": null }}Oprócz typów zdarzeń webhooków ścieżka zawiera wpisy występujące tylko w audycie, takie jak
session.created, recipient.verified, recipient.reminded oraz zdarzenia obserwatorów (rodzaj aktora
viewer, gdy obserwator otwiera swoją stronę).
Do wyświetlania statusu na żywo w interfejsie służy GET /v1/envelopes/{id}/events/stream – strumień zdarzeń wysyłanych przez serwer (SSE): nazwa
zdarzenia w każdej ramce to type zdarzenia, a jej identyfikator to seq; aby wznowić, połącz się ponownie z Last-Event-ID.
GET /v1/envelopes filtruje według status, seal, template i q (wyszukiwanie pełnotekstowe w imionach i nazwiskach
oraz adresach e-mail odbiorców, externalId i identyfikatorze koperty). Jak każda lista jest stronicowana kursorem:
{ "data": [ … ], "hasMore": true, "nextCursor": "…" }Przekaż nextCursor z powrotem jako cursor; limit wynosi od 1 do 100 (domyślnie 20).