KashierDevelopersKashier Developers
Accounts and balance

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.

Body parameters

KeyDescription
accountNameName for the new account.
payoutMethodObject 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.methodIdentifies the payout rail, e.g. a bank transfer vs. a mobile wallet.
payoutMethod.accountHolderNameName on the payout destination. Accepts Arabic and Latin letters, digits, spaces, periods, hyphens, and apostrophes; max 70 characters.
payoutMethod.accountNumberBank account number or wallet number.
payoutMethod.bankNameBank name.
payoutMethod.bankAbbreviationBank abbreviation/code.
payoutMethod.bankBranchNameBank branch name.
payoutMethod.bankBranchCodeBank 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

KeyDescription
AuthorizationThe 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"
}
FieldDescription
accountIdUnique identifier for the new account.
accountNameThe account's name.
merchantIdThe merchant the account belongs to.
isPrimaryAlways false for an account created through this endpoint.
totalBalance / availableBalance / onHoldBalanceRunning balances for the new account — all 0 until it starts receiving funds.
payoutFeesFlat fee applied per payout for this account.
isIncludeInBulkTransferWhether the account is eligible for the recurring payout run.
payoutMethodThe payout destination you supplied, echoed back.
createdAt / updatedAtTimestamps.

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.

curl --location 'https://test-api.kashier.io/v2/account' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe 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.

curl --location 'https://test-api.kashier.io/v2/account/:accountId' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe 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.

Body parameters

KeyDescription
accountNameNew name for the account.
payoutMethodNew 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

KeyDescription
AuthorizationThe 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-otpThe 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.

curl --location 'https://test-api.kashier.io/v2/account/payoutMethod' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe 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.

Body parameters

KeyDescription
methodIdentifies the payout rail, e.g. a bank transfer vs. a mobile wallet.
accountHolderNameName on the payout destination. Accepts Arabic and Latin letters, digits, spaces, periods, hyphens, and apostrophes; max 70 characters.
accountNumberBank account number or wallet number.
bankNameBank name.
bankAbbreviationBank abbreviation/code.
bankBranchNameBank branch name.
bankBranchCodeBank 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

KeyDescription
AuthorizationThe 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-otpThe 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.

Query parameters

KeyDescription
pagePage number for pagination. Example: 1
limitRecords 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

KeyDescription
AuthorizationThe 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.

curl --location 'https://test-api.kashier.io/v2/account/:accountId/records/export' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY' \
  --output account-records.xlsx

Headers

KeyDescription
AuthorizationThe 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).

curl --location 'https://test-api.kashier.io/v2/account/overview/:accountId' \
  --header 'Authorization: YOUR_TEST_SECRET_KEY'

Headers

KeyDescription
AuthorizationThe 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).

Query parameters

KeyDescription
pagePage number for pagination. Example: 1
limitAccounts 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

KeyDescription
AuthorizationThe 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).

Query parameters

KeyDescription
dateFromStart of the summary window, as YYYY-MM-DD.
dateToEnd of the summary window, as YYYY-MM-DD.
pagePage number for pagination. Example: 1
limitItems 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

KeyDescription
AuthorizationThe 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).

Query parameters

KeyDescription
dateFromStart of the summary window, as YYYY-MM-DD.
dateToEnd of the summary window, as YYYY-MM-DD.
pagePage number for pagination. Example: 1
limitItems 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

KeyDescription
AuthorizationThe 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.

On this page