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

# VAT receipts

> Every charge produces a Mongolian VAT receipt — issued asynchronously, and how to observe it.

Every Vibepay card charge produces a Mongolian VAT receipt (ДДТД) filed with the tax authority.
This is not optional and not a side effect — it is part of what a Vibepay payment *is*.

**You do not have to do anything to make it happen.** Vibepay issues it, files it, and cancels it
on a refund. There is no field to send and no call to make.

## It is issued after the payment

```mermaid theme={null}
flowchart LR
    A[Charge committed] -->|201 to your POS| B["vatStatus: pending<br/>vatReceiptID: ''"]
    B -.->|seconds to minutes| C["vatStatus: issued<br/>vatReceiptID: 112219…"]
    C -.->|only if reversed| D["vatStatus: voided"]
```

The charge response **always** reports:

```json theme={null}
"vatReceiptID": "",
"vatStatus": "pending"
```

That is correct and expected, not a warning sign. The wallet debit and the tax filing are
deliberately separated: a tax authority being slow or briefly unreachable must never make a
cashier wait or a payment fail. The debit commits, and the receipt follows.

<Warning>
  **Do not print a VAT receipt number on the customer's receipt at the moment of sale.** It does
  not exist yet. Any integration that blocks the till waiting for one will hang on every
  transaction.
</Warning>

## Reading the status

`vatStatus` appears on every charge in `GET /v1/transactions`:

| Value     | Meaning                                                                                             |
| --------- | --------------------------------------------------------------------------------------------------- |
| `pending` | Queued. `vatReceiptID` is empty.                                                                    |
| `issued`  | Filed. `vatReceiptID` holds the ДДТД.                                                               |
| `voided`  | The charge was reversed and the receipt cancelled. `vatReceiptID` is kept as the historical record. |

<Note>
  Once a charge has been reversed, `vatStatus` reads `voided` even though `vatReceiptID` is still
  populated. Check `vatStatus`, not the presence of a receipt number.
</Note>

## Getting the number

There is no webhook and no per-transaction lookup. Poll the list:

```bash theme={null}
curl -u 'term_…:vpt_…' \
  'https://api.vibepay.mn/v1/transactions?limit=50' \
  | jq '.transactions[] | select(.vatStatus == "issued") | {id, vatReceiptID}'
```

A sensible pattern is a background job every few minutes that picks up transactions still showing
`pending` and fills in the receipt number when it appears. Do not poll in a tight loop — see
[Environments and limits](/environments).

If something stays `pending` for more than about fifteen minutes, that is worth reporting to
Vibepay. A background reconciler retries stuck receipts automatically, so it should be rare.

## What you do not get

The tax breakdown — VAT (НӨАТ) and city tax (НХАТ) — is calculated and filed by Vibepay, but it is
**not** returned to the terminal. A till has no use for it, and it is the employer, not the
cardholder, who is the buyer of record for these receipts.

If you need the breakdown for your own accounting, take it from your weekly settlement statement
in the [merchant dashboard](https://merchant.vibepay.mn) rather than from this API.

## On a refund

Reversing a charge cancels its receipt with the tax authority automatically. You file nothing and
you issue no credit note. `vatStatus` moves to `voided` once it has propagated.
