Faelo / FDA Investigations Operations Manual API
FDA Investigations Operations Manual API
The manual FDA field investigators follow when they inspect a facility.
The Investigations Operations Manual is the FDA's primary field guidance for inspections, sample collection, and enforcement procedure. The FDA publishes it as a single large document per chapter with no per-section retrieval. This API serves each section verbatim from a structured database.
Coverage
546 sections across 10 chapters. Source: Food and Drug Administration — public-domain US government work.
Routes
| Method | Path | Access | Price |
|---|---|---|---|
GET | /search?q=<keywords>&limit=<1-50> | free | — |
GET | /chapter/{id} | free | — |
GET | /section/{id} | free | — |
GET | /section/{id}/full | paid | $0.01 |
Live API root: https://fda-iom-api.canvas-cart.workers.dev · /llms.txt · /stats
Record ids
a section id, e.g. "chapter-05--5-1-1"; get it from /search or /chapter/{id}.
Free search: https://fda-iom-api.canvas-cart.workers.dev/search?q=credentials&limit=3
How an agent pays
Request /section/{id}/full. The API answers 402 Payment Required with the price ($0.01 per section), the network (eip155:8453), the USDC asset (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913), and the payout address. Pay, repeat the request, receive the full record. The 402 also carries x402 Bazaar discovery data.
import { wrapFetchWithPayment, x402HTTPClient } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const signer = privateKeyToAccount(process.env.PRIVATE_KEY); // a funded Base wallet
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(signer));
const fetchWithPayment = wrapFetchWithPayment(fetch, client);
const httpClient = new x402HTTPClient(client);
const res = await fetchWithPayment("https://fda-iom-api.canvas-cart.workers.dev/section/chapter-05--5-1-1/full");
const out = await httpClient.processResponse(res);
console.log(out.paymentStatus, out.body);