SignEnvoy docs
Sign in Start in the sandbox

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.

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"}'

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"
    }
  ]
}

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_url in a frame is refused, because the signing page frames only from listed origins.
  • Redirect: send the person to the signing_url from your own flow, and set the envelope's redirect_url to bring them back. The URL must be https://, 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 set reminder_cadence_days on 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 with channel: "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.