{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Recalls API: CPSC, FDA, EU Safety Gate Alerts",
    "description": "Official product recalls from US CPSC, FDA (food, drugs, devices) and EU Safety Gate (RAPEX): product, brand, hazard, remedy, UPCs, images, official link. Brand watch with only-new alerts. No API key, no login. MCP-ready for AI agents. Pay per result, errors free. $3 per 1,000 recalls.",
    "version": "0.1",
    "x-build-id": "xJXiDA1j3vcjdD0TH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/actose~product-recalls-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-actose-product-recalls-monitor",
        "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/actose~product-recalls-monitor/runs": {
      "post": {
        "operationId": "runs-sync-actose-product-recalls-monitor",
        "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/actose~product-recalls-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-actose-product-recalls-monitor",
        "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": {
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Official recall databases to query. cpsc = US Consumer Product Safety Commission (consumer products, toys, children's products, appliances). fda = US FDA enforcement reports (food, drugs, medical devices). eu = EU Safety Gate weekly reports (non-food dangerous products in the EU/EEA).",
            "items": {
              "type": "string",
              "enum": [
                "cpsc",
                "fda",
                "eu"
              ],
              "enumTitles": [
                "CPSC (US consumer products)",
                "FDA (US food, drugs, devices)",
                "EU Safety Gate (ex-RAPEX)"
              ]
            },
            "default": [
              "cpsc",
              "fda",
              "eu"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Recall must mention at least one of these words (product name, description, brand, firm, hazard, model). Case- and accent-insensitive. Leave empty to get every recall of the period.",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands or companies",
            "type": "array",
            "description": "Brand monitoring: recall must name at least one of these brands, manufacturers or recalling firms. Combine with onlyNew for a daily brand watch.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Product categories",
            "type": "array",
            "description": "Recall category must contain one of these words, e.g. \"toys\", \"cosmetics\", \"motor vehicles\", \"bicycles\", \"food\", \"drug\", \"device\". Matched against the CPSC product type, EU Safety Gate category and FDA product type.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Country of origin / manufacture, EU notifying country or FDA firm country. English names (\"China\", \"Germany\") or ISO codes (\"CN\", \"DE\", \"US\").",
            "items": {
              "type": "string"
            }
          },
          "hazards": {
            "title": "Hazards",
            "type": "array",
            "description": "Hazard or recall reason must contain one of these words, e.g. \"choking\", \"fire\", \"lead\", \"salmonella\", \"listeria\", \"undeclared\", \"chemical\", \"strangulation\".",
            "items": {
              "type": "string"
            }
          },
          "sinceDays": {
            "title": "Look back (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only recalls published in the last N days (1 to 3650). For a daily schedule with onlyNew, 7 to 30 is enough.",
            "default": 30
          },
          "onlyNew": {
            "title": "Only new recalls (monitoring mode)",
            "type": "boolean",
            "description": "Return only recalls not delivered by a previous run with the same filters (remembered in the named key-value store 'product-recalls-monitor-state'). Already-seen recalls are skipped and never charged. Ideal for scheduled runs.",
            "default": false
          },
          "stateKey": {
            "title": "Watch name (optional)",
            "type": "string",
            "description": "Optional name for the onlyNew memory, e.g. \"acme-brand-watch\". By default a key is derived from your filters, so changing filters starts a fresh watch."
          },
          "maxResultsPerSource": {
            "title": "Max results per source",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper limit of recalls delivered per source (newest first). Caps your cost.",
            "default": 100
          },
          "fdaProductTypes": {
            "title": "FDA product types",
            "type": "array",
            "description": "Which FDA enforcement report databases to search (only used when the fda source is selected).",
            "items": {
              "type": "string",
              "enum": [
                "food",
                "drug",
                "device"
              ],
              "enumTitles": [
                "Food & cosmetics",
                "Drugs",
                "Medical devices"
              ]
            },
            "default": [
              "food",
              "drug",
              "device"
            ]
          },
          "fdaClassifications": {
            "title": "FDA recall classes",
            "type": "array",
            "description": "Keep only these FDA classes (Class I = most serious). Empty = all classes.",
            "items": {
              "type": "string",
              "enum": [
                "Class I",
                "Class II",
                "Class III"
              ]
            },
            "default": []
          },
          "includeMarkdown": {
            "title": "Add Markdown summary (LLM-ready)",
            "type": "boolean",
            "description": "Add a 'markdown' field with a compact human/LLM-readable summary of each recall, ready for RAG, Slack or e-mail alerts.",
            "default": true
          },
          "fdaApiKey": {
            "title": "openFDA API key (optional)",
            "type": "string",
            "description": "Optional free key from open.fda.gov. Only needed for very heavy use: without a key openFDA allows 1,000 requests per day per IP."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}