Changelog
Historique des changements de l'API Capturia v1, daté et catégorisé.
- Modifié
v1GET /v1/conversations/{id}/messages : content ne contient plus les marqueurs de pilotage internes
Les agents IA rythment leurs réponses avec des marqueurs internes ([PAUSE:3s] pour envoyer en plusieurs bulles, [INPUT:email] pour demander un champ au visiteur). Ils n'ont jamais fait partie du contrat et se retrouvaient pourtant dans le champ content. Ils en sont retirés : une réponse envoyée en plusieurs bulles vous arrive maintenant en paragraphes séparés par une ligne vide. Ce changement s'applique aussi aux messages déjà en base, donc la valeur de content change une fois pour les messages d'agent existants. Conséquence à connaître : un message qui ne portait QUE du pilotage devient une chaîne vide. La ligne reste présente dans la page, avec ses id, role et created_at, pour ne pas fausser total_count, has_more ni le curseur de pagination. Si votre intégration teste la présence d'un message avec if (!content), ajustez-la pour tester la présence de l'objet.
- Ajouté
v1Sous-domaine dédié api.capturia.io + sunset legacy 2027-05-03
L'API publique est désormais servie sur https://api.capturia.io/v1/* (convention enterprise alignée Stripe/Twilio/GitHub). Bundle OpenAPI auto-discoverable à api.capturia.io/openapi.{yaml,json}. L'ancien host app.capturia.io/api/v1/* reste actif jusqu'au 2027-05-03 ; chaque réponse legacy porte les headers IETF Deprecation, Sunset et Link successor-version. Au sunset, le legacy bascule en HTTP 308 Permanent Redirect vers le nouveau host. Pas de 410 Gone — vos intégrations continueront à fonctionner même si vous oubliez de migrer (avec un round-trip d'overhead).
- Ajouté
v1Spec OpenAPI 3.1 publique + Postman + types TS
L'API expose désormais une spec OpenAPI 3.1 servable à
/openapi.yaml(235KB) et/openapi.json(289KB). Collection Postman (/postman-collection.json) téléchargeable, importable dans Insomnia 2023+ via la spec OpenAPI directement. Types TypeScript générés au build (lib/api/v1/openapi-types.ts). Validation requêtes contre la spec en mode shadow par défaut. - Ajouté
v1Endpoint GET /v1/usage + observability headers
Endpoint programmatique
/v1/usageretourne les aggregations consommation (filtrables parbucket_typeet range). Chaque réponse émet désormaisX-Request-IDULID,Capturia-Request-ID(alias),Capturia-Version: v1, etVary: Accept-Language, Accept-Encoding. - Ajouté
v1Pagination cursor opaque + headers Deprecation/Sunset legacy
Tous les
GETcollection acceptent désormais?cursor=opaque base64url avec tiebreakeridpour tri stable. Format legacytotal_count+cursorISO accepté en parallèle 12 mois (sunset 2027-05-03). HeadersDeprecation(RFC 9745) +Sunset(RFC 8594) +Link rel=deprecationannoncent le retrait. - Ajouté
v1Header Idempotency-Key sur POST/PUT/DELETE
Toutes les routes mutantes acceptent un header optionnel
Idempotency-Key(regex[a-zA-Z0-9_-]{1,64}). TTL 24h via Vercel KV. Replay verbatim retourneIdempotent-Replayed: true. Conflit (payload différent ou requête concurrente) →409 idempotency_conflict. - Ajouté
v1Headers RFC 9331 + body 429 enrichi
Émission parallèle des headers
RateLimit-Limit/Remaining/Reset/Policy(RFC 9331) etX-RateLimit-*(legacy, sunset 2027-05-03). Body 429 inclut désormaisdetails.limit_type(per_keyoubrute_force) etdetails.retry_after_secondsactionnable.