# Balance Transaction (/ar/api-reference/objects/balance-transaction)

A Balance Transaction records every movement of money in or out of your xpay balance: successful charges, refunds, payouts, processing fees, and adjustments. Each Balance Transaction links back to its `source` (the Charge, Refund, or Payout that produced it) and breaks down `gross`, `fee`, and `net` amounts. Use Balance Transactions to reconcile what was paid into your account against what was settled to your bank.

## Fields

- `id` (string, required) — Balance transaction ID
- `object` (string, required) — Object type
- `amount` (number, required) — Gross amount (positive for money in, negative for money out) in smallest currency unit
- `availableOn` (string | null) — Timestamp when funds become available in balance (ISO 8601)
- `createdAt` (string, required) — Created timestamp (ISO 8601)
- `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Currency
- `description` (string | null) — Human-readable description
- `fee` (number, required) — Total fees in smallest currency unit
- `net` (number, required) — Net amount after fees in smallest currency unit
- `feeDetails` (Array<BalanceTransactionFeeDetail>, required) — Breakdown of the `fee`. Platform COGS entries (PROCESSOR_COST) are stripped before emission — merchants only see the fees they care about.
  - `amount` (number, required)
  - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required)
  - `description` (string, required)
  - `type` (string, required) — Fee type. PROCESSOR_COST entries are internal (platform COGS) and are filtered out of merchant-facing payloads.
  - `application` (string | null, required)
- `status` (enum("AVAILABLE" | "PENDING"), required) — Transaction status
- `type` (enum("CHARGE" | "PAYMENT" | "PAYMENT_FAILURE_REFUND" | "PAYMENT_REFUND" | "PAYMENT_REVERSAL" | "REFUND" | "REFUND_FAILURE" | "ADJUSTMENT" | "ADVANCE" | "ADVANCE_FUNDING" | "PAYOUT" | "PAYOUT_CANCEL" | "PAYOUT_FAILURE" | "PAYOUT_MINIMUM_BALANCE_HOLD" | "PAYOUT_MINIMUM_BALANCE_RELEASE" | "RESERVED_FUNDS" | "RESERVE_HOLD" | "RESERVE_RELEASE" | "RECOVERY_FROM_FUTURE_FUNDS" | "XPAY_FEE" | "XPAY_FX_FEE" | "TAX_FEE" | "TOPUP" | "TOPUP_REVERSAL"), required) — Transaction type
- `reportingCategory` (string, required) — Reporting category for accounting/analytics. Falls back to `type` when the entity has no explicit override.
- `exchangeRate` (number | null) — Exchange rate when currency conversion occurred
- `source` (string, required) — Source resource id (charge, refund, payout, topup, dispute). Scalar id only — merchants query the source explicitly.
- `payoutBatch` (BalanceTransactionPayoutBatch, required) — The PayoutBatch this balance transaction was included in, or null until it's batched.
  - `id` (string, required) — PayoutBatch ID
  - `object` (string, required)
  - `amount` (number, required) — Total disbursement amount (batch total)
  - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required)
  - `status` (enum("open" | "processing" | "in_transit" | "paid" | "partial_failed" | "failed" | "canceled"), required) — Batch lifecycle status. Merchant-facing status equals the batch status (not the individual payout status).
  - `arrivalDate` (string | null) — Expected / actual arrival date (ISO date, merchant business calendar). Null while batch is still OPEN / PROCESSING.
  - `createdAt` (string, required) — Batch created timestamp (ISO 8601)
  - `updatedAt` (string, required) — Batch last-updated timestamp (ISO 8601)
- `paymentIntentId` (string | null) — Associated payment intent ID (if applicable)
- `merchantId` (string, required) — Merchant ID owning this balance transaction