Vue d'ensemble API
Conventions partagées par tous les endpoints de l'API Outsend — URL de base, authentification, types de contenu, versioning, erreurs.
Vue d'ensemble API
L'API Outsend expose la même surface que l'application web. Le tableau de bord et l'API partagent un backend, un schéma d'authentification et un ensemble d'objets uniques.
URL de base
https://outsend.xyz
Les endpoints sous /api/ renvoient du JSON ou diffusent des événements. L'URL de base est stable durant l'alpha.
Authentification
Les sessions utilisent un cookie nommé outsend_session. Pour l'obtenir, envoyer les identifiants :
POST /api/auth/login
Content-Type: application/json
{ "email": "nom@example.com", "password": "..." }
La réponse pose outsend_session en HttpOnly, Secure, SameSite=Lax. Les requêtes suivantes doivent l'inclure. Les sessions restent valides jusqu'à la déconnexion (POST /api/auth/logout) ou expiration. Les requêtes sans cookie valide reçoivent 401 sur les routes protégées.
Des jetons API scopés par workspace sont prévus à la feuille de route ; les sessions par cookie sont actuellement le seul mécanisme supporté.
Types de contenu
| Surface | Type de contenu | Notes |
|---|---|---|
| Endpoints lecture/écriture | application/json |
UTF-8, champs en snake_case |
| Flux d'événements | text/event-stream |
Server-Sent Events |
| Téléchargements | application/octet-stream et apparentés |
Endpoints terminant par /download |
| Exports tabulaires | text/csv, application/json, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Sélectionné via ?format=csv|json|xlsx |
Les endpoints acceptant format retournent du JSON par défaut.
Versioning
L'API est en alpha. Aucun préfixe /v1/, aucun header de version — la surface évolue sur place. Les ruptures sont annoncées à l'avance via le changelog et, le cas échéant, par bannières in-app. Les ajouts (nouveaux champs, endpoints, paramètres optionnels) sont livrés sans préavis. Un préfixe versionné sera introduit avant la disponibilité générale.
Limites de débit
Les endpoints sensibles (authentification, contact, création de jobs) sont protégés par des quotas par route. Le dépassement renvoie 429 avec un en-tête Retry-After. Voir /docs/fr/concepts/limits.
Erreurs
Les échecs renvoient un corps JSON et un code HTTP conventionnel :
{
"detail": "Message lisible",
"errors": [
{ "field": "email", "message": "Format invalide" }
]
}
Le tableau errors n'est présent que lorsque l'échec concerne des champs spécifiques.
| Code | Signification |
|---|---|
| 400 | Requête malformée, violation de règle métier |
| 401 | Pas de session, ou session expirée |
| 403 | Authentifié mais non autorisé ; également pour comptes désactivés |
| 404 | Ressource inexistante, ou non visible par l'appelant |
| 422 | Requête bien formée mais échec de validation |
| 429 | Limite de débit atteinte ; réessayer après la valeur du header |
| 5xx | Défaillance côté serveur ; les retries avec backoff sont sûrs |
Considérer tout 5xx comme transitoire et appliquer un backoff exponentiel.
Groupes d'endpoints
| Groupe | Chemin | Rôle |
|---|---|---|
| Authentification | /docs/fr/api/auth | Login, logout, inscription, reset mot de passe, vérification email |
| Jobs | /docs/fr/api/jobs | Créer, lister, inspecter, contrôler et exporter des jobs |
| Pipelines | /docs/fr/api/pipelines | Composer des workflows multi-étapes et les exécuter |
| Veille | /docs/fr/api/veille | Monitoring continu de requêtes et de sources |
| Feedback | /docs/fr/api/feedback | Soumettre du feedback produit et des rapports de bug |
| Registre | /docs/fr/api/registry | Découvrir les types de jobs disponibles et leurs paramètres |
Protocole SSE
Les opérations longues exposent leur progression via Server-Sent Events. Noms d'événements, forme de payload et machine à états sont documentés sur /docs/fr/concepts/states-and-events.