> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meru.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Fiat deposit updated

> Sent when a fiat (bank-rail) deposit changes state.

**Event type:** `payin.updated`

<Note>
  `payin.updated` is the fiat-deposit successor to the deprecated `balance.updated` event. During the migration, both names are delivered for the same deposit — `payin.updated` (new) and `balance.updated` (legacy) — so you can migrate without missing events. `balance.updated` is deprecated and will be removed on **15 November 2026**; point your fiat-deposit handling at `payin.updated` before then.
</Note>

Fiat deposits, settled either over a **bank rail** (a transfer into a virtual account) or through a **payment code** (PIX in Brazil, QR in Bolivia). Both arrive as `payin.updated`, but the `data` fields differ between the two — each field below states when it is present. For on-chain crypto deposits, see [Crypto deposit updated](/api-reference/webhooks/crypto-deposit-updated). See [Webhooks overview](/api-reference/webhooks/overview) for delivery, headers, and signature verification.

### `data` fields

<ResponseField name="eventId" type="string">Stable identifier for this deposit event. The **same value** is sent on the legacy `balance.updated` during the transition — use it to deduplicate the two names.</ResponseField>
<ResponseField name="id" type="string">The deposit identifier.</ResponseField>
<ResponseField name="payoutId" type="string">Deprecated alias of `id`, carrying the same value. Sent for **bank-rail deposits only**, and only during the transition.</ResponseField>
<ResponseField name="companyId" type="string">Your company identifier.</ResponseField>
<ResponseField name="externalId" type="string">Your external reference, if one was provided.</ResponseField>
<ResponseField name="previousState" type="string | null">The state the deposit moved from. For **payment-code deposits** it carries the previous state, and is `null` only on the first event. For **bank-rail deposits** it is always `null`: a single deposit still produces several events as it progresses, but each one is reported on its own, so rely on `state` rather than on the transition.</ResponseField>
<ResponseField name="state" type="string">The current deposit state.</ResponseField>
<ResponseField name="amount" type="number">The deposit amount, in minor units.</ResponseField>
<ResponseField name="currency" type="string">The currency of `amount`. For **payment-code deposits** this is the local currency the payer paid in (`BOB`, `BRL`) — the USDC you receive is reported separately in `creditedUsdc`.</ResponseField>
<ResponseField name="method" type="string">The payment rail: `pix` or `bo_qr_code`. **Payment-code deposits only.**</ResponseField>
<ResponseField name="creditedUsdc" type="number | null">The USDC amount credited to your balance once the deposit settles; `null` before then. **Payment-code deposits only.**</ResponseField>
<ResponseField name="blockchain" type="string">The settlement rail. **Bank-rail deposits only.**</ResponseField>
<ResponseField name="txHash" type="string | null">Not set for fiat deposits. **Bank-rail deposits only.**</ResponseField>
<ResponseField name="errorReason" type="string | null">Failure reason, when applicable.</ResponseField>
<ResponseField name="updatedAt" type="string">ISO 8601 timestamp of the update.</ResponseField>

<ResponseExample>
  ```json Bank rail theme={null}
  {
    "type": "payin.updated",
    "timestamp": "2026-06-23T12:00:00.000Z",
    "data": {
      "eventId": "payin:ext-009:funds_received",
      "id": "dep_9f86d081884c7d65",
      "payoutId": "dep_9f86d081884c7d65",
      "companyId": "cmp_123",
      "externalId": "ext-009",
      "previousState": null,
      "state": "funds_received",
      "amount": 100000,
      "currency": "usdc",
      "blockchain": "ach",
      "txHash": null,
      "errorReason": null,
      "updatedAt": "2026-06-23T12:00:00.000Z"
    }
  }
  ```

  ```json Payment code (PIX / QR) theme={null}
  {
    "type": "payin.updated",
    "timestamp": "2026-07-27T17:08:00.000Z",
    "data": {
      "eventId": "payin:payin_889af3c5-96cf-4c38-a4b7-ede7438528d2:payment_processed",
      "id": "payin_889af3c5-96cf-4c38-a4b7-ede7438528d2",
      "companyId": "cmp_123",
      "externalId": "ext-042",
      "previousState": "awaiting_funds",
      "state": "payment_processed",
      "amount": 10000,
      "currency": "BOB",
      "creditedUsdc": 14.32,
      "method": "bo_qr_code",
      "errorReason": null,
      "updatedAt": "2026-07-27T17:08:00.000Z"
    }
  }
  ```
</ResponseExample>
