UniRateAPI public
unirateapi.com · 2 records in Data APIs · JSON
Records 2
- caveatUniRateAPI
Data APIsfree tieridentity emailno cardlimit request-rateevidence documentedstale on 2026-12-03
- caveatUniRateAPI public widget endpoint
Data APIsfree tieridentity anonymousno cardlimit request-rateevidence measuredstale on 2027-01-02
UniRateAPI
Data APIs- Free allowance
- Free tier USD 0 per month: 200 requests per day (6,000 per month) and 30 requests per minute, 170+ fiat currencies and 500+ cryptocurrencies, real-time exchange rates, currency conversion, EU VAT rates, IBAN validation, public holiday and business-day calendars, central bank policy rates and CPI...
- Verdict
- caveatusable, with a named limit or an unprobed read path
- Cost
- free tier
- Identity
- emailno card, no phone
- Binding limit
- request-rate200 requests per day (6,000 per month) on the Free tier, reset at 00:00 UTC; 30 requests per minute on the Free tier
- Evidence
- documented42 sources; a first-party page was read and the sentence quoted
- Freshness
- stale on 2026-12-03checked 2026-11-02 (live); stale on 2026-12-03
| Free tier | Free tier USD 0 per month: 200 requests per day (6,000 per month) and 30 requests per minute, 170+ fiat currencies and 500+ cryptocurrencies, real-time exchange rates, currency conversion, EU VAT rates, IBAN validation, public holiday and business-day calendars, central bank policy rates and CPI inflation; no historical data access. unit requests; metered on request-count; Limits reset at 00:00 UTC; at the limit the API answers HTTP 429 with a reset timestamp and there are no overage charges. Historical rates, time series, precious metals and commodities are on Pro at USD 9 a month with 25,000 requests per day and 1,000 historical requests per day. A keyless widget endpoint on the same host is recorded separately. |
|---|---|
| Price | none stated |
| Limits |
Plan gating: Free has no historical data access; historical rates, time series, precious metals, commodities, VAT number validation and market calendars are Pro. Bulk path: one rates call for a base returns a map of rates. |
| Binding | request-rate 200 requests a day is met long before 30 per minute could be. |
| Identity | email The register page offers Sign up with Google or an email, a password and a password confirmation with a how-did-you-hear-about-us field; the pricing page says the Free tier needs no credit card. |
| Egress | not metered in bytes; the 200 requests a day bound what a free key can pull |
| Per-object cap | unverified: no per-response cap is stated on the pages read |
| Retention | not applicable: a query API with no stored objects; the Free tier has no historical data access |
| Interface | rest GET https://api.unirateapi.com/api/{endpoint} (rates, convert, currencies, historical, vat, iban, calendar, macro) with the key in the api_key query parameter; JSON, XML or JSONP, with an OpenAPI document at https://api.unirateapi.com/apispec_1.json. endpoint: https://api.unirateapi.com/api/rates |
| Tooling | any HTTP client; code samples for Python, Node.js, Go, PHP and cURL |
| Composes with | 200 requests a day of fiat and crypto rates with VAT, IBAN, holiday and central bank data but no history, so a free stack caches one rates call per refresh; the keyless widget endpoint of the same vendor serves rates at 60 requests a minute per IP, and history needs Pro or another source. |
| Reliability | At the limit the API answers HTTP 429 with a reset timestamp; a call with no key answered HTTP 401 Missing API key. |
| Notes | Free has no historical data; Pro at USD 9 a month adds historical rates since 1999, time series, precious metals and commodities. |
| Evidence note | documented The tier, limits and features are read from the first-party pricing, home and forex pages, and a keyless call answered HTTP 401. A free key was not exercised, so the answer at the limit is unverified: behind a sign-up. |
| Parsed numbers |
|
Evidence 42
| date | source | what it proved |
|---|---|---|
| 2026-11-02 | unirateapi.com/pricing | the Free tier is USD 0 a month |
| 2026-11-02 | unirateapi.com/pricing | the Free tier allows 200 requests a day, 6,000 a month |
| 2026-11-02 | unirateapi.com/pricing | the Free tier covers 170+ fiat currencies |
| 2026-11-02 | unirateapi.com/pricing | the Free tier covers 500+ cryptocurrencies |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes real-time exchange rates |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes currency conversion |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes EU VAT rates |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes IBAN validation |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes holiday and business-day calendars for 250 countries |
| 2026-11-02 | unirateapi.com/pricing | the Free tier includes central bank policy rates and CPI inflation |
| 2026-11-02 | unirateapi.com/pricing | the Free tier has no historical data access |
| 2026-11-02 | unirateapi.com/pricing | the next plan up, Pro, is USD 9 a month |
| 2026-11-02 | unirateapi.com/pricing | Pro adds historical data access from 1999 |
| 2026-11-02 | unirateapi.com/pricing | Pro adds time series data |
| 2026-11-02 | unirateapi.com/pricing | Pro adds a precious metals API |
| 2026-11-02 | unirateapi.com/pricing | Pro adds 19 commodities |
| 2026-11-02 | unirateapi.com/pricing | Pro adds VAT number validation |
| 2026-11-02 | unirateapi.com/pricing | Pro adds exchange market calendars and FX spot value dates |
| 2026-11-02 | unirateapi.com/pricing | Pro allows 25,000 requests a day |
| 2026-11-02 | unirateapi.com/pricing | Pro allows 1,000 historical requests a day |
| 2026-11-02 | unirateapi.com/pricing | past the daily limit the API answers HTTP 429 with the reset time at midnight UTC |
| 2026-11-02 | unirateapi.com/pricing | the Free tier is available forever with no credit card |
| 2026-11-02 | unirateapi.com/ | the Free tier allows 30 requests per minute |
| 2026-11-02 | unirateapi.com/forex-api | at a limit the API answers 429 with a reset timestamp and there are no overage charges |
| 2026-11-02 | unirateapi.com/ | part of the text of Limits, above |
| 2026-11-02 | unirateapi.com/forex-api | responses come as JSON, XML or JSONP |
| 2026-11-02 | unirateapi.com/forex-api | code samples exist for Python, Node.js, Go, PHP and cURL |
| 2026-11-02 | unirateapi.com/register | the register page offers Google sign-in |
| 2026-11-02 | unirateapi.com/register | the register page has an email form with a password and a confirmation |
| 2026-11-02 | unirateapi.com/register | the register form asks for a password confirmation |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the API publishes an OpenAPI document for currency conversion and exchange rates |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a rates endpoint with optional amount conversion |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a historical rates endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a convert endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a currencies endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a VAT rates endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists an IBAN validation endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists a holiday calendar endpoint |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the document lists an inflation endpoint under macro |
| 2026-11-02 | api.unirateapi.com/apispec_1.json | the endpoints take the key in an api_key parameter |
| 2026-11-02 | probe: https://api.unirateapi.com/api/rates?from=USD | a keyless call to the rates endpoint answers HTTP 401 |
| 2026-11-02 | probe: https://api.unirateapi.com/api/rates?from=USD | the keyless 401 body says the API key is missing |
UniRateAPI public widget endpoint
Data APIs- Free allowance
- Keyless endpoint at api.unirateapi.com/api/widget/v1: 60 requests per minute per IP with no API key, signup or credit card; rates refresh hourly.
- Verdict
- caveatusable, with a named limit or an unprobed read path
- Cost
- free tier
- Identity
- anonymousno card, no phone
- Binding limit
- request-rate60 requests per minute per IP, with no authentication; past it the endpoint answers HTTP 429 with Retry-After
- Evidence
- measured16 sources; a live request was made and its output kept
- Freshness
- stale on 2027-01-02checked 2026-11-02 (live); stale on 2027-01-02
| Free tier | Keyless endpoint at api.unirateapi.com/api/widget/v1: 60 requests per minute per IP with no API key, signup or credit card; rates refresh hourly. unit requests; metered on request-count; The widgets page names this endpoint as the data source of its embeddable widgets. GET /widget/v1/rates?base=USD answered the full rate table for a base, fiat and crypto, as JSON; the widget script also calls /widget/v1/currencies, /widget/v1/convert and /widget/v1/vat/all. The keyed Free tier of the same vendor is recorded separately. |
|---|---|
| Price | none stated |
| Limits |
Current data only: the widget routes cover rates, currencies, conversion and VAT rates, with no history route. |
| Binding | request-rate The only limit stated is 60 requests a minute per IP. |
| Identity | anonymous No key, signup or card: the widgets page says the widget pulls rates from the public endpoint with no key, and a keyless GET answered HTTP 200 with a rates table. |
| Egress | not metered in bytes; 60 requests a minute per IP bound what an address can pull |
| Per-object cap | no cap is stated; one rates answer for the base USD was 21969 bytes of JSON |
| Retention | not applicable: a query API with no stored objects; the widget calls serve current rates, currencies, conversions and VAT rates |
| Interface | rest GET https://api.unirateapi.com/api/widget/v1/rates?base=USD, /widget/v1/currencies, /widget/v1/convert?amount=&from=&to= and /widget/v1/vat/all with no key; JSON answers carrying x-ratelimit-burst-limit, x-ratelimit-burst-remaining and x-ratelimit-burst-reset headers. |
| Tooling | any HTTP client; the embeddable widget script at unirateapi.com/lander/static/js/unirate-widgets.js calls the same routes |
| Composes with | Keyless current fiat and crypto rates for any base at 60 requests a minute per IP, so a free stack can refresh a rate table hourly without a key; history, time series and metals need the keyed Pro tier of the same vendor or another source. |
| Reliability | Past the per-minute limit the endpoint answers HTTP 429 with Retry-After 20; it is documented as the data source of the embeddable widgets rather than as a general API, and refreshes hourly. |
| Notes | A keyless public endpoint: current rates, currencies, conversion and VAT rates, 60 requests a minute per IP, hourly refresh. |
| Evidence note | measured The keyless HTTP 200 answer, its size, the burst limit of 60 in its headers and the HTTP 429 answer past it are measured; the hourly refresh and the intended use are read from the widgets page. |
| Parsed numbers |
|
Evidence 16
| date | source | what it proved |
|---|---|---|
| 2026-11-02 | unirateapi.com/widgets | the widget needs no API key, signup or credit card and pulls rates from a public endpoint |
| 2026-11-02 | unirateapi.com/widgets | the public endpoint allows 60 requests per minute per IP with no auth |
| 2026-11-02 | unirateapi.com/widgets | the data refreshes hourly from central bank and exchange sources |
| 2026-11-02 | unirateapi.com/lander/static/js/unirate-widgets.js | the widget script targets the api.unirateapi.com/api host |
| 2026-11-02 | unirateapi.com/lander/static/js/unirate-widgets.js | the widget script calls the rates route with a base |
| 2026-11-02 | unirateapi.com/lander/static/js/unirate-widgets.js | the widget script calls the currencies route |
| 2026-11-02 | unirateapi.com/lander/static/js/unirate-widgets.js | the widget script calls the convert route with an amount and two currencies |
| 2026-11-02 | unirateapi.com/lander/static/js/unirate-widgets.js | the widget script calls the VAT route |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/rates?base=USD | a keyless GET of the rates route answered HTTP 200 |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/rates?base=USD | the answer carries a burst limit header of 60 |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/rates?base=USD | the answer was 21969 bytes of JSON |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/rates?base=USD | the keyless answer is a success flag with a base and a rates table |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/currencies | past the burst limit the endpoint answered HTTP 429 |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/currencies | the 429 answer carried a Retry-After of 20 seconds |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/currencies | the 429 answer reported no burst budget remaining against a limit of 60 |
| 2026-11-02 | probe: https://api.unirateapi.com/api/widget/v1/currencies | the 429 body says the rate limit was exceeded |