{
  "openapi": "3.0.1",
  "info": {
    "title": "FDA Recalls Monitor – Food, Drug & Device Recalls API",
    "description": "Get FDA recalls and enforcement reports for food, drugs and medical devices from openFDA as clean JSON. Filter by recall class, firm, state and date, and monitor new recalls daily. Built for compliance teams and AI agents (MCP).",
    "version": "0.1",
    "x-build-id": "jXxPRZEwyIIn3nufP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/whitel1ght~fda-recalls/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-whitel1ght-fda-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/whitel1ght~fda-recalls/runs": {
      "post": {
        "operationId": "runs-sync-whitel1ght-fda-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/whitel1ght~fda-recalls/run-sync": {
      "post": {
        "operationId": "run-sync-whitel1ght-fda-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",
        "properties": {
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Which FDA product categories to search: \"food\" (incl. dietary supplements, animal feed), \"drug\" (human and animal drugs), \"device\" (medical devices). Default is food only; add drug and device to search all three. Results are streamed per category in the order food, drug, device, each category newest first (not merged into one global order).",
            "items": {
              "type": "string",
              "enum": [
                "food",
                "drug",
                "device"
              ],
              "enumTitles": [
                "Food",
                "Drug",
                "Medical device"
              ]
            },
            "default": [
              "food"
            ]
          },
          "searchText": {
            "title": "Search text",
            "type": "string",
            "description": "Free-text keywords matched against the product description and reason for recall. Multiple words must ALL appear (in either field), e.g. \"listeria cheese\" or \"undeclared peanut\". Leave empty for no keyword filter."
          },
          "recallingFirm": {
            "title": "Recalling firm",
            "type": "string",
            "description": "Company that initiated the recall, matched as a phrase against the firm name (case-insensitive, word-based), e.g. \"Pfizer\" or \"Trader Joe's\"."
          },
          "classification": {
            "title": "Classification",
            "enum": [
              "Class I",
              "Class II",
              "Class III"
            ],
            "type": "string",
            "description": "FDA recall class. Class I = reasonable probability of serious harm or death (most severe); Class II = temporary or reversible harm; Class III = unlikely to cause harm. Leave empty for all classes."
          },
          "status": {
            "title": "Recall status",
            "enum": [
              "Ongoing",
              "Completed",
              "Terminated",
              "Pending"
            ],
            "type": "string",
            "description": "Current status of the recall: Ongoing, Completed, Terminated or Pending. Leave empty for all statuses."
          },
          "state": {
            "title": "Recalling firm state",
            "pattern": "^[A-Za-z]{2}$",
            "minLength": 2,
            "maxLength": 2,
            "type": "string",
            "description": "Two-letter US state code of the recalling firm, e.g. \"CA\" or \"NY\". This is where the firm is located, not where the product was distributed."
          },
          "country": {
            "title": "Recalling firm country",
            "type": "string",
            "description": "Full country name of the recalling firm as used by FDA, e.g. \"United States\", \"Canada\", \"Germany\"."
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Earliest date to include, format YYYY-MM-DD (inclusive). Applies to the field chosen in \"Date field\". Leave empty for no lower bound."
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "Latest date to include, format YYYY-MM-DD (inclusive). Applies to the field chosen in \"Date field\". Leave empty for no upper bound."
          },
          "dateField": {
            "title": "Date field",
            "enum": [
              "reportDate",
              "recallInitiationDate"
            ],
            "type": "string",
            "description": "Which date the date range and sort order use. \"reportDate\" = when FDA published the recall in its weekly Enforcement Report (best for monitoring new items). \"recallInitiationDate\" = when the firm started the recall.",
            "default": "reportDate"
          },
          "onlyNew": {
            "title": "Only new since last run",
            "type": "boolean",
            "description": "If true, skip recalls already returned by a previous run that used the same Monitor ID, so you only receive new ones. Requires \"Monitor ID\". The first run returns everything that matches (up to Max results) and becomes the baseline.",
            "default": false
          },
          "monitorId": {
            "title": "Monitor ID",
            "type": "string",
            "description": "Short name for this monitoring job, e.g. \"peanut-allergen-watch\". Runs sharing the same Monitor ID share one list of already-seen recalls, so use a different ID for each distinct set of filters. Required when \"Only new\" is true."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of recalls to return in total (across all categories, and counting only new items when \"Only new\" is on). Categories are read in order food, drug, device, each newest first, so a low limit may return only the first category's recalls. You are charged per returned item, so this also caps cost.",
            "default": 10
          },
          "includeRaw": {
            "title": "Include raw record",
            "type": "boolean",
            "description": "If true, each item also contains a \"raw\" field with the unmodified openFDA record (extra fields such as address, postal code, termination date, center classification date).",
            "default": false
          },
          "openFdaApiKey": {
            "title": "openFDA API key (optional)",
            "type": "string",
            "description": "Optional free key from https://open.fda.gov/apis/authentication/ . Without one openFDA allows about 240 requests/minute per IP, which is enough for normal use; a key raises the daily limit for very large runs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}