Core concepts
These are the details that trip people up most often. Skim this once and everything else in the API makes more sense.
URL slugs vs display names
Profiles and many PowerQuery filters use ImportYeti URL slugs, not legal or display names.
- Search returns a
keylikecompany/walmartorsupplier/poliform - Path parameters take only the slug segment:
walmart, notcompany/walmart - Resolve a name with GET /company/search or GET /supplier/search
- Slugs are lowercase letters, digits, and hyphens. Underscores are accepted and casing is normalized.
Example: the website path/company/ikea-supplymeans the API slug isikea-supply.
Slug redirects (301)
If a company or supplier slug has permanently moved, the API may return HTTP 301 with a JSON body that includes redirectTo. Follow the new path.
Pick the right dataset
| Dataset | What it is | Typical routes |
|---|---|---|
| US import | Bills of lading into the US | /bol, /company, /supplier, /powerquery/us-import/* |
| US export | Bills of lading out of the US | /powerquery/us-export/* |
| Mexico import | Mexican import pedimentos | /powerquery/mx-import/* |
| Mexico export | Mexican export pedimentos | /powerquery/mx-export/* |
A company profile is not a full shipment history. For recent shipments, use PowerQuery with the company slug. Product routes rank by relevance / specialization; PowerQuery aggregates rank by volume.
Dates
- Format:
mm/dd/yyyy(US style), not ISO - PowerQuery defaults:
start_date=01/01/2021,end_date= last day of the previous calendar month
Pagination
page_size— default 10offset— default 0page— 1-indexed; when set, it takes precedence overoffset
MCP tools document a practical page_size range of 1–50.
Where the results actually live
This is the single most common surprise in the API. Not every endpoint puts its records in the same place.
| Endpoints | Records are at | Total is at |
|---|---|---|
PowerQuery /bols, /declarations | data.data | data.totalCount |
PowerQuery /companies | data.data | data.totalCompanies |
PowerQuery /suppliers | data.data | data.totalSuppliers |
PowerQuery /brokers | data.data | data.totalBrokers |
Company / supplier search, /product/* | data (a plain array) | — (no total) |
Profiles, /bol/{number} | data (one object) | — |
So a PowerQuery loop reads data.data for the rows and the matching total key to decide whether to keep going:
async function* allRows(url, key) {
const pageSize = 50;
let offset = 0;
while (true) {
url.searchParams.set("page_size", String(pageSize));
url.searchParams.set("offset", String(offset));
const res = await fetch(url, { headers: { IYApiKey: key } });
const { data } = await res.json();
yield* data.data; // rows are nested one level deeper
offset += pageSize;
if (offset >= data.totalCount) break;
}
}Each endpoint page in the API reference states its exact shape and total field.
Whatever the shape, you can narrow the records with fields or exclude, and ask for the whole response as TOON instead of JSON. See Response shaping.
Wildcards
On fields that support wildcards: * matches any length, ? matches one character. Limits: at most one * and three ? per field.
Full PowerQuery operators are documented in PowerQuery syntax.