Documentation · version 1.00
API de génération audio
Produisez à la demande des contenus d'antenne (météo, info locale, horoscope…) et des créations (spot, promo, jingle, bed, intervention d'animateur) sous forme de MP3 prêts à diffuser. Un appel pour lancer, un pour récupérer le fichier — ou un seul appel en mode synchrone.
Premier appel en 4 étapes
ak_… et le secret sk_… ne sont affichés qu'une fois.curl -u ak_ID:sk_SECRET https://api.4radio.fr/v1/me202 avec un identifiant gen_…) :curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"weather","params":{"department_code":"24"}}' \
https://api.4radio.fr/v1/generationsstatus vaut completed :curl -u ak_ID:sk_SECRET https://api.4radio.fr/v1/generations/gen_xxxxxxxxxxxxxxxxxxxxxx
curl -u ak_ID:sk_SECRET -o meteo.mp3 https://api.4radio.fr/v1/generations/gen_xxxxxxxxxxxxxxxxxxxxxx/filePlus simple encore : ajoutez "wait": true et la réponse est directement le MP3 (mode synchrone).
Authentification
HTTP Basic sur HTTPS : l'identifiant de clé comme nom d'utilisateur, le secret comme mot de passe (ou les en-têtes X-Api-Key / X-Api-Secret).
Authorization: Basic base64(ak_xxxxxxxx:sk_xxxxxxxx)
- Une seule clé par compte ; en générer une nouvelle révoque la précédente. Vous pouvez la révoquer à tout moment.
- Inactivité : sans aucun appel pendant 30 jours, la clé est révoquée (e-mails à J+23 et J+28). Un
GET /v1/mesuffit à la conserver. - Le rechargement automatique de Crédits Studio doit être actif sur le compte.
- 10 échecs d'authentification en 15 minutes bloquent temporairement l'IP et la clé (
429). - Recommandé : dans votre espace Développeur, limitez la clé aux adresses IP de vos serveurs (IPv4/IPv6/CIDR). Un appel depuis une autre adresse est refusé :
403 ip_not_allowed.
Conventions
- Base :
https://api.4radio.fr. Réponses JSON UTF-8, fichiers enaudio/mpeg. Corps des POST en JSON. - Dates ISO 8601 (UTC). Montants en euros (1 crédit = 1 €),
currency: "EUR". lang: ISO 639-1, disponible :fr. Une autre langue renvoie422 unsupported_lang.- Erreurs :
{"error":{"code","message","details?"}}— appuyez votre logique sur lecode(voir codes). - En-têtes :
X-RateLimit-Limit,X-RateLimit-Remaining,X-Api-Version,Retry-Aftersur les 429.
Cycle d'une génération
Chaque génération porte un numéro de commande reference (API-S4R-…, ou API-FIN-… pour le Flash Info Nationale) : c'est celui qui apparaît dans votre historique de crédits et vos productions dans le Studio — le préfixe API- distingue d'un coup d'œil ce qui vient de l'API.
queued → processing → completed ou failed. Le débit a lieu au lancement, au tarif fixe du service. Délai maximal 30 min (au-delà : failed, code timeout).
failed est toujours remboursée (refunded: true) et son file pointe vers un MP3 de silence d'une seconde ("silence": true) : vos automates reçoivent toujours un fichier valide.Objet file une fois la génération finale :
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_…/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_…/file?variant=voice", // voix seule (contenus), sinon null
"format": "audio/mpeg", "size": 812345, "duration": 61.4, "silence": false,
"expires_at": "2026-10-08T10:00:00+00:00" // 7 jours ; dernière version de chaque service conservée sans limite
}
Mode synchrone : le MP3 en un seul appel
Ajoutez "wait": true (ou un nombre de secondes, max 270) au POST /v1/generations : la connexion reste ouverte jusqu'à la fin de la génération et la réponse est directement le fichier MP3 (200, audio/mpeg). Les informations de la génération sont dans les en-têtes X-Generation-Id, X-Generation-Status (completed ou failed → silence), X-Generation-Price, X-Generation-Duration.
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"horoscope","wait":true}' \
-o horoscope.mp3 -D headers.txt https://api.4radio.fr/v1/generations
Si la génération n'est pas terminée avant la fin de l'attente, la réponse est le JSON habituel (202) et vous récupérez le fichier avec GET /v1/generations/{id}/file. Prévoyez un délai client (timeout) d'au moins 300 s.
Sandbox — espace de test
Depuis votre espace Développeur, créez une clé de test (ak_test_… / sk_test_…), séparée de votre clé réelle. Elle s'utilise sur les mêmes adresses, avec les mêmes requêtes : tout est contrôlé comme en réel (service, paramètres, voix, listes fermées, tarif), mais rien n'est produit ni débité et aucune configuration n'est modifiée. La réponse est immédiatement completed ("sandbox": true, référence TEST-…) et le fichier renvoyé est la démo MP3 du service : démo de la voix choisie pour un contenu, démo du format pour une création. Les générations de test restent séparées des réelles (historique, /v1/latest).
curl -u ak_test_ID:sk_test_SECRET -H "Content-Type: application/json" \
-d '{"service":"weather","params":{"department_code":"24"},"wait":true}' \
-o test.mp3 https://api.4radio.fr/v1/generations # → démo MP3, 0 crédit
Les services
Explorateur : choisissez un service, collez vos identifiants, copiez l'exemple
Vos identifiants restent dans votre navigateur (rien n'est envoyé) : ils remplacent ak_ID:sk_SECRET dans tous les exemples de cette page, qui deviennent directement exécutables.
Pour chaque service : ses paramètres avec leur caractère Obligatoire / Nécessaire * / Optionnel, puis un exemple complet et réaliste : la requête, le résultat immédiat, le résultat final et le téléchargement du MP3 — ou la variante tout-en-un.
* Nécessaire (contenus) : la valeur doit exister pour générer — soit fournie dans l'appel, soit déjà enregistrée dans votre espace Studio (elle y est mémorisée à chaque appel qui la fournit). GET /v1/services indique ready et les valeurs en vigueur (current).
national_news0,85 € → 1,18 € Bulletin MétéoMétéo locale du jour, prête à diffuser.
weather1,00 € Info RoutePoint trafic local en temps réel.
traffic1,00 € Point Stations-ServicePrix des carburants autour de la radio.
fuel_prices1,00 € Flash Info LocaleFlash d'actualité locale sourcé.
local_news2,00 € Flash Sport LocalRésultats et actualité sportive locale.
local_sport2,00 € Flash Agenda LocalSorties et événements réels du secteur.
local_agenda1,00 € Point Feux de ForêtSituation incendies à l'échelle choisie.
wildfire0,80 € Horoscope du jourLes 12 signes, ton radio.
horoscope1,00 € Horoscope AmourHoroscope sentimental des 12 signes.
horoscope_love1,00 € Chronique CriminelleUne affaire criminelle racontée.
crime_chronicle1,00 € L'Invention du JourChronique quotidienne d'une invention.
invention_of_the_day1,00 € Journée MondialeLa journée mondiale du jour.
world_day1,00 € Saint du JourLe saint du jour et sa petite histoire.
saint_of_the_day1,00 € Météo des PlagesMer, plages et lieux de baignade.
beach_weather1,00 € Audience TVAudiences télé de la veille.
tv_audience1,00 € Programme TV ce soirLa sélection télé du soir.
tv_tonight1,00 € Spot PubSpot publicitaire voix + musique (voix seule possible).
spot2,50 € Auto-PromoPromo d'antenne 8 à 20 s.
promo2,50 € JingleJingle parlé 3 à 15 s.
jingle1,00 € Jingle MusicalJingle chanté sur un thème musical.
jingle_musical3,00 € Bed / TapisInstrumental de 2 minutes, normalisé.
bed1,00 € Intervention AnimateurIntervention d'animateur de 20 à 25 s.
host_intervention1,00 € → 1,70 €
Contenus
Les valeurs viennent des référentiels (départements, zones, lieux de baignade, voix, tapis) ; les villes sont vérifiées dans le département. Configuration incomplète → 422 config_incomplete, sans débit. Une génération à la fois par service (409 generation_in_progress). Le Flash Info Nationale (journaliste) n'est produit que du lundi au vendredi, hors jours fériés, éditions 7H · 12H · 17H : en dehors, 409 unavailable_now (le champ availability.available_now de GET /v1/services le dit à l'avance).
Flash Info Nationale
national_news
0,85 € / génération
Voix du journaliste 0,85 € ; autre voix (conversion) 1,18 €. Disponible lundi→vendredi hors jours fériés, éditions 7H · 12H · 17H. Flash d'actualité nationale écrit et présenté par un journaliste (7H · 12H · 17H, lundi→vendredi).
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
voice |
Nécessaire * | string | journaliste (voix humaine du journaliste, tarif de base) ou l'identifiant d'une voix de GET /v1/voices?service=national_news (conversion de voix : + 0,33 €). | |
bed |
Optionnel | string |
bed-1 bed-2 bed-3 own none |
Tapis du catalogue, own = votre tapis envoyé (bed_url), none = voix seule. |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) : devient votre tapis personnel et le tapis actif. |
bed_volume_pct |
Optionnel | integer | min 10 · max 100 | Volume du tapis (%). |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"national_news","lang":"fr","params":{"voice":"journaliste","bed":"bed-1","bed_volume_pct":40},"idempotency_key":"national_news-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_b907d41ax4k9m2q7w1e6r3",
"reference": "API-FIN-098D86",
"service": "national_news",
"lang": "fr",
"status": "processing",
"price": 0.85,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_b907d41ax4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_b907d41ax4k9m2q7w1e6r3",
"reference": "API-FIN-098D86",
"service": "national_news",
"lang": "fr",
"status": "completed",
"price": 0.85,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_b907d41ax4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_b907d41ax4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o national_news.mp3 https://api.4radio.fr/v1/generations/gen_b907d41ax4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o national_news.mp3 https://api.4radio.fr/v1/latest/national_news
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"national_news","lang":"fr","params":{"voice":"journaliste","bed":"bed-1","bed_volume_pct":40},"idempotency_key":"national_news-2026-10-01-07h","wait":true}' \
-o national_news.mp3 https://api.4radio.fr/v1/generations
# → national_news.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Bulletin Météo
weather
1,00 € / génération
Météo locale du jour, prête à diffuser.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
include_sunset |
Optionnel | boolean | Annoncer le coucher du soleil. | |
include_tomorrow |
Optionnel | boolean | Ajouter la tendance de demain. | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"weather","lang":"fr","params":{"department_code":"24","voice_id":6,"include_sunset":true,"include_tomorrow":false},"idempotency_key":"weather-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_4cd0d36ex4k9m2q7w1e6r3",
"reference": "API-S4R-AAB92E",
"service": "weather",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_4cd0d36ex4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_4cd0d36ex4k9m2q7w1e6r3",
"reference": "API-S4R-AAB92E",
"service": "weather",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_4cd0d36ex4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_4cd0d36ex4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o weather.mp3 https://api.4radio.fr/v1/generations/gen_4cd0d36ex4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o weather.mp3 https://api.4radio.fr/v1/latest/weather
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"weather","lang":"fr","params":{"department_code":"24","voice_id":6,"include_sunset":true,"include_tomorrow":false},"idempotency_key":"weather-2026-10-01-07h","wait":true}' \
-o weather.mp3 https://api.4radio.fr/v1/generations
# → weather.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Info Route
traffic
1,00 € / génération
Point trafic local en temps réel.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 8 · max 50 | Rayon autour de la ville. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"traffic","lang":"fr","params":{"department_code":"33","city":"Bordeaux","radius_km":25},"idempotency_key":"traffic-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_55602630x4k9m2q7w1e6r3",
"reference": "API-S4R-7C116F",
"service": "traffic",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_55602630x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_55602630x4k9m2q7w1e6r3",
"reference": "API-S4R-7C116F",
"service": "traffic",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_55602630x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_55602630x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o traffic.mp3 https://api.4radio.fr/v1/generations/gen_55602630x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o traffic.mp3 https://api.4radio.fr/v1/latest/traffic
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"traffic","lang":"fr","params":{"department_code":"33","city":"Bordeaux","radius_km":25},"idempotency_key":"traffic-2026-10-01-07h","wait":true}' \
-o traffic.mp3 https://api.4radio.fr/v1/generations
# → traffic.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Point Stations-Service
fuel_prices
1,00 € / génération
Prix des carburants autour de la radio.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 8 · max 50 | Rayon autour de la ville. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"fuel_prices","lang":"fr","params":{"department_code":"24","city":"Périgueux","radius_km":15},"idempotency_key":"fuel_prices-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_d2a287f0x4k9m2q7w1e6r3",
"reference": "API-S4R-AC7291",
"service": "fuel_prices",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_d2a287f0x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_d2a287f0x4k9m2q7w1e6r3",
"reference": "API-S4R-AC7291",
"service": "fuel_prices",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_d2a287f0x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_d2a287f0x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o fuel_prices.mp3 https://api.4radio.fr/v1/generations/gen_d2a287f0x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o fuel_prices.mp3 https://api.4radio.fr/v1/latest/fuel_prices
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"fuel_prices","lang":"fr","params":{"department_code":"24","city":"Périgueux","radius_km":15},"idempotency_key":"fuel_prices-2026-10-01-07h","wait":true}' \
-o fuel_prices.mp3 https://api.4radio.fr/v1/generations
# → fuel_prices.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Flash Info Locale
local_news
2,00 € / génération
Flash d'actualité locale sourcé.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 5 · max 15 | Rayon autour de la ville. |
department2_code |
Optionnel | string | Second département (radio à cheval sur deux zones). Vide = un seul. | |
city2 |
Optionnel | string | max 80 | Ville centrale de la zone 2. |
writing_style |
Optionnel | string |
neutre senior adulte jeune_adulte |
Style d'écriture. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
sector_cities2 |
Optionnel | array | max 10 | Communes de la zone 2 (remplace la liste détectée). |
sector_cities |
Optionnel | array | max 100 | Communes du secteur (remplace la liste détectée automatiquement à partir de city/radius_km). |
source_urls |
Optionnel | array | max 5 | Jusqu'à 5 URL de sites d'information locale (https) utilisés comme sources. |
bed |
Optionnel | string |
bed-1 bed-2 bed-3 none |
Tapis musical du catalogue, ou none (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
bed_volume_pct |
Optionnel | integer | min 10 · max 100 | Volume du tapis (%). |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_news","lang":"fr","params":{"department_code":"24","city":"Périgueux","radius_km":10,"writing_style":"neutre","bed":"bed-1","bed_volume_pct":40},"idempotency_key":"local_news-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_21ccf383x4k9m2q7w1e6r3",
"reference": "API-S4R-899D08",
"service": "local_news",
"lang": "fr",
"status": "processing",
"price": 2,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_21ccf383x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_21ccf383x4k9m2q7w1e6r3",
"reference": "API-S4R-899D08",
"service": "local_news",
"lang": "fr",
"status": "completed",
"price": 2,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_21ccf383x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_21ccf383x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 1891200,
"duration": 118.2,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o local_news.mp3 https://api.4radio.fr/v1/generations/gen_21ccf383x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o local_news.mp3 https://api.4radio.fr/v1/latest/local_news
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_news","lang":"fr","params":{"department_code":"24","city":"Périgueux","radius_km":10,"writing_style":"neutre","bed":"bed-1","bed_volume_pct":40},"idempotency_key":"local_news-2026-10-01-07h","wait":true}' \
-o local_news.mp3 https://api.4radio.fr/v1/generations
# → local_news.mp3 est écrit (118.2 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Flash Sport Local
local_sport
2,00 € / génération
Résultats et actualité sportive locale.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 5 · max 15 | Rayon autour de la ville. |
department2_code |
Optionnel | string | Second département (zone 2). Vide = un seul. | |
city2 |
Optionnel | string | max 80 | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
sector_cities2 |
Optionnel | array | max 10 | Communes de la zone 2 (remplace la liste détectée). |
sector_cities |
Optionnel | array | max 100 | Communes du secteur (remplace la liste détectée automatiquement à partir de city/radius_km). |
source_urls |
Optionnel | array | max 5 | Jusqu'à 5 URL de sites d'information locale (https) utilisés comme sources. |
bed |
Optionnel | string |
bed-1 bed-2 bed-3 none |
Tapis musical du catalogue, ou none (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
bed_volume_pct |
Optionnel | integer | min 10 · max 100 | Volume du tapis (%). |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_sport","lang":"fr","params":{"department_code":"24","city":"Bergerac","radius_km":10,"bed":"bed-2"},"idempotency_key":"local_sport-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_056373d6x4k9m2q7w1e6r3",
"reference": "API-S4R-757594",
"service": "local_sport",
"lang": "fr",
"status": "processing",
"price": 2,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_056373d6x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_056373d6x4k9m2q7w1e6r3",
"reference": "API-S4R-757594",
"service": "local_sport",
"lang": "fr",
"status": "completed",
"price": 2,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_056373d6x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_056373d6x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 1547200,
"duration": 96.7,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o local_sport.mp3 https://api.4radio.fr/v1/generations/gen_056373d6x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o local_sport.mp3 https://api.4radio.fr/v1/latest/local_sport
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_sport","lang":"fr","params":{"department_code":"24","city":"Bergerac","radius_km":10,"bed":"bed-2"},"idempotency_key":"local_sport-2026-10-01-07h","wait":true}' \
-o local_sport.mp3 https://api.4radio.fr/v1/generations
# → local_sport.mp3 est écrit (96.7 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Flash Agenda Local
local_agenda
1,00 € / génération
Sorties et événements réels du secteur.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 5 · max 15 | Rayon autour de la ville. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
sector_cities |
Optionnel | array | max 100 | Communes du secteur (remplace la liste détectée automatiquement à partir de city/radius_km). |
source_urls |
Optionnel | array | max 5 | Jusqu'à 5 URL de sites d'information locale (https) utilisés comme sources. |
bed |
Optionnel | string |
bed-1 bed-2 bed-3 none |
Tapis musical du catalogue, ou none (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
bed_volume_pct |
Optionnel | integer | min 10 · max 100 | Volume du tapis (%). |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_agenda","lang":"fr","params":{"department_code":"24","city":"Sarlat-la-Canéda","radius_km":15,"bed":"none"},"idempotency_key":"local_agenda-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_2b9feaf2x4k9m2q7w1e6r3",
"reference": "API-S4R-C499E6",
"service": "local_agenda",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_2b9feaf2x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_2b9feaf2x4k9m2q7w1e6r3",
"reference": "API-S4R-C499E6",
"service": "local_agenda",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_2b9feaf2x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_2b9feaf2x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 1348800,
"duration": 84.3,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o local_agenda.mp3 https://api.4radio.fr/v1/generations/gen_2b9feaf2x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o local_agenda.mp3 https://api.4radio.fr/v1/latest/local_agenda
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"local_agenda","lang":"fr","params":{"department_code":"24","city":"Sarlat-la-Canéda","radius_km":15,"bed":"none"},"idempotency_key":"local_agenda-2026-10-01-07h","wait":true}' \
-o local_agenda.mp3 https://api.4radio.fr/v1/generations
# → local_agenda.mp3 est écrit (84.3 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Point Feux de Forêt
wildfire
0,80 € / génération
Situation incendies à l'échelle choisie.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
scope |
Optionnel | string |
dept region nat |
Échelle : département, région ou national. |
region_name |
Optionnel | string | liste : voir référentiels | Région (échelle region). Défaut : région du département. |
city |
Optionnel | string | max 80 | Ville centrale (vérifiée dans le département). |
radius_km |
Optionnel | integer | min 5 · max 15 | Rayon autour de la ville. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
sector_cities |
Optionnel | array | max 100 | Communes du secteur (remplace la liste détectée automatiquement à partir de city/radius_km). |
source_urls |
Optionnel | array | max 5 | Jusqu'à 5 URL de sites d'information locale (https) utilisés comme sources. |
bed |
Optionnel | string |
bed-1 bed-2 bed-3 none |
Tapis musical du catalogue, ou none (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
bed_volume_pct |
Optionnel | integer | min 10 · max 100 | Volume du tapis (%). |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"wildfire","lang":"fr","params":{"department_code":"83","scope":"region","region_name":"Provence-Alpes-Côte d'Azur"},"idempotency_key":"wildfire-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_b78786a9x4k9m2q7w1e6r3",
"reference": "API-S4R-FCB05C",
"service": "wildfire",
"lang": "fr",
"status": "processing",
"price": 0.8,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_b78786a9x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_b78786a9x4k9m2q7w1e6r3",
"reference": "API-S4R-FCB05C",
"service": "wildfire",
"lang": "fr",
"status": "completed",
"price": 0.8,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_b78786a9x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_b78786a9x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o wildfire.mp3 https://api.4radio.fr/v1/generations/gen_b78786a9x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o wildfire.mp3 https://api.4radio.fr/v1/latest/wildfire
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"wildfire","lang":"fr","params":{"department_code":"83","scope":"region","region_name":"Provence-Alpes-Côte d'Azur"},"idempotency_key":"wildfire-2026-10-01-07h","wait":true}' \
-o wildfire.mp3 https://api.4radio.fr/v1/generations
# → wildfire.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Horoscope du jour
horoscope
1,00 € / génération
Les 12 signes, ton radio.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"horoscope","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"horoscope-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_4ca15b46x4k9m2q7w1e6r3",
"reference": "API-S4R-30EFB1",
"service": "horoscope",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_4ca15b46x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_4ca15b46x4k9m2q7w1e6r3",
"reference": "API-S4R-30EFB1",
"service": "horoscope",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_4ca15b46x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_4ca15b46x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o horoscope.mp3 https://api.4radio.fr/v1/generations/gen_4ca15b46x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o horoscope.mp3 https://api.4radio.fr/v1/latest/horoscope
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"horoscope","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"horoscope-2026-10-01-07h","wait":true}' \
-o horoscope.mp3 https://api.4radio.fr/v1/generations
# → horoscope.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Horoscope Amour
horoscope_love
1,00 € / génération
Horoscope sentimental des 12 signes.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"horoscope_love","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"horoscope_love-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_456e3212x4k9m2q7w1e6r3",
"reference": "API-S4R-6FF8E7",
"service": "horoscope_love",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_456e3212x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_456e3212x4k9m2q7w1e6r3",
"reference": "API-S4R-6FF8E7",
"service": "horoscope_love",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_456e3212x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_456e3212x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o horoscope_love.mp3 https://api.4radio.fr/v1/generations/gen_456e3212x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o horoscope_love.mp3 https://api.4radio.fr/v1/latest/horoscope_love
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"horoscope_love","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"horoscope_love-2026-10-01-07h","wait":true}' \
-o horoscope_love.mp3 https://api.4radio.fr/v1/generations
# → horoscope_love.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Chronique Criminelle
crime_chronicle
1,00 € / génération
Une affaire criminelle racontée.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"crime_chronicle","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"crime_chronicle-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_e30ece38x4k9m2q7w1e6r3",
"reference": "API-S4R-15BCBE",
"service": "crime_chronicle",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_e30ece38x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_e30ece38x4k9m2q7w1e6r3",
"reference": "API-S4R-15BCBE",
"service": "crime_chronicle",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_e30ece38x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_e30ece38x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 2096000,
"duration": 131,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o crime_chronicle.mp3 https://api.4radio.fr/v1/generations/gen_e30ece38x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o crime_chronicle.mp3 https://api.4radio.fr/v1/latest/crime_chronicle
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"crime_chronicle","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"crime_chronicle-2026-10-01-07h","wait":true}' \
-o crime_chronicle.mp3 https://api.4radio.fr/v1/generations
# → crime_chronicle.mp3 est écrit (131 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
L'Invention du Jour
invention_of_the_day
1,00 € / génération
Chronique quotidienne d'une invention.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"invention_of_the_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"invention_of_the_day-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_74439c69x4k9m2q7w1e6r3",
"reference": "API-S4R-64D15F",
"service": "invention_of_the_day",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_74439c69x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_74439c69x4k9m2q7w1e6r3",
"reference": "API-S4R-64D15F",
"service": "invention_of_the_day",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_74439c69x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_74439c69x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 2054400,
"duration": 128.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o invention_of_the_day.mp3 https://api.4radio.fr/v1/generations/gen_74439c69x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o invention_of_the_day.mp3 https://api.4radio.fr/v1/latest/invention_of_the_day
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"invention_of_the_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"invention_of_the_day-2026-10-01-07h","wait":true}' \
-o invention_of_the_day.mp3 https://api.4radio.fr/v1/generations
# → invention_of_the_day.mp3 est écrit (128.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Journée Mondiale
world_day
1,00 € / génération
La journée mondiale du jour.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"world_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"world_day-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_9afc387dx4k9m2q7w1e6r3",
"reference": "API-S4R-2CC4FF",
"service": "world_day",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_9afc387dx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_9afc387dx4k9m2q7w1e6r3",
"reference": "API-S4R-2CC4FF",
"service": "world_day",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_9afc387dx4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_9afc387dx4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o world_day.mp3 https://api.4radio.fr/v1/generations/gen_9afc387dx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o world_day.mp3 https://api.4radio.fr/v1/latest/world_day
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"world_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"world_day-2026-10-01-07h","wait":true}' \
-o world_day.mp3 https://api.4radio.fr/v1/generations
# → world_day.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Saint du Jour
saint_of_the_day
1,00 € / génération
Le saint du jour et sa petite histoire.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"saint_of_the_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"saint_of_the_day-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_5c0acfa6x4k9m2q7w1e6r3",
"reference": "API-S4R-94E19C",
"service": "saint_of_the_day",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_5c0acfa6x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_5c0acfa6x4k9m2q7w1e6r3",
"reference": "API-S4R-94E19C",
"service": "saint_of_the_day",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_5c0acfa6x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_5c0acfa6x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o saint_of_the_day.mp3 https://api.4radio.fr/v1/generations/gen_5c0acfa6x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o saint_of_the_day.mp3 https://api.4radio.fr/v1/latest/saint_of_the_day
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"saint_of_the_day","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"saint_of_the_day-2026-10-01-07h","wait":true}' \
-o saint_of_the_day.mp3 https://api.4radio.fr/v1/generations
# → saint_of_the_day.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Météo des Plages
beach_weather
1,00 € / génération
Mer, plages et lieux de baignade.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
mode |
Nécessaire * | string |
mer baignade mixte |
mer = zone côtière ; baignade = lacs/rivières d'un département ; mixte = les deux. |
zone |
Nécessaire * | string | liste : voir référentiels | Zone côtière (modes mer/mixte ; voir GET /v1/reference/beach-zones). |
department_code |
Nécessaire * | string | Code département (voir GET /v1/reference/departments). | |
sites |
Optionnel | array | max 6 | Codes des lieux de baignade (1 à 6, voir GET /v1/reference/bathing-sites?department=…). |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"beach_weather","lang":"fr","params":{"mode":"mixte","zone":"cote-opale","department_code":"40","sites":["FRxxxx_1","FRxxxx_2"]},"idempotency_key":"beach_weather-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_c0a10ac2x4k9m2q7w1e6r3",
"reference": "API-S4R-382217",
"service": "beach_weather",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_c0a10ac2x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_c0a10ac2x4k9m2q7w1e6r3",
"reference": "API-S4R-382217",
"service": "beach_weather",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_c0a10ac2x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_c0a10ac2x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o beach_weather.mp3 https://api.4radio.fr/v1/generations/gen_c0a10ac2x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o beach_weather.mp3 https://api.4radio.fr/v1/latest/beach_weather
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"beach_weather","lang":"fr","params":{"mode":"mixte","zone":"cote-opale","department_code":"40","sites":["FRxxxx_1","FRxxxx_2"]},"idempotency_key":"beach_weather-2026-10-01-07h","wait":true}' \
-o beach_weather.mp3 https://api.4radio.fr/v1/generations
# → beach_weather.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Audience TV
tv_audience
1,00 € / génération
Audiences télé de la veille.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"tv_audience","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"tv_audience-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_eb2fa094x4k9m2q7w1e6r3",
"reference": "API-S4R-2F70FF",
"service": "tv_audience",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_eb2fa094x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_eb2fa094x4k9m2q7w1e6r3",
"reference": "API-S4R-2F70FF",
"service": "tv_audience",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_eb2fa094x4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_eb2fa094x4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o tv_audience.mp3 https://api.4radio.fr/v1/generations/gen_eb2fa094x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o tv_audience.mp3 https://api.4radio.fr/v1/latest/tv_audience
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"tv_audience","lang":"fr","params":{"radio_name":"Radio Exemple","voice_id":6},"idempotency_key":"tv_audience-2026-10-01-07h","wait":true}' \
-o tv_audience.mp3 https://api.4radio.fr/v1/generations
# → tv_audience.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Programme TV ce soir
tv_tonight
1,00 € / génération
La sélection télé du soir.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
radio_name |
Optionnel | string | max 80 | Nom de la radio tel qu'il sera prononcé. |
voice_id |
Nécessaire * | integer | Voix (voir GET /v1/voices?service=…). | |
country_code |
Nécessaire * | string |
FR BE CH LU |
Pays des chaînes. |
voice_delay |
Optionnel | integer | min 0 · max 30 | Délai (s) avant la voix sur le tapis musical. |
bed |
Optionnel | string |
none |
none = retirer le tapis (voix seule). |
bed_url |
Optionnel | string | max 500 | URL https publique d'un MP3 (≥ 1 min 30, ≤ 10 Mo) utilisé comme tapis musical sous la voix — remplace le tapis actuel. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"tv_tonight","lang":"fr","params":{"country_code":"FR","voice_id":6},"idempotency_key":"tv_tonight-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_25eaa79cx4k9m2q7w1e6r3",
"reference": "API-S4R-08CD1F",
"service": "tv_tonight",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_25eaa79cx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_25eaa79cx4k9m2q7w1e6r3",
"reference": "API-S4R-08CD1F",
"service": "tv_tonight",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_25eaa79cx4k9m2q7w1e6r3/file",
"voice_url": "https://api.4radio.fr/v1/generations/gen_25eaa79cx4k9m2q7w1e6r3/file?variant=voice",
"format": "audio/mpeg",
"size": 934400,
"duration": 58.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o tv_tonight.mp3 https://api.4radio.fr/v1/generations/gen_25eaa79cx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o tv_tonight.mp3 https://api.4radio.fr/v1/latest/tv_tonight
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"tv_tonight","lang":"fr","params":{"country_code":"FR","voice_id":6},"idempotency_key":"tv_tonight-2026-10-01-07h","wait":true}' \
-o tv_tonight.mp3 https://api.4radio.fr/v1/generations
# → tv_tonight.mp3 est écrit (58.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Créations
Les textes fournis passent par les mêmes validations que le Studio (cohérence, longueur, plan de production, contrôle qualité). Texte refusé → 422 text_rejected / invalid_input, sans débit.
Spot Pub
spot
2,50 € / génération
Spot publicitaire voix + musique (voix seule possible).
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
text |
Obligatoire | string | min 1 · max 500 | Texte dit par la voix. |
brief |
Obligatoire | string | min 80 · max 300 | Indications de réalisation (une phrase). |
voice_id |
Obligatoire | integer | Identifiant d'une voix de GET /v1/voices?service=spot. | |
with_music |
Optionnel | boolean | · défaut false | Ajoute un fond musical (même prix). |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"spot","lang":"fr","params":{"text":"Chez Dupont Cycles, du 1er au 15 octobre, moins vingt pour cent sur tous les vélos électriques. Dupont Cycles, avenue de la Gare, à Périgueux.","brief":"Spot commerçant local, ton chaleureux et dynamique, rythme soutenu, insister sur la remise, finir sur l'adresse.","voice_id":5,"with_music":true},"idempotency_key":"spot-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_b9327a73x4k9m2q7w1e6r3",
"reference": "API-S4R-B2E189",
"service": "spot",
"lang": "fr",
"status": "processing",
"price": 2.5,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_b9327a73x4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_b9327a73x4k9m2q7w1e6r3",
"reference": "API-S4R-B2E189",
"service": "spot",
"lang": "fr",
"status": "completed",
"price": 2.5,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_b9327a73x4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 393600,
"duration": 24.6,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o spot.mp3 https://api.4radio.fr/v1/generations/gen_b9327a73x4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o spot.mp3 https://api.4radio.fr/v1/latest/spot
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"spot","lang":"fr","params":{"text":"Chez Dupont Cycles, du 1er au 15 octobre, moins vingt pour cent sur tous les vélos électriques. Dupont Cycles, avenue de la Gare, à Périgueux.","brief":"Spot commerçant local, ton chaleureux et dynamique, rythme soutenu, insister sur la remise, finir sur l'adresse.","voice_id":5,"with_music":true},"idempotency_key":"spot-2026-10-01-07h","wait":true}' \
-o spot.mp3 https://api.4radio.fr/v1/generations
# → spot.mp3 est écrit (24.6 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Auto-Promo
promo
2,50 € / génération
Promo d'antenne 8 à 20 s.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
text |
Obligatoire | string | min 1 · max 400 | |
brief |
Obligatoire | string | min 80 · max 300 | |
duration |
Optionnel | integer | min 8 · max 20 | Secondes. Absent = durée automatique selon le texte. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"promo","lang":"fr","params":{"text":"Chaque matin dès 6 heures, réveillez-vous avec le Morning de Radio Exemple : infos, météo, et la meilleure musique.","brief":"Auto-promo dynamique pour une matinale, voix énergique, rythme rapide, ambiance radio moderne.","duration":15},"idempotency_key":"promo-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_b0139afbx4k9m2q7w1e6r3",
"reference": "API-S4R-51B607",
"service": "promo",
"lang": "fr",
"status": "processing",
"price": 2.5,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_b0139afbx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_b0139afbx4k9m2q7w1e6r3",
"reference": "API-S4R-51B607",
"service": "promo",
"lang": "fr",
"status": "completed",
"price": 2.5,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_b0139afbx4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 241600,
"duration": 15.1,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o promo.mp3 https://api.4radio.fr/v1/generations/gen_b0139afbx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o promo.mp3 https://api.4radio.fr/v1/latest/promo
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"promo","lang":"fr","params":{"text":"Chaque matin dès 6 heures, réveillez-vous avec le Morning de Radio Exemple : infos, météo, et la meilleure musique.","brief":"Auto-promo dynamique pour une matinale, voix énergique, rythme rapide, ambiance radio moderne.","duration":15},"idempotency_key":"promo-2026-10-01-07h","wait":true}' \
-o promo.mp3 https://api.4radio.fr/v1/generations
# → promo.mp3 est écrit (15.1 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Jingle
jingle
1,00 € / génération
Jingle parlé 3 à 15 s.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
text |
Obligatoire | string | min 1 · max 300 | |
brief |
Obligatoire | string | min 10 · max 300 | |
duration |
Optionnel | integer | min 3 · max 15 | Secondes. Absent = durée automatique. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"jingle","lang":"fr","params":{"text":"Radio Exemple, la radio qui vous ressemble.","brief":"Jingle identité pop moderne, punchy."},"idempotency_key":"jingle-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_ee7e744ax4k9m2q7w1e6r3",
"reference": "API-S4R-72C5C7",
"service": "jingle",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_ee7e744ax4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_ee7e744ax4k9m2q7w1e6r3",
"reference": "API-S4R-72C5C7",
"service": "jingle",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_ee7e744ax4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 108800,
"duration": 6.8,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o jingle.mp3 https://api.4radio.fr/v1/generations/gen_ee7e744ax4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o jingle.mp3 https://api.4radio.fr/v1/latest/jingle
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"jingle","lang":"fr","params":{"text":"Radio Exemple, la radio qui vous ressemble.","brief":"Jingle identité pop moderne, punchy."},"idempotency_key":"jingle-2026-10-01-07h","wait":true}' \
-o jingle.mp3 https://api.4radio.fr/v1/generations
# → jingle.mp3 est écrit (6.8 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Jingle Musical
jingle_musical
3,00 € / génération
Jingle chanté sur un thème musical.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
text |
Obligatoire | string | min 60 · max 120 | Texte chanté (nom de la radio + slogan). |
theme |
Obligatoire | string | liste : voir référentiels | Thème musical (voir GET /v1/services). |
vocal_gender |
Optionnel | string |
m f |
Absent = indifférent. |
Thèmes : dance dance-halloween dance-christmas dance-summer variete variete-halloween variete-christmas variete-summer pop pop-halloween pop-christmas pop-summer disco disco-halloween disco-christmas disco-summer lounge lounge-halloween lounge-christmas lounge-summer hiphop hiphop-halloween hiphop-christmas hiphop-summer latino latino-halloween latino-christmas latino-summer zouk zouk-halloween zouk-christmas zouk-summer reggae reggae-halloween reggae-christmas reggae-summer country country-halloween country-christmas country-summer croyance croyance-christmas croyance-summer annees-60 annees-70 annees-80 annees-90
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"jingle_musical","lang":"fr","params":{"text":"Radio Exemple, la radio qui vous ressemble, toute la journée en musique avec vous partout.","theme":"pop","vocal_gender":"f"},"idempotency_key":"jingle_musical-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_d433903cx4k9m2q7w1e6r3",
"reference": "API-S4R-836A37",
"service": "jingle_musical",
"lang": "fr",
"status": "processing",
"price": 3,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_d433903cx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_d433903cx4k9m2q7w1e6r3",
"reference": "API-S4R-836A37",
"service": "jingle_musical",
"lang": "fr",
"status": "completed",
"price": 3,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_d433903cx4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 504000,
"duration": 31.5,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o jingle_musical.mp3 https://api.4radio.fr/v1/generations/gen_d433903cx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o jingle_musical.mp3 https://api.4radio.fr/v1/latest/jingle_musical
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"jingle_musical","lang":"fr","params":{"text":"Radio Exemple, la radio qui vous ressemble, toute la journée en musique avec vous partout.","theme":"pop","vocal_gender":"f"},"idempotency_key":"jingle_musical-2026-10-01-07h","wait":true}' \
-o jingle_musical.mp3 https://api.4radio.fr/v1/generations
# → jingle_musical.mp3 est écrit (31.5 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Bed / Tapis
bed
1,00 € / génération
Instrumental de 2 minutes, normalisé.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
brief |
Obligatoire | string | min 10 · max 300 | Ambiance souhaitée. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"bed","lang":"fr","params":{"brief":"Ambiance matinale douce et positive, piano et guitare acoustique, tempo modéré."},"idempotency_key":"bed-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_e647fcffx4k9m2q7w1e6r3",
"reference": "API-S4R-001CBC",
"service": "bed",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_e647fcffx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_e647fcffx4k9m2q7w1e6r3",
"reference": "API-S4R-001CBC",
"service": "bed",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_e647fcffx4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 1920000,
"duration": 120,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o bed.mp3 https://api.4radio.fr/v1/generations/gen_e647fcffx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o bed.mp3 https://api.4radio.fr/v1/latest/bed
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"bed","lang":"fr","params":{"brief":"Ambiance matinale douce et positive, piano et guitare acoustique, tempo modéré."},"idempotency_key":"bed-2026-10-01-07h","wait":true}' \
-o bed.mp3 https://api.4radio.fr/v1/generations
# → bed.mp3 est écrit (120 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Intervention Animateur
host_intervention
1,00 € / génération
Base 1.00 ; +0.20 sans fond musical ; +0.50 sans date. Intervention d'animateur de 20 à 25 s.
| Paramètre | Statut | Type | Valeurs | Description |
|---|---|---|---|---|
voice |
Obligatoire | string |
hugo mary myr |
|
style |
Obligatoire | string |
energique chaleureux pose complice pro |
|
radio_name |
Obligatoire | string | max 60 | |
slogan |
Obligatoire | string | max 120 | |
text |
Obligatoire | string | max 1200 | Ce que doit dire l'animateur (phonétique si nécessaire). |
music_bed |
Optionnel | boolean | · défaut false | |
music_style |
Optionnel | string | liste : voir référentiels | Requis si music_bed = true. |
date |
Optionnel | string | date | Ancre temporelle (YYYY-MM-DD). Absent = intervention intemporelle. |
1 Requête — lancer la génération
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"host_intervention","lang":"fr","params":{"voice":"myr","style":"chaleureux","radio_name":"Radio Exemple","slogan":"La radio qui vous ressemble","text":"Il est huit heures, restez avec nous pour une matinale pleine de bonne humeur : dans un instant, la météo puis le grand jeu de la semaine.","music_bed":true,"music_style":"pop-rock","date":"2026-10-01"},"idempotency_key":"host_intervention-2026-10-01-07h"}' \
https://api.4radio.fr/v1/generations
2 Résultat immédiat — 202 Accepted, la génération est en cours et débitée
{
"generation": {
"id": "gen_8b64bf9bx4k9m2q7w1e6r3",
"reference": "API-S4R-3994C8",
"service": "host_intervention",
"lang": "fr",
"status": "processing",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": null,
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": null
},
"replayed": false
}
3 Résultat final — GET https://api.4radio.fr/v1/generations/gen_8b64bf9bx4k9m2q7w1e6r3 (toutes les 15 s jusqu'à completed)
{
"generation": {
"id": "gen_8b64bf9bx4k9m2q7w1e6r3",
"reference": "API-S4R-3994C8",
"service": "host_intervention",
"lang": "fr",
"status": "completed",
"price": 1,
"currency": "EUR",
"refunded": false,
"error": null,
"file": {
"url": "https://api.4radio.fr/v1/generations/gen_8b64bf9bx4k9m2q7w1e6r3/file",
"voice_url": null,
"format": "audio/mpeg",
"size": 358400,
"duration": 22.4,
"silence": false,
"expires_at": "2026-10-08T05:01:40+00:00"
},
"created_at": "2026-10-01T05:00:03+00:00",
"completed_at": "2026-10-01T05:01:40+00:00"
}
}
4 Télécharger le MP3
curl -u ak_ID:sk_SECRET -o host_intervention.mp3 https://api.4radio.fr/v1/generations/gen_8b64bf9bx4k9m2q7w1e6r3/file
# ou, à tout moment, la dernière version réussie de ce service :
curl -u ak_ID:sk_SECRET -o host_intervention.mp3 https://api.4radio.fr/v1/latest/host_intervention
★ Tout-en-un — un seul appel, le MP3 arrive directement (mode synchrone)
curl -u ak_ID:sk_SECRET -H "Content-Type: application/json" \
-d '{"service":"host_intervention","lang":"fr","params":{"voice":"myr","style":"chaleureux","radio_name":"Radio Exemple","slogan":"La radio qui vous ressemble","text":"Il est huit heures, restez avec nous pour une matinale pleine de bonne humeur : dans un instant, la météo puis le grand jeu de la semaine.","music_bed":true,"music_style":"pop-rock","date":"2026-10-01"},"idempotency_key":"host_intervention-2026-10-01-07h","wait":true}' \
-o host_intervention.mp3 https://api.4radio.fr/v1/generations
# → host_intervention.mp3 est écrit (22.4 s dans cet exemple) ; en-têtes X-Generation-Id / X-Generation-Status / X-Generation-Price
Endpoints
| Méthode | Chemin | Rôle |
|---|---|---|
| GET | /v1/me | Compte, solde, informations sur la clé. |
| GET | /v1/pricing | Tarif fixe de chaque service (promotions_applied toujours false). |
| GET | /v1/services | Catalogue : paramètres, prix, ready et current par contenu. |
| GET | /v1/voices?service=… | Voix autorisées pour un service (catalogue + vos voix personnelles), avec démo MP3. |
| GET | /v1/beds?service=… | Tapis musicaux du service, avec écoute. |
| GET | /v1/reference/{liste} | Référentiels (voir ci-dessous). |
| POST | /v1/generations | Lancer une génération. Champs : service Obligatoire, lang, params, wait, dry_run, idempotency_key, webhook_url Optionnels. |
| GET | /v1/generations/{id} | État d'une génération. |
| GET | /v1/generations/{id}/file | Le MP3 (?variant=voice = voix seule). 409 tant que non finale, 404 si expiré. |
| GET | /v1/latest/{service} | Dernière génération réussie du service, fichier direct (?meta=true = JSON). |
| GET | /v1/generations?limit=&service=&status= | Historique (≤ 100). |
dry_run: true valide la demande (et enregistre les paramètres de contenu) puis renvoie le prix sans rien débiter ni générer. Gratuit, hors quota de générations.
Référentiels
| Endpoint | Contenu | Utilisé par |
|---|---|---|
GET /v1/reference/departments | Départements FR, provinces BE, cantons CH (code, name, region, country) | department_code, department2_code |
GET /v1/voices?service=… | Voix autorisées pour le service, chacune avec preview_url (démo MP3 à écouter : GET /v1/voices/{id}/preview?service=…) | voice_id / voice |
GET /v1/beds?service=… | Tapis musicaux du service : catalogue, tapis actuel, none, chacun avec preview_url (GET /v1/beds/{id}/preview?service=…) | bed |
GET /v1/reference/beach-zones | Zones côtières | zone (beach_weather) |
GET /v1/reference/bathing-sites?department=40 | Lacs, rivières, étangs du département | sites (beach_weather) |
GET /v1/reference/fire-regions | Régions | region_name (wildfire) |
GET /v1/reference/jingle-themes | Thèmes musicaux | theme (jingle_musical) |
Idempotence
Fournissez idempotency_key (unique par compte, ex. meteo-2026-10-01-07h). Une requête rejouée renvoie la génération d'origine avec "replayed": true et ne facture pas deux fois. Même clé avec d'autres paramètres → 409 idempotency_conflict.
Webhooks (optionnel)
Si vous préférez être prévenu plutôt que d'attendre ou d'interroger : indiquez webhook_url (https, hôte public). À la fin de la génération, un POST JSON est envoyé avec event (generation.completed / generation.failed) et l'objet generation (dont l'URL du fichier). Trois tentatives (immédiate, +5 min, +10 min) ; répondez 2xx. Signature : X-Webhook-Timestamp et X-Webhook-Signature: sha256=HMAC_SHA256(timestamp + "." + corps, secret_webhook).
Construire un automate
- Au démarrage :
GET /v1/services→ vérifiezreadyetcurrent. - Le plus simple : un
POST /v1/generationsavec"wait": trueet uneidempotency_keydatée → le MP3 arrive dans la réponse. - Sans
wait: interrogez l'état toutes les 15 s jusqu'à 10 min (contenus : 1 à 3 min ; créations musicales : jusqu'à 5 min), puis téléchargez. X-Generation-Status: failedou"silence": true= échec remboursé → réessayez plus tard.- Un système qui « tire » un fichier à heure fixe peut simplement pointer sur
GET /v1/latest/{service}.
Codes d'erreur
| HTTP | Code | Signification |
|---|---|---|
| 401 | unauthorized | Identifiants invalides ou clé révoquée. |
| 403 | forbidden | Accès refusé pour cette clé. |
| 403 | ip_not_allowed | Adresse IP non autorisée pour cette clé. |
| 404 | not_found | Ressource introuvable. |
| 405 | method_not_allowed | Méthode non autorisée. |
| 422 | invalid_input | Paramètres invalides. |
| 422 | unsupported_lang | Langue non prise en charge. |
| 422 | unknown_service | Service inconnu. |
| 422 | config_incomplete | La configuration de ce service n'est pas complète dans votre espace Studio. |
| 422 | text_rejected | Le texte n'a pas passé la validation. |
| 402 | insufficient_credits | Crédits insuffisants et rechargement automatique indisponible. |
| 402 | autorecharge_required | Le rechargement automatique doit être actif pour utiliser l'API. |
| 409 | generation_in_progress | Une génération de ce service est déjà en cours. |
| 409 | unavailable_now | Service non disponible à cet instant (jours / horaires de production). |
| 409 | idempotency_conflict | Cette clé d'idempotence a déjà été utilisée avec d'autres paramètres. |
| 429 | rate_limited | Trop de requêtes. Réessayez dans un instant. |
| 500 | generation_failed | La génération a échoué. Vos crédits ont été rendus et un fichier de silence est fourni. |
| 500 | delivery_failed | Le fichier n'a pas pu être livré. Vos crédits ont été rendus. |
| 503 | service_unavailable | Service momentanément indisponible. |
| 504 | timeout | La génération a dépassé le délai autorisé. Vos crédits ont été rendus. |
| 500 | internal_error | Erreur interne. |
Limites & règles
- 60 requêtes / minute / clé ; 10 lancements de génération / minute (
dry_runnon comptés). - Une génération en cours par service et par compte pour les contenus.
- Fichiers conservés 7 jours ; la dernière version réussie de chaque service, sans limite.
- Prix fixes par génération, sans promotion ; débit au lancement, remboursement automatique en cas d'échec.
- Fichiers neutres (aucune métadonnée). Vous êtes responsable de l'usage des contenus à l'antenne.
- Chaque génération apparaît dans votre espace Studio comme une production classique.
Exemples de code
# Mode synchrone : le MP3 dans la réponse
curl -u "$KEY:$SECRET" -H "Content-Type: application/json" \
-d '{"service":"horoscope","wait":true,"idempotency_key":"horo-'$(date +%F)'"}' \
-o horoscope.mp3 -D headers.txt https://api.4radio.fr/v1/generations
grep -i x-generation-status headers.txt<?php
$ch = curl_init('https://api.4radio.fr/v1/generations');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 330,
CURLOPT_USERPWD => KEY . ':' . SECRET,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['service' => 'local_news', 'wait' => true,
'params' => ['department_code' => '24', 'city' => 'Périgueux', 'radius_km' => 10]]),
]);
$body = curl_exec($ch); $type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); curl_close($ch);
if (str_starts_with($type, 'audio/')) { file_put_contents('flash.mp3', $body); }
else { $j = json_decode($body, true); /* 202 : récupérer plus tard via /v1/generations/{id}/file, ou erreur */ }import requests
BASE = "https://api.4radio.fr"; AUTH = ("ak_…", "sk_…")
r = requests.post(f"{BASE}/v1/generations", auth=AUTH, timeout=330,
json={"service": "weather", "wait": True, "params": {"department_code": "24"}})
if r.headers.get("Content-Type", "").startswith("audio/"):
open("meteo.mp3", "wb").write(r.content)
print(r.headers["X-Generation-Status"], r.headers["X-Generation-Price"], "EUR")
else:
print(r.status_code, r.json()) # 202 : génération encore en cours, ou erreurconst BASE = 'https://api.4radio.fr';
const headers = { Authorization: 'Basic ' + Buffer.from(`${KEY}:${SECRET}`).toString('base64'), 'Content-Type': 'application/json' };
const res = await fetch(`${BASE}/v1/generations`, { method: 'POST', headers,
body: JSON.stringify({ service: 'bed', wait: true, params: { brief: 'ambiance matinale douce, piano et guitare acoustique' } }) });
if ((res.headers.get('content-type') || '').startsWith('audio/')) {
require('fs').writeFileSync('bed.mp3', Buffer.from(await res.arrayBuffer()));
} else {
console.log(res.status, await res.json());
}Bugs & support
L'API ne dispose pas d'un support dédié : cette documentation fait foi. Si vous constatez un bug (comportement contraire à la documentation), ouvrez un ticket depuis votre espace Studio en indiquant l'identifiant de génération et l'heure de l'appel. Les demandes d'aide à l'intégration ne sont pas traitées.
API v1.00 · Documentation générée depuis le catalogue en vigueur : prix et paramètres affichés sont ceux appliqués.