# openFDA recall enforcement reports

FDA recall enforcement reports for drugs, medical devices or foods: recalling firm, product, reason, classification (Class I-III), status, distribution. Needs product type.

FDA recall enforcement reports for drugs, medical devices or foods: recalling firm, product, reason, classification (Class I-III), status, distribution pattern, dates. Pick product_type, then search e.g. recalling_firm or reason_for_recall.

- Tool ID: `openfda/recall-enforcement`
- Provider: [openFDA](/providers/openfda.md)
- Capability: [Knowledge & research](/tools/knowledge.md)
- Price: no charge per call
- Authentication: an authorised Agentik workspace is required for execution, including zero-price tools.

## Pricing contract

No charge per call. A workspace is still needed so your agent can call it.


```json
{
  "model": "per_call",
  "amountUsd": 0
}
```

## Complete input schema


```json
{
  "type": "object",
  "properties": {
    "product_type": {
      "type": "string",
      "enum": [
        "drug",
        "device",
        "food"
      ],
      "description": "Recall database to query, e.g. 'food'"
    },
    "search": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "openFDA search expression: field:term, quoted phrases, AND/OR/NOT, date ranges [20240101 TO 20241231]. Example: 'reason_for_recall:\"listeria\" AND classification:\"Class I\"'"
    },
    "count": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+$",
      "maxLength": 120,
      "description": "Return the top values of this field with their counts instead of records (append .exact to count whole phrases). Example: 'recalling_firm.exact'"
    },
    "sort": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+:(asc|desc)$",
      "description": "Sort records by a field, e.g. 'report_date:desc'"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "default": 10,
      "description": "Records to return (max 100), or count buckets when count is set (max 1000), e.g. 10"
    },
    "skip": {
      "type": "integer",
      "minimum": 0,
      "maximum": 25000,
      "description": "Records to skip for paging (record mode only), e.g. 10"
    }
  },
  "required": [
    "product_type"
  ],
  "additionalProperties": false,
  "allOf": [
    {
      "if": {
        "required": [
          "count"
        ]
      },
      "else": {
        "properties": {
          "limit": {
            "maximum": 100
          }
        }
      }
    }
  ]
}
```

## Published example

This is the provider tool’s published example. Replace example values with the user’s requested inputs, respecting the schema; do not execute an example merely to test a connection.


```json
{
  "tool_id": "openfda/recall-enforcement",
  "input": {
    "product_type": "food",
    "search": "reason_for_recall:\"listeria\"",
    "limit": 2
  }
}
```

## Execute and retrieve

Inspect again before execution, explain the price and obtain the required authority. Use MCP run_tool or POST /v1/run with this tool ID, valid input and an idempotency key. Save the returned run ID and follow the actual state. If Agentik answers that the tool is temporarily unavailable, do not retry it blindly; use discovery to propose an alternative.

A partial or uncertain result can still have consumed provider resources. Consult [billing](/docs/billing.md), [idempotency](/docs/idempotency.md) and [asynchronous results](/docs/async.md).

Licence: CC0 1.0 (openFDA content is public domain).

Attribution: Data from the U.S. Food and Drug Administration via openFDA. Not endorsed by FDA; do not rely on openFDA to make decisions regarding medical care..

[Provider documentation](https://open.fda.gov/apis/drug/enforcement/)

[REST inspection](https://api.agentik.cc/v1/tools/openfda/recall-enforcement) · [OpenAPI](/openapi.json) · [Connection guide](/connect.md)

---

[HTML page](/providers/openfda/recall-enforcement) · [Agent index](/llms.txt)
