Guides
Signing links
SignEnvoy provides a white-labeled signing interface, the ceremony. You can securely embed it directly into your own web or mobile client portal using standard components like iframes or WebViews. You may want to obtain the ceremony URL directly to embed the signing ceremony in your web or mobile application, redirect users to the ceremony from within your application workflow, or send the invitation through your own email infrastructure with custom branding.
1. Decide who delivers the link
delivery on the send call is "email" by default:
SignEnvoy emails each recipient their link, in a plain-text email from your
sender name (your workspace's email sender name, or its name). With
"none", SignEnvoy sends no invitation and no completion
email: your systems deliver the link. SignEnvoy emails a signer on a
"none" envelope only when you ask it to: an explicit resend, or a
reminder cadence you set on that envelope (see section 5). Webhooks and
the envelope's events tell you what happened either way.
auth_level: "otp" cannot be combined with delivery: "none":
the send answers 422 validation-failed. When you deliver the link
yourself, you authenticate the signer; SignEnvoy never emails a one-time
code for an envelope it does not deliver.
curl -s -X POST https://app-staging.signenvoy.com/v1/documents/doc_…/send \
-H "Authorization: Bearer $SENV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"delivery": "none"}'
2. Read the links off the send response
The response carries every link the call minted: the active signing wave on a first send, the rotated links on a resend. The token is stored hashed, so this is the one place a fresh link comes back without rotating anything.
{
"id": "doc_…",
"status": "sent",
"recipients": [
{
"recipient_id": "…",
"email": "ada@example.com",
"signing_url": "https://app-staging.signenvoy.com/s/…",
"expires_at": "2026-10-05T16:44:52Z"
}
]
}
3. Mint a fresh link for one recipient
Any time the envelope is in flight and the recipient has not signed or
declined. This rotates the link: the previous one, emailed or
returned earlier, stops working, and the envelope's timeline records
link_reissued with channel: "api". No mail is sent.
curl -s -X POST https://app-staging.signenvoy.com/v1/documents/doc_…/recipients/{recipient_id}/signing-link \
-H "Authorization: Bearer $SENV_API_KEY"
409 invalid-state once the recipient has acted or the envelope is
not in flight; 404 not-found for a recipient outside the envelope.
4. Embed, redirect, or send
- Embed: mint an embed session for the recipient
and put its single-use URL in an iframe or a WebView. Your page's origin goes on the
workspace's embed origins list first; a plain
signing_urlin a frame is refused, because the signing page frames only from listed origins. - Redirect: send the person to the
signing_urlfrom your own flow, and set the envelope'sredirect_urlto bring them back. The URL must behttps://, and the return is a confirmed click on the signed page ("continue to host"), never an automatic navigation. - Send it yourself: with
delivery: "none", put the link in your own email, SMS, or in-app message. Treat it like a password: it is the recipient's credential for this envelope.
Each link lasts 14 days from when it is minted, separately from the
envelope's own expires_at; mint a new one rather than storing
them.
5. Reminders
A reminder is a fresh link: it rotates the recipient's link, like a mint.
delivery: "email": the reminder cadence emails every signer who has not acted, except a signer whose current link you minted (the signing-link call or an embed session). For that signer you have taken over delivery, and a reminder never replaces your link.delivery: "none": no reminders unless you ask. The API sets no cadence by default. If you setreminder_cadence_dayson the envelope, or call send again (an explicit resend), SignEnvoy emails the signer a fresh link. That replaces the link you handed out, and the timeline records it withchannel: "email". This is how to recover an abandoned embedded signing: SignEnvoy emails the signer a link they can finish from.
6. What the record shows
Every issued link records how it was delivered, in the envelope's events and on the certificate:
email: SignEnvoy emailed it (invitation, resend, reminder).api: returned to you by the send call or the signing-link call.embed: issued by an embed session.
The sent event's payload maps each recipient to its channel
(channels); reminder_sent and link_reissued
carry channel. The Certificate of Completion prints, for each
signer, how the link they used was delivered: "Signing link emailed to this
address by SignEnvoy" or "Signing link delivered by the sender", followed by
how they were verified.