# Charge (/ar/api-reference/objects/charge)

A Charge represents a single attempt to move money from a customer's payment method to your account. It records what was paid, by whom, through which processor, and the final outcome: `succeeded`, `failed`, or `refunded`. A single PaymentIntent may produce multiple Charges if earlier attempts fail; only the most recent successful Charge actually moves funds, and any subsequent Refunds reference it directly.

## Fields

- `id` (string, required)
- `object` (string, required)
- `amount` (number, required)
- `amountCaptured` (number, required)
- `amountRefunded` (number, required)
- `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required)
- `createdAt` (string, required) — Created timestamp (ISO 8601)
- `status` (string, required)
- `paid` (boolean, required)
- `refunded` (boolean, required)
- `captured` (boolean, required)
- `capturedAt` (string, required) — Captured timestamp (ISO 8601)
- `failureCode` (string, required)
- `failureMessage` (string, required)
- `receiptUrl` (string, required)
- `receiptEmail` (string, required)
- `billingDetails` (BillingDetails, required)
  - `address` (Address, required)
    - `city` (string, required)
    - `country` (string, required)
    - `line1` (string, required)
    - `line2` (string, required)
    - `postalCode` (string, required)
    - `state` (string, required)
  - `email` (string, required)
  - `name` (string, required)
  - `phone` (string, required)
- `paymentMethodDetails` (PaymentMethodDetails, required)
  - `type` (string, required) — Concrete PaymentMethodType value: 'card', 'valu', etc.
  - `card` (ChargeCardDetails)
    - `brand` (string, required)
    - `country` (string, required)
    - `expMonth` (number, required)
    - `expYear` (number, required)
    - `funding` (string, required)
    - `last4` (string, required)
    - `network` (string | null, required) — Payment rails the transaction rode (e.g. mastercard for a Meeza card). Null until the charge is processed by the gateway.
    - `fingerprint` (string, required) — Card fingerprint for identifying the same card across customers
    - `threeDSecure` (ThreeDSecure, required)
    - `wallet` (Wallet, required)
  - `valu` (ValuDetails) — ValU details (if type is 'valu')
    - `loanNumber` (string | null) — Loan number from the provider
    - `tenure` (number | null) — Loan tenure in months
    - `emi` (string | null) — Monthly installment amount
    - `downPayment` (string | null) — Down payment amount
    - `financedAmount` (string | null) — Total financed amount
    - `firstEmiDueDate` (string | null) — First EMI due date
    - `lastInstallmentDate` (string | null) — Last installment date
- `outcome` (Outcome, required)
  - `networkStatus` (string, required)
  - `reason` (string, required)
  - `riskLevel` (string, required)
  - `riskScore` (number, required)
  - `sellerMessage` (string, required)
  - `type` (string, required)
- `balanceTransaction` ([Balance Transaction](/ar/api-reference/objects/balance-transaction), required)
- `presentmentDetails` (PresentmentDetails) — Present when customer paid in a different currency than settlement (EGP)
  - `amount` (number, required) — Amount in the customer's currency (smallest unit — e.g. fils for KWD, cents for USD)
  - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Customer's currency code (ISO 4217)
  - `exchangeRate` (number, required) — Locked exchange rate: presentment_major × rate = processing_major. Reused for refunds/disputes. Stored as numeric(15,6) — frontend can call `.toFixed(6)` to render the full 6-decimal string when needed.
  - `exchangeRateId` (string, required) — Reference to the immutable ExchangeRate record used — audit trail for FX reconciliation
- `refunds` (Array<[Refund](/ar/api-reference/objects/refund)>, required) — Refunds issued against this charge, ordered newest-first.
- `paymentIntentId` (string, required)
- `paymentMethodId` (string, required)
- `calculatedStatementDescriptor` (string, required)
- `disputed` (boolean, required)
- `externalChargeId` (string, required)
- `config` (ChargeConfig, required)
  - `vatCollectionEnabled` (boolean, required)
  - `vatCollectionRate` (number, required)
  - `collectedVatAmount` (number, required)
  - `platformFeePassThrough` (boolean, required)
  - `merchantFeeDeduction` (number, required)
- `geocoding` (ChargeGeocoding)
  - `ipAddress` (string, required) — The IP address that was resolved
  - `location` (ChargeGeocodingLocation)
    - `countryCode` (string) — ISO 3166-1 alpha-2 country code
    - `countryName` (string) — English country name
    - `regionCode` (string) — ISO 3166-2 region code
    - `regionName` (string) — English region/state name
    - `cityName` (string) — English city name
- `session` (ChargeSession)
  - `browser` (string)
  - `browserVersion` (string)
  - `platform` (string)
  - `device` (string)
  - `deviceVendor` (string)
  - `deviceModel` (string)
- `merchantOrigin` (string | null) — Origin of the page where this checkout ran — the merchant's site for embedded integrations (SDK Elements / drop-in), or our hosted checkout domain for hosted checkout and payment links. Null for merchant-initiated charges (recurring / MOTO).
- `merchantDomain` (string | null) — Registrable domain (eTLD+1) derived from merchantOrigin.
- `processorCapabilities` (ProcessorCapabilities)
  - `supportsRefund` (boolean, required) — Whether this processor supports refunds
  - `supportsPartialRefund` (boolean, required) — Whether partial refunds are supported
- `activeHoldId` (string | null) — ID of the currently-active risk hold on this charge, if any
- `settlementModel` (enum("aggregated" | "direct"), required) — Settlement model snapshotted at charge time