Private access
Business API keys are not public signup keys. BorderPay issues sandbox and production access after KYB, use-case review, and route approval.
Developers
BorderPay API Platform
Build customer onboarding, stablecoin wallets, virtual accounts, cross-border transfers, supplier payouts, webhook automation, and signed partner-branded onboarding through BorderPay.
{
"source": {
"payment_rail": "bridge_wallet",
"currency": "USDC",
"amount": "2500.00",
"bridge_wallet_id": "wlt_source_..."
},
"destination": {
"payment_rail": "bridge_wallet",
"currency": "USDC",
"bridge_wallet_id": "wlt_destination_..."
},
"idempotency_key": "transfer_INV_2049"
}
Business API keys are not public signup keys. BorderPay issues sandbox and production access after KYB, use-case review, and route approval.
Your integration calls BorderPay. BorderPay manages the underlying payment partners, compliance status, route selection, and provider fail-closed behavior.
Every money movement request uses authentication, idempotency, verification gates, country restrictions, and signed webhooks.
Quickstart
Use a sandbox key issued by BorderPay. Never place API keys in browser code, mobile apps, public repos, screenshots, or support tickets.
export BORDERPAY_API_KEY="bpk_test_..."
curl https://sandbox.api.borderpayafrica.com/v1/health \
-H "Authorization: Bearer $BORDERPAY_API_KEY" \
-H "x-borderpay-mode: sandbox"
const response = await fetch("https://sandbox.api.borderpayafrica.com/v1/health", {
headers: {
Authorization: `Bearer ${process.env.BORDERPAY_API_KEY}`,
"x-borderpay-mode": "sandbox",
},
});
console.log(await response.json());
Authentication
Every request is tenant-scoped. Mutating requests must include an idempotency key so retries cannot create duplicate customers, virtual accounts, transfers, or payouts.
| Header | Required | Description |
|---|---|---|
Authorization |
Yes | Bearer bpk_test_... or Bearer bpk_live_... |
x-borderpay-mode |
Recommended | Use sandbox or production. Mode mismatches are rejected. |
Idempotency-Key |
POST/PATCH | Unique key per business operation. Reuse only for safe retries of the same request. |
{"success":false,"error":{"code":"unauthorized","message":"API key bearer token is required"}}
This means the request reached the API without a bearer token. It is not a provider failure.
API Status
Use the health endpoint for API availability and mode checks. Provider route availability is returned by the route itself and may differ by tenant, country, currency, and environment.
Test keys, test webhooks, provider sandbox simulations, and non-live balance flows.
Live keys only after KYB/KYC, use-case review, route enablement, risk limits, and webhook verification.
API Reference
Readable reference for developers. Contract files are available in tools, but the primary docs are designed for humans.
/v1/healthCheck gateway readiness, API mode, tenant status, and rate-limit state.
/v1/customersCreate an individual or business customer before wallets, virtual accounts, transfers, or payouts.
/v1/onboarding-authorizationsIssue a signed, short-lived, single-use onboarding link for an end user allowed by your tenant policy.
/v1/walletsCreate stablecoin wallets for approved customers and supported chains.
/v1/virtual-accountsCreate USD, EUR, or GBP account details for eligible customers and route deposits to stablecoin wallets.
/v1/transfersMove USDC or USDT between tenant-owned wallets using the same currency.
/v1/payoutsPay an approved external account through ACH, wire, SEPA, or Faster Payments where enabled.
/v1/webhooksRegister webhook endpoints and receive signed event notifications.
Virtual Accounts
BorderPay virtual accounts support USD, EUR, and GBP account details for eligible customers. Fiat deposits into a virtual account are monitored, reviewed when required, and routed to the customer's stablecoin wallet.
curl https://api.borderpayafrica.com/v1/virtual-accounts \
-X POST \
-H "Authorization: Bearer $BORDERPAY_API_KEY" \
-H "Idempotency-Key: va_2026_07_15_001" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cus_...",
"currency": "EUR",
"destination": {
"payment_rail": "base",
"currency": "USDC",
"bridge_wallet_id": "wlt_..."
}
}'
Transfers & Payouts
Create a customer, create a wallet, collect funds through an eligible virtual account, then use transfers and payouts to convert stablecoins into the recipient rail where the route is enabled.
curl https://api.borderpayafrica.com/v1/payouts \
-X POST \
-H "Authorization: Bearer $BORDERPAY_API_KEY" \
-H "Idempotency-Key: payout_INV_2049" \
-H "Content-Type: application/json" \
-d '{
"source": {
"payment_rail": "bridge_wallet",
"currency": "USDC",
"amount": "2500.00",
"bridge_wallet_id": "wlt_..."
},
"destination": {
"payment_rail": "ach",
"currency": "USD",
"external_account_id": "ext_..."
},
"idempotency_key": "payout_INV_2049"
}'
African Corridors
BorderPay serves African businesses, but the current public payout API exposes approved external accounts only. Country classification elsewhere in BorderPay does not make a local rail available through API v1.
The destination must be an approved external account in one of these currencies.
The tenant and external account must be approved for the selected rail.
Local-bank and mobile-money payouts are not exposed by the current public API contract. Do not build against them until they appear in a later version.
API keys, tenant approval, an approved transfer cap, owned wallet resources, and an approved destination external account are all required. Availability remains fail-closed.
Compliance
Restrictions can apply to signup, onboarding, deposits, payouts, counterparties, or local rails. Production calls fail closed when a jurisdiction or route is not approved.
BorderPay API restrictions follow the current compliance source of truth. ISO alpha-3 country codes are used in this list.
Services are unavailable for individuals and businesses located in Algeria, Burundi, China, Japan, and Tunisia.
Additional restrictions can apply by tenant, customer, counterparty, country, amount, currency, external account, or payment rail. A listed country is not proof that a specific API operation is enabled.
Webhooks
Register signed webhooks before going live. Event types follow the owned resource lifecycle and the
data object contains only the projected partner-safe fields available for that event.
const payload = await request.text();
const signature = request.headers.get("x-borderpay-signature");
const timestamp = request.headers.get("x-borderpay-timestamp");
const result = await verifyBorderPayWebhook({
rawBody: payload,
signatureHeader: signature ?? "",
timestamp: timestamp ?? "",
signingSecret: process.env.BORDERPAY_WEBHOOK_SECRET,
});
Errors
The request body or route-specific fields failed validation.
The bearer API key is missing, invalid, or revoked.
The tenant, mode, scope, IP, policy, or release gate does not permit the operation.
The same idempotency key was reused with a different request payload.
Retry after the current response window resets.
The gateway could not complete the operation. Retain the request identifier for support.
SDKs & Tools
These are supporting artifacts, not the primary documentation experience.
White Label
An authorized white-label tenant can issue a short-lived, single-use signup link. On that signed signup screen, BorderPay renders the operator-approved app name, HTTPS logo, and primary color. Branding does not currently extend to the authenticated BorderPay application.
App name, HTTPS logo URL, and six-digit hexadecimal primary color are validated before signup renders them.
Use POST /v1/onboarding-authorizations with onboarding:write; the resulting bearer link is short-lived and single-use.
Partners cannot self-publish branding. Custom-domain routing and full-application theming are not currently available.
Go Live
These are partner-specific approval gates, not claims that your integration has already passed them.