Skip to main content

Get sponsored products

POST /v2/ian/sp

Retrieves sponsored products ad content that you can display in a component on your site, such as an item card or carousel. Specify the context in the request body.

Sponsored products are supported in the following contexts:

NameDescriptionPage QueryAvailable Placement Types
SearchAds are shown in the grid of search results.SearchQueryInGrid
Buy It Again (department page)Ads are shown in the grid on a dedicated Buy It Again page.UserPreviouslyPurchasedQueryInGrid
Buy It Again (carousel)Ads are shown in a Buy It Again carousel.StorefrontQueryInCarousel
BrowseAds are shown in the grid when a customer browses by category.ProductCategoryQueryInGrid
Candidate CarouselAds are shown in a carousel based on provided UPC list.CandidateCarouselQueryInGrid

Security

NameInDescription
AuthorizationheaderThe Authorization header with the bearer token acquired during authentication.

Parameters

NameInTypeRequiredDescription
X-Retailer-IdheaderstringOptional

The retailer slug. This is only required for a retailer with multiple banners. Retailers with single banners can leave this empty.

Request

FieldTypeRequiredDescription
page_contextSponsoredProductsPageContextRequired

The page context for the ad request, including the page type, filters, and ad load configuration.

placement_contextSponsoredProductsPlacementContextRequired

The placement configuration for the ad request. The placement kind must be compatible with the selected page query type.

session_contextSessionContextRequired

The user session information, including user ID, IP address, and user agent string.

store_contextStoreContextRequired

The store context identifying the retail location for the ad request.

pagination_contextPaginationContextOptional

Controls pagination for sponsored product ad results. When no pagination token is provided, the system runs an ad auction, generates a pagination token, caches the results, and returns the first page of ads. To retrieve subsequent pages, include the pagination token and the desired page number. If the token exists and the requested page is cached, the cached ads are returned. If the page is not cached, new ads are fetched (excluding ads from previously cached pages), cached, and returned. If the token has expired, the request is treated as a new auction. A request without a token but with a page number greater than 1 fails validation. If the requested page exceeds the available ads, the response is empty.

SponsoredProductsPageContext Object

FieldTypeRequiredDescription
page_querySponsoredProductsQueryRequired

The page type for the ad request. Exactly one page query option must be specified (for example, search_query or storefront_query). The selected option determines which ads are eligible to be served.

filter_queryFilterQueryOptional

Filters to narrow the returned ads. Supports tag-based, category-based, or brand-based filtering. Filters are applied independently of the page type. Your catalog inventory file must include the corresponding tags, category IDs, or brand IDs for filtering to take effect.

ad_load_queryAdLoadQueryOptional

Controls the maximum number of ads returned in the response.

SponsoredProductsQuery Object

FieldTypeRequiredDescription
search_querySearchQueryOptional

Retrieves sponsored product ads for a search results page. Must be paired with the 'in_grid' placement kind. Only one page query option may be specified per request.

user_previously_purchased_queryUserPreviouslyPurchasedQueryOptional

Retrieves sponsored product ads for a Buy It Again or previously purchased products page. Must be paired with the 'in_grid' placement kind. Only one page query option may be specified per request.

storefront_queryStorefrontQueryOptional

Retrieves sponsored product ads for the storefront page. Must be paired with the 'mixed_ads_carousel' placement kind. Only one page query option may be specified per request.

product_category_queryProductCategoryQueryOptional

Retrieves sponsored product ads for a product category or browse page. Must be paired with the 'in_grid' placement kind. Only one page query option may be specified per request.

candidate_carousel_queryCandidateCarouselQueryOptional

Specify a list of desired UPCs to display in the carousel.

For the Candidate Carousel Query the responses are based on the UPC list provided:

  • Provided UPC list contains all ad-eligible items: All appear in the response, ranked by SP auction
  • Provided UPC list contains no eligible items: Response is (empty payload)
  • Provided UPC list is mixed eligibility: Only eligible items returned; others ignored
  • UPC list contains duplicates: Duplicates are deduplicated before auction
  • Location code does not match an active Thrive facility: Response is (empty payload)

SearchQuery Object

FieldTypeRequiredDescription
page_view_idstringOptional

A unique identifier for the current page view. Must be a valid UUID. Pass the string 'None' if a page view identifier is not available.

search_termstringRequired

The search term entered by the user. Ads are matched based on relevance to this term.

enable_auto_correctbooleanOptional

When set to true, auto-correction is applied to the search term to improve matching for misspellings. Defaults to true. Enabling auto-correction increases response latency.

UserPreviouslyPurchasedQuery Object

FieldTypeRequiredDescription
page_view_idstringOptional

A unique identifier for the current page view. Must be a valid UUID. Pass the string 'None' if a page view identifier is not available.

StorefrontQuery Object

FieldTypeRequiredDescription
page_view_idstringOptional

A unique identifier for the current page view. Must be a valid UUID. Pass the string 'None' if a page view identifier is not available.

ProductCategoryQuery Object

FieldTypeRequiredDescription
category_idsArray(integer)Required

An array of product category IDs for the category page being viewed. Sponsored products are matched based on these categories.

page_view_idstringOptional

A unique identifier for the current page view. Must be a valid UUID. Pass the string 'None' if a page view identifier is not available.

CandidateCarouselQuery Object

FieldTypeRequiredDescription
page_view_idstringOptional

A unique identifier for the current page view. Must be a valid UUID. Pass the string 'None' if a page view identifier is not available.

upc_listArray(string)Required

An array of UPC strings identifying the products eligible for the carousel ad auction.

FilterQuery Object

FieldTypeRequiredDescription
filter_tagsFilterTagsOptional

Filters ad results by product tags. When specified, only products matching at least one tag are returned. The object must contain a 'tags' array. Example: { "filter_tags": { "tags": ["tag1", "tag2"] } }. Not applicable to display banner requests.

product_category_filter_queryProductCategoryFilterQueryOptional

Filters available ads by product category. Ads are returned only if the advertised product matches at least one of the specified category IDs. Applies to search, Buy It Again, and storefront placements. For product category placements, specify category IDs in the PageQuery object.

brand_idsArray(integer)Optional

An array of brand IDs to filter available ads. Ads are returned only if they match at least one of the specified brand IDs.

FilterTags Object

FieldTypeRequiredDescription
tagsArray(string)Required

An array of tag strings. Only products matching at least one of the specified tags are returned.

ProductCategoryFilterQuery Object

FieldTypeRequiredDescription
category_idsArray(integer)Required

An array of product category IDs. Ads are returned only if the advertised product belongs to at least one of the specified categories.

AdLoadQuery Object

FieldTypeRequiredDescription
ads_countstringOptional

The maximum number of ads to return, specified as a string (for example, "10"). Must be an integer value between 1 and 100. The actual number of ads returned may be lower depending on available inventory.

SponsoredProductsPlacementContext Object

FieldTypeRequiredDescription
placement_kindSponsoredProductsKindRequired

Specifies how sponsored product ads are displayed on the page. Exactly one placement option must be provided: 'in_grid' for ads within a product grid, or 'mixed_ads_carousel' for ads within a carousel.

SponsoredProductsKind Object

FieldTypeRequiredDescription
in_gridInGridOptional

Displays sponsored product ads inline within the main product grid. Only one placement option may be specified per request. Must be paired with one of the following page queries: search_query, user_previously_purchased_query, or product_category_query.

mixed_ads_carouselMixedAdsCarouselOptional

Displays sponsored product ads in a carousel alongside organic products. Only one placement option may be specified per request. Must be paired with the storefront_query page query.

InGrid Object

FieldTypeRequiredDescription
supported_formatArray(string)Required

The ad format for the placement, specified as an array. The supported value is ["item_card"].

MixedAdsCarousel Object

FieldTypeRequiredDescription
supported_formatArray(string)Required

The ad format for the placement, specified as an array. The supported value is ["item_card"].

carousel_queryInCarouselQueryRequired

The organic product context for the carousel. Ads are matched to be relevant to this context. Typically uses a user_previously_purchased_query.

InCarouselQuery Object

FieldTypeRequiredDescription
user_previously_purchased_queryUserPreviouslyPurchasedQueryOptional

Provides previously purchased product context for the carousel. Only one option may be specified per request.

SessionContext Object

FieldTypeRequiredDescription
user_idstringRequired

A unique identifier for the end user. Maximum 50 characters.

user_ipstringRequired

The IP address of the end user. Must be a valid IPv4 or IPv6 address.

user_agentstringRequired

The User-Agent string from the end user's device. Maximum 1000 characters.

test_onlybooleanOptional

When set to true, only test campaigns are returned in the response. Regular campaigns are excluded. Use this to validate your integration without serving live ads. Defaults to false.

StoreContext Object

FieldTypeRequiredDescription
location_codestringRequired

The store location code for the retail location to retrieve ads for. Must match a location code associated with your account. Maximum 100 characters.

PaginationContext Object

FieldTypeRequiredDescription
page_sizeintegerOptional

Number of ads in the response.

offsetintegerOptional

Page number the user is on.

tokenstringOptional

Request examples

curl --request POST \
--url https://connect-ian.instacart.com/v2/ian/sp \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Retailer-Id: string' \
--data '{
"page_context": {
"page_query": {
"search_query": {
"page_view_id": "string",
"search_term": "string",
"enable_auto_correct": true
}
},
"filter_query": {
"filter_tags": {
"tags": [
"string"
]
}
},
"ad_load_query": {
"ads_count": "string"
}
},
"placement_context": {
"placement_kind": {
"in_grid": {
"supported_format": [
"string"
]
}
}
},
"session_context": {
"user_id": "string",
"user_ip": "string",
"user_agent": "string",
"test_only": true
},
"store_context": {
"location_code": "string"
}
}'

Response

FieldTypeRequiredDescription
productsArray(SponsoredProduct)Optional

An array of sponsored product objects. Returns an empty array when no ads are available.

SponsoredProduct Object

FieldTypeRequiredDescription
object_tracking_idstringRequired

The unique tracking identifier for this ad. Use this value when reporting ad events such as impressions and clicks.

rrcstringOptional

The retailer reference code (RRC) for the advertised product. Use this to look up product details in your catalog. Populated based on your account configuration.

upcstringOptional

The universal product code (UPC) for the advertised product, returned in its original format without normalization. Populated based on your account configuration.

product_idintegerRequired

The Instacart product ID for the advertised product.

display_positionintegerRequired

The suggested 1-based position for this ad when displayed alongside organic products. For example, a value of 3 means the ad should appear in the third slot.

ad_formatstringOptional

The ad format for this ad placement. The value is 'item_card'.

Response examples

200 Success

{
"products": [
{
"object_tracking_id": "urn:i-ic-v1:spid:78219bd2-981d-49fb-a485-aaee5ddd8dfa",
"rrc": "fake_rrc",
"product_id": 1,
"display_position": 1,
"ad_format": "item_card"
},
{
"object_tracking_id": "urn:i-ic-v1:spid:12319bd2-981d-49fb-a485-aaee5ddd8123",
"rrc": "fake_rrc_2",
"product_id": 2,
"display_position": 2,
"ad_format": "item_card"
}
]
}

4XX Errors

Error responses return either a single error or multiple errors.

HTTP CodeCauseError MessageError CodeError Meta
400invalid search page query with mixed ads carousel placement kind"No internal placements match the given page query type and placement kind"1001Not applicable
400invalid storefront page query with in grid placement kind"No internal placements match the given page query type and placement kind"1001Not applicable
400empty page query"the number of attributes given for page_query is 0"1001{"key":"page_context.page_query"}
400Request with more than one attribute used in page query"the number of attributes given for page_query is 2"1001{"key":"page_context.page_query"}
400empty placement kind"the number of attributes given for placement_kind is 0"1001{"key":"placement_context.placement_kind"}
400more than one attribute used in placement kind"the number of attributes given for placement_kind is 2"1001{"key":"placement_context.placement_kind"}
400too long user_id in the session context"User ID length must be less than 51 characters"1001{"key":"session_context.user_id"}
400too long location code in the store context"Location code length must be less than 101 characters"1001{"key":"store_context.location_code"}
401store that doesn't match the oauth token used"the given location code doesn't match the oauth token used."nullNot applicable