POST /v3/request; it does not support POST /v3/send.
Flow overview
1
Create the Voice transaction
Send the destination phone number and an explicit brand to
POST /v3/request with channel: "voice".2
Tell the user to listen for the call
OTP.ID places a call and reads the brand followed by the four OTP digits one at a time.
3
Verify the entered code
Collect the four digits from the user and call
POST /v3/verify with the otp_id returned by the request.Create a Voice OTP
Send the phone number as digits only in international format beginning with62. brand is required. Voice always uses four numeric digits, even if you include otp_length in the request.
Request
Success response
Savedata.otp_id. You need it when the user submits the four digits they heard during the call.
data.otp_id from the normal V3 response for verification. The request response does not confirm that the user answered the call or the final delivery cost.
Verify the Voice OTP
Use the ordinary V3 verification flow. Submit the four digits the user heard; do not generate or supply the Voice OTP yourself.Request
Correct code response
Wrong code response
Wrong codes return HTTP200. Always check data.verified.
Terminal error example
When the OTP expires, is already used, or reaches the failed-attempt limit, OTP.ID returns HTTP422.
Troubleshooting
CHANNEL_UNAVAILABLE
Voice is not active for your merchant or is temporarily unavailable. Confirm that your merchant Voice channel has been activated, then retry the request later if the channel is temporarily unavailable.
Request returns status: "failed"
The delivery provider could not complete the request. Read data.failure.code and data.failure.message for the specific reason (typically PROVIDER_UNAVAILABLE or DELIVERY_FAILED for Voice) — see the failure reason reference. Check that the destination number is a valid reachable phone number in 62... format, then let the user retry or use another available channel. Do not treat a request response as confirmation that the user answered the call.

