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.

17 contenusréglés comme dans votre espace Studio
6 créationsspot, promo, jingles, bed, animateur
Prix fixespar génération, sans promotion, débit au lancement
Toujours un fichieréchec = remboursement + silence d'1 s
Périmètre. Pas de programmation ni de forfait (chaque appel est une génération unitaire). Pas de texte libre pour les contenus : leurs réglages passent par des paramètres à valeurs contrôlées. Pas de dépôt sur votre FTP : les fichiers se récupèrent par l'API ou dans votre espace Développeur.

Premier appel en 4 étapes

1
Créez votre clé dans Studio ▸ Développeur. L'identifiant ak_… et le secret sk_… ne sont affichés qu'une fois.
2
Vérifiez la clé et votre solde :
curl -u ak_ID:sk_SECRET https://api.4radio.fr/v1/me
3
Lancez une génération (réponse 202 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/generations
4
Récupérez le MP3 dès que status 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/file

Plus 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)

Conventions

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).

Échec = remboursement + silence. Une génération 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).

Passage en production : remplacez simplement les identifiants de test par ceux de votre clé réelle — rien d'autre ne change.
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).

Flash Info NationaleFlash d'actualité nationale écrit et présenté par un journaliste (7H · 12H · 17H, lundi→vendredi).national_news
0,85 € → 1,18 €
Bulletin MétéoMétéo locale du jour, prête à diffuser.weather
1,00 €
Info RoutePoint trafic local en temps réel.traffic
1,00 €
Point Stations-ServicePrix des carburants autour de la radio.fuel_prices
1,00 €
Flash Info LocaleFlash d'actualité locale sourcé.local_news
2,00 €
Flash Sport LocalRésultats et actualité sportive locale.local_sport
2,00 €
Flash Agenda LocalSorties et événements réels du secteur.local_agenda
1,00 €
Point Feux de ForêtSituation incendies à l'échelle choisie.wildfire
0,80 €
Horoscope du jourLes 12 signes, ton radio.horoscope
1,00 €
Horoscope AmourHoroscope sentimental des 12 signes.horoscope_love
1,00 €
Chronique CriminelleUne affaire criminelle racontée.crime_chronicle
1,00 €
L'Invention du JourChronique quotidienne d'une invention.invention_of_the_day
1,00 €
Journée MondialeLa journée mondiale du jour.world_day
1,00 €
Saint du JourLe saint du jour et sa petite histoire.saint_of_the_day
1,00 €
Météo des PlagesMer, plages et lieux de baignade.beach_weather
1,00 €
Audience TVAudiences télé de la veille.tv_audience
1,00 €
Programme TV ce soirLa sélection télé du soir.tv_tonight
1,00 €
Spot PubSpot publicitaire voix + musique (voix seule possible).spot
2,50 €
Auto-PromoPromo d'antenne 8 à 20 s.promo
2,50 €
JingleJingle parlé 3 à 15 s.jingle
1,00 €
Jingle MusicalJingle chanté sur un thème musical.jingle_musical
3,00 €
Bed / TapisInstrumental de 2 minutes, normalisé.bed
1,00 €
Intervention AnimateurIntervention d'animateur de 20 à 25 s.host_intervention
1,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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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ètreStatutTypeValeursDescription
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éthodeCheminRôle
GET/v1/meCompte, solde, informations sur la clé.
GET/v1/pricingTarif fixe de chaque service (promotions_applied toujours false).
GET/v1/servicesCatalogue : 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/generationsLancer 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}/fileLe 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

EndpointContenuUtilisé par
GET /v1/reference/departmentsDé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-zonesZones côtièreszone (beach_weather)
GET /v1/reference/bathing-sites?department=40Lacs, rivières, étangs du départementsites (beach_weather)
GET /v1/reference/fire-regionsRégionsregion_name (wildfire)
GET /v1/reference/jingle-themesThèmes musicauxtheme (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

  1. Au démarrage : GET /v1/services → vérifiez ready et current.
  2. Le plus simple : un POST /v1/generations avec "wait": true et une idempotency_key datée → le MP3 arrive dans la réponse.
  3. 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.
  4. X-Generation-Status: failed ou "silence": true = échec remboursé → réessayez plus tard.
  5. Un système qui « tire » un fichier à heure fixe peut simplement pointer sur GET /v1/latest/{service}.
Lancez vos générations quelques minutes avant l'heure de diffusion.

Codes d'erreur

HTTPCodeSignification
401unauthorizedIdentifiants invalides ou clé révoquée.
403forbiddenAccès refusé pour cette clé.
403ip_not_allowedAdresse IP non autorisée pour cette clé.
404not_foundRessource introuvable.
405method_not_allowedMéthode non autorisée.
422invalid_inputParamètres invalides.
422unsupported_langLangue non prise en charge.
422unknown_serviceService inconnu.
422config_incompleteLa configuration de ce service n'est pas complète dans votre espace Studio.
422text_rejectedLe texte n'a pas passé la validation.
402insufficient_creditsCrédits insuffisants et rechargement automatique indisponible.
402autorecharge_requiredLe rechargement automatique doit être actif pour utiliser l'API.
409generation_in_progressUne génération de ce service est déjà en cours.
409unavailable_nowService non disponible à cet instant (jours / horaires de production).
409idempotency_conflictCette clé d'idempotence a déjà été utilisée avec d'autres paramètres.
429rate_limitedTrop de requêtes. Réessayez dans un instant.
500generation_failedLa génération a échoué. Vos crédits ont été rendus et un fichier de silence est fourni.
500delivery_failedLe fichier n'a pas pu être livré. Vos crédits ont été rendus.
503service_unavailableService momentanément indisponible.
504timeoutLa génération a dépassé le délai autorisé. Vos crédits ont été rendus.
500internal_errorErreur interne.

Limites & règles

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 erreur
const 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.