Spec seule
Pour documenter l'existant et onboarder tes devs.
1 500€
- Spec OpenAPI complète
- Rapport de confiance
- Livraison en 48 h
Pour les CTO et lead devs
Spec OpenAPI complète et SDK typé TypeScript & Python, reconstruits à partir d'une session de ton appli que tu nous autorises à observer. Ton équipe se branche sans deviner. Ton code source reste chez toi.
Pas encore prêt ? Essaie la version gratuite, 100 % dans ton navigateur : HAR → OpenAPI + SDK →
POST /v2/orders
201
authorization: Bearer ••••••••masqué
{
"customer_id": "cus_8f2a",
"items": [{ "sku": "BX-12", "qty": 2 }],
"coupon": null
}
openapi.yaml
OrderCreate:
type: object
required: [customer_id, items] # vus 14/14
properties:
customer_id: { type: string }
items:
type: array
items:
$ref: "#/components/schemas/LineItem"
coupon:
type: [string, "null"] # null 9×/14
Signaux, secrets retirés, programme approximatif : le principe du compilateur, en trois étapes.
Personne ne sait plus ce que renvoie /v1/sync, et toute l'équipe a peur d'y toucher.
Sans doc, il passe sa première semaine à lire du code. Avec la spec, il lit le contrat en une heure.
Le SDK typé remplace les essais-erreurs dans Postman et les captures d'écran envoyées sur Slack.
Contour lit le trafic de ta session, masque les secrets, puis déduit le contrat d'API avec un score de confiance pour chaque opération.
J0
Une page : quelle appli, quel environnement, quelle durée. Rien n'est capturé avant ta signature.
J0 à J+2
Tu exportes une session de ton appli (un fichier HAR, en quelques clics depuis le navigateur) ou tu nous ouvres un compte de test. Contour regroupe les appels et déduit les schémas.
J+2
Spec, SDK et rapport de confiance. Tu commites, ton équipe s'en sert le jour même.
Quatre fichiers, lisibles par tes devs comme par tes outils. Aperçu d'un pack type, sur une API de commandes fictive.
openapi: 3.1.0
info:
title: Orders API (interne)
version: 2.0.0
x-generated-by: contour
servers:
- url: https://staging.example.com
paths:
/v2/orders:
post:
operationId: createOrder
summary: Crée une commande
security: [{ bearerAuth: [] }]
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/OrderCreate"
responses:
"201": { $ref: "#/components/responses/Order" }
"422": { $ref: "#/components/responses/Invalid" }
x-confidence: 0.96 # 14 appels observés
# … 23 autres opérations
// Généré par Contour : fetch natif, zéro dépendance
export interface OrderCreate {
customer_id: string;
items: LineItem[];
coupon?: string | null;
}
export class OrdersApi {
constructor(private base: string, private token: string) {}
/** POST /v2/orders : crée une commande */
async createOrder(body: OrderCreate): Promise<Order> {
const res = await fetch(`${this.base}/v2/orders`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.token}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
if (!res.ok) throw new ApiError(res.status, await res.json());
return res.json();
}
// … 23 autres méthodes typées
}
# Généré par Contour : stdlib uniquement, Python 3.11+
import json
import urllib.request
from typing import NotRequired, Optional, TypedDict
class OrderCreate(TypedDict):
customer_id: str
items: list["LineItem"]
coupon: NotRequired[Optional[str]]
class OrdersApi:
def __init__(self, base: str, token: str) -> None:
self.base, self.token = base, token
def create_order(self, body: OrderCreate) -> "Order":
req = urllib.request.Request(
f"{self.base}/v2/orders",
data=json.dumps(body).encode(),
method="POST",
headers={"Authorization": f"Bearer {self.token}",
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req) as res:
return json.load(res)
# … 23 autres méthodes typées
# Rapport Contour : Orders API
Sessions : 3 Appels analysés : 412 Opérations : 24
## Confiance par opération
| Opération | Vu | Confiance |
|------------------------|-----|---------------|
| GET /v2/orders/{id} | 31× | 0.98 |
| POST /v2/orders | 14× | 0.96 |
| PATCH /v2/orders/{id} | 2× | 0.61 à revoir |
## À compléter
- PATCH /v2/orders/{id} : 2 appels seulement,
valeurs de `status` peut-être incomplètes.
- /v1/legacy/* : aucun appel dans la session.
Une session de 10 min sur l'écran Export suffit.
## Masqué avant analyse
- 3 en-têtes Authorization, 1 cookie de session
- 27 valeurs personnelles (emails, téléphones)
Formats : OpenAPI 3.1, TypeScript 5, Python 3.11+. La spec s'ouvre telle quelle dans Swagger UI, Redoc ou Postman.
Contour ne lit que le trafic HTTP d'une session que tu autorises. Le plus simple : ton staging, un compte de test, des données fictives.
Interopérabilité uniquement, sur une API qui t'appartient ou que tu es autorisé à intégrer. Jamais de code source.
Un accord écrit signé avant la moindre capture. Ta protection autant que la nôtre.
Tokens, identifiants et données personnelles retirés avant toute analyse par un modèle.
On valide le périmètre pendant l'appel, tu repars avec un devis ferme.
Envie de voir avant d'appeler ? L'outil gratuit compile ton HAR en local, en quelques secondes. · Le compilateur est open-source
Pour documenter l'existant et onboarder tes devs.
1 500€
Pour qu'une app ou un nouveau dev s'y branche tout de suite.
2 500€
Pour qu'on fasse le branchement avec ton équipe.
dès3 000€
Pas sûr du bon pack ? On tranche ensemble pendant l'appel.
Le cadre est fait pour : on documente l'interface d'une API qui t'appartient, ou que ton contrat t'autorise à intégrer, à partir de sessions que tu as le droit d'observer. Aucun contournement de protection, aucun accès au code source, et un accord écrit signé avant toute capture. Un doute sur tes droits ? On le tranche pendant l'appel, avant le moindre devis.
Le plus sûr, et ce qu'on recommande : ton staging, un compte de test, des données fictives. Rien de réel ne sort. Si tu passes par la prod, tokens, identifiants et données personnelles sont masqués avant toute analyse par un modèle, et le rapport liste tout ce qui l'a été.
48 h ouvrées, à compter de l'accord signé et de la session reçue. C'est le bon ordre de grandeur pour la plupart des API internes. Si la tienne est plus vaste, on te le dit pendant l'appel et le devis l'écrit noir sur blanc.
Trois choses : l'accord d'autorisation signé (on t'envoie le modèle), une session qui parcourt les écrans clés de ton appli, en export HAR ou via un compte de test, et vingt minutes pour nous dire ce qui compte. C'est tout.
Il n'apparaît pas dans la spec : on ne devine pas. Le rapport de confiance liste ce qui a été vu, combien de fois, et ce qui reste à couvrir. Une session complémentaire suffit à combler les trous.
Parce que tu n'as pas à ouvrir ton repo à un prestataire. Et parce que la session montre ce que ton API fait vraiment, pas ce que le code était censé faire.
Tu décris l'API qui te bloque. On évalue le périmètre avec toi et on te dit si c'est faisable. Si oui, tu repars avec un devis ferme. L'appel est offert et ne t'engage à rien. Réserver les 20 min
Vingt minutes. Si c'est faisable, tu repars avec un devis ferme. Sinon, tu sais pourquoi.
20 minutes en visio. Dis-nous quelle API te bloque et tes disponibilités : David Amor te propose un créneau sous un jour ouvré, devis ferme à la fin de l'appel.