watch-api est la référence canonique des montres, exposée en HTTP. Cette page documente la surface publique (lecture) : recherche, détail, tirage du jour et provenance. Toutes les réponses sont en JSON.
https://watch-api-ochre.vercel.app
Tous les endpoints ci-dessous sont préfixés par cette URL. Le seul endpoint sans clé est /api/health.
Chaque requête (sauf /api/health) doit porter l'en-tête x-api-key avec une clé consommateur valide. Une clé ressemble à wapi_live_<48 hex>. Les clés sont créées et révoquées côté admin ; elles ne sont affichées qu'une seule fois à la création — conservez-la immédiatement.
x-api-key: wapi_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/, qui interroge l'API sans jamais révéler la clé au navigateur./api/healthsans authLiveness check. Le seul endpoint sans authentification.
curl https://watch-api-ochre.vercel.app/api/health
{ "ok": true }/api/watches/searchRecherche par texte sur marque / modèle / référence. Renvoie une liste de résultats légers.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
q | string | oui | Texte recherché (marque, modèle ou référence). |
limit | number | non | Nombre de résultats. Défaut 10, plafonné à 25. |
curl -H "x-api-key: <clé>" \ "https://watch-api-ochre.vercel.app/api/watches/search?q=submariner&limit=5"
[
{
"id": "clx0abc123",
"name": "Submariner Date",
"brand": "Rolex",
"year": 2020,
"imageUrl": "https://.../submariner.jpg",
"model": "Submariner Date",
"reference": "126610LN"
}
]/api/watches/:idFiche complète d'une montre — le payload qui alimente chaque écran de jeu.
curl -H "x-api-key: <clé>" \ https://watch-api-ochre.vercel.app/api/watches/clx0abc123
{
"id": "clx0abc123",
"name": "Submariner Date",
"brand": "Rolex",
"brandLogoUrl": "https://.../rolex-logo.svg",
"year": 2020,
"imageUrl": "https://.../cover.jpg",
"images": ["https://.../cover.jpg", "https://.../side.jpg"],
"collection": "Submariner",
"reference": "126610LN",
"nickname": null,
"country": "Suisse",
"movement": "Automatique",
"caliber": "Rolex 3235",
"caseMaterial": "Acier",
"braceletMaterial": "Acier",
"caseDiameterMm": 41,
"caseDimensions": null,
"variants": [],
"caliberExecutions": [],
"technicalDataTruncated": false,
"complications": ["Date"],
"priceTier": "5-20k€",
"gender": "Homme",
"famous": true,
"imageCredit": null,
"model": "Submariner Date",
"diameter": 41
}/api/watches/randomTire une ou plusieurs montres du catalogue. Sert la « montre du jour » de façon déterministe, sans état côté serveur.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
famous | bool | non | true privilégie les montres curées « famous » avec image ; dégrade proprement (famous+image → famous → illustrée → n'importe laquelle) plutôt que 404. |
count | number | non | 1–50 : renvoie un tableau de N montres distinctes. Omis → un seul objet. |
date | YYYY-MM-DD | non | Rend le tirage déterministe : même date (+ même famous) → même montre pour tous les appelants. Omis → tirage aléatoire à chaque appel. |
# Montre du jour déterministe depuis le pool famous curl -H "x-api-key: <clé>" \ "https://watch-api-ochre.vercel.app/api/watches/random?famous=true&date=2026-07-24" # Cinq montres famous distinctes curl -H "x-api-key: <clé>" \ "https://watch-api-ochre.vercel.app/api/watches/random?famous=true&count=5"
// Même forme que GET /api/watches/:id // (objet unique, ou tableau si count est fourni)
/api/watches/:id/provenanceOrigine des faits d'une fiche : quelle observation gagnante (source + tier de confiance) sous-tend chaque champ.
curl -H "x-api-key: <clé>" \ https://watch-api-ochre.vercel.app/api/watches/clx0abc123/provenance
// Par champ : la valeur retenue et la source qui l'a emporté // à l'arbitrage (voir « verified » / tier de confiance).
/api/brandsListe des marques du catalogue (haut de la hiérarchie Brand → Collection → Model → Watch), avec logo, histoire et compteurs.
curl -H "x-api-key: <clé>" https://watch-api-ochre.vercel.app/api/brands
[
{
"id": "clbrand01",
"key": "rolex",
"name": "Rolex",
"country": "Suisse",
"logoUrl": "https://.../rolex-logo.svg",
"description": "Manufacture genevoise fondée en 1905…",
"foundedYear": 1905,
"models": 57,
"collections": 18,
"references": 1240
}
]/api/models/:idDétail d'un modèle et ses références (le niveau que la plupart du contenu externe adresse).
curl -H "x-api-key: <clé>" https://watch-api-ochre.vercel.app/api/models/<model-id>
// Fiche modèle + ses watches/références
/api/calibers/:key/watchesLes montres équipées d'un calibre donné (ex. Rolex 3235).
curl -H "x-api-key: <clé>" https://watch-api-ochre.vercel.app/api/calibers/<key>/watches
// Tableau de montres partageant ce calibre
| Code | Corps | Quand |
|---|---|---|
| 401 | { "error": "unauthorized" } | Clé x-api-key absente ou invalide. |
| 404 | { "error": "not_found" } | Détail d'une montre dont l'id n'existe pas. |
| 404 | { "error": "empty_pool" } | Tirage random sur un catalogue vide. |
429) — seules les limites plateforme (Vercel / Neon) s'appliquent. Mettez en cache les réponses de détail et du tirage du jour côté consommateur.Surface en lecture seule, sur le même catalogue public que l'API sert. Certains champs numériques (prix exact, étanchéité, années de production) ne sont pas encore sourcés et apparaîtront quand une source les fournira.