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

# Overview

> Track, monitor, and reconcile every bank transfer received through your Virtual Accounts — each recorded as an individual VA Transaction.

Every time a customer transfers funds to a Virtual Account number, Singapay creates a **VA Transaction** record. This API lets you list, filter, and inspect those records for reconciliation, settlement tracking, and customer support.

<CardGroup cols={3}>
  <Card title="Per-payment records" icon="receipt">
    Every bank transfer to a VA creates its own transaction entry with status, amount, and timing.
  </Card>

  <Card title="Full fee breakdown" icon="chart-bar">
    Each record shows vendor fee, platform margin, and net amount received — ready for accounting.
  </Card>

  <Card title="Query by VA number" icon="magnifying-glass">
    Retrieve all transactions for a specific VA number directly, without filtering by account.
  </Card>
</CardGroup>

***

## Relationship with Virtual Account

A Virtual Account is the **parent** — the unique payment instrument with a VA number. Every time a customer pays into it, a VA Transaction **child** record is created.

<Info>
  **Example:** VA `8890-1234-5678` (Permanent VA for Customer A)

  | Transaction | Amount      | Date   |
  | ----------- | ----------- | ------ |
  | #1          | IDR 500,000 | Jan 1  |
  | #2          | IDR 750,000 | Jan 15 |
  | #3          | IDR 300,000 | Feb 1  |

  One Virtual Account → multiple independent transaction records over time.
</Info>

***

## Transaction lifecycle

<Steps>
  <Step title="Payment received">
    Customer transfers funds to the VA number via ATM, mobile banking, or internet banking. The bank sends a payment notification to Singapay.
  </Step>

  <Step title="Transaction created">
    A VA Transaction record is created immediately with status `unpaid`.
  </Step>

  <Step title="Processing">
    Singapay validates the payment amount, checks for duplicates, and verifies all payment details.
  </Step>

  <Step title="Reconciliation">
    The transaction is reconciled by the finance system. Status updates to `paid`.
  </Step>

  <Step title="Settlement">
    Funds are settled to your account (bank or Singapay Balance) based on your configured settlement method.
  </Step>
</Steps>

***

## Transaction status

| Status    | Description                                        |
| --------- | -------------------------------------------------- |
| `unpaid`  | Payment notification received, pending validation. |
| `paid`    | Payment validated and reconciled by Singapay.      |
| `settled` | Funds transferred to your account.                 |

***

## Important notes

<AccordionGroup>
  <Accordion title="Query by VA number" icon="hashtag">
    Beyond listing all transactions for an account, you can query transactions directly by VA number using the dedicated endpoint — useful when you have the VA number from a customer inquiry but not the internal ULID.
  </Accordion>

  <Accordion title="Status tracking" icon="arrow-right-arrow-left">
    Monitor each transaction through its full lifecycle: `unpaid` → `paid` → `settled`. Use webhook notifications to get real-time updates instead of polling.
  </Accordion>

  <Accordion title="Fee breakdown per transaction" icon="receipt">
    Every transaction record includes the vendor fee, platform margin, and net amount received — broken down clearly for accounting and reconciliation purposes.
  </Accordion>

  <Accordion title="Webhook notifications" icon="bell">
    Configure webhooks to receive real-time `va-transaction` events the moment a payment is confirmed — no need to poll the API. See the [Webhook documentation](/api-reference/webhooks/introduction) for setup details.
  </Accordion>

  <Accordion title="Filtering and search" icon="filter">
    Query transactions by `transaction_id`, `va_number`, `status`, `amount` range, settlement status, or timestamp ranges (`post_timestamp`, `processed_timestamp`, `settle_at`). Default sort is newest first.
  </Accordion>

  <Accordion title="Data retention" icon="database">
    Transaction records are retained for **1 year**. Data older than 1 year is archived and may not be accessible via the API.
  </Accordion>
</AccordionGroup>

***

## Available endpoints

<CardGroup cols={3}>
  <Card title="List VA Transactions" icon="list" href="./list">
    Paginated list of all VA transactions for an account with full filter support.
  </Card>

  <Card title="Get VA Transaction Detail" icon="eye" href="./show">
    Retrieve a single transaction by its business `transaction_id`.
  </Card>

  <Card title="List by VA Number" icon="hashtag" href="./list-by-va-number">
    All transactions for a specific VA number, bypassing account-level filtering.
  </Card>
</CardGroup>

<Note>
  All endpoints require authentication. See [Authentication](/api-reference/authentication).
</Note>
