Application form
Mint a candidate-facing application-form link, and read back what a candidate submitted.
Mint-only — this pair never sends anything
The POST below mints and commits a fresh link; it never composes or enqueues a WhatsApp message. Deliver the URL to your candidate yourself.
Mint a candidate-facing application-form link. This call never sends it.
Headers
X-Api-Keyonb_live_<key_id>_<secret>required- Your issued Partner API key — see Authentication.
Status codes
2002xx- Minted and committed. A repeat call ROTATES the token — the previous link stops resolving the moment this succeeds.
4014xx- Missing, malformed, unknown or revoked key. Every authentication failure looks the same — see Authentication.
4044xx- Unknown, cross-tenant, or (a candidate id) sandbox-hidden. One outcome, never a 403.
Not found 4094xx- This candidate has opted out — a link would only ever resolve as unavailable.
opted_out 4094xx- This candidate is not currently eligible for a fresh link — not yet consented, mid a data-subject request, taken over by a recruiter, or otherwise suppressed. No token is minted.
no_conversationmirror_not_ownednot_consentednot_collectingreal_seededlive_disabledrecruiter_deletion_scheduledprocessing_pausedbot_paused 4294xx- Per-key or per-account rate limit exceeded. Retry after the
Retry-Afterheader.Too many requests — please try again shortly. 5005xx- No service client, the ownership read failed, the eligibility check itself could not run, or the token commit failed.
This endpoint sends nothing itself — but it enrols the candidate in the WhatsApp chase for the form
Deliver the returned url yourself — your own SMS, email, or ATS notification; this call never messages the candidate directly. It DOES mark the form outstanding: once the account-level application-form chase is switched on, a candidate who has not opened their link within their chase window will be reminded over WhatsApp, the same as any other outstanding document. A candidate ineligible for a fresh link (opted out, mid a data-subject request, not yet consented, …) is refused before that can happen — see the 409 rows below.
- Before minting, this checks the SAME eligibility a recruiter’s own “Send application form” button checks — consent, conversation flow-state, and suppression (opt-out, data-subject-request pause, account status). A candidate this account has never messaged on WhatsApp skips that check outright — minting a web link needs no phone number.
expiresAtis 14 days out on a first mint, or 48 hours out if this candidate has already submitted once — a re-mint after submission gets the shorter correction window, never a fresh two-week credential for declarations already recorded. Repeated calls after a submission can only SHRINK that window further, never renew or extend it.- No request body — the candidate id in the path is everything this endpoint needs.
curl -X POST \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/application-form" \ -H "X-Api-Key: $ONB_KEY"{ "url": "https://rca-onboardly.com/apply/9f2c1a4e7b3d8f5a6c2e1b9d4f7a3c8e5b1d9f2c1a4e7b3d8f5a6c2e1b9d4f7a", "expiresAt": "2026-09-28T10:14:02Z"}Read back a candidate’s newest submitted application form.
Headers
X-Api-Keyonb_live_<key_id>_<secret>required- Your issued Partner API key — see Authentication.
Status codes
2002xxapplicationis the newest submission, ornullwhen nothing has been submitted yet — both are a genuine checked answer, never an outage.4014xx- Missing, malformed, unknown or revoked key. Every authentication failure looks the same — see Authentication.
4044xx- Unknown, cross-tenant, or (a candidate id) sandbox-hidden. One outcome, never a 403.
Not found 4294xx- Per-key or per-account rate limit exceeded. Retry after the
Retry-Afterheader.Too many requests — please try again shortly. 5035xx- A read this payload depends on could not be completed. Never a confident
application: null— retry.Some of this candidate’s records could not be read right now. Try again shortly.
- Declarations always list all six, in the form’s own order. A declaration this candidate has no row for reads
accepted: null, acceptedAt: null— an absence, never a refusal the candidate did not make. submitted_ipandsubmitted_user_agentare never returned here. They DO surface elsewhere on this API — inside the compliance-pack audit block returned byGET /candidates/{id}/pack— where they exist for a regulator/DSR audit trail.
curl \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/application-form" \ -H "X-Api-Key: $ONB_KEY"{ "application": { "submittedAt": "2026-09-10T09:02:14Z", "formVersion": "1", "personalDetails": [ { "key": "fullName", "label": "Full name", "value": "Marcus Ade" }, { "key": "dateOfBirth", "label": "Date of birth", "value": "1994-03-02" } ], "eligibility": [ { "key": "rightToWorkStatus", "label": "Right to work status", "value": "British citizen" } ], "declarations": [ { "key": "dbs_ongoing", "label": "DBS ongoing monitoring", "accepted": true, "acceptedAt": "2026-09-10T09:02:14Z" } ] }}POST /api/v1/candidates/{id}/application-form
curl -X POST \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/application-form" \ -H "X-Api-Key: $ONB_KEY"{ "url": "https://rca-onboardly.com/apply/9f2c1a4e7b3d8f5a6c2e1b9d4f7a3c8e5b1d9f2c1a4e7b3d8f5a6c2e1b9d4f7a", "expiresAt": "2026-09-28T10:14:02Z"}GET /api/v1/candidates/{id}/application-form
curl \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/application-form" \ -H "X-Api-Key: $ONB_KEY"{ "application": { "submittedAt": "2026-09-10T09:02:14Z", "formVersion": "1", "personalDetails": [ { "key": "fullName", "label": "Full name", "value": "Marcus Ade" }, { "key": "dateOfBirth", "label": "Date of birth", "value": "1994-03-02" } ], "eligibility": [ { "key": "rightToWorkStatus", "label": "Right to work status", "value": "British citizen" } ], "declarations": [ { "key": "dbs_ongoing", "label": "DBS ongoing monitoring", "accepted": true, "acceptedAt": "2026-09-10T09:02:14Z" } ] }}