Two Types of Limits
Rate Limits
The maximum number of requests allowed within a short time window (seconds or minutes). Rate limits prevent burst abuse — for example, a loop in your code that fires 500 requests in one second.
Quotas
The maximum number of requests allowed within your billing period (typically one month). Quotas are determined by your partner plan. Hitting a quota means you have used your allocation for the period, not just a short burst.
429 Too Many Requests. A quota exhaustion returns HTTP 402 Payment Required. Both include headers that tell you exactly what happened and when you can retry.
Rate Limits by Endpoint
These limits apply per API key unless otherwise noted. “Per IP” limits apply per source IP address regardless of key.| Endpoint | Limit | Window | Burst |
|---|---|---|---|
POST /api/Auth/register | 10 requests | 1 minute per IP | 3 / second |
POST /api/Auth/verifyEmailCode | 5 requests | 15 minutes per IP | 2 / second |
POST /api/v1/accounts | 60 requests | 1 minute per key | 10 / second |
POST /api/v1/payments/transfer | 30 requests | 1 minute per key | 5 / second |
POST /api/v1/payments/account-enquiry | 60 requests | 1 minute per key | 10 / second |
POST /api/v1/kyc/bvn/verify | 100 requests | 1 hour per key | 10 / second |
POST /api/v1/kyc/nin/verify | 100 requests | 1 hour per key | 10 / second |
POST /api/v1/kyc/cac/lookup | 200 requests | 1 hour per key | 20 / second |
GET /api/v1/accounts/* | 120 requests | 1 minute per key | 20 / second |
429.
The
/api/Auth/ endpoints use IP-based limits, not key-based limits, because they are called before you have authenticated. If you have multiple services behind a single NAT IP, they share this limit.Response Headers to Monitor
Every API response includes headers that tell you where you stand. Read these in your application — do not rely on hitting a429 to detect a limit.
| Header | What It Means |
|---|---|
X-Quota-Remaining | The number of calls left in your current billing period. When this reaches zero, you will receive 402 responses. |
X-Quota-Reset | The date and time when your quota resets, in WAT (West Africa Time, UTC+1). Format: ISO 8601. |
X-RateLimit-Remaining | Requests remaining in the current rate limit window. |
X-RateLimit-Reset | When the current rate limit window resets (Unix timestamp). |
Retry-After | Present only on 429 responses. The number of seconds you must wait before retrying. |
What to Do When Rate Limited (HTTP 429)
A429 response means you sent requests too fast. The right response is exponential backoff with jitter: wait a little, retry, wait a little longer if it fails again, and so on. Do not retry immediately in a tight loop — that makes the problem worse.
The jitter (random extra delay) is important. Without it, all your retry attempts fire at the same moment, creating a “thundering herd” that immediately triggers another rate limit. Jitter spreads the retries out in time.
What to Do When Quota Is Exhausted (HTTP 402)
A402 Payment Required response means you have used all the requests in your plan for this billing period. Unlike a rate limit, waiting and retrying will not help — you need to either wait for the reset date (shown in X-Quota-Reset) or upgrade your plan.
To discuss your current quota, upgrade your plan, or request a temporary increase for a high-volume event (such as a product launch), email baas-support@unionbank.ng with:
- Your Partner ID
- Your current plan
- The volume you expect and the timeframe