Folio provides structured API and MCP access to hard-to-use U.S. public-record datasets: USPTO trademarks, patent and trademark assignment archives, TTAB proceedings, and FDA NDC drugs.
All responses are JSON. Endpoints follow REST conventions with predictable pagination, error handling, and rate limiting.
This page covers the cross-cutting concerns — authentication, rate limits, pagination, errors. For the full endpoint-by-endpoint reference with request/response schemas and a try-it console, see the API reference. The raw OpenAPI 3.0.3 spec is at /openapi.yaml.
All endpoints except /v1/health require an X-API-Key header. You can get a free API key from the pricing section of the homepage.
curl -H "X-API-Key: fo_live_abc123" \
"https://folioapi.com/v1/health"
Requests without a valid key receive a 401 Unauthorized response.
Rate limits are applied per API key. Exceeding your tier's limits returns 429 Too Many Requests with a Retry-After header.
| Tier | Requests/sec | Daily Limit |
|---|---|---|
| Free | 1 |
250 |
| Pro ($49/mo) | 5 |
5,000 |
| Business ($199/mo) | 20 |
50,000 |
| Enterprise | Custom | Custom |
List endpoints return results in an envelope with pagination metadata:
{
"results": [...],
"total": 142,
"limit": 50,
"offset": 0,
"data_freshness": "2026-04-10"
}
The data_freshness field, where present, is endpoint-specific: trademark and TTAB surfaces report USPTO trademark bulk-corpus currency, assignment endpoints report the latest assignment record date, and FDA NDC endpoints report the latest successful NDC ingest. Assignment and drug endpoints may also include a coverage_note describing source coverage.
Errors return an appropriate HTTP status code with a JSON body:
{
"error": "at least one of owner_name, mark_name, or serial_number is required"
}
Common status codes: 400 (bad request), 401 (missing or invalid API key), 403 (tier restriction), 404 (not found), 429 (rate limit exceeded), 502 (upstream failure).
Task-oriented walkthroughs for common use cases, with working code samples:
The full endpoint-by-endpoint reference — request parameters, response schemas, example payloads, and a try-it console — is rendered from our OpenAPI specification at /reference. It covers all available endpoints:
Need the raw machine-readable spec for SDK generation or request validation? It's at /openapi.yaml.