Skip to content
Eden Engine

FDA NDC Directory (Drug Products by NDC Code, Name or Labeler)

openfda/drug-ndc-directory

Searches the FDA's National Drug Code (NDC) directory and returns matching marketed drug products, or counts them by a field. Each record gives the product NDC, brand and generic name, labeler, active ingredients with strengths, dosage form, route, marketing category and application number, product type (prescription, over the counter, bulk ingredient and so on), pharmacologic class, marketing start and end dates, listing expiry date, and every package with its package NDC and description. Look a product up by NDC code, by name, by labeler or by ingredient, or set count to get the most frequent values of a field, such as the labelers with the most products for a drug. The reply also carries the FDA's own notice that the data is unvalidated and not for medical decisions. Taken directly from the FDA's openFDA NDC API.

activeper callv1

Price

$0.00273 per call

You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.

Data source

U.S. Food and Drug Administration (openFDA)

Data provided by the U.S. Food and Drug Administration (https://open.fda.gov); public domain under CC0 per open.fda.gov/terms.

Use it

Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.

Connect once and your AI can find and run this tool, and any other it needs.

agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "openfda/drug-ndc-directory" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "openfda/drug-ndc-directory" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "openfda/drug-ndc-directory", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "openfda/drug-ndc-directory", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.

Pricing

Every charge this tool can incur.

ChargePrice
Per call
$0.00273
Updated
Oct 18, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "required": [
    "limit"
  ],
  "properties": {
    "skip": {
      "type": "integer",
      "maximum": 25000,
      "minimum": 0,
      "description": "How many matching products to skip, for paging; the FDA allows up to 25000. Not allowed with count."
    },
    "sort": {
      "enum": [
        "listing_expiration_date:desc",
        "listing_expiration_date:asc",
        "marketing_start_date:desc",
        "marketing_start_date:asc"
      ],
      "type": "string",
      "description": "Order of the products by listing expiry or marketing start date. Leave out for the FDA's own order. Has no effect with count."
    },
    "count": {
      "enum": [
        "labeler_name.exact",
        "generic_name.exact",
        "brand_name.exact",
        "dosage_form.exact",
        "route.exact",
        "marketing_category",
        "product_type.exact",
        "pharm_class.exact",
        "active_ingredients.name.exact"
      ],
      "type": "string",
      "description": "Return the most frequent values of this field among the matching products, each with its product count, instead of the products themselves. Leave out to get products. Cannot be combined with skip."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "How many products to return, 1 to 100; with count, how many of the most frequent values."
    },
    "search": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "description": "An openFDA search expression, field:value, with AND / OR between terms. Fields include product_ndc (such as \"50580-575\"), packaging.package_ndc (such as \"50580-575-01\", with the hyphens), brand_name, generic_name, labeler_name, active_ingredients.name, dosage_form, route, marketing_category (NDA, ANDA, BLA, \"OTC MONOGRAPH DRUG\" and others), product_type (\"HUMAN PRESCRIPTION DRUG\", \"HUMAN OTC DRUG\"), pharm_class, application_number and finished (true or false). Dates are YYYYMMDD with ranges as [20260101 TO 20261231]: marketing_start_date, marketing_end_date and listing_expiration_date. Examples: packaging.package_ndc:\"50580-575-01\", generic_name:\"metformin\" AND labeler_name:\"Bryant Ranch Prepack\", brand_name:tylenol AND dosage_form:\"TABLET\". Leave out to match every product. A search that matches nothing returns a validation error."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "required": [
    "meta",
    "results"
  ],
  "properties": {
    "meta": {
      "type": "object",
      "required": [
        "disclaimer"
      ],
      "properties": {
        "terms": {
          "type": "string",
          "description": "Link to the openFDA terms of service."
        },
        "license": {
          "type": "string",
          "description": "Link to the openFDA data licence."
        },
        "results": {
          "type": "object",
          "required": [
            "total"
          ],
          "properties": {
            "skip": {
              "type": "integer",
              "description": "Products skipped."
            },
            "limit": {
              "type": "integer",
              "description": "Products requested."
            },
            "total": {
              "type": "integer",
              "description": "Total products matching the search."
            }
          },
          "description": "Paging totals; absent when count was set.",
          "additionalProperties": true
        },
        "disclaimer": {
          "type": "string",
          "description": "The FDA's disclaimer, passed through verbatim."
        },
        "last_updated": {
          "type": "string",
          "description": "When the FDA last refreshed this dataset, YYYY-MM-DD."
        }
      },
      "description": "The FDA's own notice and, for a product search, paging totals. The disclaimer says to treat all results as unvalidated and not to use them for medical decisions.",
      "additionalProperties": true
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "term": {
            "type": "string",
            "description": "With count: the field value."
          },
          "count": {
            "type": "integer",
            "description": "With count: how many matching products carry the value."
          },
          "route": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Routes of administration, such as ORAL."
          },
          "openfda": {
            "type": "object",
            "description": "Linked identifiers (manufacturer name, RxNorm codes, UNII, UPC) when the FDA could link the product; sometimes empty.",
            "additionalProperties": true
          },
          "finished": {
            "type": "boolean",
            "description": "True for a finished dosage form, false for a bulk ingredient."
          },
          "packaging": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sample": {
                  "type": "boolean"
                },
                "description": {
                  "type": "string"
                },
                "package_ndc": {
                  "type": "string",
                  "description": "Such as 50580-575-01."
                },
                "marketing_start_date": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            },
            "description": "Each package sold, with its package NDC and a text description."
          },
          "brand_name": {
            "type": "string",
            "description": "The brand name, when the product has one."
          },
          "dosage_form": {
            "type": "string",
            "description": "Such as TABLET or INJECTION, SOLUTION."
          },
          "product_ndc": {
            "type": "string",
            "description": "The product NDC, labeler and product segments, such as 50580-575."
          },
          "generic_name": {
            "type": "string",
            "description": "The generic (nonproprietary) name."
          },
          "labeler_name": {
            "type": "string",
            "description": "The company that listed the product."
          },
          "product_type": {
            "type": "string",
            "description": "Such as HUMAN PRESCRIPTION DRUG or HUMAN OTC DRUG."
          },
          "active_ingredients": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "strength": {
                  "type": "string",
                  "description": "Such as 650 mg/1."
                }
              },
              "additionalProperties": true
            },
            "description": "Each active ingredient with its strength."
          },
          "application_number": {
            "type": "string",
            "description": "The FDA application number, such as ANDA211544; absent for some."
          },
          "marketing_category": {
            "type": "string",
            "description": "Such as NDA, ANDA, BLA or OTC MONOGRAPH DRUG."
          },
          "marketing_end_date": {
            "type": "string",
            "description": "YYYYMMDD; present only when marketing has ended or is scheduled to."
          },
          "marketing_start_date": {
            "type": "string",
            "description": "YYYYMMDD."
          },
          "listing_expiration_date": {
            "type": "string",
            "description": "When the labeler's listing lapses unless renewed, YYYYMMDD."
          }
        },
        "additionalProperties": true
      },
      "description": "One entry per drug product, or, when count was set, one { term, count } entry per value."
    }
  },
  "description": "The FDA's response: a meta block and either the matching drug products or, when count was set, the counted values.",
  "additionalProperties": true
}