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 key like company/walmart or supplier/poliform
  • Path parameters take only the slug segment: walmart, not company/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-supply means the API slug is ikea-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

DatasetWhat it isTypical routes
US importBills of lading into the US/bol, /company, /supplier, /powerquery/us-import/*
US exportBills of lading out of the US/powerquery/us-export/*
Mexico importMexican import pedimentos/powerquery/mx-import/*
Mexico exportMexican 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 10
  • offset — default 0
  • page — 1-indexed; when set, it takes precedence over offset

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.

EndpointsRecords are atTotal is at
PowerQuery /bols, /declarationsdata.datadata.totalCount
PowerQuery /companiesdata.datadata.totalCompanies
PowerQuery /suppliersdata.datadata.totalSuppliers
PowerQuery /brokersdata.datadata.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:

Paging a PowerQuery route
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.