# Vibepay Charge API > Integration documentation for charging a Vibepay meal-benefit wallet from a merchant point of sale. ## Docs - [Introduction](https://docs.vibepay.mn/introduction.md): What the Vibepay Charge API does, who it is for, and how a payment travels through it. - [Quickstart](https://docs.vibepay.mn/quickstart.md): From terminal credentials to a live charge and a refund, in five steps. - [Authentication](https://docs.vibepay.mn/authentication.md): Per-terminal HTTP Basic credentials — how to get them, use them, and rotate them. - [Environments and limits](https://docs.vibepay.mn/environments.md): The base URL, why there is no sandbox, and how to test an integration safely against production. - [The QR code](https://docs.vibepay.mn/qr-tokens.md): What the cardholder shows you, why it changes after every payment, and how to handle it. - [Charging a wallet](https://docs.vibepay.mn/charge.md): The charge request field by field, the amount rules, and what the response tells you. - [Idempotency](https://docs.vibepay.mn/idempotency.md): How to make a retry safe, and why a blank key is rejected. - [Errors and declines](https://docs.vibepay.mn/errors.md): Two error envelopes, ten decline codes, and which failures are worth retrying. - [Refunds](https://docs.vibepay.mn/refunds.md): Reversing a charge in full — the only refund Vibepay supports, and why 409 means it worked. - [VAT receipts](https://docs.vibepay.mn/vat-receipts.md): Every charge produces a Mongolian VAT receipt — issued asynchronously, and how to observe it. - [Transaction history](https://docs.vibepay.mn/transactions.md): Reading back what a terminal has taken — paging, filtering, and end-of-day reconciliation. - [Going live](https://docs.vibepay.mn/going-live.md): The checklist to work through before your integration takes real customers' money. - [Charge a wallet by scanned QR token](https://docs.vibepay.mn/api-reference/charge.md): Debits the cardholder's wallet by `amountMNT` and records the transaction. The scanned token's nonce is rotated in the same database transaction as the debit, so the token you just charged is dead the instant the charge commits — a second attempt with the same token returns `409`. - [Reverse a charge in full](https://docs.vibepay.mn/api-reference/reverse.md): Credits the full original amount back to the cardholder's wallet and marks the charge reversed. There is no request body and no amount parameter: partial refunds are not supported. - [List this terminal's transactions](https://docs.vibepay.mn/api-reference/list.md): Returns charges made by the calling terminal, newest first. Scope comes from the authenticated credential — there is no merchant or terminal query parameter, and one terminal can never read another's history. - [Liveness probe](https://docs.vibepay.mn/api-reference/health.md): Answers as long as the service is running. Requires no credentials and touches no database, so it cannot tell you whether your credentials work — use `GET /v1/transactions?limit=1` for that. - [Readiness probe](https://docs.vibepay.mn/api-reference/ready.md): Reports whether the service can reach its dependencies. Requires no credentials. - [Charge a wallet by scanned QR token](https://docs.vibepay.mn/api-reference/transactions/charge-a-wallet-by-scanned-qr-token.md): Debits the cardholder's wallet by `amountMNT` and records the transaction. The scanned token's nonce is rotated in the same database transaction as the debit, so the token you just charged is dead the instant the charge commits — a second attempt with the same token returns `409`. - [Reverse a charge in full](https://docs.vibepay.mn/api-reference/transactions/reverse-a-charge-in-full.md): Credits the full original amount back to the cardholder's wallet and marks the charge reversed. There is no request body and no amount parameter: partial refunds are not supported. - [List this terminal's transactions](https://docs.vibepay.mn/api-reference/transactions/list-this-terminals-transactions.md): Returns charges made by the calling terminal, newest first. Scope comes from the authenticated credential — there is no merchant or terminal query parameter, and one terminal can never read another's history. - [Liveness probe](https://docs.vibepay.mn/api-reference/service/liveness-probe.md): Answers as long as the service is running. Requires no credentials and touches no database, so it cannot tell you whether your credentials work — use `GET /v1/transactions?limit=1` for that. - [Readiness probe](https://docs.vibepay.mn/api-reference/service/readiness-probe.md): Reports whether the service can reach its dependencies. Requires no credentials. ## OpenAPI Specs - [openapi](https://docs.vibepay.mn/openapi.json)