Figer une sélection pays × indicateurs et ses valeurs réelles sous un identifiant immuable, la partager (oEmbed, page HTML canonique), l'exporter en JSON/CSV/SVG et autres formats, ou obtenir un graphique SVG autonome sans passer par une capture.
/api/captureFige une sélection pays × indicateurs et ses valeurs réelles sous un identifiant immuable. Requiert une session (cookie) ou une clé API — la création n'est pas anonyme.
curl -X POST -H "X-API-Key: $ATLAS_KEY" -H "Content-Type: application/json" \
-d '{"countries":["FRA","DEU"],"indicators":["NY.GDP.MKTP.CD"],"start":2018,"end":2022}' \
"https://atlasfeed.fr/api/capture"import requests
r = requests.post(
"https://atlasfeed.fr/api/capture",
headers={"X-API-Key": ATLAS_KEY},
json={
"countries": ["FRA", "DEU"],
"indicators": ["NY.GDP.MKTP.CD"],
"start": 2018,
"end": 2022,
},
)
print(r.json())fetch("https://atlasfeed.fr/api/capture", {
method: "POST",
headers: { "X-API-Key": ATLAS_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
countries: ["FRA", "DEU"],
indicators: ["NY.GDP.MKTP.CD"],
start: 2018,
end: 2022,
}),
}).then(r => r.json()).then(console.log);{"id": "4761xbw1lGI", "url": "/c/4761xbw1lGI"}/api/capture/{capture_id}Projection d'une capture figée. format=json est la projection native ; 11 autres formats la mettent en forme (html/pdf redirigent vers /c/{id}, csv/markdown/bibtex/python/r en texte, svg/png en image, xlsx/pptx en Office). Un format connu mais non implémenté par ce déploiement renvoie 501, pas 404 (la capture existe, c'est la projection qui manque — cas de png sans l'extra png installé).
curl "https://atlasfeed.fr/api/capture/4761xbw1lGI?format=json"
import requests
r = requests.get("https://atlasfeed.fr/api/capture/4761xbw1lGI", params={"format": "json"})
print(r.json())fetch("https://atlasfeed.fr/api/capture/4761xbw1lGI?format=json")
.then(r => r.json())
.then(console.log);{
"id": "4761xbw1lGI",
"createdAt": "2026-09-09T11:59:35.011662+00:00",
"lastViewedAt": null,
"countries": [
{"code": "FRA", "name": "France", "flagEmoji": "🇫🇷"},
{"code": "DEU", "name": "Allemagne", "flagEmoji": "🇩🇪"}
],
"indicators": [
{
"code": "NY.GDP.MKTP.CD", "label": "PIB", "theme": "Économie", "unit": "US$ courants",
"fmt": "currency", "headline": true,
"attribution": {"source": "worldbank", "organization": "World Bank", "url": "https://data.worldbank.org", "retrievedOn": "2026-09-09", "citation": "World Bank, consulté via Atlas le 2026-09-09."}
}
],
"series": [
{"country": "FRA", "indicator": "NY.GDP.MKTP.CD", "points": [{"year": 2018, "value": 2781576320884.39}], "unavailable": false}
]
}/api/capture/{capture_id}Supprime une capture et son lien d'appartenance — uniquement pour son propriétaire.
require_session + require_csrf), pas par X-API-Key — elle sert l'interface /compte/ du site Atlas, pas une intégration API externe. Incluse ici à titre de référence.curl -X DELETE "https://atlasfeed.fr/api/capture/4761xbw1lGI" \ -H "Cookie: atlas_session=..." \ -H "X-Atlas-CSRF: 1"
import requests
r = requests.delete(
"https://atlasfeed.fr/api/capture/4761xbw1lGI",
cookies={"atlas_session": "..."},
headers={"X-Atlas-CSRF": "1"},
)
print(r.json())fetch("https://atlasfeed.fr/api/capture/4761xbw1lGI", {
method: "DELETE",
credentials: "include",
headers: { "X-Atlas-CSRF": "1" }
}).then(r => r.json()).then(console.log);{"ok": true}/api/oembedPoint d'entrée oEmbed pour les captures, découvert via la balise <link rel="alternate" type="application/json+oembed"> de /c/{id}. N'accepte que ses propres URL de capture. Ne déclenche jamais de comptage de consultation (un aperçu robot de réseau social n'est pas une consultation humaine).
curl "https://atlasfeed.fr/api/oembed?url=https://atlasfeed.fr/c/4761xbw1lGI"
import requests
r = requests.get(
"https://atlasfeed.fr/api/oembed",
params={"url": "https://atlasfeed.fr/c/4761xbw1lGI"},
)
print(r.json())fetch("https://atlasfeed.fr/api/oembed?url=https://atlasfeed.fr/c/4761xbw1lGI")
.then(r => r.json())
.then(console.log);/c/{capture_id}Page HTML canonique d'une capture — tableau des valeurs figées et attribution, faite pour être citée ou imprimée sans dépendance JS.
curl "https://atlasfeed.fr/c/4761xbw1lGI"
import requests
r = requests.get("https://atlasfeed.fr/c/4761xbw1lGI")
print(r.text[:200])fetch("https://atlasfeed.fr/c/4761xbw1lGI")
.then(r => r.text())
.then(html => console.log(html.slice(0, 200)));Contenu : text/html. Page HTML complète (tableau des valeurs, attribution des sources, balise oEmbed de découverte), pas une réponse JSON. <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>PIB — 2 pays — atlas</title> <meta name="description" content="2 pays × 1 indicateurs, valeurs figées le 2026-09-09"> ...
/api/chart/timeseries.svgGraphique SVG autonome (une série, un pays), embarquable — gratuit, hors tunnel de paiement.
curl "https://atlasfeed.fr/api/chart/timeseries.svg?indicator=NY.GDP.MKTP.CD&country=FRA" \ -o pib-france.svg
import requests
r = requests.get(
"https://atlasfeed.fr/api/chart/timeseries.svg",
params={"indicator": "NY.GDP.MKTP.CD", "country": "FRA"},
)
open("pib-france.svg", "wb").write(r.content)const img = document.createElement("img");
img.src = "https://atlasfeed.fr/api/chart/timeseries.svg?indicator=NY.GDP.MKTP.CD&country=FRA";
document.body.appendChild(img);Contenu : image/svg+xml. En-tête Cache-Control: public, max-age=3600.
Note : cette route ne rend que du SVG — elle n'a pas de paramètre "format", et un
"?format=png" y serait simplement ignoré. Pour un PNG, passer par une capture :
GET /api/capture/{capture_id}?format=png (501 si l'extra "png" (CairoSVG) est absent
du déploiement).
<svg viewBox="0 0 480 260" width="480" height="260" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="PIB — France">
<text x="54" y="20" style="font:500 13px sans-serif;fill:#333">PIB — France</text>
<path d="M54 210 H460" stroke="#888" stroke-width="1" opacity="0.25"></path>
.../api/chart/compare.svgGraphique SVG autonome en barres — un pays par indicateur, à une année donnée (ou la dernière disponible). Gratuit, hors tunnel de paiement.
curl "https://atlasfeed.fr/api/chart/compare.svg?countries=FRA,DEU&indicator=NY.GDP.MKTP.CD" \ -o pib-comparaison.svg
import requests
r = requests.get(
"https://atlasfeed.fr/api/chart/compare.svg",
params={"countries": "FRA,DEU", "indicator": "NY.GDP.MKTP.CD"},
)
open("pib-comparaison.svg", "wb").write(r.content)const img = document.createElement("img");
img.src = "https://atlasfeed.fr/api/chart/compare.svg?countries=FRA,DEU&indicator=NY.GDP.MKTP.CD";
document.body.appendChild(img);Contenu : image/svg+xml. <svg viewBox="0 0 480 260" width="480" height="260" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="PIB"> <text x="54" y="20" style="font:500 13px sans-serif;fill:#333">PIB</text> <path d="M54 210.0 H460" stroke="#888" stroke-width="1" opacity="0.35"></path> <rect x="94.6" y="96.7" width="...
/api/coverageCe qu'Atlas possède réellement, pays par pays — alimente le globe de couverture de l'accueil. Le dénominateur exclut les indicateurs dont la collecte a échoué et Data360 (échantillon extrapolé jeté, jamais compté).
curl "https://atlasfeed.fr/api/coverage"
import requests
r = requests.get("https://atlasfeed.fr/api/coverage")
print(r.json())fetch("https://atlasfeed.fr/api/coverage")
.then(r => r.json())
.then(console.log);{
"fenetre": [2015, 2025],
"denominateur": 691,
"catalogue_total": 3708,
"pays": {
"ABW": {
"total": 241, "part": 0.3488,
"sources": [
{"cle": "owid", "nom": "Our World in Data", "total": 147},
{"cle": "worldbank", "nom": "World Bank", "total": 88},
{"cle": "ember", "nom": "Ember", "total": 6}
]
}
}
}