curl -X POST https://sandbox.core.linkio.world/api/payments/pay_8fK2mQ9xLp3VnR7tY1wZ4cB6dE/otp \
-H "X-BRIDGE-API-Key: $BRIDGE_API_KEY" \
-H "API-Version: 2026-10-29-atlas" \
-H "Content-Type: application/json" \
-d '{ "otp": "123456" }'
{
"status": "success",
"message": "Code submitted; approve on the phone if asked"
}
{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "This payment is not waiting for a code",
"request_id": "req_3VnR7tY1wZ4cB6dE8fK2mQ9xLp",
"status": 422,
"errors": [
{ "field": "paymentId", "message": "This payment is not waiting for a code" }
]
}
}
Payments
Send a mobile money code
Send the one-time code from the payer’s phone for a mobile money onramp.
POST
/
payments
/
{paymentId}
/
otp
curl -X POST https://sandbox.core.linkio.world/api/payments/pay_8fK2mQ9xLp3VnR7tY1wZ4cB6dE/otp \
-H "X-BRIDGE-API-Key: $BRIDGE_API_KEY" \
-H "API-Version: 2026-10-29-atlas" \
-H "Content-Type: application/json" \
-d '{ "otp": "123456" }'
{
"status": "success",
"message": "Code submitted; approve on the phone if asked"
}
{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "This payment is not waiting for a code",
"request_id": "req_3VnR7tY1wZ4cB6dE8fK2mQ9xLp",
"status": 422,
"errors": [
{ "field": "paymentId", "message": "This payment is not waiting for a code" }
]
}
}
Requires the Ramps, banks & methods scope (payments write). Only needed when a mobile money onramp’s
deposit.details.next_step is OTP. See Mobile money.
Headers
string
default:"2026-10-29-atlas"
required
Your account’s API version.
Path
string
required
The payment ID, starting with
pay_.Body
string
required
The 4 to 8 digit code the payer received.
Response
202 Accepted. The payer may then need to approve on their phone. Watch for webhooks to see the result.
string
successstring
Code submitted; approve on the phone if askedErrors
| Status | Code | Message |
|---|---|---|
422 | validation_failed | otp must be the 4 to 8 digit code from the phone |
422 | validation_failed | This payment is not waiting for a code |
422 | validation_failed | This payment does not take a code |
404 | payment_not_found | Payment pay_… not found |
curl -X POST https://sandbox.core.linkio.world/api/payments/pay_8fK2mQ9xLp3VnR7tY1wZ4cB6dE/otp \
-H "X-BRIDGE-API-Key: $BRIDGE_API_KEY" \
-H "API-Version: 2026-10-29-atlas" \
-H "Content-Type: application/json" \
-d '{ "otp": "123456" }'
{
"status": "success",
"message": "Code submitted; approve on the phone if asked"
}
{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "This payment is not waiting for a code",
"request_id": "req_3VnR7tY1wZ4cB6dE8fK2mQ9xLp",
"status": 422,
"errors": [
{ "field": "paymentId", "message": "This payment is not waiting for a code" }
]
}
}
Last modified on October 29, 2026
Was this page helpful?

