Orders
Every order is a complete record of a transaction, from line items and customer data to payment state and fulfillment information. The APIs below give you precise control over the full order lifecycle, whether you're charging immediately or deferring payment until later.
The order object
An order object holds everything—the cart, payment intent, customer profile, and current state. You can create orders with inline customer data for one-time checkouts or reference saved customers and payment methods for frictionless repeat purchases.
Properties
line_item_groupobjectCart contents and totals.Click or tap to expandpaymentobjectPayment intent tied to this order.Click or tap to expand- Name
latest_attempt- Type
- object|null
- Description
- Details about the most recent charge attempt—
nulluntil we try to collect payment.
View latest_attempt attributesClick or tap to expand
View next_action attributesClick or tap to expand
View confirm_payment attributesClick or tap to expand
View request attributesClick or tap to expand
View payment_method attributesClick or tap to expand
- Name
payout_configuration- Type
- object|null
- Description
- Payout routing instructions for this payment. Present only when order-level
payout_settingswas specified during order creation.
View payout_configuration attributesClick or tap to expand
Create an order
Create an order and optionally charge it right away. Three common patterns:
- New customer, new payment method: Pass
customer_data+payment_method_datafor first-time checkouts. - Existing customer, new payment method: Use
customer_idwith freshpayment_method_datawhen the customer wants to pay with a different instrument. - Order now, pay later: Provide only
customer_idorcustomer_dataand skip the payment method—you'll charge it later via/orders/pay.
Rules
- Exactly one of
customer_idorcustomer_datais required. - Set
execute_paymenttotrueonly when a payment method is attached (payment_method_idorpayment_method_data). Omit it or passfalseto defer payment.
Required attributes
Optional attributes
- Name
finalize- Type
- boolean
- Description
Explicitly finalize the order, making it immutable regardless of payment state. When
true, the order is finalized immediately—line items lock, totals freeze, and an invoice generates. Whenfalseor omitted, finalization follows default heuristics (finalize only if payment is executable). Use this to create read-only orders that can be shared or reviewed before payment.
Request
curl https://api.zebo.dev/orders/new \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"idempotency_key": "0f780d10-0a2f-4c29-a2b1-1f566e0b1f80",
"number": "ORDER-NUMBER-2",
"statement_descriptor": "STMTDESC",
"execute_payment": true,
"send_invoice": true,
"checkout_settings": {
"redirect_url": "https://google.com/thank-you",
"cancel_url": "https://google.com/order-cancelled"
},
"customer_data": {
"name": "Customer Name",
"email_address": "customer@example.com",
"phone_number": "+233242058841"
},
"payment_method_data": {
"type": "mobile_money",
"mobile_money": {
"issuer": "mtn",
"number": "0242057831"
}
},
"line_items": [
{
"type": "product",
"product": {
"type": "physical",
"name": "Utility Sneakers",
"quantity": 1,
"price": { "currency": "ghs", "value": 20000 }
}
}
],
"billing_details": {
"email_address": "customer@example.com",
"address": {
"line1": "23 Adenta High Street",
"town": "Accra",
"country": "Ghana"
}
}
}'
Response
{
"order": {
"id": "or_f8y1p1",
"number": "ORDER-NUMBER-2",
"status": "requires_payment",
"statement_descriptor": "STMTDESC",
"initiated_at": "2025-01-13T10:00:00Z",
"sealed_at": "2025-01-13T10:00:01Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_utility",
"type": "physical",
"tax_code": "apparel",
"name": "Utility Sneakers",
"price": { "currency": "ghs", "value": 20000 },
"quantity": 1,
"reference": "utility-sneakers"
}
}
],
"total": { "currency": "ghs", "value": 20500 }
},
"payment": {
"id": "py_3deNYy",
"statement_descriptor": "STMTDESC",
"payment_method": {
"id": "pm_wveyHj",
"customer_id": "cu_a1b2c3",
"type": "mobile_money",
"issuer": "mtn",
"number": "0242057831",
"created_at": "2025-01-13T10:00:00Z",
"verified": false
},
"amount": { "currency": "ghs", "value": 20500 },
"next_action": {
"type": "confirm_payment",
"confirm_payment": {
"expires_at": "2025-01-13T10:08:00Z",
"scheme": "zcommerce_defined_auth",
"request": {
"id": "token_req_1",
"recipient": "0242057831",
"sent_via": "sms",
"token_size": 6,
"sender_id": "zverify"
}
}
},
"status": "requires_action",
"initiated_at": "2025-01-13T10:00:00Z"
},
"invoice": {
"id": "inv_HMpTYm",
"deliveries": null,
"format": {
"web": { "url": "https://checkout.zebo.dev/or_f8y1p1" },
"pdf": { "url": "https://checkout.zebo.dev/or_f8y1p1/pdf" }
}
},
"customer": {
"id": "cu_a1b2c3",
"email_address": "customer@example.com",
"phone_number": "+233242058841",
"created_at": "2025-01-13T10:00:00Z",
"name": "Customer Name"
},
"shipping": {
"address": {
"line1": "23 Adenta High Street",
"line2": "Behind Pantang",
"town": "Accra",
"region": "Greater Accra",
"country": "Ghana",
"district": "Adenta",
"post_code": "GHA-123-9822"
}
}
}
}
For a known customer
For returning customers with saved payment methods, just send customer_id and payment_method_id. This is the fastest path—perfect for subscriptions and repeat purchases where you already have consent to charge.
Request
curl https://api.zebo.dev/orders/new \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"payment_method_id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"execute_payment": true,
"idempotency_key": "1577b509-52b2-4d5a-a1b6-fa0f6d574f75",
"line_items": [
{
"type": "product",
"product": {
"type": "digital",
"name": "Streaming Pack",
"quantity": 1,
"price": { "currency": "ghs", "value": 200 }
}
}
]
}'
Response
{
"order": {
"id": "or_6q8wxs",
"number": "ORDER-NUMBER",
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"payment_method_id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"status": "requires_payment",
"initiated_at": "2025-01-13T11:00:00Z",
"sealed_at": "2025-01-13T11:00:01Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_stream_single",
"about": "Digital streaming pack (single license).",
"tax_code": "media",
"name": "Streaming Pack",
"type": "digital",
"price": { "currency": "ghs", "value": 200 },
"quantity": 1,
"reference": "stream-pack-1"
}
},
{
"type": "product",
"product": {
"id": "prod_stream_bundle",
"about": "Digital streaming pack bundle.",
"tax_code": "media",
"name": "Streaming Pack (bundle)",
"type": "digital",
"price": { "currency": "ghs", "value": 100 },
"quantity": 2,
"reference": "stream-pack-2"
}
}
],
"total": { "currency": "ghs", "value": 400 }
},
"payment": {
"id": "py_6q8wxs",
"statement_descriptor": "STATEMENT",
"payment_method": {
"id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"type": "mobile_money",
"issuer": "mtn",
"number": "0242057831",
"created_at": "2025-01-13T11:00:00Z",
"verified": false
},
"amount": { "currency": "ghs", "value": 400 },
"next_action": {
"type": "confirm_payment",
"confirm_payment": {
"expires_at": "2025-01-13T11:08:00Z",
"scheme": "zcommerce_defined_auth",
"request": {
"id": "token_req_2",
"recipient": "0242057831",
"sent_via": "sms",
"token_size": 6,
"sender_id": "zverify"
}
}
},
"status": "requires_action",
"initiated_at": "2025-01-13T11:00:00Z"
},
"invoice": {
"id": "inv_6q8wxs",
"deliveries": null,
"format": {
"web": { "url": "https://checkout.zebo.dev/or_6q8wxs" },
"pdf": { "url": "https://checkout.zebo.dev/or_6q8wxs/pdf" }
}
},
"customer": {
"id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"email_address": "customer@example.com",
"phone_number": "+244242057831",
"created_at": "2025-01-13T11:00:00Z",
"name": "Customer Name"
},
"shipping": null
}
}
Create with payment method
When the customer has a saved payment method, reference it by ID to charge immediately. You'll need both customer_id and payment_method_id.
Required attributes
Request
curl https://api.zebo.dev/orders/new \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"payment_method_id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"execute_payment": true,
"line_items": [
{
"type": "product",
"product": {
"type": "digital",
"name": "Software License",
"quantity": 1,
"price": { "currency": "ghs", "value": 1200 }
}
}
]
}'
Response
{
"order": {
"id": "or_yj0snl",
"number": "ORDER-NUMBER",
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"payment_method_id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"status": "requires_payment",
"initiated_at": "2025-01-13T11:30:00Z",
"sealed_at": "2025-01-13T11:30:01Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_software",
"about": "Annual software license",
"tax_code": "software",
"name": "Software License",
"type": "digital",
"price": { "currency": "ghs", "value": 1200 },
"quantity": 1,
"reference": "software-license-annual"
}
}
],
"total": { "currency": "ghs", "value": 1200 }
},
"payment": {
"id": "py_yj0snl",
"statement_descriptor": "STATEMENT",
"payment_method": {
"id": "pm_OaNWqiOeYa5OJMcxUPZC1pLCW94Ne3toks4HIVPRa",
"customer_id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"type": "mobile_money",
"issuer": "mtn",
"number": "0242057831",
"created_at": "2025-01-13T11:30:00Z",
"verified": false
},
"amount": { "currency": "ghs", "value": 1200 },
"next_action": {
"type": "confirm_payment",
"confirm_payment": {
"expires_at": "2025-01-13T11:38:00Z",
"scheme": "zcommerce_defined_auth",
"request": {
"id": "token_req_3",
"recipient": "0242057831",
"sent_via": "sms",
"token_size": 6,
"sender_id": "zverify"
}
}
},
"status": "requires_action",
"initiated_at": "2025-01-13T11:30:00Z"
},
"invoice": {
"id": "inv_yj0snl",
"deliveries": null,
"format": {
"web": { "url": "https://checkout.zebo.dev/or_yj0snl" },
"pdf": { "url": "https://checkout.zebo.dev/or_yj0snl/pdf" }
}
},
"customer": {
"id": "cu_dZjC0hAsYi2dObveagp6pJLoXvgmicoBQj8KuNOZ",
"email_address": "customer@example.com",
"phone_number": "+244242057831",
"created_at": "2025-01-13T11:00:00Z",
"name": "Customer Name"
},
"shipping": null
}
}
Create and finalize
Use the finalize parameter to explicitly lock an order before payment. This creates an immutable order with a generated invoice—perfect for quote workflows, approval processes, or when you want customers to review the final order before paying.
When finalize: true, the order is finalized immediately regardless of whether payment will be executed. The order becomes read-only, and the sealed_at timestamp is set.
Request
curl https://api.zebo.dev/orders/new \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cu_abc123",
"finalize": true,
"line_items": [
{
"type": "product",
"product": {
"type": "physical",
"name": "Enterprise Plan (Annual)",
"quantity": 1,
"price": {"currency": "ghs", "value": 120000}
}
}
]
}'
Response
{
"order": {
"id": "or_xyz789",
"number": "ORD-2025-001",
"status": "requires_payment",
"customer_id": "cu_abc123",
"initiated_at": "2025-01-27T00:35:00Z",
"sealed_at": "2025-01-27T00:35:01Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_enterprise",
"name": "Enterprise Plan (Annual)",
"type": "physical",
"quantity": 1,
"price": {
"currency": "ghs",
"value": 120000
}
}
}
],
"total": {
"currency": "ghs",
"value": 120000
}
},
"invoice": {
"id": "inv_xyz789",
"format": {
"web": {
"url": "https://checkout.zebo.dev/or_xyz789"
},
"pdf": {
"url": "https://checkout.zebo.dev/or_xyz789/pdf"
}
}
},
"customer": {
"id": "cu_abc123",
"name": "Acme Corporation",
"email_address": "billing@acme.com"
}
}
}
Pay for an order
Charge an existing order without recreating it. Four ways to use this:
- Already has a payment method: Just send
order_id—we'll charge the attached method. - Swap to a different saved method: Send
order_id+payment_method_id. - Use a new payment method: Send
order_id+payment_method_data—we'll save it to the order for future retries. - Offline payment: Send
order_id+paid_out_of_band: true—marks the payment as received outside Commerce (cash, bank transfer, check).
Rules
- Pass either
payment_method_id,payment_method_data, orpaid_out_of_band, never multiple. paid_out_of_bandis mutually exclusive with payment method parameters.- Any
payment_method_idmust belong to the order's customer.
Optional attributes
Request
curl https://api.zebo.dev/orders/pay \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_JoPtqOmsjgZKwkPvqTrqGsopu07wfC7ttoWqmfwt",
"payment_method_data": {
"type": "mobile_money",
"mobile_money": {
"issuer": "mtn",
"number": "0544998605"
}
}
}'
Response
{}
Confirm a payment
Submit the OTP your customer received to complete the payment. On success, the order moves to paid. Some providers require an additional authorization step—if so, the order goes to authorize_payment and you can prompt the customer to approve it in their provider app.
Request
curl https://api.zebo.dev/orders/confirm_payment \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_JoPtqOmsjgZKwkPvqTrqGsopu07wfC7ttoWqmfwt",
"token": "302673"
}'
Response
{}
Request confirmation
Some payment methods—especially mobile money—require the customer to confirm with an OTP. Call this to send (or resend) the confirmation token.
Request
curl https://api.zebo.dev/orders/request_confirmation \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_kAVwBsk6EhQVv2YBUhYAqMf0lktEoQ0S7ZR8y2xi"
}'
Response
{
"order": {
"id": "or_kAVwBsk6EhQVv2YBUhYAqMf0lktEoQ0S7ZR8y2xi",
"status": "requires_payment",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "pm_fNa3i3QPkt4yU5FQHoM042tRFAdthCbcRZJdZnrl",
"reference": "pm_fNa3i3QPkt4yU5FQHoM042tRFAdthCbcRZJdZnrl",
"about": "Tollo victoria advenio crudelis facere crudelis. Aequitas voco correptius suspendo fuga demergo. Angelus texo pecto.",
"custom_data": {
"size": "56",
"color": "blue"
},
"tax_code": "gold",
"name": "Awesome Fresh Gloves",
"type": "digital",
"price": {
"currency": "ghs",
"value": 20
},
"quantity": 1
}
},
{
"type": "product",
"product": {
"id": "cu_deeYHxzydDJWU1w9YCjOvgDirYv37WyYmI9MhdEA",
"reference": "cu_deeYHxzydDJWU1w9YCjOvgDirYv37WyYmI9MhdEA",
"about": "Sunt astrum verecundia cenaculum. Asporto voluptas mollitia voluptate vaco concedo bellum clam aufero taedium. Admiratio cohibeo ullus comis alter.",
"custom_data": {
"size": "56",
"color": "blue"
},
"tax_code": "black",
"name": "Awesome Fresh Table",
"type": "digital",
"price": {
"currency": "ghs",
"value": 100
},
"quantity": 2
}
}
],
"total": {
"currency": "ghs",
"value": 220
}
},
"initiated_at": "2025-04-09T00:11:47.74569+01:00",
"sealed_at": "2025-04-09T00:11:48.374979+01:00",
"payment": {
"id": "py_8QNM4ujclxXUDZBnL9ujyPfMG4Bk6ZRMBeRtc99l",
"statement_descriptor": "STATEMENT",
"payment_method": {
"id": "pm_acA9cJRhjZHw1Gs4p39fKTbp1AgsFjhBk1AwIuVf",
"customer_id": "cu_N4IX542ZKixJJhIbc4bQBntdPrRb0DQ7KqEYSyqc",
"type": "mobile_money",
"issuer": "mtn",
"number": "0242057831",
"created_at": "2025-04-09T00:11:47.873476+01:00",
"verified": false
},
"amount": {
"currency": "ghs",
"value": 220
},
"next_action": {
"type": "confirm_payment",
"confirm_payment": {
"expires_at": "0001-01-01T00:00:00Z",
"scheme": "zcommerce_defined_auth",
"request": {
"recipient": "0242057831",
"sent_via": "sms",
"token_size": 6,
"sender_id": "zverify"
},
"confirmed": false,
"status": "pending_verification"
}
},
"status": "requires_action",
"initiated_at": "2025-04-09T00:11:47.995076+01:00"
},
"customer": {
"id": "cu_N4IX542ZKixJJhIbc4bQBntdPrRb0DQ7KqEYSyqc",
"email_address": "gloria@kesewaa.co",
"phone_number": "+233544998605",
"name": "Gloria Kesewaa"
}
}
}
Finalize an order
Finalize an order to lock it for payment. Once finalized, the order becomes immutable—line items, totals, and customer data can no longer be changed. This endpoint generates an invoice and hosted checkout page that you can share with customers.
What finalization means
Finalizing an order is the transition from draft to ready-for-payment. Before finalization, orders are flexible—you can add products, adjust quantities, or update customer details. After finalization:
- Line items freeze: No additions, removals, or quantity changes
- Totals lock: The amount due becomes fixed
- Invoice generates: A viewable invoice with web and PDF formats
- Checkout activates: The hosted payment page becomes accessible
- Payment readiness: The order can accept payment attempts
Use this endpoint when you've finished building the cart and want to present it to the customer for payment. The response includes invoice URLs and the sealed_at timestamp marking when the order was finalized.
Required attributes
Request
curl https://api.zebo.dev/orders/finalize \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt"
}'
Response
{
"order": {
"number": "ORDER-12345",
"status": "requires_payment",
"payment_id": "py_xyz123abc456",
"customer_id": "cu_abc123def456",
"sealed_at": "2025-01-25T10:30:00Z",
"initiated_at": "2025-01-25T10:25:00Z",
"expires_at": "2025-02-01T10:25:00Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_123",
"name": "Premium Widget",
"quantity": 2,
"price": {
"currency": "ghs",
"value": 5000
}
}
}
],
"total": {
"currency": "ghs",
"value": 10000
}
},
"invoice": {
"number": "ORDER-12345",
"due_at": "2025-01-25T10:30:00Z"
}
}
}
Complete an order
Mark an order as completed when the customer has received their items or you've fulfilled the service. This transitions the order to the completed state, indicating the transaction is fully satisfied.
When to complete orders
Complete an order when:
- Physical goods: Items have been delivered or picked up
- Digital products: Files have been downloaded or access granted
- Services: Work has been performed and accepted
- Out-of-band payments: Cash, check, or bank transfer received offline
The order must have a successful payment before completion, unless you're marking an offline payment with paid_out_of_band: true.
Out-of-band payments
If the customer paid outside Commerce (cash, bank transfer, check), set paid_out_of_band: true. This marks both the payment and order as complete in a single operation. The payment gets marked as paid offline before the order is completed.
Use this for:
- Cash on delivery scenarios
- Bank transfer confirmations
- Check payments that cleared
- Any payment method outside the Commerce platform
Required attributes
Optional attributes
Request
curl https://api.zebo.dev/orders/complete \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt"
}'
Response
{
"order": {
"number": "ORDER-12345",
"status": "completed",
"payment_id": "py_xyz123abc456",
"customer_id": "cu_abc123def456",
"completed_at": "2025-01-27T11:00:00Z",
"sealed_at": "2025-01-25T10:30:00Z",
"initiated_at": "2025-01-25T10:25:00Z",
"expires_at": "2025-02-01T10:25:00Z",
"line_item_group": {
"line_items": [
{
"type": "product",
"product": {
"id": "prod_123",
"name": "Premium Widget",
"quantity": 2,
"price": {
"currency": "ghs",
"value": 5000
}
}
}
],
"total": {
"currency": "ghs",
"value": 10000
}
}
}
}
Lookup an order
Fetch the current state of an order by ID. Returns the full order object or a 404 if it doesn't exist.
Required attributes
Request
curl https://api.zebo.dev/orders/lookup \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"order_id": "or_48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt"
}'
Response
{
"order": {
"line_item_group": {
"line_items": [
{
"product": {
"id": "pm_BydaofEe1IdJro0BVjlm89PxeENo8GsqX09yVtBL",
"about": "Accedo turba doloremque brevis. Despecto administratio vorax verus odit vinculum. Advoco conforto spiritus debeo careo.",
"custom_data": {
"size": "56",
"some": "custom_data"
},
"tax_code": "pink",
"name": "Gorgeous Granite Salad",
"type": "physical",
"price": {
"currency": "ghs",
"value": 100
},
"quantity": 1
},
"type": "product"
}
],
"total": {
"currency": "ghs",
"value": 200
}
},
"initiated_at": "2025-09-14T16:24:41.137708909Z",
"completed_at": "2025-09-14T16:29:45Z",
"sealed_at": "2025-09-14T16:24:41.312701813Z",
"payment": {
"id": "py_OHFv6I3OZBvB1R46TQQGNxPPtgbPR6CXpQ8En9wl",
"statement_descriptor": "STATEMENT",
"payment_method": {
"id": "pm_hg7D2A5qT6g6mVDSJu6zweKXwsiiNWf3Q85book6",
"customer_id": "cu_ewoa27qe7aO4GZouasUSmVXILsmxjR0Hc6lCMBkn",
"type": "mobile_money",
"issuer": "mtn",
"number": "0594870087",
"created_at": "2025-09-14T16:24:41.171905592Z",
"verified": true
},
"latest_attempt": {
"payment_method_type": "mobile_money",
"payment_method_id": "pm_hg7D2A5qT6g6mVDSJu6zweKXwsiiNWf3Q85book6",
"reference": "68c6ecbc3bf0a6548973b598",
"status": "succeeded",
"initiated_at": "2025-09-14T16:26:36.627271781Z",
"succeeded_at": "2025-09-14T16:29:45Z"
},
"amount": {
"currency": "ghs",
"value": 200
},
"status": "paid",
"initiated_at": "2025-09-14T16:24:41.240462376Z",
"executed_at": "2025-09-14T16:26:36.626961042Z",
"paid_at": "2025-09-14T16:29:45Z",
"balance_transaction": {
"id": "bt_EWOA27qe7aO4GZouasUSmVXILsmxjR0H",
"payout_id": "po_68c6ecbc3bf0a6548973b598",
"payment_id": "py_OHFv6I3OZBvB1R46TQQGNxPPtgbPR6CXpQ8En9wl",
"created_at": "2025-09-14T16:29:45Z",
"paid_at": "2025-09-15T08:00:00Z",
"amount": {
"currency": "ghs",
"value": 200
}
}
},
"invoice": {
"id": "in_bRSGJcH7v4oLIAa3KlBmB9K6ZoRUucJXAJMWxl1KQq0JCZs0oOEG8ibCeGn1",
"format": {
"web": {
"url": "https://checkout.zebo.dev/48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt"
},
"pdf": {
"url": "https://checkout.zebo.dev/48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt/pdf"
}
}
},
"customer": {
"id": "cu_ewoa27qe7aO4GZouasUSmVXILsmxjR0Hc6lCMBkn",
"email_address": "yaw@konadu.ie",
"phone_number": "+233559714200",
"name": "Anita Segnom"
},
"status": "completed",
"id": "or_48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt"
}
}
Page through orders
Retrieve a paginated list of the most recent orders for the authenticated application. Orders are sorted by initiated_at in descending order, so page 1 always contains the freshest activity and subsequent pages step back in time.
Optional attributes
Response shape
- Top level
pageobject includesnumber,size, and anordersarray. - Every order summary contains status + timestamps (
initiated_at,sealed_at,completed_atwhen present) and a condensedline_item_groupwithproducts_countand computedtotal. customeris included when the order is tied to a buyer and surfacesid,name, and any knownemail,phone_number,suffix, ortitle.
Request
curl https://api.zebo.dev/orders/page \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"page_number": 1,
"page_size": 25
}'
Response
{
"page": {
"number": 1,
"size": 2,
"orders": [
{
"id": "or_kAVwBsk6EhQVv2YBUhYAqMf0lktEoQ0S7ZR8y2xi",
"line_item_group": {
"products_count": 2,
"total": {
"currency": "ghs",
"value": 220
}
},
"initiated_at": "2025-04-09T00:11:47.74569+01:00",
"sealed_at": "2025-04-09T00:11:48.374979+01:00",
"status": "requires_payment",
"customer": {
"id": "py_N4IX542ZKixJJhIbc4bQBntdPrRb0DQ7KqEYSyqc",
"name": "Gloria Kesewaa",
"email": "gloria@kesewaa.co",
"phone_number": "+233544998605"
}
},
{
"id": "or_48ZW7BGvYUBWc1i6WBkL2jr0iPQP5jUy76mmmHpt",
"line_item_group": {
"products_count": 1,
"total": {
"currency": "ghs",
"value": 200
}
},
"initiated_at": "2025-09-14T16:24:41.137708909Z",
"completed_at": "2025-09-14T16:29:45Z",
"sealed_at": "2025-09-14T16:24:41.312701813Z",
"status": "completed",
"customer": {
"id": "cu_ewoa27qe7aO4GZouasUSmVXILsmxjR0Hc6lCMBkn",
"name": "Anita Segnom",
"email": "yaw@konadu.ie",
"phone_number": "+233559714200"
}
}
]
}
}