Catalog
Products and everything that describes them. Requires catalog:read.
Servers
List the authenticated account's products
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the product title, ASIN and SKU. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Responses
200
GET /v1/products/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
amazon-seller-products
The authenticated account's Amazon Seller Central product listings. Requires catalog:read.
List the authenticated account's Amazon seller products
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the listing title, ASIN and SKU. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Responses
200
GET /v1/amazon-seller-products/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
amazon-vendor-products
The authenticated account's Amazon Vendor Central product listings. Requires catalog:read.
List the authenticated account's Amazon vendor products
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the listing title, ASIN and SKU. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Responses
200
GET /v1/amazon-vendor-products/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
amazon-advertising-products
The authenticated account's Amazon advertising products. Requires catalog:read.
List the authenticated account's Amazon advertising products
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the listing title, ASIN and SKU. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Responses
200
GET /v1/amazon-advertising-products/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
seller-product-metrics
Seller Central sales and traffic per product, aggregated from the account's report history. Requires catalog:read.
Operations
Seller Central sales and traffic per product, from the account's report history
Aggregated from the report history over a required start_date/end_date window, grouped by ASIN + SKU + connection + country + currency (the same ASIN sells in several marketplaces with different prices and currencies). Unlike the rest of the API, this resource paginates with limit/offset (an aggregated row has no id to use as a cursor) and has_more tells whether another page follows. Monetary amounts are decimal strings. sessions, page_views, buy_box_percentage, conversion_rate and rank are null, never 0, when Amazon did not report them — its traffic report only covers products with activity. conversion_rate is orders / sessions here, not orders / clicks as in campaign_metrics.
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Both ends are included in the range. The window is capped, and the cap depends on the resource AND on granularity — daily allows a much shorter span than total, and target-metrics and search-term-metrics are stricter than the rest because limit/offset bound the response but not what ClickHouse scans. Going over returns a 400 naming the exact limit for your request.
"2026-07-01""^\\d{4}-\\d{2}-\\d{2}$"Both ends are included in the range. The window is capped, and the cap depends on the resource AND on granularity — daily allows a much shorter span than total, and target-metrics and search-term-metrics are stricter than the rest because limit/offset bound the response but not what ClickHouse scans. Going over returns a 400 naming the exact limit for your request.
"2026-07-31""^\\d{4}-\\d{2}-\\d{2}$""total""daily""total""total"Page size. For a top-N, combine order_by with a small limit instead of raising it: limit/offset bound the response, not what ClickHouse scans.
100100110000009007199254740991"asc""desc""desc""desc"Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$""sales""units""orders""sessions""page_views""rank""conversion_rate"Responses
200
vendor-product-metrics
Vendor Central sales per product, split by manufacturing and sourcing, aggregated from the account's report history. Requires catalog:read.
Operations
Vendor Central sales per product, split by manufacturing and sourcing, from the account's report history
Aggregated from the report history over a required start_date/end_date window, grouped by ASIN + connection + country + currency (the same ASIN sells in several marketplaces with different prices and currencies; the SKU is not part of the key here, unlike seller_product_metrics). Unlike the rest of the API, this resource paginates with limit/offset (an aggregated row has no id to use as a cursor) and has_more tells whether another page follows. Monetary amounts are decimal strings. There is deliberately NO single sales field: Vendor Central has two business models and Amazon does not report them symmetrically — manufacturing (Amazon makes the product under licence) reports ordered, shipped and net received, while sourcing (you sell wholesale to Amazon) reports only shipped and net received. Read the pair that matches how you sell. Vendor has no sessions or conversion rate at all; glance_views is the traffic metric, and it is null — never 0 — when Amazon did not report it, as are rank and both *_sellable_units. The *_sellable_units fields are the latest inventory snapshot in the window, not a sum.
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Both ends are included in the range. The window is capped, and the cap depends on the resource AND on granularity — daily allows a much shorter span than total, and target-metrics and search-term-metrics are stricter than the rest because limit/offset bound the response but not what ClickHouse scans. Going over returns a 400 naming the exact limit for your request.
"2026-07-01""^\\d{4}-\\d{2}-\\d{2}$"Both ends are included in the range. The window is capped, and the cap depends on the resource AND on granularity — daily allows a much shorter span than total, and target-metrics and search-term-metrics are stricter than the rest because limit/offset bound the response but not what ClickHouse scans. Going over returns a 400 naming the exact limit for your request.
"2026-07-31""^\\d{4}-\\d{2}-\\d{2}$""total""daily""total""total"Page size. For a top-N, combine order_by with a small limit instead of raising it: limit/offset bound the response, not what ClickHouse scans.
100100110000009007199254740991"asc""desc""desc""desc"Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$""units""glance_views""rank""manufacturing_ordered_sales""manufacturing_ordered_units""manufacturing_shipped_sales""manufacturing_shipped_units""manufacturing_shipped_cogs""manufacturing_net_received_sales""manufacturing_net_received_units""sourcing_shipped_sales""sourcing_shipped_units""sourcing_shipped_cogs""sourcing_net_received_sales""sourcing_net_received_units"Responses
200
product-brands
Brands present in the authenticated account's catalog. Requires catalog:read. Sparse fieldsets use fields[brand] — keyed by the entity type (brand, the same one expand[]=brand and a product's brand field use), not by the resource name.
List the brands present in the authenticated account's catalog
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the brand name. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"Responses
200
GET /v1/product-brands/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
List Amazon marketplace countries
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"22Responses
200
GET /v1/countries/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200
List the authenticated account's keyword clusters
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Query Parameters
Page size. The default is enough to explore; raise it only when you need to walk a whole collection.
20201100Cursor for the next page: the id of the last record you received. Returns the records after it.
Cursor for the previous page: the id of the first record you received. Returns the records before it.
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Case-insensitive substring match over the cluster name and its positive and negative keywords. Use it to find a record by name when you do not have its id, instead of paging through the whole list. Regex metacharacters are matched literally.
1200Set to true to also receive total_count: how many records match every filter of this request, ignoring starting_after/ending_before/offset - the size of the whole result set, not of what is left. has_more is always returned regardless. It costs an extra count query, so ask for it once, on the first page, to decide whether the set is worth walking. On metrics resources with granularity=daily it counts entity-days, not entities. total_count comes back null when the count could not finish in time; the list is still returned, so treat it as unknown, never as zero.
"true""false"Responses
200
GET /v1/clusters/{id}
Authorizations
Client API key (POST /api-keys). Send as Authorization: Bearer epk_live_....
Parameters
Path Parameters
24-character hexadecimal Mongo ObjectId.
"^[a-f0-9]{24}$"Query Parameters
Inline related records instead of returning just their ids. Repeat the param for several (expand[]=connection&expand[]=country) and nest with dot notation (connection.country), up to 4 levels.
Trim the response to the fields you need, comma-separated and keyed by ENTITY TYPE rather than by resource name: fields[campaign]=id,name. A key that matches no entity is ignored silently and the full object comes back.
Responses
200