{
  "openapi": "3.0.1",
  "info": {
    "title": "French Product Recalls (RappelConso) – Barcode Check & Alerts",
    "description": "Every product recall in France from the official RappelConso feed: barcodes, lots, risks, allergens, sale areas, retailers and what to do. Check your barcodes against all recalls, get alerts on new recalls, and statistics by brand, hazard or retailer.",
    "version": "0.1",
    "x-build-id": "43yWafe3YTLnDMfw0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yck69~french-product-recalls/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yck69-french-product-recalls",
        "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/yck69~french-product-recalls/runs": {
      "post": {
        "operationId": "runs-sync-yck69-french-product-recalls",
        "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/yck69~french-product-recalls/run-sync": {
      "post": {
        "operationId": "run-sync-yck69-french-product-recalls",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What do you want?",
            "enum": [
              "recalls",
              "barcodes",
              "stats"
            ],
            "type": "string",
            "description": "<b>Recalls</b>: product recalls with every detail (barcodes, lots, risks, sale areas, retailers, what to do), newest first. Turn on alerts to get only new ones.<br><b>Barcode check</b>: check a list of barcodes (your catalogue, a shopping list) against every recall.<br><b>Statistics</b>: recalls counted by category, hazard, brand, retailer, month…",
            "default": "recalls"
          },
          "query": {
            "title": "Keywords",
            "type": "string",
            "description": "Words searched in every field: product name, brand, reason… e.g. <code>chocolat</code>, <code>poulet</code>, <code>airbag</code>."
          },
          "barcodes": {
            "title": "Barcodes (Barcode check)",
            "type": "array",
            "description": "EAN-13, EAN-8, UPC or GTIN-14 codes, one per line. Leading zeros and spaces don't matter.",
            "items": {
              "type": "string"
            }
          },
          "includeNotRecalled": {
            "title": "List barcodes that aren't recalled",
            "type": "boolean",
            "description": "Adds a row <code>recalled: false</code> for each clean barcode (not charged as a recall).",
            "default": false
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Product categories.",
            "items": {
              "type": "string",
              "enum": [
                "alimentation",
                "automobiles et moyens de déplacement",
                "bébés-enfants (hors alimentaire)",
                "maison-habitat",
                "appareils électriques, outils",
                "hygiène-beauté",
                "vêtements, mode, epi",
                "sports-loisirs",
                "equipements de communication",
                "autres"
              ],
              "enumTitles": [
                "Food",
                "Vehicles & transport",
                "Babies & children (non-food)",
                "Home",
                "Electrical appliances & tools",
                "Hygiene & beauty",
                "Clothing, fashion & PPE",
                "Sports & leisure",
                "Communication equipment",
                "Other"
              ]
            }
          },
          "subcategories": {
            "title": "Subcategories",
            "type": "array",
            "description": "Product subcategories.",
            "items": {
              "type": "string",
              "enum": [
                "autres",
                "additifs alimentaires",
                "alcool et vin",
                "aliments diététiques et nutrition",
                "aliments pour animaux d'élevage",
                "aliments pour animaux domestiques",
                "aliments pour bébés",
                "beurres d'origine végétale, graisses margarines et huiles",
                "boissons non alcoolisées",
                "cacao, café et thé",
                "céréales et produits de boulangerie",
                "eaux",
                "escargots et grenouilles",
                "fruits et légumes",
                "herbes et épices",
                "lait et produits laitiers",
                "miel et gelée royale",
                "noix et graines",
                "oeufs et produits à base d'oeufs",
                "plats préparés et snacks",
                "produits de la pêche et d'aquaculture",
                "produits sucrés",
                "soupes, sauces et condiments",
                "viandes",
                "appareils électriques, électroménager",
                "machines",
                "outils à main",
                "automobiles, motos, scooters",
                "autres moyens de déplacement",
                "engins de déplacement personnel",
                "pneus",
                "tous types d'accessoires",
                "vélos, bicyclettes, vélos à assistance électrique",
                "appareils laser",
                "divers",
                "instruments de mesure",
                "articles pour enfants et puériculture",
                "jouets",
                "matériels scolaires",
                "equipements de communication, média",
                "cosmétiques",
                "dispositifs médicaux grand public",
                "produits de tatouage",
                "produits d’hygiène (cotons, intime, papiers)",
                "appareils à pression",
                "articles de décoration",
                "articles imitant les denrées alimentaires",
                "matériel de cuisine (sauf électroménager)",
                "mobilier",
                "papiers, cartons",
                "produits chimiques",
                "produits de construction",
                "equipements de sports et de loisirs",
                "gadgets",
                "bijouterie",
                "equipements de protection individuels",
                "vêtements, textiles, accessoires de mode"
              ],
              "enumTitles": [
                "Other food",
                "Food additives",
                "Alcohol & wine",
                "Dietary & nutrition products",
                "Livestock feed",
                "Pet food",
                "Baby food",
                "Fats, margarines & oils",
                "Soft drinks",
                "Cocoa, coffee & tea",
                "Cereals & bakery",
                "Water",
                "Snails & frogs",
                "Fruit & vegetables",
                "Herbs & spices",
                "Milk & dairy",
                "Honey & royal jelly",
                "Nuts & seeds",
                "Eggs & egg products",
                "Ready meals & snacks",
                "Fish & seafood",
                "Sweet products",
                "Soups, sauces & condiments",
                "Meat",
                "Electrical & household appliances",
                "Machinery",
                "Hand tools",
                "Cars, motorbikes & scooters",
                "Other vehicles",
                "Personal mobility devices",
                "Tyres",
                "Vehicle accessories",
                "Bicycles & e-bikes",
                "Laser devices",
                "Miscellaneous",
                "Measuring instruments",
                "Childcare articles",
                "Toys",
                "School supplies",
                "Communication & media equipment",
                "Cosmetics",
                "Consumer medical devices",
                "Tattoo products",
                "Hygiene products",
                "Pressure equipment",
                "Decoration",
                "Food-imitating articles",
                "Kitchenware",
                "Furniture",
                "Paper & cardboard",
                "Chemical products",
                "Construction products",
                "Sports & leisure equipment",
                "Gadgets",
                "Jewellery",
                "Personal protective equipment",
                "Clothing, textiles & accessories"
              ]
            }
          },
          "hazards": {
            "title": "Hazards",
            "type": "array",
            "description": "Type of risk.",
            "items": {
              "type": "string",
              "enum": [
                "listeria",
                "salmonella",
                "e-coli",
                "other-microbial",
                "undeclared-allergens",
                "foreign-bodies",
                "pesticides",
                "natural-toxins",
                "chemical",
                "injury",
                "choking-suffocation",
                "fire-burns",
                "electric-shock",
                "labelling-quality",
                "environment",
                "other"
              ],
              "enumTitles": [
                "Listeria",
                "Salmonella",
                "E. coli (incl. STEC)",
                "Other microbial (botulism, norovirus, Bacillus…)",
                "Undeclared allergens",
                "Foreign bodies (glass, metal, plastic, insects)",
                "Pesticides",
                "Natural toxins (aflatoxins, histamine…)",
                "Chemical contaminants & forbidden substances",
                "Injury",
                "Choking, suffocation, strangulation",
                "Fire & burns",
                "Electric shock",
                "Labelling or packaging defects",
                "Environment",
                "Other"
              ]
            }
          },
          "allergens": {
            "title": "Undeclared allergens",
            "type": "array",
            "description": "Recalls for an undeclared allergen.",
            "items": {
              "type": "string",
              "enum": [
                "milk",
                "gluten",
                "eggs",
                "peanuts",
                "nuts",
                "soy",
                "sesame",
                "mustard",
                "celery",
                "crustaceans",
                "fish",
                "molluscs",
                "lupin",
                "sulphites"
              ],
              "enumTitles": [
                "Milk",
                "Gluten",
                "Eggs",
                "Peanuts",
                "Tree nuts",
                "Soy",
                "Sesame",
                "Mustard",
                "Celery",
                "Crustaceans",
                "Fish",
                "Molluscs",
                "Lupin",
                "Sulphites"
              ]
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Brand names, e.g. <code>Lactalis</code>.",
            "items": {
              "type": "string"
            }
          },
          "retailers": {
            "title": "Retailers",
            "type": "array",
            "description": "Stores that sold the product, e.g. <code>Carrefour</code>, <code>Leclerc</code>, <code>Lidl</code>.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Sold in departments",
            "type": "array",
            "description": "Department codes, e.g. <code>35</code>, <code>2A</code>, <code>974</code>.",
            "items": {
              "type": "string"
            }
          },
          "includeNationwide": {
            "title": "Include nationwide recalls",
            "type": "boolean",
            "description": "With departments: also recalls sold all over France.",
            "default": true
          },
          "lastDays": {
            "title": "Published in the last (days)",
            "minimum": 1,
            "type": "integer",
            "description": "e.g. <code>30</code>."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Recalls published on or after this date."
          },
          "publishedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Recalls published before this date."
          },
          "onlyOngoing": {
            "title": "Only ongoing recalls",
            "type": "boolean",
            "description": "Excludes recalls whose procedure has ended.",
            "default": false
          },
          "onlyImposed": {
            "title": "Only recalls imposed by the authorities",
            "type": "boolean",
            "description": "Recalls ordered by a prefectoral order rather than voluntary.",
            "default": false
          },
          "source": {
            "title": "Source",
            "enum": [
              "all",
              "rappelconso",
              "safety-gate"
            ],
            "type": "string",
            "description": "RappelConso recalls, or Safety Gate (EU) alerts relayed in France (mostly cars).",
            "default": "all"
          },
          "onlyNew": {
            "title": "Alerts: only new or updated recalls since the last run",
            "type": "boolean",
            "description": "Schedule the Actor (e.g. every day) with an email, Slack or webhook integration. The first run saves the current recalls.",
            "default": false
          },
          "alertName": {
            "title": "Alert name",
            "type": "string",
            "description": "Separate memory per alert. Defaults to one per set of filters."
          },
          "groupBy": {
            "title": "Statistics by",
            "enum": [
              "category",
              "subcategory",
              "hazard",
              "allergen",
              "brand",
              "retailer",
              "department",
              "month",
              "year",
              "source"
            ],
            "type": "string",
            "description": "For Statistics mode.",
            "default": "category"
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Recalls or statistics rows (Barcode check returns every match).",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}