Connect your data.
Expand your possibilities.
Bring Dashboard data into your applications. Explore the endpoints, set up access, and build your first integration.
Your Dashboard, connected.
Access all four Dashboard tabs through a read-only API with individual authentication and permissions for each data source.
Your first request.
Use a key from the
Developer Portal
with the dashboard:imports scope. Send it in the
X-API-Key header.
curl --request GET \
'/v1/dashboards/imports?period=365%20days&page=1&page_size=50' \
--header "X-API-Key: ${BBI_API_KEY}"
200 Example response JSON · synthetic data
{
"dashboard": "imports",
"filters": { "period": "365 days" },
"fetched_at": "2026-11-03T12:00:00Z",
"timezone": "UTC",
"demo": true,
"tiles": [{
"id": "example",
"title": "Synthetic local example (not industry data)",
"data": [{ "date": "2026-01-01", "value": 100 }],
"total": 1,
"has_more": false
}],
"page": 1,
"page_size": 50
}
A key for every integration.
Create a key in the
Developer Portal and send it in
the X-API-Key header. The key must be active,
unexpired, and authorized for the requested Dashboard.
Documentation is public; data requires authentication.
Your session provides portal access. API keys authenticate integrations. The playground uses your session and enforces the same access limits.
| Dashboard | Required scope |
|---|---|
| Retail SPINS | dashboard:retail |
| USDA Imports | dashboard:imports |
| USDA FAS Exports | dashboard:exports |
| USDA AMS | dashboard:usda-ams |
Permissions depend on the account and organization.
Explore the endpoints.
Browse the read-only dashboard data and filter endpoints. Expand an endpoint to view parameters, authentication, and responses directly from the OpenAPI specification.
No endpoints found. Try searching for “imports” or “retail”.
Every metric, explained.
Fields, types, units, formulas, and caveats for all 29 tiles across the four adapters. Keys containing periods are literal JSON names; nested structures use brackets. The examples below are fictional, not source measurements. Measures may be numbers or decimal strings depending on the underlying BigQuery type. lb means pounds, USD means U.S. dollars, percent uses 25 for 25%, and ratio uses 0.25 for 25%.
In demo mode, responses contain only the generic example tile. OpenAPI defines this format separately from adapter responses. Synthetic data does not represent real metrics.
Request only what you need.
| Parameter | Default | Behavior |
|---|---|---|
period |
365 days | 28, 84, 182, or 365 days. Imports accepts only 365 days. |
page |
1 | 1 through 100. Rows in each tile are paginated independently. |
page_size |
50 | 1 through 100 rows per tile. |
Continue requesting pages while any tile returns
has_more: true. Rows are sorted lexicographically by
their JSON representation. All dates use UTC;
fetched_at indicates when the API retrieved the
response, not when the source was updated.
The source represents the current period and does not apply shorter windows. Values other than 365 days are rejected because they would not filter the data.
Each query supports up to 100 pages. If has_more is still true on page 100, this version provides no further continuation: narrow the supported filters or contact support. This is not a bulk export endpoint.
Limits for this installation.
Values come from this API's published specification and reflect the running configuration. Costs: Dashboard = 5 units; filters = 1. Cache hits also consume the budget.
Windows are fixed using the Redis clock. Near window boundaries, up to twice the admissions may occur over a short interval. These limits control usage; they do not guarantee capacity or an SLA. Concurrency is checked after the budget and may reject a request that has already been counted.
Understand every response.
Use error.code for recovery logic; the text of
error.message may change.
X-Request-ID and
error.request_id identify the same request.
Unavailable readiness is an exception: it returns
{"status":"unavailable"}, without an error envelope.
Errors before the application layer (network, TLS, or proxy) may not be JSON or include a request ID. After a timeout, check the state before automatically retrying mutations.
A versioned contract.
Identify and organize tiles by ID; legacy titles are not formulas. Ignore unknown new fields. Published strict schemas describe the current version and should be updated alongside the specification.
The server automatically exposes HEAD for GET routes: it uses the same authentication and may apply the same controls and costs, but returns no body. Use GET to retrieve dashboard data.
Read, import, and validate.
This page is the human-readable guide. OpenAPI is the technical contract in JSON: tools can import routes, schemas, authentication, parameters, and responses. It is public and contains no issued credentials or customer data.
Using Postman
- Import the collection or OpenAPI specification. The file includes this installation's origin; update base_url when switching environments.
- Set api_key locally to the key issued in the Developer Portal.
- Keep the populated api_key variable local.
cURL example variables
| Variable | Expected value |
|---|---|
BBI_API_KEY |
Your full key secret. |
Administrative and metrics routes have a separate, protected specification at /internal/openapi.json, with ADMIN_TOKEN and network restrictions. METRICS_TOKEN is independent. These tokens are never distributed to the portal.