{
  "openapi": "3.1.0",
  "info": { "title": "OpenCookies — installation par un agent", "version": "1.0.0", "description": "Installe le bandeau de cookies OpenCookies sur un site sans compte préalable. Le site est provisoire (14 jours) tant qu'un humain ne l'a pas réclamé avec le lien renvoyé." },
  "servers": [{ "url": "https://opencookies.com" }],
  "paths": {
    "/api/v1/install": {
      "post": {
        "operationId": "installBanner", "summary": "Créer un site provisoire et obtenir la ligne à coller dans <head>",
        "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["domain"], "properties": { "domain": { "type": "string", "example": "exemple.fr" }, "framework": { "type": "string", "enum": ["html", "nextjs", "astro", "nuxt", "sveltekit", "vite", "wordpress", "shopify", "php"], "default": "html" } } } } } },
        "responses": { "201": { "description": "Site créé : site_key, script, placement, verify_url, claim_url" }, "400": { "description": "Domaine invalide" }, "429": { "description": "Limite : 30 demandes par heure et par adresse" } }
      }
    },
    "/api/v1/verify": {
      "get": {
        "operationId": "verifyInstall", "summary": "Le bandeau est-il chargé par les pages du site ?",
        "parameters": [{ "name": "site_key", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^[a-f0-9]{24}$" } }],
        "responses": { "200": { "description": "installed (booléen), last_seen, hint" }, "404": { "description": "Clé inconnue" } }
      }
    }
  }
}
