---
title: "Internal account status webhook"
method: POST
path: "internal-account-status"
tags: ["Webhooks"]
---

# Internal account status webhook

`POST internal-account-status` (webhook)

Webhook that is called when the status of an internal account changes. This includes balance updates and may include additional account events in the future.
This endpoint should be implemented by clients of the Grid API.

### Authentication
The webhook includes a signature in the `X-Grid-Signature` header that allows you to verify that the webhook was sent by Grid.
To verify the signature:
1. Get the Grid public key provided to you during integration
2. Decode the base64 signature from the header
3. Create a SHA-256 hash of the request body
4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

### Event types
- `INTERNAL_ACCOUNT.BALANCE_UPDATED` — Fired when the balance of an internal account changes. The `data` payload contains the full internal account object.
- `INTERNAL_ACCOUNT.STATUS_UPDATED` — Fired when the status of an internal account changes (e.g., `OPEN` → `FROZEN`). The `data` payload contains the full internal account object.

## Payload

- InternalAccountStatusWebhook
  - `id` string, required — Unique identifier for this webhook delivery (can be used for idempotency)
  - `type` 'INTERNAL_ACCOUNT.BALANCE_UPDATED' | 'INTERNAL_ACCOUNT.STATUS_UPDATED', required — Type of webhook event in OBJECT.EVENT dot-notation. The part before the dot identifies the resource, the part after identifies the event. This lets consumers route purely on type without inspecting data.status.
  - `timestamp` string, date-time, required — ISO 8601 timestamp of when the webhook was sent
  - `data` InternalAccount, required
    - `id` string, required — The ID of the internal account
    - `customerId` string — The ID of the customer associated with the internal account. If this field is empty, the internal account belongs to the platform.
    - `type` 'INTERNAL_FIAT' | 'INTERNAL_CRYPTO' | 'EMBEDDED_WALLET', required — Classification of an internal account. - `INTERNAL_FIAT`: A Grid-managed fiat holding account (for example, the USD holding account used as the source for Payouts flows). - `INTERNAL_CRYPTO`: A Grid-managed crypto holding account denominated in a stablecoin such as USDC. - `EMBEDDED_WALLET`: A self-custodial Embedded Wallet provisioned for the customer. Outbound transfers require a session signature produced by the customer's device — see the Embedded Wallets guide.
    - `status` 'PENDING' | 'ACTIVE' | 'CLOSED' | 'FROZEN', required — Status of a Grid internal account. The status determines whether the account can send or receive payments. - `PENDING`: The account is under review and is being provisioned. The account cannot send or receive payments until provisioning completes. - `ACTIVE`: The account is ready to send and receive payments. - `CLOSED`: The account cannot send or receive payments. A customer can initiate the closing of an internal account, after which the account transitions to this status. - `FROZEN`: The account cannot send or receive payments. Grid may freeze an account in response to compliance or fraud signals; payments are blocked while the account remains frozen.
    - `balance` CurrencyAmount, required
      - `amount` integer, required — Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)
      - `currency` Currency, required
        - `code` string — Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. "BTC" for Bitcoin, "USDC" for USDC, etc.)
        - `name` string — Full name of the currency
        - `symbol` string — Symbol of the currency
        - `decimals` integer — Number of decimal places for the currency
    - `fundingPaymentInstructions` PaymentInstructions[], required — Payment instructions for funding the account
      - `instructionsNotes` string — Additional human-readable instructions for making the payment
      - `isPlatformAccount` boolean — Indicates whether the account is a platform account or a customer account.
      - `accountOrWalletInfo` union, required
        - PaymentUsdAccountInfo
          - `accountType` 'USD_ACCOUNT', required
          - `accountNumber` string, required — The account number of the bank
          - `routingNumber` string, required — The ABA routing number
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentBrlAccountInfo
          - `accountType` 'BRL_ACCOUNT'
          - `qrCode` string, required — A PIX QR code payload that can be used to fund the transaction. This can be rendered as a QR code image or pasted into a PIX-compatible banking app.
        - PaymentMxnAccountInfo
          - `accountType` 'MXN_ACCOUNT', required
          - `clabeNumber` string, required — The CLABE number of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentDkkAccountInfo
          - `accountType` 'DKK_ACCOUNT', required
          - `iban` string, required — Danish IBAN (18 characters, starting with DK)
          - `swiftCode` string — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentEurAccountInfo
          - `accountType` 'EUR_ACCOUNT', required
          - `iban` string, required — The IBAN of the bank account
          - `swiftCode` string — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentInrAccountInfo
          - `accountType` 'INR_ACCOUNT', required
          - `vpa` string, required — The UPI Virtual Payment Address
          - `paymentRails` string[], required
        - PaymentNgnAccountInfo
          - `accountType` 'NGN_ACCOUNT', required
          - `accountNumber` string, required — Nigerian bank account number
          - `bankName` string, required — The name of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentCadAccountInfo
          - `accountType` 'CAD_ACCOUNT', required
          - `bankCode` string, required — Canadian financial institution number (3 digits)
          - `branchCode` string, required — Transit number identifying the branch (5 digits)
          - `accountNumber` string, required — Bank account number (7-12 digits)
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentGbpAccountInfo
          - `accountType` 'GBP_ACCOUNT', required
          - `sortCode` string, required — The UK sort code
          - `accountNumber` string, required — UK bank account number (8 digits)
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentHkdAccountInfo
          - `accountType` 'HKD_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — Hong Kong bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentIdrAccountInfo
          - `accountType` 'IDR_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — Indonesian bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `phoneNumber` string, required — Indonesian phone number for e-wallet payments
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentMyrAccountInfo
          - `accountType` 'MYR_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — Malaysian bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentPhpAccountInfo
          - `accountType` 'PHP_ACCOUNT', required
          - `bankName` string, required — Name of the beneficiary's bank
          - `accountNumber` string, required — Bank account number
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentSgdAccountInfo
          - `accountType` 'SGD_ACCOUNT', required
          - `bankName` string, required — Name of the beneficiary's bank
          - `accountNumber` string, required — Bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentThbAccountInfo
          - `accountType` 'THB_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — Thai bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentVndAccountInfo
          - `accountType` 'VND_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — Vietnamese bank account number
          - `swiftCode` string, required — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentAedAccountInfo
          - `accountType` 'AED_ACCOUNT', required
          - `iban` string, required — UAE IBAN (23 characters, starting with AE)
          - `swiftCode` string — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentKesAccountInfo
          - `accountType` 'KES_ACCOUNT', required
          - `phoneNumber` string, required — Kenyan mobile money phone number
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentMwkAccountInfo
          - `accountType` 'MWK_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentRwfAccountInfo
          - `accountType` 'RWF_ACCOUNT', required
          - `phoneNumber` string, required — Rwandan mobile money phone number
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentTzsAccountInfo
          - `accountType` 'TZS_ACCOUNT', required
          - `phoneNumber` string, required — Tanzanian mobile money phone number
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentUgxAccountInfo
          - `accountType` 'UGX_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentXofAccountInfo
          - `accountType` 'XOF_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `provider` string, required — The mobile money provider name
          - `region` 'BJ' | 'CI' | 'SN' | 'TG', required — Country code within the West African CFA franc zone
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentZarAccountInfo
          - `accountType` 'ZAR_ACCOUNT', required
          - `accountNumber` string, required — South African bank account number
          - `bankName` string, required — The name of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentZmwAccountInfo
          - `accountType` 'ZMW_ACCOUNT', required
          - `phoneNumber` string, required — Zambian mobile money phone number
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentBwpAccountInfo
          - `accountType` 'BWP_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `provider` string, required — The mobile money provider name
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentXafAccountInfo
          - `accountType` 'XAF_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `provider` string, required — The mobile money provider name
          - `region` 'CM' | 'CG', required — Country code within the Central African CFA franc zone
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentBdtAccountInfo — Required fields depend on the selected paymentRails: - BANK_TRANSFER: accountNumber - MOBILE_MONEY: phoneNumber
          - `accountType` 'BDT_ACCOUNT', required
          - `accountNumber` string — The account number of the bank
          - `branchCode` string — The branch code
          - `swiftCode` string — The SWIFT/BIC code of the bank
          - `phoneNumber` string — The phone number in international format
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentArsAccountInfo
          - `accountType` 'ARS_ACCOUNT', required
          - `accountNumber` string, required — The static CVU (Clave Virtual Uniforme) bank account number to pay to.
        - PaymentCopAccountInfo
          - `accountType` 'COP_ACCOUNT'
          - `paymentUrl` string, uri, required — A payment URL where the customer can complete their COP deposit.
        - PaymentEgpAccountInfo
          - `accountType` 'EGP_ACCOUNT', required
          - `bankName` string, required — The name of the bank
          - `accountNumber` string, required — The account number of the bank
          - `iban` string — Egyptian IBAN (29 characters, starting with EG)
          - `swiftCode` string — The SWIFT/BIC code of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentGhsAccountInfo — Required fields depend on the selected paymentRails: - BANK_TRANSFER: accountNumber - MOBILE_MONEY: phoneNumber
          - `accountType` 'GHS_ACCOUNT', required
          - `accountNumber` string — The account number of the bank
          - `phoneNumber` string — The phone number in international format
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentGtqAccountInfo
          - `accountType` 'GTQ_ACCOUNT', required
          - `accountNumber` string, required — The account number of the bank
          - `bankAccountType` 'CHECKING' | 'SAVINGS', required — The bank account type
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentHtgAccountInfo
          - `accountType` 'HTG_ACCOUNT', required
          - `phoneNumber` string, required — The phone number in international format
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentJmdAccountInfo
          - `accountType` 'JMD_ACCOUNT', required
          - `accountNumber` string, required — The account number of the bank
          - `branchCode` string, required — The branch code
          - `bankAccountType` 'CHECKING' | 'SAVINGS', required — The bank account type
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentPkrAccountInfo — Required fields depend on the selected paymentRails: - BANK_TRANSFER: accountNumber - MOBILE_MONEY: bankName, phoneNumber
          - `accountType` 'PKR_ACCOUNT', required
          - `accountNumber` string — The account number of the bank
          - `iban` string — Pakistani IBAN (24 characters, starting with PK)
          - `phoneNumber` string — The phone number in international format
          - `bankName` string — The name of the bank
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentSlvAccountInfo — Required fields depend on the selected paymentRails: - BANK_TRANSFER: bankAccountType, accountNumber - MOBILE_MONEY: phoneNumber
          - `accountType` 'SLV_ACCOUNT', required
          - `bankName` string — The name of the bank (BANK_TRANSFER only)
          - `accountNumber` string — The account number of the bank (BANK_TRANSFER only)
          - `bankAccountType` 'CHECKING' | 'SAVINGS' — The bank account type (BANK_TRANSFER only)
          - `phoneNumber` string — The phone number in international format (MOBILE_MONEY only — e.g. Tigo Money)
          - `paymentRails` string[], required
          - `reference` string, required — Unique reference code that must be included with the payment to properly credit it
        - PaymentSparkWalletInfo
          - `accountType` 'SPARK_WALLET', required
          - `address` string, required — Spark wallet address
          - `assetType` 'BTC' | 'USDB', required — Type of asset
          - `invoice` string — Invoice for the payment
        - PaymentLightningInvoiceInfo
          - `accountType` 'LIGHTNING'
          - `invoice` string, required — Invoice for the payment
        - PaymentSolanaWalletInfo
          - `accountType` 'SOLANA_WALLET', required
          - `address` string, required — Solana wallet address
          - `assetType` 'USDC' | 'USDT' — Type of asset
        - PaymentTronWalletInfo
          - `accountType` 'TRON_WALLET', required
          - `address` string, required — Tron wallet address
          - `assetType` 'USDT' — Type of asset
        - PaymentPolygonWalletInfo
          - `accountType` 'POLYGON_WALLET', required
          - `address` string, required — Polygon eth wallet address
          - `assetType` 'USDC' — Type of asset
        - PaymentBaseWalletInfo
          - `accountType` 'BASE_WALLET', required
          - `address` string, required — Base eth wallet address
          - `assetType` 'USDC' — Type of asset
        - PaymentEthereumWalletInfo
          - `accountType` 'ETHEREUM_WALLET', required
          - `address` string, required — Ethereum L1 wallet address
          - `assetType` 'USDC' — Type of asset
        - PaymentEmbeddedWalletInfo
          - `accountType` 'EMBEDDED_WALLET', required — Discriminator value identifying this as Embedded Wallet payment instructions.
          - `payloadToSign` string, required — JSON-encoded transaction signing payload that must be stamped, as-is (byte-for-byte, without re-serialization), with the session private key of a verified authentication credential on the source Embedded Wallet. The resulting Turnkey API-key stamp is passed as the `Grid-Wallet-Signature` header on `POST /quotes/{quoteId}/execute` to authorize the outbound transfer from the wallet.
    - `privateEnabled` boolean — Whether wallet privacy is enabled for the Embedded Wallet. Only present for `EMBEDDED_WALLET` internal accounts.
    - `createdAt` string, date-time, required — Timestamp when the internal account was created
    - `updatedAt` string, date-time, required — Timestamp when the internal account was last updated

## Acknowledgement `200`

Webhook received successfully

## Other responses

- `400` — Bad request
- `401` — Unauthorized - Signature validation failed
- `409` — Conflict - Webhook has already been processed (duplicate id)

---

[API](https://skmtc.dev/lightsparkdev/apis/grid-api.md) · [All operations](https://skmtc.dev/lightsparkdev/apis/grid-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lightsparkdev/grid-api/revisions/d0bce562bffd/schema)
