WatificationDocs
COD confirmations

Create a COD confirmation

Requires a configured delivery time zone and follow-up texts for the exact language. Use an APPROVED, standard UTILITY template with no header or a text header and only the required quick-reply buttons. Parameters must match the template count/names. The confirmation template has exactly three buttons, in order: confirm, cancel, change time.

One accepted create consumes one monthly confirmation unit. Reference is required and not unique.

With an optional Idempotency-Key, repeated requests must match every value, treating equivalent phone number formats and uppercase/lowercase UUID characters as the same; named object key order does not matter. Completed repeats return the original acceptance without another send or quota unit.

Unknown query parameters are rejected. Unknown body fields are rejected. All examples use fictional values.

Responses

StatusMeaning and codes
202Accepted. Completion is asynchronous.
401Problem Details. Codes: API_KEY_INVALID.
404Problem Details. Codes: COD_SENDER_NOT_FOUND, COD_TEMPLATE_NOT_FOUND.
409Problem Details. Codes: COD_NOT_CONFIGURED, COD_LANGUAGE_NOT_CONFIGURED, COD_SENDER_UNAVAILABLE, COD_TEMPLATE_NOT_USABLE, IDEMPOTENCY_KEY_REUSED.
422Problem Details. Codes: DEVELOPER_INVALID_INPUT, COD_TEMPLATE_PARAMETERS_INVALID, RECIPIENT_BLOCKED.
429Problem Details. Codes: RATE_LIMITED, COD_QUOTA_EXCEEDED. Retry-After: 1 is present only for RATE_LIMITED; quota errors do not include it.

Success and handled error responses send Cache-Control: no-store and X-Correlation-ID (the resolved/generated UUID). Errors use application/problem+json and the reusable ProblemDetails schema below. Retry-After: 1 is sent only for RATE_LIMITED. Request examples read your key from a server environment variable; replace all fictional values.

Schemas and examples

POST
/cod-confirmations

Authorization

ApiKey
headerAuthorizationBearer <token>

Server-side API key. publicId is 12 lowercase base32 characters (a-z, 2-7); secret is 43 base64url characters from 32 random bytes. Use Authorization: Bearer <complete key>. The API key determines the workspace; requests cannot select another workspace. All public routes share 20 requests per second per key. See API-key authentication.

Header Parameters

Idempotency-Key?string

Optional string of at most 128 characters. Empty string is accepted by validation; use a unique non-empty value per request. Save it and reuse it if you are unsure whether the request succeeded. See each operation for which values must match on repeated requests.

Lengthlength <= 128
X-Correlation-ID?string

Optional tracing ID. A UUID-shaped value is echoed in the response. Missing or invalid values are replaced with a generated UUID, not rejected.

Request Body

application/json
  1. body
to*string

Must be a valid phone number in international format with a leading +; it is normalized to E.164. Surrounding whitespace is trimmed.

Length1 <= length
senderId*string

The Sender ID of a WhatsApp phone number in your workspace, shown in the dashboard under Developers > Overview (Senders) - not a Meta phone number ID.

Formatuuid
template*
parameters?
reference*string

Caller order reference. Not unique.

Length1 <= length <= 128

Response Body

Accepted. Completion is asynchronous.

application/json
  1. response
confirmationId*string

Confirmation UUID.

Formatuuid
status*string

Acceptance response; not the current answer state.

reference*string

Caller order reference.