Accounts and payout methods
Create and manage additional merchant accounts, and view or update where each one pays out — there is no separate "beneficiary" resource
Every merchant starts with one primary account. Payout-destination details — bank name, account number, account holder name, and so on — are not a separate "beneficiary" object anywhere in the API. They're simply fields on an Account's payoutMethod. If you're looking for a beneficiary resource to create or manage, this is it: manage the payoutMethod on an account instead.
You can also create additional accounts beyond the primary one, each with its own independent payoutMethod. This page covers creating and managing accounts and their payout methods; for the immutable balance ledger and holds, see Balance ledger and holds.
Primary vs. additional accounts
GET/PUT /v2/account/payoutMethod always operate on your primary account specifically. To manage an additional (non-primary) account's payout method — or any other field on any account — use GET/PUT /v2/account/:accountId with that account's accountId instead.
No delete operation
There is no endpoint to delete an account or a payout method. Once created, an account persists; you can edit its payoutMethod and other fields, but not remove the account itself.
Create an additional account
Creates a new, non-primary account for your merchant. There's no cap on the number of accounts you can create today — don't assume there's a limit when designing your integration.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account |
| LIVE-URL | https://api.kashier.io/v2/account |
| Method | POST |
Body parameters
| Key | Description |
|---|---|
| accountName | Name for the new account. |
| payoutMethod | Object describing the payout destination. No field inside it is required — you can create the account first and set its payout method later via Edit an account. |
| payoutMethod.method | Identifies the payout rail, e.g. a bank transfer vs. a mobile wallet. |
| payoutMethod.accountHolderName | Name on the payout destination. Accepts Arabic and Latin letters, digits, spaces, periods, hyphens, and apostrophes; max 70 characters. |
| payoutMethod.accountNumber | Bank account number or wallet number. |
| payoutMethod.bankName | Bank name. |
| payoutMethod.bankAbbreviation | Bank abbreviation/code. |
| payoutMethod.bankBranchName | Bank branch name. |
| payoutMethod.bankBranchCode | Bank branch code. |
curl --location 'https://test-api.kashier.io/v2/account' \
--header 'Authorization: YOUR_TEST_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
"accountName": "Second Store Account",
"payoutMethod": {
"method": "bank",
"accountHolderName": "Ahmed Hassan",
"accountNumber": "1234567890",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Downtown",
"bankBranchCode": "001"
}
}'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
{
"accountId": "ACC-46254-582-02",
"accountName": "Second Store Account",
"merchantId": "MID-46254-582",
"isPrimary": false,
"totalBalance": 0,
"availableBalance": 0,
"onHoldBalance": 0,
"payoutFees": 5,
"isIncludeInBulkTransfer": true,
"payoutMethod": {
"method": "bank",
"accountHolderName": "Ahmed Hassan",
"accountNumber": "1234567890",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Downtown",
"bankBranchCode": "001"
},
"createdAt": "2026-06-18T10:30:00.000Z",
"updatedAt": "2026-06-18T10:30:00.000Z"
}| Field | Description |
|---|---|
accountId | Unique identifier for the new account. |
accountName | The account's name. |
merchantId | The merchant the account belongs to. |
isPrimary | Always false for an account created through this endpoint. |
totalBalance / availableBalance / onHoldBalance | Running balances for the new account — all 0 until it starts receiving funds. |
payoutFees | Flat fee applied per payout for this account. |
isIncludeInBulkTransfer | Whether the account is eligible for the recurring payout run. |
payoutMethod | The payout destination you supplied, echoed back. |
createdAt / updatedAt | Timestamps. |
Get account info
Fetch your primary account — a GET request to /v2/account, with no account ID needed. To fetch a non-primary account, or to look up the primary account by its accountId, use Get an account below instead.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account |
| LIVE-URL | https://api.kashier.io/v2/account |
| Method | GET |
curl --location 'https://test-api.kashier.io/v2/account' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
Full parameter and response reference → Get account info.
Get an account
Fetch a single account by ID, including its payoutMethod.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/:accountId |
| LIVE-URL | https://api.kashier.io/v2/account/:accountId |
| Method | GET |
curl --location 'https://test-api.kashier.io/v2/account/:accountId' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
{
"accountId": "ACC-46254-582-02",
"accountName": "Second Store Account",
"merchantId": "MID-46254-582",
"isPrimary": false,
"totalBalance": 12500,
"availableBalance": 12000,
"onHoldBalance": 500,
"allowedNegativeBalance": 0,
"payoutFees": 5,
"isIncludeInBulkTransfer": true,
"payoutMethod": {
"method": "bank",
"accountHolderName": "Ahmed Hassan",
"accountNumber": "1234567890",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Downtown",
"bankBranchCode": "001"
},
"createdAt": "2026-06-18T10:30:00.000Z",
"updatedAt": "2026-06-20T09:15:00.000Z"
}Fields match the create response above, plus allowedNegativeBalance (how far the account may go negative before further deductions are blocked).
Edit an account
Update an account's name and/or payout method.
Requires OTP
This endpoint requires OTP verification. Call it without an x-otp header first to trigger the code, then retry the same request with x-otp set to the code you received.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/:accountId |
| LIVE-URL | https://api.kashier.io/v2/account/:accountId |
| Method | PUT |
Body parameters
| Key | Description |
|---|---|
| accountName | New name for the account. |
| payoutMethod | New payout method for the account — same shape as Create an additional account. Sending payoutMethod replaces it wholesale; it isn't merged field by field. |
curl --location --request PUT 'https://test-api.kashier.io/v2/account/:accountId' \
--header 'Authorization: YOUR_TEST_SECRET_KEY' \
--header 'Content-Type: application/json' \
--header 'x-otp: 123456' \
--data '{
"accountName": "Second Store Account (renamed)",
"payoutMethod": {
"accountHolderName": "Ahmed Hassan",
"accountNumber": "9876543210",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Maadi",
"bankBranchCode": "014"
}
}'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
| x-otp | The OTP code, once you've received one. Omit it on the first call to trigger generation. |
Response
Returns the updated account in the same shape as Get an account.
Get the primary account's payout method
Returns the payoutMethod for your primary account only.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/payoutMethod |
| LIVE-URL | https://api.kashier.io/v2/account/payoutMethod |
| Method | GET |
curl --location 'https://test-api.kashier.io/v2/account/payoutMethod' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
{
"method": "bank",
"accountHolderName": "Ahmed Hassan",
"accountNumber": "1234567890",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Downtown",
"bankBranchCode": "001"
}Update the primary account's payout method
Replaces the payoutMethod on your primary account. The request body is the payout method object — there's no wrapper.
Requires OTP
This endpoint requires OTP verification, the same way Edit an account does: call it without x-otp to trigger a code, then retry with x-otp set.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/payoutMethod |
| LIVE-URL | https://api.kashier.io/v2/account/payoutMethod |
| Method | PUT |
Body parameters
| Key | Description |
|---|---|
| method | Identifies the payout rail, e.g. a bank transfer vs. a mobile wallet. |
| accountHolderName | Name on the payout destination. Accepts Arabic and Latin letters, digits, spaces, periods, hyphens, and apostrophes; max 70 characters. |
| accountNumber | Bank account number or wallet number. |
| bankName | Bank name. |
| bankAbbreviation | Bank abbreviation/code. |
| bankBranchName | Bank branch name. |
| bankBranchCode | Bank branch code. |
No field is required — this is the same shared payout-method shape used across account creation and editing, and it's replaced wholesale on every update, so send the full object.
curl --location --request PUT 'https://test-api.kashier.io/v2/account/payoutMethod' \
--header 'Authorization: YOUR_TEST_SECRET_KEY' \
--header 'Content-Type: application/json' \
--header 'x-otp: 123456' \
--data '{
"method": "bank",
"accountHolderName": "Ahmed Hassan",
"accountNumber": "1234567890",
"bankName": "National Bank of Egypt",
"bankAbbreviation": "NBE",
"bankBranchName": "Downtown",
"bankBranchCode": "001"
}'No playground panel for this call
This endpoint replaces your primary account's payout method wholesale, and Kashier's internal sources currently disagree on the exact field names it expects. Rather than offer a Send button that could overwrite a working payout destination with a half-right body, this page documents the call only. Build the request from the cURL above and confirm the field names against a GET /v2/account/payoutMethod response for your own account first.
Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
| x-otp | The OTP code, once you've received one. Omit it on the first call to trigger generation. |
Response
Returns the updated payoutMethod in the same shape as Get the primary account's payout method.
Get account records
Returns a paginated feed of account-level activity for a given account — broader than the balance ledger (see Balance ledger and holds), since it isn't limited to balance-affecting events.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/:accountId/records |
| LIVE-URL | https://api.kashier.io/v2/account/:accountId/records |
| Method | GET |
Query parameters
| Key | Description |
|---|---|
| page | Page number for pagination. Example: 1 |
| limit | Records per page. Example: 10 |
curl --location 'https://test-api.kashier.io/v2/account/:accountId/records?page=1&limit=10' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
{
"data": [
{ "...": "one entry per account-level activity item" }
],
"total": 12,
"page": 1,
"limit": 10
}data is paginated the same way as the balance ledger (total/page/limit). The shape of an individual entry depends on the kind of activity it represents; use the "Try it" panel above against a test account to inspect a live response.
Export account records
The same account activity feed as a file download.
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/:accountId/records/export |
| LIVE-URL | https://api.kashier.io/v2/account/:accountId/records/export |
| Method | GET |
curl --location 'https://test-api.kashier.io/v2/account/:accountId/records/export' \
--header 'Authorization: YOUR_TEST_SECRET_KEY' \
--output account-records.xlsxHeaders
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Account overview
Returns an overview for a single account. Merchant-only (not callable by agents).
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/overview/:accountId |
| LIVE-URL | https://api.kashier.io/v2/account/overview/:accountId |
| Method | GET |
curl --location 'https://test-api.kashier.io/v2/account/overview/:accountId' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
Returns a 200 with a JSON object summarizing the given account. The exact field set isn't
confirmed here — use the "Try it" panel above against a test account to inspect a live response.
List accounts overview
Returns an overview covering all of your accounts at once — useful for a dashboard-style summary instead of fetching each account individually. Merchant-only (not callable by agents).
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/overview/accounts-list |
| LIVE-URL | https://api.kashier.io/v2/account/overview/accounts-list |
| Method | GET |
Query parameters
| Key | Description |
|---|---|
| page | Page number for pagination. Example: 1 |
| limit | Accounts per page. Example: 10 |
curl --location 'https://test-api.kashier.io/v2/account/overview/accounts-list?page=1&limit=10' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
Returns a 200 with a paginated JSON object — page/limit mirror the query parameters above,
the same pagination envelope used elsewhere in this API. The exact per-account field set isn't
confirmed here — use the "Try it" panel above against a test account to inspect a live response.
Payments overview
Returns a payments summary for a given account over a date range. Merchant-only (not callable by agents).
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/overview/payments/:accountId |
| LIVE-URL | https://api.kashier.io/v2/account/overview/payments/:accountId |
| Method | GET |
Query parameters
| Key | Description |
|---|---|
| dateFrom | Start of the summary window, as YYYY-MM-DD. |
| dateTo | End of the summary window, as YYYY-MM-DD. |
| page | Page number for pagination. Example: 1 |
| limit | Items per page. Example: 20 |
The window below is deliberately wide so it covers whatever history your account already has — narrow it to the range you actually want to summarize.
curl --location 'https://test-api.kashier.io/v2/account/overview/payments/:accountId?dateFrom=2020-01-01&dateTo=2030-12-31' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
Returns a 200 with a JSON object summarizing payments on the account over the requested date
range. The exact field set isn't confirmed here — use the "Try it" panel above against a test
account to inspect a live response.
Payouts overview
Returns a payouts summary for a given account over a date range. Merchant-only (not callable by agents).
| Endpoint | Value |
|---|---|
| TEST-URL | https://test-api.kashier.io/v2/account/overview/payouts/:accountId |
| LIVE-URL | https://api.kashier.io/v2/account/overview/payouts/:accountId |
| Method | GET |
Query parameters
| Key | Description |
|---|---|
| dateFrom | Start of the summary window, as YYYY-MM-DD. |
| dateTo | End of the summary window, as YYYY-MM-DD. |
| page | Page number for pagination. Example: 1 |
| limit | Items per page. Example: 20 |
As with the payments overview, the window below is deliberately wide — narrow it to the range you actually want.
curl --location 'https://test-api.kashier.io/v2/account/overview/payouts/:accountId?dateFrom=2020-01-01&dateTo=2030-12-31' \
--header 'Authorization: YOUR_TEST_SECRET_KEY'Headers
| Key | Description |
|---|---|
| Authorization | The Authorization is a secret key that is used to identify the merchant. You can obtain it from Kashier's dashboard. Learn more about Authorization. |
Response
Returns a 200 with a JSON object summarizing payouts on the account over the requested date
range. The exact field set isn't confirmed here — use the "Try it" panel above against a test
account to inspect a live response.