curl --request POST \
--url https://api.example.com/api/v1/payments/checkout \
--header 'Content-Type: application/json' \
--data '
{
"contract_id": "<string>",
"amount": 123,
"phone_number": "<string>",
"currency": "<string>",
"payment_type": "<string>"
}
'{
"payment_id": 123,
"transaction_id": {},
"status": "<string>",
"amount": 123,
"currency": "<string>",
"created_at": "<string>"
}Initiate a mobile money checkout for a contract payment
curl --request POST \
--url https://api.example.com/api/v1/payments/checkout \
--header 'Content-Type: application/json' \
--data '
{
"contract_id": "<string>",
"amount": 123,
"phone_number": "<string>",
"currency": "<string>",
"payment_type": "<string>"
}
'{
"payment_id": 123,
"transaction_id": {},
"status": "<string>",
"amount": 123,
"currency": "<string>",
"created_at": "<string>"
}PENDING - Payment initiated, awaiting confirmationLOCKED - Payment completed and locked in escrowRELEASED - Payment released to recipientREFUNDED - Payment refunded to payerFAILED - Payment failedcurl -X POST https://api.voicepact.com/api/v1/payments/checkout \
-H "Content-Type: application/json" \
-d '{
"contract_id": "contract_123456",
"amount": 5000.0,
"currency": "KES",
"phone_number": "+254712345678",
"payment_type": "escrow"
}'
{
"payment_id": 42,
"transaction_id": "ATXid_sample123456789",
"status": "PENDING",
"amount": 5000.0,
"currency": "KES",
"created_at": "2026-03-06T10:30:00.000000"
}
{
"detail": "Contract not found"
}
{
"detail": [
{
"loc": ["body", "amount"],
"msg": "ensure this value is greater than 0",
"type": "value_error.number.not_gt"
}
]
}
{
"detail": "Mobile checkout failed: [error details]"
}
PENDING statusPENDING and is updated to LOCKED or FAILED via webhook