Live signing events (SSE)
A Server-Sent Events stream that tells the signer's open page their Government ID check has been decided, so it can re-read the session at once instead of polling. The token is the credential and the stream is routed by the recipient it resolves to. Frames carry no result, only a nudge: the session endpoint (GET /public/signing/{token}) remains the sole decision and the only place the verified-session cookie is set. The stream emits `event: ready` once on connect (re-read the session, an event may have been missed while disconnected), then `event: verification` with `{"status":"verified"|"failed"|"expired"}` when the check settles, plus `: ping` heartbeat comments every 25s. The server ends the stream after 15 minutes. Delivery is best-effort, so keep a slow fallback poll of the session. 404 when the link has no Government ID check to follow; 503 when the server has no event listener (poll instead).
View as MarkdownPath Parameters
Response Body
text/event-stream
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/public/signing/string/events""event: verification\ndata: {\"status\":\"verified\"}\n"Send a verification code, or start a Government ID check
For a Government ID recipient (method government_id) this starts or resumes the signer's identity check with Persona instead of sending a code. It creates a Persona inquiry (once — a repeated call reuses it and never buys another), parks the calling browser's session secret in an HttpOnly cookie, and returns only what Persona's embedded flow needs: inquiryId, environmentId and, when resuming an in-progress inquiry, a short-lived sessionToken (never stored by Easerix). The response says nothing about whether the signer is verified: Persona's completion callback in the browser is not evidence. The verdict reaches Easerix only on POST /webhooks/persona, where it is verified by its signature and stored in Easerix, and the signer is verified only once Persona has APPROVED the inquiry (a merely completed or in-review inquiry is not). Poll the session GET until security.verificationStatus is verified. Calling this again after a failed or expired inquiry begins a new one, subject to the per-recipient cooldown and hourly cap and the organization's hourly allowance of new inquiries (PERSONA_ORG_HOURLY_CAP). The rest of this description is about the phone methods. Sends a one-time code to the phone number the SIGNER supplies — by text message (method sms) or a spoken voice call (method voice), whichever the sender configured for this recipient. Only ever called by an explicit signer action: loading the session never sends anything. Requires the access code (X-Access-Code) first when one is set. The code is generated, delivered and checked by the verification provider; Easerix neither generates nor stores it, and the number is passed to the provider without being persisted (only its last four digits are kept, for display and the audit trail). A resend — to the same or a corrected number — is refused server-side for 30 seconds after the previous send and after 5 sends an hour for this recipient (429 with Retry-After). A caller already holding a valid verified session gets {status: "verified"} back and nothing is sent. A caller WITHOUT it (another browser) may start its own verification at any time: that never ends the existing session, which stays valid until it lapses or a verification succeeds. The full number is never returned.
Check a verification code
Phone methods only: a government_id recipient has no code to check (400 unsupported_method) — that verdict arrives from Persona on POST /webhooks/persona. Checks the code with the verification provider. On success the server records the verification and sets an HttpOnly session cookie scoped to this signing link (valid 2 hours); the cookie, not the response body, is what later authorizes signing actions, and a page refresh keeps it. A successful verification replaces any earlier session for this link — there is one active session — so a signer who verifies from a second browser ends the first browser session at that moment. Five wrong codes per sent code exhaust the attempt budget (verification_too_many_attempts) until a new code is sent. Requires the access code first when one is set.