POST /api/rfi/tags/articles
Price: 1 credit
List every RFI story filed under one topic tag, newest first. Tags are RFI's own controlled vocabulary of people, places, organisations and themes, and each language edition keeps its own; the tag archive reaches back years. Each entry carries headline, publication time, section, editorial genre label, thumbnail and whether the story is a video.
The deepest way into the RFI archive by subject. tag takes a slug as it appears in a tag URL ('sahel', 'libya', 'migration'), or the full tag URL, in which case lang is ignored. The vocabulary is closed and each edition keeps its own, so the English 'russia' and the Russian 'россия' are different tags over different stories — take slugs from the tags field of rfi/articles rather than guessing, and pass the bare slug rather than a hand-built path, since lang picks the translated path segment the non-Latin editions use. A tag returned by rfi/articles carries its own language, which is not always the article's: the Mandenkan edition files its stories under French tags, so pass that language back rather than the story's. Results are newest first, paginate deeply, and every card here prints a date. The MP3 itself is not on a card — feed web_url into rfi/articles for the body and the audio. The walk stops after 400 listing pages, so a count beyond that comes back short rather than erroring.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)tag string required — RFI tag slug, or the URL of the tag page (examples: "sahel", "libya", "https://www.rfi.fr/en/tag/migration/", "climate"; minLength: 1)count integer required — Max number of articles to return (min: 1)lang string — Language edition the tag slug belongs to; ignored when tag is a full URL (default: "en"; one of: "fr", "en", "es", "pt", "br", "cn", "tw", "vi", "km", "ro", "sw", "ha", "fa", "ru", "ff", "uk", "ma")@type string (default: "RfiArticleCard")article_title string requiredweb_url string requiredalias string requiredpublished_at integer nullablepublished_label string nullablelanguage string requiredsection string nullablelabel string nullableimage string nullableis_audio boolean (default: false)is_video boolean (default: false)422 — Not an RFI tag slug or tag URL Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — RFI has no tag page with this slug in this language edition Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.