Every change that affects your integration, newest first. Breaking changes get their own note and we don't make them quietly. If something here isn't clear, ask through the contact form.
signed_at is now recorded per signer. The field was documented and always came back null. It now carries the time that signer put their signature on the document, on the create response, on GET /v1/envelopes/:id, and in webhook payloads. On a two-signer envelope this is what tells you which of the two has finished, which completed_at cannot, because it only exists once everyone has signed.
What null means now. Only one thing: we do not have a recorded signature time for that signer. On an envelope that is completed, every signer has signed whether or not each time was recorded, so read the state for whether they signed and signed_at for when. We will not fill this field with an approximation to make it look complete, because it is an evidentiary timestamp and a plausible wrong answer is worse than no answer. Envelopes signed before this change fill in on their own where the original record allows it.
envelope.delivered now fires. The event was documented but never emitted. It now fires the moment an envelope reaches the delivered state, at creation. If you were treating envelope.viewed as your first signal, you'll now see a delivered event ahead of it.
Two-signer webhook payloads carry the full signers array. Previously the envelope object in a webhook showed only the first signer while the create response showed both. Both now return the same shape, including each signer's signing_url and signed_at.
Quieter uptime alerting. Internal change with no API surface, noted because it affects how quickly we notice a problem: the external health check now requires two consecutive failures before it alerts, which removes false alarms from single hung probes.
Two signers per envelope. Send signers as an array of one or two people instead of a single signer. Each can have their own delivery channel; the second defaults to the envelope's. Signing is sequential: signer two is invited once signer one has finished.
New state and event: partially_signed. When the first of two signers finishes, the envelope moves to partially_signed and fires envelope.partially_signed. This is not done. Only completed means both signatures are on the document, and the PDF before that point is half-executed and should not be used.
api.esigndev.com. The API is now served and documented at https://api.esigndev.com. The same endpoints continue to answer on esigndev.com; neither host is deprecated and the docs use api.
Docs rewritten around the questions people actually ask. A correct JSON create example, both ways to send the file, the two-signer request shape, the four event types in one table, how to download the signed PDF, and how to test with tags left visible.
Signed webhooks with X-Siglio-Signature, idempotent envelope creation via Idempotency-Key, the upload flow for files above the inline limit, and the sandbox with real delivery to real inboxes and phones.
Older entries predate this page. We started keeping the changelog on 30 August 2026 and it runs forward from here.
Cookies on this site
We use analytics and advertising-measurement cookies to see how people find Siglio and whether our ads work. They measure our own campaigns. We do not build marketing lists from them and we do not share your information with third parties for their marketing. The site works fully with them off. Privacy policy