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

# Get a deposit

> Read one deposit of one virtual account: the same object a deposit list returns, plus `rfi`.

Read it after a deposit webhook to see where the deposit has got to, what it was charged and, for a [crypto inbound](/lifecycles/crypto-inbound), its stages in `events`.



## OpenAPI

````yaml /openapi/kira-api.2026-04-14.json get /v1/virtual-accounts/{virtual_account_id}/deposits/{deposit_id}
openapi: 3.1.0
info:
  title: Kira API
  version: '2026-04-14'
  description: >-
    REST API for users, KYC/KYB verification, virtual accounts, payouts,
    recipients, and webhooks. Every request except the token call needs a bearer
    access token (see Authentication). Pin your account to the recommended
    version before integrating (see [Versioning](/using-the-api/versioning)).
  contact:
    name: Kira API Support
    email: support@kirafin.ai
servers:
  - url: https://api.balampay.com
    description: Production
  - url: https://api.balampay.com/sandbox
    description: Sandbox
security:
  - bearerAuth: []
tags:
  - name: Authentication
  - name: Versioning
  - name: Users
  - name: Virtual Accounts
  - name: Recipients
  - name: Quotations
  - name: Payouts
  - name: Ultimate Payors
  - name: Capabilities
  - name: Reference
  - name: RFIs
paths:
  /v1/virtual-accounts/{virtual_account_id}/deposits/{deposit_id}:
    get:
      tags:
        - Virtual Accounts
      summary: Get a deposit
      description: >-
        Read one deposit of one virtual account: the same object a deposit list
        returns, plus `rfi`.


        Read it after a deposit webhook to see where the deposit has got to,
        what it was charged and, for a [crypto
        inbound](/lifecycles/crypto-inbound), its stages in `events`.
      operationId: get_v1-virtual-accounts-virtual-account-id-deposits-deposit-id
      parameters:
        - in: path
          name: virtual_account_id
          required: true
          schema:
            type: string
            format: uuid
          description: UUID of the account the deposit arrived in.
        - in: path
          name: deposit_id
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            UUID of the deposit, as `id` in a deposit list or `deposit_id` in a
            deposit webhook.
        - in: header
          name: X-Api-Version
          required: false
          description: >-
            Version applied to this request. It wins over your account's pinned
            version — see [Versioning](/using-the-api/versioning).
          schema:
            type: string
            example: '2026-04-14'
      responses:
        '200':
          description: The deposit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositDetailResponse'
              example:
                id: 5c6d7e80-9fa0-4b1c-8d2e-3f4a5b6c7d8e
                virtual_account_id: 11111111-2222-3333-4444-555555555555
                amount: '100.00000000'
                currency: USDT
                status: COMPLETED
                rfi: null
                sender:
                  name: null
                  account_number: null
                  address: TD5gsCwxykWsLN9aPrq2TAfNjByuZKYp4E
                recipient:
                  name: Alice Smith
                  company_name: Northwind Trading LLC
                  country: MEX
                payment_rail: stablecoin
                settlement_tx_hash: null
                source:
                  name: null
                  account_number: null
                  address: TD5gsCwxykWsLN9aPrq2TAfNjByuZKYp4E
                  payment_rail: stablecoin
                  reference_number: null
                  imad: null
                  omad: null
                  trace_number: null
                  network: tron
                  tx_hash: >-
                    84ae83cab526664b44ee51b6f811ab04b2525de2010f8a9c026020a4df486f89
                fees:
                  base_fees:
                    fixed_fee: '3.10'
                    percentage_fee: '0.08'
                    fx_markup: '0.06'
                  client_markup:
                    fixed_fee: '0.00'
                    percentage_fee: '0.00'
                    fx_markup: '0.00'
                  total_fees: '3.24'
                net_amount: '96.76'
                net_currency: USD
                fee_total: '3.24'
                fee_currency: USD
                markup_total: '0.00'
                quotation:
                  quote_id: 9d8c7b60-5a4f-4e3d-8c2b-1a0f9e8d7c6b
                  quote_expires_at: '2026-10-13 03:20:46.859+00'
                  source:
                    amount: 10000
                    currency: USD
                    precision: 2
                  recipient:
                    amount: 9676
                    currency: USD
                    precision: 2
                  pricing_context:
                    tier: tier_1
                    starting_tier: tier_1
                    intro_period_active: false
                    transactional_waived: false
                    month_cumulative: 0
                    month_cumulative_currency: USDT
                    from_held_balance: false
                  conversion:
                    pair: USDT/USD
                    rate: '1.000000'
                    source_amount: 9676
                    source_currency: USD
                    target_amount: 9676
                    target_currency: USD
                    rate_source: kraken
                    market_rate: '1.000000'
                    clamp: passthrough
                    locked_at: '2026-10-13 03:20:46.867+00'
                    ttl_seconds: 900
                  fees:
                    - code: inbound
                      status: active
                      version: v1
                      deprecated_at: null
                      charged_by: kira
                      amount: 8
                      currency: USD
                      precision: 2
                      kind: percentage
                      calculation_method: percentage
                      rate_bps: 8
                      basis_amount: 10000
                      basis_currency: USD
                    - code: conversion_off_ramp
                      status: active
                      version: v1
                      deprecated_at: null
                      charged_by: kira
                      amount: 6
                      currency: USD
                      precision: 2
                      kind: percentage
                      calculation_method: percentage
                      rate_bps: 6
                      basis_amount: 10000
                      basis_currency: USD
                    - code: tron_inbound
                      status: active
                      version: v1
                      deprecated_at: null
                      charged_by: kira
                      amount: 310
                      currency: USD
                      precision: 2
                      kind: fixed
                  totals:
                    kira_revenue_total: 324
                    client_markup_total: 0
                    fee_total: 324
                    source_net_amount: 9676
                    currency: USD
                    precision: 2
                depeg_cost: '0.00'
                events:
                  - stage: received
                    created_at: '2026-10-13T03:20:46.829Z'
                  - stage: under_review
                    created_at: '2026-10-13T03:20:47.009Z'
                  - stage: approved
                    created_at: '2026-10-13T03:20:47.723Z'
                  - stage: in_transit
                    created_at: '2026-10-13T03:20:47.794Z'
                  - stage: credited
                    created_at: '2026-10-13T03:20:55.398Z'
                created_at: '2026-10-13T03:20:46.829Z'
                updated_at: '2026-10-13T03:20:55.393Z'
                metadata: {}
        '400':
          description: >-
            An id is not a UUID. The ids are checked before the lookup, so a
            malformed one is a `400` and never a `404`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Always `Invalid request data`.
                  details:
                    type: array
                    description: One entry per rejected value.
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                          description: >-
                            The value that was rejected: `id` for
                            `virtual_account_id`, `depositId` for `deposit_id`.
                        message:
                          type: string
                          description: What is wrong with it.
                        code:
                          type: string
                          description: The validation rule that failed.
              example:
                error: Invalid request data
                details:
                  - path: depositId
                    message: Invalid deposit ID format
                    code: invalid_string
        '403':
          description: >-
            Your request was turned away before it reached the API. The message
            talks about routing, but any of these causes it:


            - The `x-api-key` header is missing or wrong.

            - Your bearer token has expired. Get a new one from [Get access
            token](/api-reference/authentication/get-access-token).

            - The path or the HTTP method does not match. In sandbox, check that
            the path sits under the `/sandbox` prefix.


            A missing `Authorization` header comes back as a `401` with the same
            body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                code: invalid_request
                message: >-
                  The request could not be matched to a valid route, or was
                  malformed. Verify the path and HTTP method against the API
                  reference. This is a routing or request error, not a
                  credentials or signature problem.
        '404':
          description: >-
            No account of yours has that id, or the account has no deposit with
            that id. The same body comes back whether the id does not exist or
            belongs to another account holder, so it never reveals which.
            `message` names the id that was not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: integer
                    description: Repeats the HTTP status.
                  error:
                    type: string
                    description: Always `Not Found`.
                  message:
                    type: string
                    description: Names the id that was not found.
                  timestamp:
                    type: string
                    description: When the call was rejected, as an ISO 8601 timestamp.
                  path:
                    type: string
                    description: The path that was requested.
              example:
                statusCode: 404
                error: Not Found
                message: Deposit 5c6d7e80-9fa0-4b1c-8d2e-3f4a5b6c7d8e not found
                timestamp: '2026-10-15T21:48:41.530Z'
                path: >-
                  /v1/virtual-accounts/11111111-2222-3333-4444-555555555555/deposits/5c6d7e80-9fa0-4b1c-8d2e-3f4a5b6c7d8e
      security:
        - bearerAuth: []
          apiKeyAuth: []
      servers:
        - url: https://api.balampay.com/sandbox
          description: Sandbox
        - url: https://api.balampay.com
          description: Production
components:
  schemas:
    DepositDetailResponse:
      allOf:
        - $ref: '#/components/schemas/DepositListItem'
        - type: object
          properties:
            rfi:
              type:
                - object
                - 'null'
              description: >-
                The open request for information holding this deposit, or
                `null`. Present whenever `status` reads `NEEDS_ACTION`, and
                names the request to answer.
              properties:
                rfi_id:
                  type: string
                  format: uuid
                status:
                  type: string
                  description: >-
                    Where that request is. Available options: `pending`,
                    `answered`. See [RFI values](/reference/rfis/values#status).
                due_at:
                  type: string
                  format: date-time
                  description: When the request stops being answerable.
              example:
                rfi_id: 7f1c9a20-3b4d-4e5f-8a91-2c3d4e5f6a7b
                status: pending
                due_at: '2026-09-15T23:59:59.000Z'
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        statusCode:
          type: number
        error:
          type: string
        timestamp:
          type: string
        path:
          type: string
        details: {}
      required:
        - message
    DepositListItem:
      type: object
      description: >-
        One deposit.


        `source` repeats what `sender` holds and adds the rail and its tracking
        numbers. Both are `null` together, when the bank has not told us who
        sent the money.
      properties:
        id:
          type: string
          format: uuid
          description: Deposit UUID.
        virtual_account_id:
          type: string
          format: uuid
          description: UUID of the account the money arrived in.
        amount:
          type: string
          description: How much arrived, before charges, as a decimal string.
        currency:
          type: string
          description: Currency of `amount`.
        status:
          type: string
          description: >-
            Where the deposit has got to — see [Virtual account
            values](/reference/virtual-accounts/values#deposit-status).
            Available options: `PENDING`, `COMPLETED`, `FAILED`, `REFUNDED`,
            `KYT_PENDING`, `KYT_REJECTED`, `NEEDS_ACTION`.
        sender:
          type:
            - object
            - 'null'
          description: Who sent the money, as the bank reported it.
          properties:
            name:
              type:
                - string
                - 'null'
              description: Name on the sending account.
            account_number:
              type:
                - string
                - 'null'
              description: Sending account number, usually masked by the bank.
            address:
              type:
                - string
                - 'null'
              description: Address on the sending account.
        recipient:
          type: object
          description: >-
            The user who owns the account the money arrived in. Every field is
            `null` if that user can no longer be read.
          properties:
            name:
              type:
                - string
                - 'null'
              description: The user's full name, joined from the names on record.
            company_name:
              type:
                - string
                - 'null'
              description: The user's registered company name.
            country:
              type:
                - string
                - 'null'
              description: Country on the user's address, as an ISO 3166-1 alpha-3 code.
        payment_rail:
          type:
            - string
            - 'null'
          description: >-
            How the money travelled, such as `wire` or `ach_push`. Mirrors
            `source.payment_rail`.
        settlement_tx_hash:
          type:
            - string
            - 'null'
          description: >-
            On-chain transaction that settled the deposit, the same as
            `settlement.tx_hash`. `null` on a fiat account, and until settlement
            runs.
        source:
          type:
            - object
            - 'null'
          description: Who sent the money, plus what the rail recorded about the transfer.
          properties:
            name:
              type:
                - string
                - 'null'
              description: Name on the sending account.
            account_number:
              type:
                - string
                - 'null'
              description: Sending account number, usually masked by the bank.
            address:
              type:
                - string
                - 'null'
              description: >-
                Address on the sending account. On a crypto inbound, the wallet
                it came from.
            payment_rail:
              type:
                - string
                - 'null'
              description: >-
                How the money travelled, such as `wire` or `ach_push`;
                `stablecoin` on a crypto-funded deposit. `null` until the rail
                resolves.


                Not a closed set: a scheme Kira does not recognise arrives
                verbatim, so read it as an open string rather than switching on
                every value.
            reference_number:
              type:
                - string
                - 'null'
              description: Reference the sender attached to the payment.
            imad:
              type:
                - string
                - 'null'
              description: >-
                Input Message Accountability Data — the wire's identifier at the
                sending bank.
            omad:
              type:
                - string
                - 'null'
              description: >-
                Output Message Accountability Data — the same wire's identifier
                at the receiving bank.
            trace_number:
              type:
                - string
                - 'null'
              description: The ACH transfer's trace number.
            network:
              type:
                - string
                - 'null'
              description: >-
                Network a crypto inbound arrived on. Available options:
                `polygon`, `solana`, `tron`, `ethereum`. `null` on a bank
                deposit.
            tx_hash:
              type:
                - string
                - 'null'
              description: >-
                Transaction that brought a crypto inbound. `null` on a bank
                deposit.
        fees:
          type: object
          description: >-
            What was charged on this deposit. Every figure is a decimal string,
            and they are all `0.00` when nothing was charged. On a crypto
            inbound they read `0.00` until it is `COMPLETED`, and stay `0.00` if
            it is not credited.
          properties:
            base_fees:
              type: object
              description: What Kira charged.
              properties:
                fixed_fee:
                  type: string
                  description: A flat charge, as a decimal string.
                percentage_fee:
                  type: string
                  description: A charge worked out from the amount, as a decimal string.
                fx_markup:
                  type: string
                  description: A currency-conversion charge. An amount, not a rate.
            client_markup:
              type: object
              description: What you added on top, from the account's `markup`.
              properties:
                fixed_fee:
                  type: string
                  description: A flat charge, as a decimal string.
                percentage_fee:
                  type: string
                  description: A charge worked out from the amount, as a decimal string.
                fx_markup:
                  type: string
                  description: A currency-conversion charge. An amount, not a rate.
            total_fees:
              type: string
              description: Everything in `base_fees` and `client_markup` added up.
        net_amount:
          type: string
          description: >-
            What reaches the account, as a decimal string, never below `0.00`.
            It is what was credited only once `status` is `COMPLETED`; before
            that it is what is expected to be credited, and a `FAILED`,
            `KYT_REJECTED` or `REFUNDED` deposit credited nothing, whatever this
            reads. A crypto inbound stopped before it was priced shows the
            tokens that arrived, with the token in `net_currency`.
        net_currency:
          type: string
          description: >-
            Currency of `net_amount`: `USD` once the deposit is priced,
            otherwise the currency it arrived in.
        fee_total:
          type: string
          description: >-
            Everything charged on this deposit, your markup included, as a
            decimal string: the same figure as `fees.total_fees`.
        fee_currency:
          type: string
          description: Currency of `fee_total`, the same as `net_currency`.
        markup_total:
          type: string
          description: >-
            The part of `fee_total` that is your own markup
            (`fees.client_markup`), as a decimal string. `0.00` when none was
            charged.
        quotation:
          type: object
          additionalProperties: true
          description: >-
            The itemized price a crypto inbound was converted at: every fee
            line, the totals and the rate, shaped like [the quotation
            object](/reference/quotations/the-quotation-object). Absent on every
            other deposit.
        depeg_cost:
          type: string
          description: >-
            What the conversion did not credit because the token traded below
            one dollar, as a decimal string. It is part of the rate, not a fee,
            so it is in no fee line: see [How you're
            charged](/overview/how-you-are-charged#when-a-conversion-is-involved).
            `0.00` at par. Present only with `quotation`.
        events:
          type: array
          description: >-
            The stages the deposit went through, oldest first. Only a crypto
            inbound records them; every other deposit returns `[]`. Absent when
            the stages could not be read.
          items:
            type: object
            properties:
              stage:
                type: string
                description: >-
                  What happened — see [Virtual account
                  values](/reference/virtual-accounts/values#deposit-events-stage).
                  Available options: `received`, `under_review`, `approved`,
                  `rejected`, `in_transit`, `credited`, `failed`.
              created_at:
                type: string
                description: When the deposit reached the stage, as an ISO 8601 timestamp.
        settlement:
          type:
            - object
            - 'null'
          description: >-
            What a crypto-mode account converted the deposit into and sent to
            its wallet, read from the send itself, so a later change to the
            account's `destination` never rewrites it. `null` on a fiat account,
            and until the deposit settles: the account's `mode` tells which.
          properties:
            status:
              type:
                - string
                - 'null'
              description: >-
                Status of the send, in the [payout
                status](/reference/payouts/values#payout-status) values.
            amount:
              type:
                - string
                - 'null'
              description: >-
                What was sent, or is being sent, to the wallet, in `currency`,
                as a decimal string. `null` when the send failed.
            currency:
              type:
                - string
                - 'null'
              description: 'Token sent: `USDC` or `USDT`.'
            network:
              type:
                - string
                - 'null'
              description: Network the token was sent on.
            tx_hash:
              type:
                - string
                - 'null'
              description: On-chain transaction of the send. `null` until it is broadcast.
            fees:
              type:
                - object
                - 'null'
              description: >-
                Every fee from the deposit to the wallet, including the
                deposit's own. `null` when the send failed, or when the send has
                no itemized breakdown that adds up to what was sent.
              properties:
                currency:
                  type: string
                  description: >-
                    The deposit's currency, such as `USD`: that of `rail`,
                    `inbound`, `markup` and `total`.
                rail:
                  type: string
                  description: >-
                    Kira's fixed fee for the rail the deposit arrived on, as a
                    decimal string.
                inbound:
                  type: string
                  description: Kira's percentage fee on the deposit, as a decimal string.
                conversion:
                  type: string
                  description: >-
                    Kira's fee for converting the deposit to the token, in the
                    token (the settlement's `currency`), as a decimal string.
                network:
                  type: string
                  description: >-
                    Blockchain fee for sending the token, in the token (the
                    settlement's `currency`), as a decimal string.
                markup:
                  type: string
                  description: >-
                    Your own markup on the deposit, which settles to you, as a
                    decimal string.
                total:
                  type: string
                  description: >-
                    Sum of the fees above, the token's at par. The deposit's
                    `amount` less `total` is the `amount` sent.
            updated_at:
              type: string
              description: When the send last changed, as an ISO 8601 timestamp.
        created_at:
          type: string
          description: When the deposit was first recorded, as an ISO 8601 timestamp.
        updated_at:
          type: string
          description: When it last changed, as an ISO 8601 timestamp.
        metadata:
          type: object
          description: Key/value pairs attached to the deposit. `{}` when there are none.
          additionalProperties: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        The `data.access_token` value from [Get access
        token](/api-reference/authentication/get-access-token).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.