Skip to main content

Set up your environment

Get your API credentials, fund your Sandbox account, and send your first payout, all in a few minutes.

Prerequisites

Before you begin, ensure you have:
  • A Zuba account with API access
  • Your API credentials (Client ID and Client Secret)
  • Basic knowledge of REST APIs

Get your API credentials

  1. Log in to your Zuba Sandbox Dashboard
  2. Navigate to API Settings
  3. Click Generate API Key or Create API Credentials
  4. Save your Client ID, Client Secret, Token URL, and Audience securely
See the Authentication Guide for detailed instructions on obtaining access tokens.
Never expose your Client Secret in client-side code or public repositories. Always keep it secure on your server.

Rate Limits

The API enforces rate limits to ensure fair usage and platform stability: Limits are per client IP address, and some endpoints carry their own. If you exceed these limits, you’ll receive a 429 Too Many Requests response. Implement exponential backoff in your integration to handle rate limiting gracefully.

Create your first beneficiary

Before sending payouts, create a beneficiary with their banking details. This example creates a Nigerian beneficiary with an NGN bank account; the payout in the next step delivers to it over the local bank_transfer rail:
bankCode accepts either the 3-digit CBN short code (e.g. 044) or the 6-digit NIP long code; crAccount is the 10-digit account number. The payout currency must match the currency of one of the beneficiary’s accounts. For other destination currencies and account shapes (IBAN, US bank accounts, crypto wallets, mobile money), see Payouts.

Check your account balance

Before sending payouts, ensure your account has sufficient funds. You can check your balance across all currencies:
Payouts fail if your balance is zero. In the Sandbox you can fund your workspace yourself; see Sandbox testing. In production, fund your account via the dashboard or contact your account manager.

Send your first payout

Now send a payout to your beneficiary, referencing them by ID from the previous step (recommended). amount is passed as a decimal string to avoid floating-point precision issues. Currency fields: inputCurrency is the balance you pay from, while currency is what the beneficiary receives (converted automatically if different). Sender types: senderInfo.type is 'individual' (default when omitted) for natural-person senders, or 'business' for legal entities. The examples below use an individual sender; for a business sender, see Business sender example.
clientRef is your idempotency reference: it must be unique per workspace, and you can look a payout up by it later. For safe retries, you can also send an optional Idempotency-Key header on POST /v1/payouts: a repeat with the same key and body replays the original response instead of creating a duplicate payout.

Business sender example

When the sender is a legal entity rather than a natural person, set senderInfo.type to 'business' and provide companyName, registrationNumber, and country. The registrationNumber is the company’s official registration identifier and is used as the AML pivot for sanctions and UBO screening. Business senders do not carry firstName, lastName, or dateOfBirth.

Track payout status

Check the status of your payout at any time:
status is one of created, queued, processing, paid, failed, or cancelled; see Payout statuses for what each means. For push notifications instead of polling, set up webhooks.

Next Steps

Authentication

Learn about secure authentication methods

Webhooks

Set up real-time payout notifications

Batch Payouts

Process multiple payouts efficiently

API Reference

Explore the complete API documentation