Skip to main content

Sandbox

Test mode is a full copy of the Shipping API that never reaches Reeds operations. Use it to build and test every path before you go live.

How the sandbox behaves​

  • Use test credentials (rci_test_... and rcs_test_...). They use the same token endpoint and base URL as live credentials.
  • Every object they create has livemode: false.
  • Live credentials get 403 TEST_MODE_ONLY from the sandbox endpoints (/sandbox/...).
  • Test deliveries never reach Reeds' riders or hubs, and no SMS is sent.
  • Addresses and quotes use the real geocoder and the real price rules, so test prices match live. The same rate limits apply.
  • There are no special test addresses. Test addresses shows what to send to reach each outcome.
  • The test wallet starts with ₦100,000.
  • Test data is kept for 90 days.

Top up the test wallet​

POST /sandbox/wallet/fund tops up the test wallet instantly. There is no payment page. (POST /wallet/fund works in Live mode only.)

curl -X POST https://api.getreeds.co/shipping/v1/sandbox/wallet/fund \
-H "Authorization: Bearer $REEDS_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "amount": 5000000 }'

Advance a delivery​

No rider will pick up a test delivery, so you move it yourself. POST /sandbox/deliveries/{id}/advance sets the next status and sends the same webhooks a live delivery would.

statusSimulates
rider_assignedA rider has been given the pickup
picked_upThe parcel was collected
at_hubThe parcel is at a Reeds hub
out_for_deliveryThe rider is heading to the receiver
deliveredThe delivery is complete
failed_attemptThe rider couldn't deliver
on_holdReeds paused the delivery. Send hold_reason with it.

Send deliver_by (date-time) and reason instead of status to simulate a schedule change. deliver_by must be in the future and after pickup_by. delivery.schedule_changed fires.

curl -X POST https://api.getreeds.co/shipping/v1/sandbox/deliveries/dlv_9Kd3Qx7M/advance \
-H "Authorization: Bearer $REEDS_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "status": "picked_up" }'

The webhook for each step goes to your Test-mode endpoint. Add one in Dashboard → Developers with the Test switch on.

Test every path​

Before you go live, check each of these in Test mode:

  • Verified pickup and drop-off, then a quote and a booking
  • A needs-confirmation address: draft, requires_action, then POST /addresses/{id}/confirm
  • A not-serviceable address: available: false on the quote
  • An inter-state route: INTERSTATE_NOT_AVAILABLE
  • An expired quote: QUOTE_EXPIRED, then a fresh quote
  • A short wallet: 402 INSUFFICIENT_BALANCE, fund, retry with the same Idempotency-Key
  • A cancellation before pickup, and the refund
  • Every status through advance, including failed_attempt and on_hold
  • A schedule change and the delivery.schedule_changed webhook
  • Your webhook receiver: signature check, duplicates, unknown event types
  • A retried request with the same Idempotency-Key

Next steps​