Documentation API

Accédez à Redigeo depuis vos propres applications — transcription, récupération de résultats et gestion des crédits.

Accès Premium requis. L'API publique est réservée aux membres avec un abonnement premium actif. Générez votre token depuis Paramètres → Clés API.

Authentification

Toutes les requêtes vers /api/v1/ doivent inclure votre token dans le header HTTP :

Authorization: Bearer rd_votre_token_ici

Les tokens sont générés depuis l'interface Redigeo : Paramètres → Clés API → Générer. Le token n'est affiché qu'une seule fois à la création — conservez-le en lieu sûr.

Base URL : https://redigeo.jcde.fr/api/v1/

Crédits

Chaque heure de transcription coûte 1 crédit (arrondi au-dessus). Les crédits sont déduits à la fin du traitement.

GET /api/v1/credits/
Solde de crédits et quota de stockage.

Réponse

{
  "credits": 5.0,
  "storage_used_mb": 128.4,
  "storage_quota_mb": 500.0
}

Transcriptions

GET /api/v1/transcriptions/
Liste paginée de vos transcriptions.

Paramètres de requête

ParamètreTypeDescription
statusstringFiltrer par statut : pending, processing, completed, failed
pageintegerNuméro de page (défaut : 1)
page_sizeintegerRésultats par page (max : 100, défaut : 20)

Réponse

{
  "count": 42,
  "page": 1,
  "page_size": 20,
  "results": [
    {
      "id": 123,
      "filename": "reunion.mp3",
      "status": "completed",
      "status_label": "Terminé",
      "language": "fr",
      "duration": 3612.5,
      "credits_used": 1,
      "created_at": "2026-04-20T10:30:00Z",
      "completed_at": "2026-04-20T10:42:15Z"
    }
  ]
}
GET /api/v1/transcriptions/{id}/
Détails complets d'une transcription, incluant le résultat WhisperX.

Réponse (extraits)

{
  "id": 123,
  "filename": "reunion.mp3",
  "status": "completed",
  "language": "fr",
  "duration": 3612.5,
  "credits_used": 1,
  "result_file": {
    "segments": [
      {
        "start": 0.0,
        "end": 4.2,
        "text": "Bonjour à tous.",
        "speaker": "SPEAKER_00",
        "words": [
          { "word": "Bonjour", "start": 0.0, "end": 0.8, "score": 0.98 },
          { "word": "à", "start": 0.9, "end": 1.1, "score": 0.97 },
          { "word": "tous.", "start": 1.2, "end": 1.7, "score": 0.99 }
        ]
      }
    ]
  }
}
POST /api/v1/transcriptions/ — Upload fichier
Soumettre un fichier audio pour transcription (multipart/form-data).

Champs

ChampTypeDescription
audio_file requisFileFichier audio (mp3, wav, m4a, flac, ogg, webm, mp4, aac — max 500 Mo — max 3h)
languagestringCode langue ISO 639-1 (défaut : fr). Ex : en, es, de
min_speakersintegerNombre minimum de locuteurs (défaut : 1)
max_speakersintegerNombre maximum de locuteurs (défaut : 2)
force_speakersbooleanForcer le nombre exact de locuteurs (défaut : false)

Exemple cURL

curl -X POST https://redigeo.jcde.fr/api/v1/transcriptions/ \
  -H "Authorization: Bearer rd_votre_token" \
  -F "audio_file=@reunion.mp3" \
  -F "language=fr" \
  -F "min_speakers=2" \
  -F "max_speakers=4"

Réponse (HTTP 201)

{
  "id": 124,
  "filename": "reunion.mp3",
  "status": "pending",
  "language": "fr",
  "created_at": "2026-04-20T11:00:00Z"
}
POST /api/v1/transcriptions/ — URL YouTube
Soumettre une vidéo YouTube pour transcription (JSON).

Exemple cURL

curl -X POST https://redigeo.jcde.fr/api/v1/transcriptions/ \
  -H "Authorization: Bearer rd_votre_token" \
  -H "Content-Type: application/json" \
  -d '{
    "youtube_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "language": "en"
  }'
GET /api/v1/transcriptions/{id}/audio/
Télécharger le fichier audio original. Supporte les requêtes Range pour la lecture partielle.

Exemple cURL

curl -O -J https://redigeo.jcde.fr/api/v1/transcriptions/123/audio/ \
  -H "Authorization: Bearer rd_votre_token"
DELETE /api/v1/transcriptions/{id}/
Supprimer une transcription et libérer le quota de stockage. Retourne HTTP 204.

Suivi du traitement (polling)

Le traitement est asynchrone. Après soumission, interrogez périodiquement l'endpoint de détail jusqu'à ce que status passe à completed ou failed.

import time, requests

TOKEN = "rd_votre_token"
BASE  = "https://redigeo.jcde.fr/api/v1"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

# 1. Soumettre
r = requests.post(f"{BASE}/transcriptions/",
                  headers=HEADERS,
                  files={"audio_file": open("fichier.mp3", "rb")},
                  data={"language": "fr"})
tx_id = r.json()["id"]

# 2. Attendre
while True:
    r = requests.get(f"{BASE}/transcriptions/{tx_id}/", headers=HEADERS)
    data = r.json()
    if data["status"] == "completed":
        print(data["result_file"])
        break
    if data["status"] == "failed":
        raise RuntimeError(data.get("error_message"))
    print(f"En attente… ({data['status']})")
    time.sleep(10)

Codes de statut HTTP

CodeSignification
200Succès
201Transcription créée (en file d'attente)
204Suppression réussie
400Paramètre manquant ou invalide
401Token manquant, invalide ou révoqué
402Crédits insuffisants
403Compte non Premium
404Ressource non trouvée
429Trop de jobs simultanés
503Service temporairement indisponible

Gestion des tokens via l'API

Les tokens peuvent également être gérés via l'API avec votre session JWT (connexion depuis l'interface).

GET /api/auth/tokens/
Liste vos tokens actifs (clé masquée). Auth JWT requise.
POST /api/auth/tokens/
Créer un nouveau token. Corps JSON : {"name": "Mon script"}. La clé est retournée une seule fois.
DELETE /api/auth/tokens/{id}/
Révoquer un token (désactivation, non suppression). Auth JWT requise.

Limites et bonnes pratiques