List orders
Filtering and paging through your orders with the list endpoint.
GET /api/v1/orders returns your orders, newest first, one page at a time.
Parameters
| Parameter | Rules |
|---|---|
status |
Optional. One of pending, paid, expired, failed, manual_review. |
merchant_order_id |
Optional. At most 120 characters. |
limit |
Optional. A whole number from 1 to 100. Default 20. |
cursor |
Optional. The next_cursor value from the previous page. |
A bad value on any of these comes back as 400 invalid_request with a details string that says exactly what was wrong:
limit must be a whole number from 1 to 100status must be one of pending, paid, expired, failed, manual_reviewmerchant_order_id is longer than 120 characterscursor is not valid; pass next_cursor from the previous page
If your business is disabled, including a business inside its 7-day account-deletion window, this
call answers 403 merchant_disabled before it looks at any of these parameters.
Response
{
"data": [ { "order_id": "UPN-0123456789", "status": "paid", "...": "..." } ],
"has_more": true,
"next_cursor": "MjAyNi0wOS0wOFQxNzoyNTowMC4wMDBafFVQTi0wMTIzNDU2Nzg5"
}Each item in data has the same fields as Get an order, including payment_account_id. This endpoint does not filter by account; it lists your orders across every UPI account you have.
Paging through every order
Keep calling the endpoint with cursor set to the previous response's next_cursor until has_more is false:
cursor = null
loop:
page = GET /api/v1/orders?limit=100&cursor={cursor}
handle page.data
if not page.has_more: stop
cursor = page.next_cursorSample
curl "https://app.upinow.in/api/v1/orders?status=paid&limit=20" \
-H "X-API-Key: YOUR_API_KEY"