Homework for my application to Binance Operations Specialist.
This page covers Binance's 2026 fiat changes, how rivals run fiat, where capital breaks between a channel and the ledger, and a working reconciliation console built on real Binance rails and their published rules.
Binance spent 2026 re-plumbing fiat: its old fiat provider stopped serving it, the global platform moved onto ADGM-licensed entities, and a payments licence is being built in Kazakhstan. Every move adds channels to connect, test and reconcile. §01
A capital issue is a reconciliation break seen from the customer's side. Classify the break first and the customer reply, the channel query and the journal entry all follow from it. §★
Ledger Desk: three-way reconciliation on seven real Binance rails, each rule cited to its help article, deadlines on live holiday calendars, maker-checker sign-off and real file formats (camt.053, fiat API JSON). Try the demo ↗
Binance fiat in 2026
The fiat side moved more this year than in any year since 2023. Each row is a channel being added, moved or retired, which is the work this role does.
| When | Event | What it means for capital ops |
|---|---|---|
| 31 Dec 2025 | Bifinity, the group's fiat-to-crypto provider since 2022, stops serving Binance users. Some card withdrawals pause; one EUR/PLN rail restarts in January. | Balances and flows migrate to replacement providers at short notice. Every migrated channel needs new reference formats, fee tables and report mappings. |
| 5 Jan 2026 | Binance.com services move onto three ADGM-licensed entities, including a recognised clearing house. | Clearing and settlement now have a regulated home, with client-money and safeguarding rules behind every reconciliation. |
| Jan 2026 | AUD PayID and bank transfers fully restored in Australia, after the 2023 offboarding. | A rail coming back is a launch: limits, cut-offs, return codes and a first-week reconciliation watch. |
| 9 Apr 2026 | PayPay Money deposits and withdrawals live at Binance Japan: deposits up to ¥300,000 per 24h, ¥110 fee each way. | An e-wallet rail with its own limits and fee to load into the fee schedule and the launch tests. |
| 1 Jul 2026 | Services suspended in several EU states without a MiCA licence. | Wind-down: return fiat balances, close channel accounts, reconcile to zero. |
| Sep 2026 | Three agreements in Kazakhstan, including a plan to seek a local payment-organisation licence; an Astana payments team is hiring. | An owned payment entity means owned clearing: reconciliation, client money and channel tests built in-house. |
Binance's fiat history is a run of counterparty changes: card acquiring, GBP, RUB and AUD partners all ended in 2023, and Bifinity followed in 2025. Channel churn is the normal state, so the reconciliation set-up has to make adding a channel cheap and safe.
Where a local entity is licensed (Japan, Thailand, Indonesia, Australia, Kazakhstan) money moves on direct rails. Where it is not, P2P carries fiat: on 1 Oct 2026 the public P2P book showed 987 INR ads, 602 PKR and 475 VND. Capital issues differ by type: channel breaks on the first, P2P disputes and bank-side freezes on the second.
How rivals run fiat in Asia
The exchanges split by how much of the money path they own. The more they own, the more clearing and reconciliation they do themselves.
| Exchange | Asia fiat model | Gap against Binance |
|---|---|---|
| Binance | Hybrid: licensed local entities with direct rails, P2P where unlicensed, third-party buy widgets, and a 2026 move toward its own payment licence. | Reference point. Widest channel count, so the heaviest reconciliation load. |
| Coinbase | Own licensed rails where it operates. Singapore payments licence (2024); direct INR deposits and withdrawals launched in 2026. | Has a direct INR rail where Binance moves rupees through P2P. |
| OKX | Local licensed entities with own rails (Singapore, Australia), third-party on-ramps and P2P elsewhere. | Similar hybrid at smaller scale. Has SGD rails where Binance has none. |
| Bybit | Mostly third-party on-ramps plus P2P; a licensed Indonesian entity; FIU registration in India. | Outsources most clearing to the on-ramp, so less to reconcile and less control over the user experience. |
| Bitget | Third-party on-ramps and P2P; an APAC card launched April 2026. | Card spend adds chargeback and refund flows Binance mostly does not carry in Asia today. |
| Kraken | Thin in Asia. Left Japan in 2023; AUD through Kraken Australia. | Little Asian fiat surface to compare. |
What it means for the role. Owning the rail gives Binance pricing and control, and moves the breaks in-house: unreferenced deposits, returned payouts and chargebacks land with fiat ops instead of an on-ramp's support desk. Each channel added makes the reconciliation discipline more valuable.
Where capital breaks
Money crosses three records: the internal order, the channel's settlement report and the bank statement. A break is any point where two of them disagree.
| Break | Capital | What happened | First move |
|---|---|---|---|
| Duplicate credit | loss | One channel movement credited to two orders. A retried callback without idempotency. | Hold the second amount, reverse it, fix the event-id check. |
| Paid out, ledger failed | loss | Gateway timed out, order failed and released the balance, bank paid anyway. | Hold the balance, confirm with the channel, re-debit. |
| Chargeback or recall | loss | Funds reversed after the user was credited. | Debit or freeze, consider representment, send to Risk. |
| Credited, no funds | loss | Ledger credited a deposit the channel never settled. | Trace the callback source. Hold the amount. |
| User paid, not credited | customer | Channel settled; the callback was lost or arrived after a timeout. | Credit against the channel reference before the ticket arrives. |
| Wrong or missing reference | customer | Funds arrived with a memo that matches no order. | Match on amount, time and payer name; third-party payer goes back to source. |
| Withdrawal returned | customer | Beneficiary bank returned the payout. | Re-credit, mark returned, fix beneficiary details. |
| Settlement variance | exposure | Bank credit differs from the report net: reserve, unreported fee, netted reversal. | Ask for the batch breakdown; book a receivable. |
| Fee off contract | cost | Channel charged above the schedule. | Collect for the month, one claim. |
The ordering rule. Loss-class breaks first, because money is leaving. Customer-class next, because each one is a ticket waiting to happen and the fix is usually a credit ops can make before the user writes in. Cost and timing last. The console sorts the queue this way and values every break in USD so the morning close reads as one number per class.
JD duties, my method
Each responsibility from the posting, what doing it well looks like, and where the console shows it.
| JD line | Method | Shown in |
|---|---|---|
| Familiar with the logic of system capital flow changes | Model every movement as order, channel line and bank line, with a status machine on the order. A capital-flow change is a status transition; each break is a transition that happened on one record and not the others. | §★, console tab 01 |
| Connect each fiat channel, its capital processes and launch tests | A fixed go-live pack per channel: limits, fee schedule, report format and cut-off, holiday calendar, return codes, callback signature, event-id idempotency, then a small live test reconciled end to end. | §05, tab 04 |
| Daily work with customer service on capital issues | Give CS the classified break, the reply and the next step, so a ticket closes on first contact. Push credits out before the user writes in for the uncredited class. | tab 01 case drafts |
| Handle capital issues with timely, correct judgement | Ordered checks per break type, with the decision points written down: third-party payer, credit after a crypto withdrawal, failed-but-paid. Maker-checker on every manual balance change. | tab 01 checklists |
| Cooperate with the distribution of marketing activities | Check every reward file against the campaign rules before it reaches the distribution tool: duplicates, caps, restricted regions, KYC level, window, task flag, asset, budget. Pay the clean file and return the rest with reasons. | tab 03 |
| Sensitivity to fund data; clear reconciliation logic; guide the team | Daily close with one number per capital class, ageing on every open break, a journal entry for every resolution, and per-channel trends (wrong-reference rate, fee variance) reviewed weekly. Written SOPs so the team works breaks the same way. | tabs 01, 02 |
A working console
Ledger Desk runs a business day on seven real Binance rails. Users and amounts are synthetic; the rails, their published rules, the holiday calendars and the file formats are real. Open it ↗
| What makes it real | How |
|---|---|
| Published rules, cited | Each rail carries the user rules from Binance's own help articles, with the article and its last-update date: SEPA name match, exact reference and the 2 EUR floor; SWIFT routed into SEPA returned within 2 weeks; PIX orders paid within 24 hours or refunded; TED amount must equal the order or it is refunded within 7 calendar days; SWIFT without the reference fails; PayPay Money's 1,000 to 300,000 JPY per 24 hours. The engine applies them, so a third-party payment becomes a return with a deadline. |
| Deadlines in business days | Refund and return clocks count business days on each currency's calendar: TARGET2 for EUR (computed), live public holidays for GBP, BRL, USD and JPY from Nager.Date, with a dated snapshot as fallback. |
| Real file formats | Reads and writes ISO 20022 camt.053 bank statements, reads the JSON response of Binance's GET /sapi/v1/fiat/orders as-is, and maps any channel CSV, with the Adyen Settlement details layout detected automatically. All three round-trip to the same result. |
| Maker-checker | Every break is proposed by one user with a reason and approved by another; the same person cannot do both. Each action lands in an append-only audit log. The close report prints the summary, breaks, settlement and log with sign-off lines. |
| Name matching | Payer names are compared by token across word order, accents and particles ("João da Silva" against "JOAO SILVA"), so a real name mismatch stands out. |
| Each case | Both records with differences highlighted, the rule applied and its source, the checks in order, the journal entry, and drafts to the channel, to the user via CS and an internal note in Chinese. |
The day generator plants 24 breaks across 19 types and records them. The engine finds 24 of 24 on each of 109 seeded days tested, with no false breaks. A separate test round-trips the day through CSV, the API JSON, the Adyen layout and camt.053 and gets the same breaks. Tightening tolerances in the console shows misses in the benchmark panel.
- Status values. The fiat order history lists Processing, Failed, Successful, Finished, Refunding, Refunded, Refund Failed and Order Partial credit Stopped. Its example row returns "Expired", which is outside that list (the same value appears in the generated tests of Binance's Python SDK). The console normalises every status into a bucket and keeps the raw value, and treats an expired PIX order that is then paid as a refund.
- Request weight. The fiat changelog's last weight entry for GET /sapi/v1/fiat/orders is UID 90000 (2022). The current SDK documents 45000. Anyone sizing a polling job from the changelog would poll at half the rate available.
Launch-testing a channel
Most loss-class breaks start as a callback the order system handled wrongly. They can be caught before go-live by replaying what real channels send.
| Callback sequence | Correct end state | Naive | Guarded |
|---|---|---|---|
| Duplicate SUCCESS (same event id) | Credited once | fail | pass |
| SUCCESS re-sent with a new event id | Credited once | fail | pass |
| FAILED after SUCCESS | Keep credit, alert | fail | pass |
| Late SUCCESS after timeout FAILED | Hold for review, alert | fail | pass |
| Partial amount | Hold for review, alert | fail | pass |
| JPY amount with decimals | Hold for review, alert | fail | pass |
| Callback for an unknown order | Reject, alert | fail | pass |
Seven of the eleven shown. The naive handler passes only the happy path and a refund. Each failure maps to a break in §★: a retried callback becomes a duplicate credit, a late success becomes a user who paid and was not credited. The guarded handler is the specification to agree with engineering before a channel goes live.
First 90 days
- Map every live channel: currency, rail, report format, cut-off, fee schedule, return codes.
- Sit with CS on capital tickets; tag each one to a break type.
- Read the open-break list and its ageing. Note what has no owner.
- One daily close with a number per capital class and ageing on every break.
- CS macros per break type, with the check order behind each.
- Monthly fee-variance claim per channel.
- A standard go-live pack and callback test suite for every new channel.
- Weekly per-channel trend: wrong-reference rate, return rate, fee variance.
- Written SOPs, so the team works breaks the same way.
Method & sources
Public sources only, checked against each other. Where a third party and the primary source disagree, the primary source is used.
- The JD came from a public job posting, 2026. The duties in §03 are paraphrased from it.
- P2P depth was read from Binance's public P2P ad-search endpoint on 1 Oct 2026.
- USD values in the console use ECB reference rates, live via Frankfurter with a dated snapshot as fallback.
- Console numbers in §04 come from running it on its default day and on 48 seeded days.
- Users, amounts and contract fees are synthetic. Same-day cut-offs for SEPA and SWIFT are assumptions and are labelled as such.
- No view of Binance's internal systems, channel contracts or real report formats.
- P2P disputes are outside the console; they are a separate queue with their own evidence rules.
- Several 2026 events rest on press reports, listed below.
| Claim | Source |
|---|---|
| Bifinity stops serving Binance users from 31 Dec 2025; knock-on card and EUR/PLN effects | FX News Group, Cryptonews |
| Binance.com on ADGM-licensed entities from 5 Jan 2026, including a clearing house | Gulf News, Payment Expert |
| AUD PayID and bank transfer restored, January 2026 | FutureFive |
| PayPay Money at Binance Japan from 9 Apr 2026, deposit limits and fee | PayPay press release |
| Kazakhstan agreements and payment-licence plan, September 2026 | Finance Magnates |
| 2023 partner exits: card acquiring, GBP, RUB, AUD | The Block, The Block, The Block |
| Coinbase direct INR rails, 2026 | Decrypt |
| OKX Singapore payments licence | The Block |
| Bitget APAC card, April 2026 | GlobeNewswire via AAP |
| Fiat order fields and status values used in the console | Binance developer docs, Fiat |
| Fiat order weight (45000) and the example status row | Binance Python SDK, fiat client; changelog via archived fiat changelog |
| Rail rules: SEPA, FPS, BRL PIX and TED, SWIFT, card | SEPA FAQ, SEPA how-to, FPS, BRL, SWIFT, card (Binance help centre, read 1 Oct 2026) |
| Holiday calendars | Nager.Date; TARGET2 closing days computed |
| ECB reference rates | Frankfurter |
Independent work by Edward Tay for a job application. Not affiliated with Binance. The console is a prototype built for this application and is not Binance software.