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.
Use X-API-Key to access the endpoints. 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 dashboards, authentication, account and key management, health checks, and documentation downloads. 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.
- For integrations, set api_key to your individual key. For portal requests, set portal_email and portal_password locally, sign in with the Postman cookie jar enabled, and copy the returned token into csrf_token. Set key_id from the key list when rotating or revoking a key.
- Do not export populated variables. The collection has no scripts that automatically save the returned secret.
cURL example variables
| Variable | Expected value |
|---|---|
BBI_API_KEY |
Your full key secret. |
BBI_PORTAL_COOKIE_JAR |
Path to a local cookie jar. Sign in to populate it. |
BBI_CSRF_TOKEN |
Token from login or the session response header. |
BBI_KEY_ID |
Key UUID from the account key list. |
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.