Waivers and workflows
A gym or a rental counter does not prepare a document per customer. A workflow does it for them.
A workflow is a published template plus the rules for running it: who signs and in what order, whether the business countersigns, how long a link lives, when to remind, and what the form asks for beyond a name and an email.
Two ways in
- A public page. Give the workflow a
public_slugand a participant starts their own document by filling in a form at/f/<your-slug>/<public_slug>on signsealer.com. No API call from you at all; print it as a QR code, or put it in a booking email. - An API call.
POST /v1/workflows/{id}/startwith the participant's details. Use this when your system already knows who is coming.
What comes back
The document id and one token per signer — the participant's and every fixed role's — so you can hand the participant straight on to theirs rather than making them wait for an email.
{
"document_id": "…",
"title": "Liability waiver — Dana Reyes",
"expires_at": "2026-10-15T00:00:00Z",
"signers": [
{ "signer_id": "…", "email": "dana@example.com", "participant": true, "token": "…" }
]
}
One person, two roles
A signer role with "self": true is the participant again in a
second role — a sole proprietor signing for the business and again as the
personal guarantor, a parent for themselves and as guardian. The engine makes a
second signer at the same address, named with the role's label after the
person's name, emailed its own link rather than handed on, and in a sequential
workflow that link refuses a signature until the earlier one is in. The
two-party demo runs on it.
Set it through the API; the portal's workflow editor does not offer it yet.
Fields beyond a signature
A template can require initials, a checkbox, a date or a photo, and the requirement travels with the template — it freezes when the template is published, because what you were asked to initial is part of what you agreed to.
A per_child requirement becomes one row per covered minor,
named. A guardian initialling once for three children is not the same
act as initialling three times, and a court asked which child a release covered
should not be told "the template said per child".
The refusal is in the database, not the form. A signature is refused while anything required is unsupplied — so a second interface, a kiosk or an API caller cannot go around it. Your step form checking first is a courtesy that stops somebody being bounced; it is not the guarantee.
Ready to build? An API key takes a minute in the portal, and the free plan covers the first 25 agreements a month.
Get an API key