Guest Signature
Public token-based guest signature flow (no login): view the session, download the PDF, request an OTP, and sign. The guest token is carried in the URL path.
View a guest signature session
Returns the information a guest signer needs to review and sign a lease, from a public token-based link (no login required).
Authentication
This endpoint is public: the only credential is the guest token carried in the URL path. The token is a UUID v4 that is sha256-hashed server-side and is single-use once the signature is applied.
Privacy
The returned projection is a strict allow-list. It never exposes the
signer's phone number or email, nor any internal IDs. Only the OTP
delivery channel (sms / email) is surfaced.
Anti-oracle behaviour
All responses (success and errors) are padded to a constant minimum
latency, and an unknown token returns the same generic 404 as a token
that did not match, so timing and messages cannot be used to probe for
valid tokens.
Example
Code
Response:
Code
path Parameters
tokenGuest session token (clear UUID v4 from the email link).
View a guest signature session › Responses
Guest signature session retrieved.
lease_labelHuman-readable label of the lease being signed.
document_urlURL to stream the (unsigned/preview) PDF. Points to the
/public/guest-signature/{token}/pdf proxy endpoint and carries the
clear token in its path.
Identity of the guest signer: only what is needed for display and the legal mention.
Other signers of the same lease (minimal info).
expires_atExpiration date of the guest signature session.
otp_channelChannel used to deliver the OTP code. Only the nature of the channel is exposed: never the phone number or email itself.
Legal mandatary disclosure (present only when the signer acts on behalf of another party).
Download the guest signature PDF
Streams the (unsigned/preview) PDF for the guest signer to review before signing. Public, token-based (no login).
Why a backend proxy
The PDF is stored encrypted with SSE-C; a browser cannot send the SSE-C headers from an iframe. The backend therefore fetches and decrypts the document, then streams the clear bytes. When previous signatures already exist, the already-signed PDF is served (so each signer consents to the real document).
Embedding
The response sets Content-Disposition: inline and relaxes framing
headers (frame-ancestors allow-list) so the PDF can be embedded in the
FairePlace frontend.
Example
Code
path Parameters
tokenGuest session token (clear UUID v4 from the email link).
Download the guest signature PDF › Responses
PDF document (binary stream).
Request an OTP for the guest signature
Triggers delivery of a one-time password to the guest signer. The backend resolves the tenant and the delivery channel server-side and relays the request to the signature orchestrator.
Public, token-based (no login). The request takes no body.
Privacy
The response only returns the delivery channel (sms / email):
never the phone number or email used.
Example
Code
Response (202 Accepted):
Code
path Parameters
tokenGuest session token (clear UUID v4 from the email link).
Request an OTP for the guest signature › Responses
OTP delivery accepted.
channelChannel used to deliver the OTP code. Only the nature of the channel is exposed: never the phone number or email itself.
Submit OTP and apply the guest signature
Validates the OTP code and applies the handwritten signature to the document. Public, token-based (no login).
On success the session token is consumed (single-use): any later
call with the same token returns 410 Gone.
Privacy
The returned receipt is non-PII: it carries only signed_at plus an
optional evidence_id / completion_url.
Example
Code
Response:
Code
path Parameters
tokenGuest session token (clear UUID v4 from the email link).
Submit OTP and apply the guest signature › Request Body
otp_codeOTP code received via the channel returned by request-otp.
signature_image_base64Base64-encoded handwritten signature image (PNG/JPEG recommended). Validated server-side for size and format before being relayed to the signature orchestrator.
Submit OTP and apply the guest signature › Responses
Signature applied successfully.
signed_atServer timestamp at which the signature was applied.
evidence_idEvidence identifier returned by the signature orchestrator (if any).
completion_urlURL the signer can be redirected to after completion (if any).
Write the surety's handwritten mention (guarantor, no login)
A guarantor (caution) types, in their own words, the mention required by
article 2297 of the French Civil Code. This must happen before
POST /public/guest-signature/{token}/sign: without a mention written by the surety themselves, the
undertaking is void. The deed is regenerated with their characters and
only then can be signed.
The text is compared to the expected mention by the domain, which owns the tolerance on accents and punctuation. Nothing is normalised client-side: the proof has to stay literal, so send the keystrokes as typed.
Typing evidence
The optional mode_saisie, evenements_saisie and duree_saisie_ms
fields record how the text arrived in the field. Case law accepts a
keyboard-entered mention on the basis that the surety actually typed it,
and these fields are what lets you say so. They are reported by the
client, so they are never probative on their own, but omitting
mode_saisie records the undertaking with an unknown input mode, and it
will never be assumed to have been typed.
Why a rejection is 422 and not 400
A non-conforming mention is a well-formed request; what is not
constituted is the undertaking. On MENTION_NON_CONFORME the response
carries mention_attendue so the surety can copy it without guessing
what they missed.
path Parameters
tokenOpaque guest session token from the invitation email.
Write the surety's handwritten mention (guarantor, no login) › Request Body
mentionThe text as typed, unmodified.
mode_saisieHow the text entered the field. Omit only if you genuinely cannot tell: the undertaking is then recorded with an unknown input mode.
evenements_saisieNumber of input events. Real typing produces hundreds.
duree_saisie_msMilliseconds between the first keystroke and validation.
Write the surety's handwritten mention (guarantor, no login) › Responses
Mention accepted and the deed regenerated: signing can follow.
apposee_leWhen the mention was recorded.