POSThttps://core-api.heysadie.ai/whatsapp/onboarding-sessions/{id}/resend-code
id success data status otpAttempts metadata timestamp version path error code message details fieldResend verification code
Resend the WhatsApp registration/verification call for a `verifying` session. Meta re-triggers the automated voice call that reads the code; Sadie captures it exactly as in the normal flow. The session is unchanged (stays `verifying`) and `otpAttempts` reflects the durable per-session request_code budget consumed so far. Errors: - `409 WHATSAPP_RESEND_NOT_ALLOWED`: the session is not `verifying`, or the number is not yet attached. - `429 WHATSAPP_RESEND_TOO_SOON`: a verification call was requested within the last 60 seconds; `details.retryAfterSeconds` gives the remaining cooldown. The session STAYS `verifying` and no attempt budget is consumed. - `409 WHATSAPP_OTP_ATTEMPTS_EXHAUSTED`: the per-session request_code budget is spent (the session is left `verifying`, not failed). - `429 WHATSAPP_OTP_REQUEST_LIMIT`: Meta's registration/request_code rate limit; `details.retryAfterHours` gives the cooldown. The session STAYS `verifying`. - `502 WHATSAPP_RESEND_FAILED`: a non-rate-limit Graph/network failure (retryable). - `404`: cross-tenant / unknown id (anti-enumeration).
Try it in the API ExplorerExample request
curl -X POST "https://core-api.heysadie.ai/whatsapp/onboarding-sessions/ONBOARDING_SESSION_ID/resend-code" \
-H "Authorization: ApiKey YOUR_API_KEY"Authentication
Authenticate with an API key in the Authorization header using the ApiKey scheme. See Authentication for how keys work and where to get them.
AuthorizationstringrequiredAPI key in the ApiKey scheme: ApiKey YOUR_API_KEY. Tenant keys authorize their own tenant; organization keys can act on any tenant in the organization.
X-Tenant-Idstring (uuid)optionalRequired when authenticating with an organization key: it selects the tenant the request acts on. Omit with tenant keys.
Request
Path parameters
idstringrequiredThe resource's UUID.
Responses
successbooleanrequiredtrue on every 2xx
dataobjectoptionalThe result
Show 2 child properties
statusstringrequiredAlways `verifying` on success (the session is unchanged).
otpAttemptsnumberoptionalThe durable request_code attempt count after this resend reserved a slot (capped at the per-session budget).
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
400The request is invalid. `details` lists each field that failed
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 3 child properties
codeenumrequiredA parameter or body field broke a rule
"VALIDATION_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
detailsobject[]optionalOne entry per field that failed
Show 2 item properties
fieldstringrequiredThe offending field
messagestringrequiredThe rule it broke
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
401Missing or invalid credentials
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredNo valid credentials
"UNAUTHORIZED"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
403The credentials are valid but may not use this route
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredThe credentials may not use this route
"FORBIDDEN"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
404Not found, or outside the caller's scope
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn id names nothing the caller can see
"RESOURCE_NOT_FOUND"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested
500An unexpected server error
successbooleanrequiredfalse on every error
errorobjectoptionalWhat went wrong: a stable `code` to branch on and a human-readable `message`
Show 2 child properties
codeenumrequiredAn unexpected server failure
"INTERNAL_SERVER_ERROR"messagestringrequiredHuman-readable explanation. Do not parse it; branch on `code`
metadataobjectoptionalRequest metadata
Show 3 child properties
timestampstringrequiredWhen the server answered, ISO 8601 UTC
versionstringrequiredAPI version
pathstringoptionalThe URL that was requested