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

# List Cryptocurrency Deposits

> Get cryptocurrency deposits for an account, sorted by recency in descending order.



## OpenAPI

````yaml /v2/openapi.yaml get /v2/crypto/deposits
openapi: 3.1.0
info:
  title: Bastion APIs
  version: '2.0'
servers:
  - url: https://api.prod.bastion.com
    description: Production environment
  - url: https://api.sandbox.bastion.io
    description: Sandbox environment
security:
  - auth: []
tags:
  - name: Bastion APIs
paths:
  /v2/crypto/deposits:
    get:
      tags:
        - Cryptocurrency Deposits
      summary: List Cryptocurrency Deposits
      description: >-
        Get cryptocurrency deposits for an account, sorted by recency in
        descending order.
      operationId: bastion.api.v2.API.ListDeposits
      parameters:
        - name: account_id
          in: query
          description: Unique identifier of the account to filter deposits by
          required: true
          schema:
            type: string
            title: account_id
        - name: destination_chain
          in: query
          description: (OPTIONAL) Optional chain filter
          required: false
          schema:
            $ref: '#/components/schemas/bastion.common.Chain'
            title: destination_chain
        - name: currency_symbol
          in: query
          description: (OPTIONAL) Optional currency symbol filter
          required: false
          schema:
            type: string
            title: currency_symbol
        - name: start_time
          in: query
          description: >-
            A Timestamp represents a point in time independent of any time zone
            or local
             calendar, encoded as a count of seconds and fractions of seconds at
             nanosecond resolution. The count is relative to an epoch at UTC midnight on
             January 1, 1970, in the proleptic Gregorian calendar which extends the
             Gregorian calendar backwards to year one.

             All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
             second table is needed for interpretation, using a [24-hour linear
             smear](https://developers.google.com/time/smear).

             The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
             restricting to that range, we ensure that we can convert to and from [RFC
             3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.

             # Examples

             Example 1: Compute Timestamp from POSIX `time()`.

                 Timestamp timestamp;
                 timestamp.set_seconds(time(NULL));
                 timestamp.set_nanos(0);

             Example 2: Compute Timestamp from POSIX `gettimeofday()`.

                 struct timeval tv;
                 gettimeofday(&tv, NULL);

                 Timestamp timestamp;
                 timestamp.set_seconds(tv.tv_sec);
                 timestamp.set_nanos(tv.tv_usec * 1000);

             Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.

                 FILETIME ft;
                 GetSystemTimeAsFileTime(&ft);
                 UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

                 // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
                 // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
                 Timestamp timestamp;
                 timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
                 timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

             Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.

                 long millis = System.currentTimeMillis();

                 Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
                     .setNanos((int) ((millis % 1000) * 1000000)).build();

             Example 5: Compute Timestamp from Java `Instant.now()`.

                 Instant now = Instant.now();

                 Timestamp timestamp =
                     Timestamp.newBuilder().setSeconds(now.getEpochSecond())
                         .setNanos(now.getNano()).build();

             Example 6: Compute Timestamp from current time in Python.

                 timestamp = Timestamp()
                 timestamp.GetCurrentTime()

             # JSON Mapping

             In JSON format, the Timestamp type is encoded as a string in the
             [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
             format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
             where {year} is always expressed using four digits while {month}, {day},
             {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
             seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
             are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
             is required. A ProtoJSON serializer should always use UTC (as indicated by
             "Z") when printing the Timestamp type and a ProtoJSON parser should be
             able to accept both UTC and other timezones (as indicated by an offset).

             For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
             01:30 UTC on January 15, 2017.

             In JavaScript, one can convert a Date object to this format using the
             standard
             [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
             method. In Python, a standard `datetime.datetime` object can be converted
             to this format using
             [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
             the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
             the Joda Time's [`ISODateTimeFormat.dateTime()`](
             http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
             ) to obtain a formatter capable of generating timestamps in this format.
          required: false
          schema:
            type: string
            examples:
              - '2023-01-15T01:30:15.01Z'
              - '2024-12-25T12:00:00Z'
            format: date-time
        - name: end_time
          in: query
          description: >-
            A Timestamp represents a point in time independent of any time zone
            or local
             calendar, encoded as a count of seconds and fractions of seconds at
             nanosecond resolution. The count is relative to an epoch at UTC midnight on
             January 1, 1970, in the proleptic Gregorian calendar which extends the
             Gregorian calendar backwards to year one.

             All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
             second table is needed for interpretation, using a [24-hour linear
             smear](https://developers.google.com/time/smear).

             The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
             restricting to that range, we ensure that we can convert to and from [RFC
             3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.

             # Examples

             Example 1: Compute Timestamp from POSIX `time()`.

                 Timestamp timestamp;
                 timestamp.set_seconds(time(NULL));
                 timestamp.set_nanos(0);

             Example 2: Compute Timestamp from POSIX `gettimeofday()`.

                 struct timeval tv;
                 gettimeofday(&tv, NULL);

                 Timestamp timestamp;
                 timestamp.set_seconds(tv.tv_sec);
                 timestamp.set_nanos(tv.tv_usec * 1000);

             Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.

                 FILETIME ft;
                 GetSystemTimeAsFileTime(&ft);
                 UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

                 // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
                 // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
                 Timestamp timestamp;
                 timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
                 timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

             Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.

                 long millis = System.currentTimeMillis();

                 Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
                     .setNanos((int) ((millis % 1000) * 1000000)).build();

             Example 5: Compute Timestamp from Java `Instant.now()`.

                 Instant now = Instant.now();

                 Timestamp timestamp =
                     Timestamp.newBuilder().setSeconds(now.getEpochSecond())
                         .setNanos(now.getNano()).build();

             Example 6: Compute Timestamp from current time in Python.

                 timestamp = Timestamp()
                 timestamp.GetCurrentTime()

             # JSON Mapping

             In JSON format, the Timestamp type is encoded as a string in the
             [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
             format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
             where {year} is always expressed using four digits while {month}, {day},
             {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
             seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
             are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
             is required. A ProtoJSON serializer should always use UTC (as indicated by
             "Z") when printing the Timestamp type and a ProtoJSON parser should be
             able to accept both UTC and other timezones (as indicated by an offset).

             For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
             01:30 UTC on January 15, 2017.

             In JavaScript, one can convert a Date object to this format using the
             standard
             [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
             method. In Python, a standard `datetime.datetime` object can be converted
             to this format using
             [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
             the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
             the Joda Time's [`ISODateTimeFormat.dateTime()`](
             http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
             ) to obtain a formatter capable of generating timestamps in this format.
          required: false
          schema:
            type: string
            examples:
              - '2023-01-15T01:30:15.01Z'
              - '2024-12-25T12:00:00Z'
            format: date-time
        - name: limit
          in: query
          description: >-
            (OPTIONAL) The maximum number of deposits to return. The maximum
            value that can be specified is 25.
          required: false
          schema:
            type: integer
            title: limit
            maximum: 25
            minimum: 1
            format: int32
            default: '10'
        - name: cursor
          in: query
          description: >-
            (OPTIONAL) Pagination cursor to be used in subsequent queries to
            retrieve the next page of results
          required: false
          schema:
            type: string
            title: cursor
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/bastion.api.v2.cryptocurrency.deposits.ListDepositsResponse
        '400':
          description: Bad request
        '500':
          description: Internal Server Error
components:
  schemas:
    bastion.common.Chain:
      type: string
      title: Chain
      enum:
        - CHAIN_UNSPECIFIED
        - ETHEREUM_MAINNET
        - POLYGON_MAINNET
        - ETHEREUM_TESTNET
        - OPTIMISM_SEPOLIA
        - BASE_MAINNET
        - BASE_SEPOLIA
        - OPTIMISM_MAINNET
        - POLYGON_AMOY
        - SOLANA_MAINNET
        - SOLANA_DEVNET
      description: Chain identifier
      example: ETHEREUM_MAINNET
    bastion.api.v2.cryptocurrency.deposits.ListDepositsResponse:
      type: object
      properties:
        deposits:
          type: array
          items:
            $ref: >-
              #/components/schemas/bastion.api.v2.cryptocurrency.deposits.Deposit
          title: deposits
        cursor:
          type: string
          title: cursor
          description: >-
            Pagination cursor to be used in subsequent queries to retrieve next
            page of results. If this field is omitted, there are no subsequent
            pages.
      title: ListDepositsResponse
      additionalProperties: false
    bastion.api.v2.cryptocurrency.deposits.Deposit:
      type: object
      properties:
        id:
          type: string
          title: id
          description: Unique identifier of the cryptocurrency deposit
        dedup_key:
          type: string
          title: dedup_key
          description: Deduplication key matching the originating webhook event id
        account_id:
          type: string
          title: account_id
          description: Unique identifier of the account that received the deposit
        account_address:
          type: string
          title: account_address
          description: Address of the account that received the deposit
        source_address:
          type: string
          title: source_address
          description: Address that sent the deposit
        source_type:
          $ref: >-
            #/components/schemas/bastion.api.v2.cryptocurrency.deposits.SourceType
          title: source_type
          description: Source type of the deposit
        currency_symbol:
          type: string
          title: currency_symbol
          description: Symbol or ticker of the deposited cryptocurrency
        amount:
          type: string
          title: amount
          description: >-
            Amount deposited in the asset currency's default unit (ex: Ether for
            ETH)
        destination_chain:
          $ref: '#/components/schemas/bastion.common.Chain'
          title: destination_chain
          description: Chain identifier for the deposit
        transaction_hash:
          type: string
          title: transaction_hash
          description: Transaction hash (EVM) or signature (Solana)
        status:
          $ref: >-
            #/components/schemas/bastion.api.v2.cryptocurrency.deposits.DepositStatus
          title: status
          description: Status of the deposit
        confirmed_at:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: confirmed_at
          description: Timestamp when the deposit was considered to be confirmed (ISO 8601)
        created_at:
          $ref: '#/components/schemas/google.protobuf.Timestamp'
          title: created_at
          description: Timestamp when the on-chain transaction was created (ISO 8601)
        source_account_id:
          type: string
          title: source_account_id
          description: >-
            (OPTIONAL) Unique identifier of the source account for
            account-originated deposits
      title: Deposit
      required:
        - id
        - dedup_key
        - account_id
        - account_address
        - source_address
        - source_type
        - currency_symbol
        - amount
        - destination_chain
        - transaction_hash
        - status
        - confirmed_at
        - created_at
      additionalProperties: false
    bastion.api.v2.cryptocurrency.deposits.SourceType:
      type: string
      title: SourceType
      enum:
        - SOURCE_TYPE_UNSPECIFIED
        - ON_CHAIN
        - ACCOUNT
      description: |-
        Source type of a cryptocurrency deposit.

         - `SOURCE_TYPE_UNSPECIFIED`: Default value, should not be used.
         - `ON_CHAIN`: The deposit was detected on-chain.
         - `ACCOUNT`: The deposit originated from an internal account.
      example: ON_CHAIN
    bastion.api.v2.cryptocurrency.deposits.DepositStatus:
      type: string
      title: DepositStatus
      enum:
        - DEPOSIT_STATUS_UNSPECIFIED
        - PENDING
        - CONFIRMED
        - FAILED
      description: |-
        Status of a cryptocurrency deposit.

         - `STATUS_UNKNOWN`: Default value, should not be used.
         - `PENDING`: The deposit has been detected on-chain but not yet confirmed.
         - `CONFIRMED`: The deposit has been confirmed on the blockchain. This is a terminal status.
      example: PENDING
    google.protobuf.Timestamp:
      type: string
      examples:
        - '2023-01-15T01:30:15.01Z'
        - '2024-12-25T12:00:00Z'
      format: date-time
      description: >-
        A Timestamp represents a point in time independent of any time zone or
        local
         calendar, encoded as a count of seconds and fractions of seconds at
         nanosecond resolution. The count is relative to an epoch at UTC midnight on
         January 1, 1970, in the proleptic Gregorian calendar which extends the
         Gregorian calendar backwards to year one.

         All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap
         second table is needed for interpretation, using a [24-hour linear
         smear](https://developers.google.com/time/smear).

         The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
         restricting to that range, we ensure that we can convert to and from [RFC
         3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.

         # Examples

         Example 1: Compute Timestamp from POSIX `time()`.

             Timestamp timestamp;
             timestamp.set_seconds(time(NULL));
             timestamp.set_nanos(0);

         Example 2: Compute Timestamp from POSIX `gettimeofday()`.

             struct timeval tv;
             gettimeofday(&tv, NULL);

             Timestamp timestamp;
             timestamp.set_seconds(tv.tv_sec);
             timestamp.set_nanos(tv.tv_usec * 1000);

         Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.

             FILETIME ft;
             GetSystemTimeAsFileTime(&ft);
             UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

             // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
             // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
             Timestamp timestamp;
             timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
             timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

         Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.

             long millis = System.currentTimeMillis();

             Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
                 .setNanos((int) ((millis % 1000) * 1000000)).build();

         Example 5: Compute Timestamp from Java `Instant.now()`.

             Instant now = Instant.now();

             Timestamp timestamp =
                 Timestamp.newBuilder().setSeconds(now.getEpochSecond())
                     .setNanos(now.getNano()).build();

         Example 6: Compute Timestamp from current time in Python.

             timestamp = Timestamp()
             timestamp.GetCurrentTime()

         # JSON Mapping

         In JSON format, the Timestamp type is encoded as a string in the
         [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
         format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
         where {year} is always expressed using four digits while {month}, {day},
         {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
         seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
         are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
         is required. A ProtoJSON serializer should always use UTC (as indicated by
         "Z") when printing the Timestamp type and a ProtoJSON parser should be
         able to accept both UTC and other timezones (as indicated by an offset).

         For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
         01:30 UTC on January 15, 2017.

         In JavaScript, one can convert a Date object to this format using the
         standard
         [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
         method. In Python, a standard `datetime.datetime` object can be converted
         to this format using
         [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
         the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
         the Joda Time's [`ISODateTimeFormat.dateTime()`](
         http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
         ) to obtain a formatter capable of generating timestamps in this format.
  securitySchemes:
    auth:
      type: http
      description: Bearer authentication with an API token
      scheme: bearer

````

## Related topics

- [List Cryptocurrency Transfers](/v2/api-reference/cryptocurrency-transfers/list-cryptocurrency-transfers.md)
- [Get Cryptocurrency Deposit](/v2/api-reference/cryptocurrency-deposits/get-cryptocurrency-deposit.md)
- [List Virtual Accounts](/v2/api-reference/virtual-accounts/list-virtual-accounts.md)
- [Submit Cryptocurrency Transfer](/v2/api-reference/cryptocurrency-transfers/submit-cryptocurrency-transfer.md)
- [Crypto transfers and deposits](/guides/concepts/crypto-transfers.md)
