curl --request POST \
--url https://api.wava.co/v1/orders \
--header 'Content-Type: application/json' \
--header 'merchant-key: <api-key>' \
--data '
{
"amount": 50000,
"description": "Premium subscription - Monthly",
"currency": "COP",
"shopper": {
"first_name": "Juan",
"last_name": "Pérez",
"email": "juan.perez@email.com",
"phone_number": "+573001234567",
"country": "CO",
"id_number": "1234567890",
"id_type": 1
},
"payment_gateway": {
"id_payment_gateway": 1
},
"order_key": "order-12345",
"redirect_link": "https://mystore.com/success",
"redirect_link_cancel": "https://mystore.com/cancel",
"redirect_link_failure": "https://mystore.com/error"
}
'{
"data": {
"id_order": 12345,
"status": "processing",
"payment_gateway": {
"nequi": {
"phone_number": "****567"
}
}
}
}Create and process a payment order directly. The API initiates payment processing immediately based on the selected gateway.
All direct API orders require id_number and id_type in the shopper object for compliance and buyer identification, regardless of the selected gateway. Use the Get Document Types endpoint to retrieve valid id_type values.
Gateway-specific behavior:
Nequi — Additionally requires phone_number in the shopper object. A push notification is sent to the buyer’s Nequi app. The buyer approves or rejects in-app. You receive a webhook when the payment is confirmed or cancelled.
Daviplata — Uses id_number and id_type to initiate the OTP flow. Only accepts CC, CE, and TI document types. The buyer receives an OTP via SMS. You must submit the OTP using the Daviplata OTP endpoint to complete payment.
Breb — Uses id_number and id_type to generate a transfer. Only accepts CC, CE, and TI document types. The API returns a QR code (base64 encoded) and a transfer key. The buyer uses either to complete the interbank transfer via their banking app. You receive a webhook when the payment is confirmed.
The id_payment_gateway value must come from the Get Payment Gateways endpoint. Do not hardcode gateway IDs as they may vary by store configuration.
curl --request POST \
--url https://api.wava.co/v1/orders \
--header 'Content-Type: application/json' \
--header 'merchant-key: <api-key>' \
--data '
{
"amount": 50000,
"description": "Premium subscription - Monthly",
"currency": "COP",
"shopper": {
"first_name": "Juan",
"last_name": "Pérez",
"email": "juan.perez@email.com",
"phone_number": "+573001234567",
"country": "CO",
"id_number": "1234567890",
"id_type": 1
},
"payment_gateway": {
"id_payment_gateway": 1
},
"order_key": "order-12345",
"redirect_link": "https://mystore.com/success",
"redirect_link_cancel": "https://mystore.com/cancel",
"redirect_link_failure": "https://mystore.com/error"
}
'{
"data": {
"id_order": 12345,
"status": "processing",
"payment_gateway": {
"nequi": {
"phone_number": "****567"
}
}
}
}Merchant key for store identification. Required for all API requests.
merchant-key: YOUR_MERCHANT_KEYOrder amount. Must be greater than 0.
x >= 0.0150000
Order description displayed to the buyer during checkout.
1 - 255"Premium subscription - Monthly"
Show child attributes
ISO 4217 currency code. Defaults to store currency if omitted.
3^[A-Z]{3}$"COP"
Show child attributes
Your external order reference. Use this to correlate Wava orders with your system.
100"order-12345"
URL to redirect buyer after successful payment.
"https://mystore.com/success"
URL to redirect buyer if payment is cancelled.
"https://mystore.com/cancel"
URL to redirect buyer if payment fails.
"https://mystore.com/error"
Device identifier for session tracking.
100"device-12345"
Order created and payment initiated successfully
Show child attributes