Create an agreement signing session for an employer. Returns a
redirectUrl containing a short-lived, one-time token that you open
in the employer admin's browser to complete regulated agreement steps
on Penfold's platform.
Idempotency
Include an Idempotency-Key header (e.g. a UUID) per logical
"create session" attempt. Reusing the same key within 24 hours for the
same employer returns the same signingSessionId and redirectUrl if
the session is still valid.
Redirect flow
After the user completes, cancels, or fails, Penfold redirects the
browser back to your returnUrl with query parameters:
{returnUrl}?state={state}&signingSessionId={signingSessionId}&result={result}
When result is failed, Penfold appends failureCode:
{returnUrl}?...&result=failed&failureCode={failureCode}
| Parameter | Presence | Description |
|---|---|---|
state |
Always | Echo of the state you sent. Reject if it does not match. |
signingSessionId |
Always | Same id as in the create-session response. |
result |
Always | Terminal outcome: success, cancelled, or failed. |
failureCode |
Only when result is failed |
Machine-readable reason. Omitted otherwise. |
Important: Treat the redirect as provisional UX only — the
authoritative outcome is delivered via the
EmployerAgreementSigningCompleted webhook. If webhooks are delayed,
poll GET /employers/{employerId} until employer status reflects
agreement completion.
Headers
-
Opaque value (e.g. UUID) per logical create-session attempt. Reusing the same key within 24 hours for the same employer returns the original session if still valid.
curl \
--request POST 'https://partner-api.getpenfold.com/v4/employers/{employerId}/agreement-signing-sessions' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: string" \
--data '{"returnUrl":"https://partner.example.com/integrations/penfold/callback","state":"c2d79b5c-bf4d-4e4a-94ec-5be8e7d6f2e9"}'
{
"returnUrl": "https://partner.example.com/integrations/penfold/callback",
"state": "c2d79b5c-bf4d-4e4a-94ec-5be8e7d6f2e9"
}
{
"signingSessionId": "cl9gujidl001o9ksfnrgr8zq1",
"redirectUrl": "https://platform.getpenfold.com/partner/sign-agreement?token=eyJhbGciOiJIUzI1NiJ9...",
"expiresAt": "2026-05-06T10:35:00Z"
}
{
"error": "validation failed",
"validationErrors": [
{
"field": "returnUrl",
"message": "must be a pre-registered HTTPS URL"
},
{
"field": "state",
"message": "length must be between 1 and 256 characters"
}
]
}
{
"error": "unauthorized"
}
{
"error": "not found"
}
{
"error": "internal server error"
}