Skip to main content
Vibepay is a meal-benefit platform. Employers fund a monthly stipend for each of their staff, those staff spend it at participating merchants, and Vibepay settles with the merchant weekly and issues a Mongolian VAT receipt for every single card charge. This documentation covers the one API you need to take that payment: the Charge API. If you are building a point-of-sale, a kiosk, a self-checkout, or an ordering app that should accept Vibepay, you are in the right place.
Already using the official Vibepay POS app on a phone or tablet? You do not need this API — the app talks to it for you. This is for merchants integrating Vibepay into their own software.

How a payment works

There is no card to swipe and no PIN pad. The cardholder’s card lives inside Apple Wallet or Google Wallet as a pass, and that pass displays a QR code that changes after every payment. Your terminal scans it and posts it here. The important part of that diagram is the dotted line at the bottom. The VAT receipt is issued after the payment, not during it, so the charge response can never carry a receipt number. That is a deliberate design decision and it shapes how you should build your integration — see VAT receipts.

The whole API

Three endpoints. That is the entire merchant surface.

Charge

POST /v1/transactions/charge-by-token — scan a code, take the money.

Refund

POST /v1/transactions/{txID}/reverse — give all of it back.

History

GET /v1/transactions — what this terminal has taken.

What to know before you start

₮1,500 is 1500, not 150000. Vibepay has no concept of a fractional tugrik anywhere. If you are porting an integration that used cents or möngö, this is the first thing to fix.
It sends no CORS headers, so a web page’s fetch() will be blocked by the browser. Call it from your server or from native POS software. This is intentional: your terminal password would otherwise have to live in JavaScript that anyone can read.
You can reverse a charge in full, at any time, once. There is no partial refund, no time limit, and no separate void.
This trips up most integrations on day one. A 422 gives you a JSON body with a stable code; a 404, 409 or 500 gives you a bare line of English text. Branch on the HTTP status first. Errors and declines has the full map.

Not covered here

Vibepay’s employer-facing endpoints — creating wallets, issuing cards — live on the same host but use a completely different authentication scheme and are not part of a merchant integration. If you are a merchant, the three endpoints above are everything you can call.

Take your first payment

Five steps from credentials to a live charge and a refund.