EN

Changelog

Historique des changements de l'API Capturia v1, daté et catégorisé.

  1. Modifiév1

    GET /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.

  2. Ajoutév1

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

  3. Ajoutév1

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

  4. Ajoutév1

    Endpoint GET /v1/usage + observability headers

    Endpoint programmatique /v1/usage retourne les aggregations consommation (filtrables par bucket_type et range). Chaque réponse émet désormais X-Request-ID ULID, Capturia-Request-ID (alias), Capturia-Version: v1, et Vary: Accept-Language, Accept-Encoding.

  5. Ajoutév1

    Pagination cursor opaque + headers Deprecation/Sunset legacy

    Tous les GET collection acceptent désormais ?cursor= opaque base64url avec tiebreaker id pour tri stable. Format legacy total_count + cursor ISO accepté en parallèle 12 mois (sunset 2027-05-03). Headers Deprecation (RFC 9745) + Sunset (RFC 8594) + Link rel=deprecation annoncent le retrait.

  6. Ajoutév1

    Header 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 retourne Idempotent-Replayed: true. Conflit (payload différent ou requête concurrente) → 409 idempotency_conflict.

  7. Ajoutév1

    Headers RFC 9331 + body 429 enrichi

    Émission parallèle des headers RateLimit-Limit/Remaining/Reset/Policy (RFC 9331) et X-RateLimit-* (legacy, sunset 2027-05-03). Body 429 inclut désormais details.limit_type (per_key ou brute_force) et details.retry_after_seconds actionnable.