{
 "openapi": "3.1.0",
 "info": {
  "title": "Compoatlas API",
  "version": "1.0.0",
  "description": "Statut réglementaire des ingrédients des cosmétiques et des compléments, avec les sources officielles datées. Lecture seule, sans authentification.",
  "license": {
   "name": "Licences des sources, voir /sources"
  }
 },
 "servers": [
  {
   "url": "https://compoatlas.com"
  }
 ],
 "paths": {
  "/api/v1/ingredients/{slug}": {
   "get": {
    "summary": "Statut d'un ingrédient (UE, autres pays, danger classé, identité)",
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Ingrédient"
     },
     "404": {
      "description": "Inconnu"
     }
    }
   }
  },
  "/api/v1/products/{barcode}": {
   "get": {
    "summary": "Composition relevée d'un cosmétique et statut de chaque ingrédient",
    "parameters": [
     {
      "name": "barcode",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Produit"
     },
     "404": {
      "description": "Inconnu"
     }
    }
   }
  },
  "/api/v1/alerts": {
   "get": {
    "summary": "Alertes européennes Safety Gate sur des cosmétiques, par code-barres, substance ou marque",
    "parameters": [
     {
      "name": "barcode",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "substance",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "brand",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Alertes"
     },
     "404": {
      "description": "Substance inconnue"
     }
    }
   }
  },
  "/api/v1/report": {
   "post": {
    "summary": "Rapport de conformité d'une liste de produits (200 au plus), rien n'est conservé",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "products": {
          "type": "array",
          "maxItems": 200,
          "items": {
           "type": "object",
           "properties": {
            "id": {
             "type": "string"
            },
            "title": {
             "type": "string"
            },
            "brand": {
             "type": "string"
            },
            "gtin": {
             "type": "string"
            },
            "link": {
             "type": "string"
            },
            "ingredients": {
             "type": "string"
            }
           }
          }
         }
        }
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Constats par produit"
     }
    }
   }
  },
  "/api/v1/search": {
   "get": {
    "summary": "Recherche d'ingrédients, plantes, nutriments, produits et marques",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Résultats"
     }
    }
   }
  },
  "/api/v1/analyze": {
   "post": {
    "summary": "Analyse d'une liste d'ingrédients telle qu'imprimée",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "properties": {
         "text": {
          "type": "string"
         }
        },
        "required": [
         "text"
        ]
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Ingrédients reconnus et statuts"
     }
    }
   }
  }
 }
}