FAQ¶
Questions often asked before an integration starts, with short answers and links to the full pages.
General¶
Does it work on Android?¶
Not yet. Gerege App's mini apps and payments work on iOS (iPhone, iPad); development of the Android version is paused. Your backend, the API and webhooks are the same for both platforms — nothing changes when Android ships.
What does the person scan a QR or a sticker with?¶
Gerege App's QR button (iOS build 122+, with "Scan NFC" inside it), or the phone's camera / NFC reading a
https://geregeapp.mn/pay/… link, which opens Gerege App (a Universal Link) on the payment sheet. On a phone without
the app, and on a computer, the public /pay page opens — on a computer it shows a QR to scan with the phone. App Clip
— coming soon (App Clip).
Can people pay by card?¶
No. People pay from their Gerege Wallet balance. There is no way to pay with a card or another bank's app.
Which currency?¶
MNT only, in whole tögrög (45000 = 45,000₮). Every amount is an integer.
How large can one payment be?¶
100 – 50,000,000₮. The operator may set a lower ceiling for one payment of your app (max_amount) — above it,
400 validation_error (amount). The person's own account limits are separate — over them, limit_exceeded on the
person's side (Limits).
Does sandbox data move to live?¶
No. Test and live data are separate; going live changes only the credentials. Terminals and sub-merchants are one registry for both environments, so there is nothing to register again (Sandbox).
Banks and money¶
Can another bank pay into a wallet? What is bank code 0098?¶
Not directly. Gerege Wallet accounts have IBANs with bank code 0098, but that code is not issued by the Bank of
Mongolia — other banks cannot send money to such an IBAN. A wallet is topped up by paying into the operator's real
bank account, after which the operator credits it; money leaves a wallet for a real bank by a withdrawal request that
the operator transfers by hand (Withdrawals to a bank). Until an official code is issued,
interbank transfers cannot arrive.
When and where do my takings arrive?¶
Unless the operator has switched settlements on for your app (true of most apps today), every capture goes
straight to your payout account. With settlements on, payments go to the app's clearing account first and are
moved to the payout account on the schedule (by default weekdays at 10:00, the payments up to the day before), less
the fee; a settlement.paid webhook follows (Settlements).
What are the fees?¶
The operator sets a payment rule for each app (a percentage plus a fixed amount, with an optional minimum and maximum). An app without a rule pays no fee. You see your app's rule in the console (Fees).
Can I set my payout account myself?¶
An app's payout account is set by the operator (after the contract and checks). A sub-merchant's payout account you request through the API, and the account's holder approves it in Gerege App themselves (Payout accounts).
Payments¶
Can I capture part of the amount?¶
Not yet — coming soon. Capture the full amount, then refund what was not delivered (POST …/refunds {amount}).
How long does a refund take?¶
Instant once the ledger answers — 201 succeeded, in the person's wallet at once. If the ledger did not answer in
time, 202 pending: the platform finishes it with the same key and sends refund.succeeded or refund.failed.
Refunds are possible within 90 days of the payment (Refunds).
Why 409 terminal_busy?¶
A terminal has one open, unclaimed intent (per environment). The answer's payment_intent is that intent's id —
cancel it (POST …/cancel) and create the new basket. An intent already past its time is finished by the platform
and the create is retried.
Should I close the order of a failed payment?¶
No. failed is payable again — the person may pick another account and pay. Close the order on canceled or
expired (Payment intent).
How do I get the person's name?¶
A merchant does not — it gets a random user_ref per payment. A mini app gets the pairwise sub and, with the
scopes the person granted, their e-mail and phone from GET /me; never a name, registration number or account
(Mini app launch & tokens).
Can I sell tobacco or alcohol?¶
The age check stays on the machine / your side; you can set the person's minimum age with min_age (13–21) — a
person not verified with eID gets verification_required, one too young age_restricted. Never put tobacco or
alcohol product names in description — Gerege App is a general means of payment (Security checklist).
Credentials and webhooks¶
Why does my live credential answer 401 invalid_client?¶
A live credential works only once the app is approved in review; a suspended or disabled app has both test and
live refused. A key that was revoked, has expired, or was rolled and is past its overlap also answers 401 (they are
indistinguishable) — check its status under the console's "Keys". If you rotated the default key's secret, the old one
stopped working that instant. Client ids are gk_live_ / mapp_ (live) and gk_test_ / mapp_test_ (test) — check
that the pair matches. A missing scope is not 401 but 403 insufficient_scope (with required_scope).
Why does the console ask me to sign in again for a live API key?¶
Creating, rolling or re-addressing a live key (and the default key's live secret) needs miniapp.keys.live and a
sign-in within the last ten minutes: on 403 fresh_sign_in_required the console shows its sign-in sheet and then
repeats the request. 503 fresh_sign_in_unavailable means the installation could not check at that moment — try
again. A sandbox organisation has no live keys at all (409 sandbox_only) (Security checklist).
Can a webhook arrive twice?¶
Yes — delivery is at least once. Drop duplicates by Gerege-Event-Id (the body's id); ordering is not
guaranteed either (Delivery and retries).
Can I do without webhooks?¶
An active live webhook endpoint is required for merchants and for mini apps with the payments scope
(submission and approval ask for it; endpoint №1 or any other — a disabled or auto-disabled one does not count). But
do not rely on webhooks alone — fetch missed events from the Events API (GET /events,
30 days), or reconcile regularly with GET /payment-intents (Reconciliation).
Can test and live events go to different URLs?¶
Yes. Endpoints are per environment (≤ 5 each), each with its own secret and event filter — a test endpoint never receives a live event. Only the app's original webhook URL (endpoint №1) serves both (Overview).