Skip to main content

Introduction

The Zuba Payment Platform API is organized around REST principles: predictable, resource-oriented URLs; JSON-encoded requests and responses; and standard HTTP response codes, authentication, and verbs.

Base URL

Production:
Sandbox:

Authentication

The Zuba API uses the OAuth 2.0 Client Credentials flow for authentication. You can generate your credentials in the Zuba Dashboard (Sandbox) or Production Dashboard. See our Authentication Guide for detailed instructions on obtaining access tokens. Include your access token in the Authorization header:

Request Format

All POST requests should include the Content-Type header:

Response Format

All responses are returned in JSON format:

Example Success Response

The example below is the response body of GET /v1/ledger/balances. Monetary values are always decimal strings, never JSON numbers:

Error Response

Most errors use a JSON envelope with statusCode, message, and error fields. Validation errors also carry a details array identifying the offending fields:
Some errors, including Idempotency-Key errors and all unexpected 500s, are returned as RFC 9457 problem details instead, with Content-Type: application/problem+json and a different body shape:
Check the response Content-Type header and handle both shapes: a parser keyed exclusively on message and statusCode will break on application/problem+json responses. On problem responses, branch on type or code, and use retryable to decide whether a retry can succeed.

HTTP Status Codes

The Zuba API uses conventional HTTP response codes:

Rate Limits

Requests are rate limited across three windows: Exceeding any window returns HTTP 429 Too Many Requests. Back off and retry with exponentially increasing delays.

Pagination

List endpoints use cursor pagination. Results are ordered newest first. Pass the nextCursor returned by the previous page as cursor to fetch the next page.

Request Parameters

  • cursor - Opaque cursor returned by the previous page
  • limit - Number of items per page (minimum 1, maximum 100, default 20)

Example Response Format

When hasMore is true, pass nextCursor as cursor on the next request. When hasMore is false, nextCursor is null.

Idempotency

Two mechanisms prevent duplicate payouts:

clientRef deduplication

Every payout must carry a unique clientRef. A request that reuses an existing clientRef is rejected with HTTP 400, so a resubmission can never create a duplicate payout.

Idempotency-Key header

POST /v1/payouts also accepts an optional Idempotency-Key header, a client-generated key scoped to your workspace:
  • Same key, same body: the original response is replayed; no second payout is created.
  • Same key, different body: rejected with HTTP 422 (IDEMPOTENCY_KEY_REUSED).
  • Repeat while the first request is still in flight: HTTP 409 (retryable); retry the identical request to receive the stored response.
  • Keys expire 24 hours after the original request completes; a repeat after expiry is treated as a new request.

Webhooks

The Zuba API sends webhook notifications for events such as payout status changes. Every delivery is a JSON POST with this envelope:
Learn more in our Webhooks Guide.

API Versioning

The API version is specified in the URL path. All endpoints are served under /v1:
FX and ledger endpoints were historically served at unversioned paths (/fx/..., /ledger/...). Those legacy URLs continue to work as aliases of the canonical /v1/fx/... and /v1/ledger/... paths, but are deprecated: use the /v1 form in new integrations.

Testing

Use Sandbox credentials for development:
  • Sandbox Dashboard: https://sandbox.zuba.com
  • Sandbox Base URL: https://api.sandbox.zuba.com
  • Sandbox Token URL: https://zuba-test.us.auth0.com/oauth/token
The Sandbox provides:
  • Simulated payment processing
  • No real money movement
  • Access to test data and scenarios
  • Webhook testing capabilities

Support

Need help with integration? Contact our team:
  • Email: support@zuba.com
  • Documentation: Browse the complete API reference below

Next Steps

Quickstart Guide

Send your first payout in minutes

Payouts

Send money globally to beneficiaries

Ledger System

Double-entry accounting and transaction tracking

Webhooks

Receive real-time event notifications