Start a candidate
Send the WhatsApp opener for a candidate you created with `start: false` — the missing second step for checking field mapping before messaging anyone.
Begin the WhatsApp conversation for a candidate created with `start: false`.
Headers
X-Api-Keyonb_live_<key_id>_<secret>required- Your issued Partner API key — see Authentication.
Status codes
2002xx- Attempted.
outboundin the body says what actually happened — see the notes below. 4004xx- The candidate’s own phone number or opt-in details on file are invalid. Very rare — every candidate reachable through this API already passed this check at creation.
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- Cannot be started. Several distinct causes share this status — read the
errorstring, and do not assume a retry clears it.This candidate has already been started.This candidate has declined or withdrawn consent and cannot be started.This candidate cannot be started right now. 4294xx- Per-key or per-account rate limit exceeded. Retry after the
Retry-Afterheader.Too many requests — please try again shortly. 5005xx- Internal error. Safe to retry — a
500means the send was not attempted. 5035xx- The account is not ready to send WhatsApp right now. Retry; if it persists, contact support.
Starting a candidate requires the WhatsApp Transport setting to be 'twilio'. It is currently set to 'sim' — switch it in /chat → Settings, then retry.Starting this candidate is temporarily unavailable. Try again shortly.
One delivered opener per candidate — a second call is a 409, not a second message
Once a candidate’s opener has been handed to WhatsApp, calling this again returns 409 and sends nothing — with the same key or any other, immediately or a month later. The lock is held against the candidate rather than their phone number, so correcting a number with Update a profile does not release it. A send that FAILED can be retried: the lock covers a delivered opener, not an attempt — if the response was 200 with "outbound": "failed" or "refused", or a 503, the candidate is not locked.
A 409 does not mean nothing happened. If your client times out and retries, the first call may already have succeeded with only the response lost in transit — poll Retrieve a candidate’s status/consent fields before treating the call as failed.
outbound—sent(delivered to Twilio),failed(the transport rejected it), orrefused(a suppression/ownership/budget check refused it between the pre-flight and the send). All three still return200.outboundSignature— present only whenoutboundisfailedorrefused. A normalised signature, never the provider’s raw message.mirrored— whether the message was written into the candidate’s conversation thread, independent ofoutbound:falsehere does not mean the WhatsApp send failed, only that mirroring it did.- Rarely, an earlier call that died mid-send can leave a candidate’s opener lock held with nothing ever sent. That one needs a person — contact support, who can start the candidate from the dashboard.
curl -X POST \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/start" \ -H "X-Api-Key: $ONB_KEY"{ "data": { "id": "3f9c1a2e-8b7d-4c1f-9a3e-2d5f8c1b4e70", "outbound": "sent", "mirrored": true }, "error": null}POST /api/v1/candidates/{id}/start
curl -X POST \ "https://rca-onboardly.com/api/v1/candidates/<candidate id>/start" \ -H "X-Api-Key: $ONB_KEY"{ "data": { "id": "3f9c1a2e-8b7d-4c1f-9a3e-2d5f8c1b4e70", "outbound": "sent", "mirrored": true }, "error": null}