Ingests an applicant from your platform and starts screening. The
applicant's registry is resolved from `location_ref`, so you do not pass
an organization — one call, one applicant, wherever they applied.
**What happens next.** The applicant receives a heads-up SMS
immediately and an AI screening call a few minutes later. Results land
in the registry's CONFIRM portal, at the `portal_url` in the response.
**Store two things:** `candidate_id` and `portal_url`. The first is the
durable correlation key; the second is your "View Full Details" link.
**Idempotency.** Re-submitting the same applicant returns the existing
IDs with `deduped: true` and a `200`. It never conflicts and never
creates a second application on the same location. Matching is by your
`external_ref` first, then by phone number, then by email — so an
applicant who reaches a registry through both your intake form and a job
board resolves to one person, not two.
**Consent governs contact.** `consent.contact` must be `true` for
CONFIRM to text or call. Send `false` (or omit it) and the applicant is
still created and visible in the portal, but no outreach happens and the
response returns `screening: "skipped_no_consent"`. This is the TCPA
boundary: we contact within minutes of ingest, so consent is not
something to assume.
**Unknown locations fail loudly.** A `location_ref` we don't recognise
returns `404 unknown_location_ref` rather than dropping the applicant.
The same request succeeds on retry once the location exists.
Request
This endpoint expects an object.
external_refstringRequired
Your identifier for this applicant. Stored on the candidate and echoed on every response and webhook, and the primary key for idempotent re-submission.
location_refstringRequired
The location the applicant applied to (the external_ref you created it with). Resolves both the registry and the role.
emailstringOptionalformat: "email"
Required unless phone is supplied. Both is ideal.
phonestringOptional
Required unless email is supplied. E.164 preferred; other common formats are normalised. Screening calls need a phone — without one the response returns screening: "skipped_no_phone".
consentobjectOptional
What the applicant agreed to at intake.
The applicant already existed. The original IDs are returned with deduped: true and no second application is created.
candidate_idstringformat: "uuid"
CONFIRM's identifier for the applicant. Store it on your applicant record.
application_idstringformat: "uuid"
The application opened at this location.
external_refstring
Your applicant identifier, echoed back.
dedupedboolean
True when this applicant already existed and the original IDs are being returned. No second application was created.
screeningenum
What happened to screening for this applicant.
enqueued — heads-up SMS sent, AI screening call queued.
skipped_no_consent — consent.contact was not true, so no
outreach was made. The applicant is still visible in the portal.
skipped_no_phone — no usable phone number, so no call could be
queued.
skipped_not_entitled — the registry is not currently entitled to
place calls. The applicant is collected and dialed once it is.
portal_urlstringformat: "uri"
Complete deep link to the applicant in the registry's portal. Store it as an opaque string and render it as your "View Full Details" link.