Cont și catalog
Jokes, funniest first
GET/v1/jokes
Jokes rated and translated once by a model: how funny (`score`), how well they land in Moldova (`md_score`), from what age (`min_age`), whether a child may hear it (`kids_ok`), 18+ (`adult`), what they contain (`flags`) and their topics. The text is in the request's language, and a joke whose point is lost there is not listed in it (`langs` says where it works). Funniest first. `q` matches every word in any language's text or a topic's name, and any word when no joke has them all. Costs 1 credit per 20 rows, 2 with `q`.
Parametri
-
qstringopționalCuvinte de căutat.
-
topicstring: family, couples, kids, school, work, doctors, police, animals, money, drinking, food, tech, travel, sport, old_age, mother_in_law, neighbours, village, army, law, religion, politics, bula, ion_maria, blondes, regions, wordplay, dark, otheropționalTema actului.
-
kindstring: joke, riddle, proverb, quoteopționalOnly this kind.
-
audiencestring: kids, family, general, adultopționalimplicit generalWho will hear it. `kids`: fit for a child (under 12), up to `max_age` (6 without it). `family`: fit for a child, read out to the whole family. `general` (default): no 18+. `adult`: 18+ too. A joke mocking a people is in `general` and `adult`: leave it out with `exclude_flags=ethnic`.
-
max_ageintegeropționalOnly jokes that suit a listener this young: `min_age` at or under it.
-
min_scoreintegeropționalOnly jokes at or above this score (0-100, how funny). Without it 40 for `kids`, 50 for the rest.
-
exclude_flagsstringopționalA comma list of flags to leave out, such as `alcohol,politics`.
-
pageintegeropționalimplicit 1Pagina, de la 1.
-
perintegeropționalimplicit 20Rânduri pe pagină, cel mult 20.
Erori posibile
curl "https://api.satelit.md/v1/jokes" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/jokes", {
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/jokes",
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/jokes");
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"]); The joke of the day
GET/v1/jokes/today
One joke for the whole Chisinau day, the same in every answer and language: a family joke that works in all four languages, not the day's joke again within a year. With `topic`, the day's joke of that topic. Costs 1 credit.
Parametri
-
topicstring: family, couples, kids, school, work, doctors, police, animals, money, drinking, food, tech, travel, sport, old_age, mother_in_law, neighbours, village, army, law, religion, politics, bula, ion_maria, blondes, regions, wordplay, dark, otheropționalTema actului.
Erori posibile
curl "https://api.satelit.md/v1/jokes/today" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/jokes/today", {
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/jokes/today",
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/jokes/today");
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"]); A joke not yet shown
GET/v1/jokes/random
One joke among the funniest that fit the filters and none of `seen`: what an app tells a user who asks for another, without repeating itself. 404 when every one that fits was seen. Costs 1 credit.
Parametri
-
topicstring: family, couples, kids, school, work, doctors, police, animals, money, drinking, food, tech, travel, sport, old_age, mother_in_law, neighbours, village, army, law, religion, politics, bula, ion_maria, blondes, regions, wordplay, dark, otheropționalTema actului.
-
kindstring: joke, riddle, proverb, quoteopționalOnly this kind.
-
audiencestring: kids, family, general, adultopționalimplicit generalWho will hear it. `kids`: fit for a child (under 12), up to `max_age` (6 without it). `family`: fit for a child, read out to the whole family. `general` (default): no 18+. `adult`: 18+ too. A joke mocking a people is in `general` and `adult`: leave it out with `exclude_flags=ethnic`.
-
max_ageintegeropționalOnly jokes that suit a listener this young: `min_age` at or under it.
-
min_scoreintegeropționalOnly jokes at or above this score (0-100, how funny). Without it 40 for `kids`, 50 for the rest.
-
exclude_flagsstringopționalA comma list of flags to leave out, such as `alcohol,politics`.
-
seenstringopționalIds already shown to this user, comma separated, at most 200.
Erori posibile
curl "https://api.satelit.md/v1/jokes/random" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/jokes/random", {
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/jokes/random",
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/jokes/random");
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"]); Joke topics
GET/v1/jokes/topics
Every topic with jokes for this audience in the request's language, with its name and how many, most first. Costs 1 credit.
Parametri
-
audiencestring: kids, family, general, adultopționalimplicit generalWho will hear it. `kids`: fit for a child (under 12), up to `max_age` (6 without it). `family`: fit for a child, read out to the whole family. `general` (default): no 18+. `adult`: 18+ too. A joke mocking a people is in `general` and `adult`: leave it out with `exclude_flags=ethnic`.
Erori posibile
curl "https://api.satelit.md/v1/jokes/topics" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/jokes/topics", {
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/jokes/topics",
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/jokes/topics");
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"]); One joke
GET/v1/jokes/{id}
A joke with its title and text in every language its point works in. Costs 1 credit.
Parametri
-
idstringobligatoriuIdentificatorul rândului.
Erori posibile
curl "https://api.satelit.md/v1/jokes/{id}" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/jokes/{id}", {
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/jokes/{id}",
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/jokes/{id}");
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"]); Contul meu
GET/v1/me
Planul, creditele, limita pe minut și cheia folosită. Nu costă credite.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/me" \
-H "Authorization: Bearer $SATELIT_KEY" const res = await fetch("https://api.satelit.md/v1/me", {
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/me",
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/me");
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"]); {
"data": {
"plan": "creator",
"credits": {
"limit": 30000,
"used": 4210,
"reset": "2026-12-01T00:00:00+02:00",
"plan": 30000,
"extra": 0
},
"rate": {
"per_minute": 120
},
"key": {
"name": "blog",
"prefix": "sat_live_a1b"
}
},
"meta": {
"credits": 0
}
}Catalogul
GET/v1/products
Toate produsele, cu starea și costul lor.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/products" const res = await fetch("https://api.satelit.md/v1/products");
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/products",
)
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/products");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": {
"products": [
{
"key": "rates",
"state": "open",
"freshness": "daily 13:00",
"endpoints": [
{
"path": "/v1/rates",
"credits": 1
}
]
}
],
"shops": {
"open": 90,
"offers": 1401871
},
"downloads": [
{
"product": "places",
"url": "https://api.satelit.md/downloads/places-osm.ndjson.gz",
"license": "ODbL 1.0, © OpenStreetMap contributors"
}
]
},
"meta": {
"credits": 0,
"attribution": "Sursa: Banca Națională a Moldovei, bnm.md, CC BY 4.0",
"notice": "Aceleași date sunt gratuite la bnm.md."
}
}Planurile
GET/v1/plans
Cele cinci planuri, cu limitele lor.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/plans" const res = await fetch("https://api.satelit.md/v1/plans");
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/plans",
)
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/plans");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": {
"plans": [
{
"key": "start",
"name": "Start",
"price": 9,
"credits": 5000,
"per_minute": 30
}
],
"pack": 10000,
"packs_max": 50,
"recommended": "pro",
"currency": "EUR",
"year_months": 10
},
"meta": {
"credits": 0
}
}Starea
GET/v1/status
Când s-a actualizat ultima oară fiecare produs și dacă datele sunt vechi.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/status" const res = await fetch("https://api.satelit.md/v1/status");
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/status",
)
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/status");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": {
"ok": true,
"products": [
{
"key": "rates",
"updated_at": "2026-11-02T13:05:00+02:00",
"stale": false
},
{
"key": "news",
"updated_at": "2026-11-02T13:05:00+02:00",
"stale": false
}
]
},
"meta": {
"credits": 0
}
}How much data there is
GET/v1/stats
Counts of every open product, counted hourly from the tables: offers, products, price history, laws, news, tours, flights, places. Numbers only, no row. No key.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/stats" const res = await fetch("https://api.satelit.md/v1/stats");
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/stats",
)
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/stats");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": {
"counts": {
"shops_open": 90,
"offers": 1401871,
"products": 1177368,
"price_points": 1747064,
"price_history_from": "2026-10-28",
"ads_live": 605637,
"ads_native": 0,
"tours_offers": 10943,
"tours_agencies": 5,
"tours_countries": 22,
"flights_destinations": 49,
"flights_per_week": 297,
"fares_cities": 80,
"rest_places": 1437,
"estate_listings": 21074,
"estate_cities": 17,
"news_rows": 5491,
"news_articles": 304,
"news_outlets": 40,
"news_from": "2026-10-02",
"acts": 110413,
"acts_issuers": 198,
"acts_from": "1961-04-24",
"fuel_networks": 80,
"fuel_stations": 548,
"currencies": 5,
"rates_from": "2026-08-06",
"tariffs": 7,
"recipes": 70,
"shops": 7651,
"venues": 3355,
"chain_shops": 2745,
"chains": 89,
"as_of": "2026-11-06"
},
"updated_at": "2026-11-06T11:13:43+02:00"
},
"meta": {
"credits": 0,
"updated_at": "2026-11-06T11:13:43+02:00",
"sources": []
}
}Exemplul fără cheie
GET/v1/sample
Prețul unui produs de bază, două valute, plafonul, cea mai ieftină rețea, trei știri mai vechi de 3 ore și digestul zilei. Limită: 60 de apeluri pe minut, pe IP.
Parametri
Fără parametri.
Erori posibile
curl "https://api.satelit.md/v1/sample" const res = await fetch("https://api.satelit.md/v1/sample");
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/sample",
)
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/sample");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($body["data"]); {
"data": {
"rates": [
{
"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": "Dolar SUA",
"value": 17.9476,
"nominal": 1,
"date": "2026-11-02",
"change_7d_pct": -0.6,
"change_30d_pct": 0.8
}
],
"fuel": {
"cap": {
"a95": 31.4,
"diesel": 36.28
},
"cheapest": {
"a95": "gloria-qvarc",
"diesel": "tlx",
"lpg": "tlx"
}
},
"news": [
{
"id": "n_a245",
"kind": "article",
"category": {
"key": "economy",
"label": "Economie și prețuri"
},
"title": "Ministerul Energiei propune contribuții de 966 de milioane de lei pentru renovarea locuințelor",
"dek": "Ministerul Energiei propune ca, în 2027-2029, consumatorii să plătească prin tarife și prețuri circa 966 de milioane de lei pentru renovarea locuințelor.",
"gravity": 74,
"band": "high",
"reach": 3,
"region": null,
"regions": [],
"slot": null,
"due_at": "2026-11-02T13:11:55Z",
"published_at": "2026-11-02T13:11:55Z",
"sources": [
{
"name": "Moldova 1",
"url": "https://moldova1.md/p/89169/aproape-un-miliard-de-lei-pentru-renovarea-locuintelor-pana-in-2029-contributiile-incluse-in-tarifele-la-energie-si-pretul-carburantilor"
}
],
"sources_count": 1,
"image": null
},
{
"id": "n_b14748",
"kind": "brief",
"category": {
"key": "education",
"label": "Educație"
},
"title": "Guvernul pregătește peste un miliard de lei pentru școlile din Chișinău în perioada 2026-2030",
"dek": null,
"gravity": 26,
"band": "moderate",
"reach": 1,
"region": null,
"regions": [],
"slot": null,
"due_at": "2026-11-02T15:20:03Z",
"published_at": "2026-11-02T15:20:03Z",
"sources": [
{
"name": "Cotidianul",
"url": "https://cotidianul.md/41806/video-unde-ivan-ceban-nu-a-investit-ani-la-rand-intervine-guvernul-dan-perciun-anunta-modernizarea-gimnaziului-nr-86-si-investitii-de-peste-un-miliard-de-lei-in-scolile-din-chisinau/"
}
],
"sources_count": 1,
"image": null
},
{
"id": "n_b14219",
"kind": "brief",
"category": {
"key": "education",
"label": "Educație"
},
"title": "Bacalaureatul din 2027 va avea sesiunea de bază între 2 și 18 iunie, iar probele încep la ora 9:00",
"dek": null,
"gravity": 14,
"band": "low",
"reach": 1,
"region": null,
"regions": [],
"slot": null,
"due_at": "2026-11-02T05:00:19Z",
"published_at": "2026-11-02T05:00:19Z",
"sources": [
{
"name": "Ea.md",
"url": "https://ea.md/emotii-pentru-absolventi-in-ce-perioada-se-va-desfasura-bac-ul-din-2027/"
}
],
"sources_count": 1,
"image": null
}
],
"law": {
"date": "2026-11-03",
"title": "Noutăți legislative: 3 noiembrie 2026",
"acts": 2
},
"price": {
"name": "Griș, arpacaș și alte crupe",
"min_price": 5.95,
"store": "Kaufland"
},
"updated_at": "2026-11-03T10:32:00.827Z"
},
"meta": {
"credits": 0,
"updated_at": "2026-11-03T10:32:00.827Z",
"sources": [
{
"name": "BNM",
"url": "https://www.bnm.md/ro/official_exchange_rates",
"license": "CC BY 4.0"
},
{
"name": "ANRE",
"url": "https://anre.md",
"license": "Public data of ANRE"
},
{
"name": "Satelit",
"url": "https://satelit.md",
"license": "Satelit"
},
{
"name": "Monitorul Oficial",
"url": "https://monitorul.gov.md",
"license": "none: read from the source's public pages; no agreement with the source and no licence over its data is granted"
}
],
"attribution": "Sursa: Banca Națională a Moldovei, bnm.md, CC BY 4.0",
"notice": "Aceleași date sunt gratuite la bnm.md."
}
}