---
title: "List virtual account transactions"
method: GET
path: "/virtual_accounts/{id}/transactions"
tags: ["Virtual Accounts"]
---

# List virtual account transactions

`GET /virtual_accounts/{id}/transactions`

## Request

- Base URL: `https://api.cert.zerohash.com`
- URL: `https://api.cert.zerohash.com/virtual_accounts/{id}/transactions`
- Auth: API key in header `X-SCX-API-KEY` and API key in header `X-SCX-PASSPHRASE`

Returns a paginated list of transactions for a single virtual account, newest first, scoped to the authenticated platform. Filterable by `direction`, `status` and a `from_date`/`to_date` range. An unknown id or an account belonging to another platform return `404 Not Found`. The `direction=OUTBOUND` is accepted but currently matches no records as this flow is yet under construction.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `direction` 'INBOUND' | 'OUTBOUND'
- `status` 'pending' | 'settled' | 'returned' | 'blocked' | 'failed'
- `from_date` string, date-time
- `to_date` string, date-time
- `page` number
- `limit` number

## Headers

- `X-SCX-SIGNED` string, required
- `X-SCX-TIMESTAMP` string, required

## Response `200`

Paginated list of transactions. An account with no matching activity returns an empty `message` array with `count: 0` and `total_pages: 1`.

- VirtualAccountTransactionListResponse
  - `message` VirtualAccountTransaction[]
    - `transaction_id` string, uuid: Unique identifier for the transaction.
    - `va_id` string, uuid: The virtual account this transaction belongs to.
    - `amount` string: Transaction amount as a decimal string, in `currency`. Never a float, so no precision is lost.
    - `currency` 'USD'
    - `direction` 'INBOUND' | 'OUTBOUND': Money direction relative to the virtual account. Always `INBOUND` today: outbound virtual account payments are not yet implemented, so no `OUTBOUND` record exists.
    - `rail` string: Payment rail the funds arrived on. Currently known values include `ACH`, `WIRE`, and `RTP`.
    - `status` 'pending' | 'settled' | 'returned' | 'blocked' | 'failed': Where the transaction sits in its lifecycle. `pending` covers both in-flight processing and a deposit held for review; the reason for a hold is delivered separately through the `virtual_account.deposit_pending` webhook. `settled` means the funds are credited. `returned`, `blocked` and `failed` are terminal.
    - `reference` string: Reference or memo the originator attached to the deposit, when the rail and event provide one. Empty string otherwise.
    - `created_at` string, date-time, nullable: When the transaction was first recorded.
  - `page` integer
  - `page_size` integer: Effective number of transactions per page. The request-side name for this value is `limit`.
  - `total_pages` integer
  - `count` integer: Total number of transactions matching the filters across all pages, not the length of this page.

## Other responses

- `400`: Bad Request
- `403`: Forbidden
- `404`: Not Found
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-11-03** `47cf70ae701c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zerohash/apis/zerohash-api/changes/virtual_accounts/:id/transactions/get.md)

---

[API](https://skmtc.dev/zerohash/apis/zerohash-api.md) - [All operations](https://skmtc.dev/zerohash/apis/zerohash-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zerohash/apis/zerohash-api/revisions/47cf70ae701c?raw)
