Developers

Last updated 17 October 2026

Four endpoints, no keys, and honest limits. What exists today rather than what a partner programme might offer later.

What is here

Everything below is live now and needs no account, no key and no agreement. That is not generosity — it is that issuing keys would mean keeping a register of who is integrating, which is a record this site would rather not hold. The limits are per address instead.

EndpointLimitBrowser
GET /api/measuredEvery provider's measured record: how often it answered when asked, how far behind the best quote in the same fan-out it sat, and how often it was the best. Free, keyless, and published as a dataset so it can be cited rather than scraped.600 / houryes
GET /api/exchange/compareEvery provider's price for one pair, amount and moment, best first — with the ones that were barred, unconfigured, rate-limited or that failed reported separately rather than silently missing. Takes &markup= to apply your own commission.300 / hourserver only
GET /api/route/planA transfer routed through Monero and out at a different provider, priced hop by hop.60 / hourserver only
POST /api/pay/quoteWhat a payer must send for a stated amount to arrive. Two passes across every provider, which is why it is counted hardest.30 / hourserver only

“Browser” means whether the endpoint sends Access-Control-Allow-Origin. Only the measured record does. The others are reachable from your server and not from a page on your own domain — a comparison is ten or more provider requests, and opening that to any origin would spend somebody else’s rate limit on our behalf. If you need it from a browser, ask.

The measured record, which is the part worth having

The other three endpoints do what several services do. This one does not exist anywhere else: every time anyone prices a transfer here, 16 providers are asked at the same moment for the same pair, and the answers are kept.

Two figures come out of that. Answer rate is how often a provider produced a price when asked, which is a measure of whether it will be there when somebody needs it. Shortfall is its mean gap to the best quote in the same fan-out — the same pair, the same instant — which is the only way those numbers compare between providers. A margin measured against a market price is not comparable, because each provider answers a different subset of pairs and a thin coin’s benchmark drags the figure around.

It is published free and marked up as a dataset. Cite it, chart it, or check our own providers page against it — the page reads the same numbers.

curl https://www.crypto-train.com/api/measured

What is not here

No partner accounts, and no settlement. A markup can be applied to quotes — see below — but there is no mechanism that pays it to you. Collecting it is an arrangement rather than a feature, so tell us what you are building and we will work out terms rather than pretend a scheme exists.

No uptime promise. This is one deployment run by a small team, and the providers behind it have their own outages — one of them was unreachable for part of the day this page was written, which the measured record now carries forever. Build accordingly.

No stability guarantee on shapes. Fields get added. When one has to change meaning rather than appear, the cache key or the path gets a version so an old reader fails loudly instead of quietly reading the wrong thing.

Charging your own commission

Add &markup=1 to a comparison and every quote comes back one percent lower, uniformly. Anything from 0 to 5 is accepted; above that it is clamped, and the figure actually applied is reported back in the response so you can show your user what was taken.

It is applied to the quote, not only when an order is created, and that is deliberate. A markup that appeared between the price somebody accepted and the amount that arrived would be a quiet lie, however small — the rule this site follows is that an exchange paying less than the panel promised is a worse fault than commission left uncollected.

It is taken in one place rather than forwarded to each provider. Six of the 16 accept a markup of their own and every one of them takes it differently — a percent, a fraction, a number on a scale belonging to them, set per request by some and once per account by others — and three accept none at all. Applying it here means every provider is marked up identically and your rate does not silently depend on which one happened to win.

It does not reach the measured record. That dataset says how providers perform against each other, and letting a caller’s commission into it would drag the figures by whatever each partner charges — so the history keeps what the provider actually quoted, and the markup exists only in the answer you were given.

One thing worth saying plainly to whoever you build for, because we say it here: a markup above zero makes the rate worse for the person paying. It comes out of their payout, not out of the provider’s margin.

If you integrate this

Two requests, neither enforced. Cache what you can — the measured record moves slowly and a quote does not need re-fetching per keystroke. And if you publish figures from it, date them: these numbers change hourly, and an undated measurement is a claim rather than a record.

Tell us what you built, through the Contact us button on any page. Not for permission — you have it — but because knowing what depends on an endpoint is the only way to avoid breaking it.

Plan an exchange

No account, no sign-up, and nothing is held here — your browser pays each provider directly.

Questions about any of this? The source is the authority — everything described here can be checked against it.