Your first call, in three steps.
The base is https://api.satelit.md/v1. HTTPS, JSON, UTF-8. The API is read-only.
-
Choose a plan and get a key
You request a plan in the dashboard with your Satelit account. Once it is on, you create a key. You see it only once. It looks like this:
sat_live_…. -
Make the call
Send the key in the
Authorizationheader.curl "https://api.satelit.md/v1/rates" \ -H "Authorization: Bearer $SATELIT_KEY"const res = await fetch("https://api.satelit.md/v1/rates", { headers: { Authorization: `Bearer ${process.env.SATELIT_KEY}` }, }); const { data, meta } = await res.json(); console.log(data, meta.credits);import json, os, urllib.request req = urllib.request.Request( "https://api.satelit.md/v1/rates", headers={"Authorization": f"Bearer {os.environ['SATELIT_KEY']}"}, ) with urllib.request.urlopen(req) as res: body = json.load(res) print(body["data"], body["meta"]["credits"])<?php $ch = curl_init("https://api.satelit.md/v1/rates"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("SATELIT_KEY")], ]); $body = json_decode(curl_exec($ch), true); curl_close($ch); print_r($body["data"]); -
Read the response
dataholds the answer,metaholds the credits, the date and the sources. The headers tell you how much you have left.{ "data": [ { "code": "EUR", "name": "Euro", "value": 20.0905, "nominal": 1, "date": "2026-11-02", "change_7d_pct": -0.6, "change_30d_pct": -0.1 }, { "code": "USD", "name": "US dollar", "value": 17.9476, "nominal": 1, "date": "2026-11-02", "change_7d_pct": -0.6, "change_30d_pct": 0.8 }, { "code": "RON", "name": "Romanian leu", "value": 3.7628, "nominal": 1, "date": "2026-11-02", "change_7d_pct": -0.5, "change_30d_pct": -1.2 }, { "code": "UAH", "name": "Ukrainian hryvnia", "value": 0.3958, "nominal": 1, "date": "2026-11-02", "change_7d_pct": 0, "change_30d_pct": -0.2 }, { "code": "RUB", "name": "Russian ruble", "value": 0.2228, "nominal": 1, "date": "2026-11-02", "change_7d_pct": -0.5, "change_30d_pct": 4.5 } ], "meta": { "credits": 1, "updated_at": "2026-11-02T13:05:00+02:00", "sources": [ { "name": "BNM", "url": "https://www.bnm.md/ro/official_exchange_rates", "license": "CC BY 4.0" } ], "attribution": "Sursa: Banca Națională a Moldovei, bnm.md, CC BY 4.0", "notice": "The same data is free at bnm.md." } }
Without a key
GET /v1/sample works without a key: rate, cap, news and the day's digest. This is how you see the shape of the data before you sign in.
Conventions
- Language:
?lang=ro|ru|en|uk, defaultro. - Dates:
YYYY-MM-DD. Times are ISO 8601, with a time zone. - Money: in lei (MDL), as numbers.
- Methods: GET, HEAD and OPTIONS. The API only reads.
- CORS:
*, no cookies. You can call the API straight from the browser, but do not put a paid key in a public page.
The response envelope
All routes answer the same way. meta.attribution is the line your plan requires you to show on the page. meta.page appears only on lists.
{
"data": "…",
"meta": {
"credits": 2,
"updated_at": "2026-11-02T13:05:00+02:00",
"sources": [
{
"name": "ANRE",
"url": "https://anre.md/",
"license": "Public data of ANRE"
}
],
"attribution": "Date: Satelit (satelit.md)",
"page": {
"page": 1,
"per": 20,
"total": 240,
"pages": 12
}
}
}Guides
- AuthenticationThe key, the headers and what the API does with it.
- Credits and limitsCredits, per-minute limits, headers, 429.
- ErrorsEvery error code and what to do when it appears.
- WebhooksEvents sent to you, with a signature.
- OAuth and OpenID“Sign in with Satelit” on your site, with PKCE.
- MCP serverSatelit in a person's AI app: protocol, OAuth, tools.
- API referenceAll routes, with parameters and examples.