Prerequisites
API key from Dashboard
Get your API key from the Cadana Dashboard. See Authentication for details.
Platform integration
You must be set up as a platform partner managing multiple businesses. See Platform Overview.
Platform Disbursements
Fetch all transactions across every business on your platform. Results are filtered by date range and paginated automatically.Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | No | Start of date range (ISO 8601, e.g. 2026-01-01). Defaults to 7 days ago. |
endDate | string | No | End of date range (ISO 8601, e.g. 2026-02-01). Defaults to now. |
type | string | No | Comma-separated transaction types to include (see Transaction Types). |
status | string | No | Filter by status: SUCCESS, FAILED, INITIATED, PROCESSING, ROUTED. |
Response Structure
Transaction Object Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique transaction identifier |
tenantKey | string | Identifies which business this transaction belongs to. Use this to group transactions per business. |
status | string | Transaction status: SUCCESS, FAILED, INITIATED, PROCESSING, ROUTED |
referenceId | string | External reference. Payroll transactions from the same run share the same referenceId. |
description | string | Human-readable description (e.g. “January 2026 Payment Dundies”) |
type | string | Transaction type (see Transaction Types) |
fxRate | number | FX rate applied. Present only for cross-currency transactions. |
paymentMethod | string | Delivery method: bank, momo, wallet, ach, card, proxy |
paymentDetails | object | Full payment method details (bank account, mobile money, wallet, ACH, card info) |
personId | string | Employee or contractor ID. Present only on payroll transactions. |
userId | string | Wallet/user account ID. Present on wallet-based transactions. For payroll, only present when payment is delivered to a wallet. |
userName | string | Recipient name |
amount | object | Amount the recipient receives, in the destination currency |
sourceAmount | object | Cost in the source currency, before fees |
feeAmount | object | Fees charged, in the source currency |
totalAmount | object | Total debited from sender: sourceAmount + feeAmount |
fxRevenueShare | object | Revenue earned from FX spread (see Revenue Share) |
feeRevenueShare | object | Revenue earned from fees (see Revenue Share) |
totalRevenueShare | object | Combined total revenue share |
createdTimestamp | string | When the transaction was created |
lastUpdatedTimestamp | string | When the transaction was last updated |
Transaction Types
| Type | Description |
|---|---|
PAYROLL | Payment from a business to an employee or contractor as part of a payroll run |
PAYOUT | Outbound transfer from a user’s wallet to an external bank, mobile money, card, or other destination |
PAYROLL_FEE | Processing fee for a payroll run (see Payroll Fee & Invoice Details) |
CARD_MAINTENANCE_FEE | Recurring maintenance fee for a virtual card |
CARD_CREATION_FEE | One-time fee for creating a virtual card |
STOCK_BUY | Stock purchase transaction |
STOCK_SELL | Stock sale transaction |
INTEREST | Interest earned or charged |
Identifying Businesses with tenantKey
Every transaction includes atenantKey that identifies which business it belongs to. Group by tenantKey to produce per-business reconciliation reports.
Payroll Transactions
Payroll transactions (type: "PAYROLL") represent individual payments to employees or contractors. Key identifiers:
personId— the employee or contractor being paid. Always present on payroll transactions and is the primary identifier for reconciliation.userId— only present when payment is delivered to a wallet. Not present for external payments (bank, mobile money, etc.).referenceId— shared across all payments in the same payroll run, so you can group them.description— contains the name of the payroll run (e.g. “January 2026 Payment Dundies”).
userId is absent here because the payment was delivered to an external bank account, not a wallet.userId is present because the payment went to the employee’s wallet. Same-currency payroll has no fxRate or FX revenue share, and may not have fee fields since fees are captured in the payroll fee transaction instead.
Wallet Transactions
Transactions of typePAYOUT, CARD_MAINTENANCE_FEE, CARD_CREATION_FEE, STOCK_BUY, STOCK_SELL, and INTEREST are wallet-level operations. They are associated with a user via the userId field.
These transactions may include revenue share fields depending on your platform agreement.
Understanding Amounts
Each transaction has four amount fields that tell you the full financial picture:| Field | Description |
|---|---|
amount | What the recipient receives, in the destination currency |
sourceAmount | Cost in the sender’s currency, before fees |
feeAmount | Fees charged, in the sender’s currency |
totalAmount | Total debited from sender: sourceAmount + feeAmount |
Cross-Currency Example
When a user sends USD and the recipient receives BRL:Same-Currency Example
When both sides are in the same currency, no FX conversion applies:Revenue Share
If your platform has a revenue share agreement with Cadana, eligible transactions include revenue share fields showing your earnings. These fields are only present when applicable — they are omitted when no revenue share applies.| Field | Description |
|---|---|
fxRevenueShare | Revenue earned from the FX spread. Contains amount (value + currency) and rate (share percentage). |
feeRevenueShare | Revenue earned from transaction fees. Contains amount (value + currency). |
totalRevenueShare | Combined total of FX and fee revenue share. Contains value and currency. |
Payroll Fee & Invoice Details
When a business runs payroll, a separatePAYROLL_FEE transaction appears representing the processing fee for the entire run. To see the detailed breakdown of how the fee was calculated (per-employee line items), you need the invoice ID.
Getting the Invoice ID
After a payroll completes, the payroll response includes aninvoiceId field. Fetch the payroll by its ID (you can find this via the referenceId on any PAYROLL transaction from the disbursements response):
The response includes the invoiceId once the payroll is in completed status. Then use that ID to fetch the full invoice:
The invoice provides a full breakdown of charges associated with a payroll run, including per-employee costs, FX markups, and fees.
To download the invoice as a PDF:
Response:
The
fileUrl is short-lived. Fetch a new URL each time you need to download the PDF.Pagination
Results are paginated. Thecursor object tells you whether more pages are available:
cursor.next— pass as thecursorquery parameter to fetch the next pagecursor.previous— pass to go back to the previous pagenull— no more pages in that direction
bash
Reconciliation Walkthrough
Step 1: Fetch all successful transactions for the period
Paginate through all results using thecursor.next value until it returns null.
Step 2: Group by business
Group transactions bytenantKey to build per-business ledgers:
| tenantKey | Transaction Count | Total Debited |
|---|---|---|
tbl28153208 | 15 | $627.47 USD |
tbl89195039 | 2 | $385.00 USD |
tbl12101631 | 2 | $3,000.00 USD |
cad35916961 | 6 | $103.55 USD |
Step 3: For payroll, identify employees by personId
Filter fortype: "PAYROLL" and group by personId to see how much each employee was paid:
| personId | Employee Name | Total Paid (destination) | tenantKey |
|---|---|---|---|
0a938505-... | Elizabeth Wilson | 151.39 GHS | tbl89195039 |
00b39f7a-... | Dwight Schrute | 5,677.18 GHS | tbl89195039 |
8ab2ba37-... | Reed Maygone | 1,000.00 USD | tbl12101631 |
ca49c55b-... | Mahatra Ghandi | 2,000.00 USD | tbl12101631 |
Step 4: Calculate revenue share
SumtotalRevenueShare across all transactions for your platform’s total earnings. Break down further with fxRevenueShare and feeRevenueShare.
Step 5: Get payroll fee details
For anyPAYROLL_FEE transactions, use the Get Invoice endpoint to retrieve the detailed breakdown, including per-employee line items.