Rate Limits & Pricing
Two access tiers: a free sandbox for prototyping against fixture data, and pay-as-you-go live access. No subscriptions, no monthly minimums, no seat counts.
Access tiers
| Tier | Cost | Data |
|---|---|---|
| Sandbox | Free | Fixture data for 10 hand-picked carriers; no rate limits, no expiration |
| Live (pay-as-you-go) | $50 activation = $50 API credit, then per-DOT billing | Real-time FMCSA data, refreshed 4× daily |
| Volume / Enterprise | Custom | Negotiated rates, SLA, talk to us |
Pay-as-you-go pricing
Live access is billed per unique DOT number per month (not per request). One DOT, one charge — query it 1× or 100× in the same month and it's still one charge. Typeahead is the exception: billed per 1,000 queries since it's not DOT-scoped.
| Endpoint | Price | Unit |
|---|---|---|
/v2/profile | $3.00 | per DOT / month — full profile, all 280+ fields |
/v2/profile-lite | $0.50 | per DOT / month — identity + headline summary only |
/v2/autocomplete | $3.00 | per 1,000 queries |
/v2/monitoring/add(monitoring) | $0.50 | per DOT / month while watched. /v2/monitoring/remove and /v2/monitoring/list are free. |
Billing thresholds
Per-key rate limits
Live keys (sk_live_*) have per-minute rate limits per endpoint to cap worst-case bill-shock and stop runaway scripts. Sandbox keys (sk_test_*) have no rate limit — they're free and fixture-only.
| Endpoint | Default |
|---|---|
/v2/profile | 5 / min |
/v2/profile-lite | 30 / min |
/v2/autocomplete | 2000 / min |
/v2/monitoring/add | 60 / min |
/v2/monitoring/remove | 60 / min |
/v2/monitoring/list | 120 / min |
Need higher limits?
Error codes
| Status | Error | What to do |
|---|---|---|
400 | API key missing | Add Authorization: Bearer … header |
400 | Invalid search parameter | Check that your query param matches a supported search type |
401 | Unauthorized | Key invalid, rotated, or revoked — re-issue from API Keys |
402 | Payment failed | Card declined on the most recent invoice — update card via Billing |
404 | Not found | DOT not in our index. Sandbox: pick one of the 10 fixture DOTs. |
429 | Rate limit exceeded | Back off and retry. Response includes Retry-After in seconds. |
5xx | Service unavailable | Temporary — retry with exponential backoff |
Handling 429s
Retry-After header if present.Response format
All responses are JSON (application/json) with gzip compression. Error responses include an error field and, on most 4xx responses, a hint field with a corrective action:
{
"error": "Rate limit exceeded",
"hint": "You may make at most 5 /v2/profile requests per minute on this key. Retry after 60s."
}