{
  "openapi": "3.0.1",
  "info": {
    "title": "INCI Beauty Safety Score & Ingredients Scraper",
    "description": "Scrape INCI Beauty by barcode: the 0-20 safety score, full risk-rated INCI composition and ingredient reference dictionary. Score INCI, pay per result.",
    "version": "0.1",
    "x-build-id": "UJjlsdvMaUfRLb9mR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/extractify-labs~incibeauty-inci-ingredients/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-extractify-labs-incibeauty-inci-ingredients",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/extractify-labs~incibeauty-inci-ingredients/runs": {
      "post": {
        "operationId": "runs-sync-extractify-labs-incibeauty-inci-ingredients",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/extractify-labs~incibeauty-inci-ingredients/run-sync": {
      "post": {
        "operationId": "run-sync-extractify-labs-incibeauty-inci-ingredients",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "title": "What to collect",
            "enum": [
              "products",
              "ingredients",
              "both"
            ],
            "type": "string",
            "description": "Choose which records to return. \"Products\" returns EAN-keyed cosmetic products with their 0-20 safety score and full ingredient composition. \"Ingredients\" returns the ingredient reference dictionary (INCI name, CAS, functions, risk class, origin). \"Both\" returns the two streams in one feed, joinable on the ingredient identifier; maxItems applies per stream. Tip: for \"Both\" with a small maxItems, also pass specific ingredientIds (or run \"Ingredients\" separately) to guarantee ingredient records, since an open catalog crawl returns products first.",
            "default": "products"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional list of specific INCI Beauty page URLs to collect, instead of crawling whole brands. Three URL shapes are supported: a product page (https://incibeauty.com/produit/<barcode>), an ingredient page (https://incibeauty.com/ingredients/<id>-<name>), or a brand page (https://incibeauty.com/brand/<brand-slug>). Each URL is resolved to the matching product, ingredient or brand. Leave empty to crawl by brand, barcode or ingredient filters below.",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Optional list of brand slugs to crawl (the slug is the last path segment of a brand page URL, for example nivea from https://incibeauty.com/brand/nivea). Only products from these brands are returned. Leave empty to walk the full A-Z brand catalog.",
            "items": {
              "type": "string"
            }
          },
          "eans": {
            "title": "Product barcodes (EAN / GTIN)",
            "type": "array",
            "description": "Optional list of product barcodes (EAN / GTIN) to look up directly. Each barcode is resolved straight to its scored product record, skipping the brand walk. Ideal for enriching an existing barcode list. You can also paste a full product URL here (e.g. https://incibeauty.com/en/produit/3662361003174) and it is parsed to the barcode automatically. Leave empty to discover products by brand instead.",
            "items": {
              "type": "string"
            }
          },
          "ingredientIds": {
            "title": "Ingredient identifiers",
            "type": "array",
            "description": "Optional list of ingredient identifiers (the id-name segment of an ingredient page URL, for example 16498-azurite) to look up directly from the ingredient dictionary, skipping the A-Z ingredient walk. A full ingredient page URL is also accepted here and parsed to the id automatically. Leave empty to crawl ingredients by the selected scope.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after collecting this many records per stream (products and ingredients are capped independently). Lower it for a quick test run, raise it for a full catalog crawl. The free daily-test default is 10.",
            "default": 1000
          },
          "includePrice": {
            "title": "Include price offers",
            "type": "boolean",
            "description": "Collect the current retail price offers shown on each product page. ON by default and adds negligible cost. Turn it OFF if you do not need pricing. Applies to products only.",
            "default": true
          },
          "enrichIngredients": {
            "title": "Enrich ingredient records",
            "type": "boolean",
            "description": "Augment each ingredient with its additional reference details (extra naming, classification and CAS data) from INCI Beauty's lookup service. OFF by default; turn it ON for the richest ingredient dictionary at the cost of one extra request per ingredient. Applies to ingredients only.",
            "default": false
          },
          "proxyType": {
            "title": "Proxy",
            "enum": [
              "none",
              "apify"
            ],
            "type": "string",
            "description": "No proxy is the fastest and cheapest option and works for the whole actor (the data runs over INCI Beauty's public pages without an IP wall). Apify Proxy routes through your own Apify account (you pay Apify for proxy traffic); use it only if you want to rotate IPs.",
            "default": "none"
          },
          "proxyConfiguration": {
            "title": "Apify Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. Only used when Proxy is set to \"Apify Proxy\". Charged to your own Apify account.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}