curl --request PATCH \
--url https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wholesale_product_id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"delivery_type": "<string>",
"channels": [
"display"
],
"format_options": [
{}
],
"inventory": {},
"pricing_options": [
{}
]
}
'import requests
url = "https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId}"
payload = {
"wholesale_product_id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"delivery_type": "<string>",
"channels": ["display"],
"format_options": [{}],
"inventory": {},
"pricing_options": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wholesale_product_id: '<string>',
name: '<string>',
description: '<string>',
status: '<string>',
delivery_type: '<string>',
channels: ['display'],
format_options: [{}],
inventory: {},
pricing_options: [{}]
})
};
fetch('https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Change only the named fields of a product for an ad server source
Apply a partial update to a wholesale product on the ad server source’s upstream tenant. Only the fields present in the body are applied; a field you omit — or send as null — keeps its stored value, and inventory merges one level deep. Prefer this over the full-replace PUT unless you hold a complete product — a replace clears the pricing options, channels and targeting it does not re-send. A partial update may leave a product incomplete, in which case it stays out of the buyer-facing catalog until it is completed. The response body is the upstream adapter’s payload and varies by ad server.
curl --request PATCH \
--url https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"wholesale_product_id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"delivery_type": "<string>",
"channels": [
"display"
],
"format_options": [
{}
],
"inventory": {},
"pricing_options": [
{}
]
}
'import requests
url = "https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId}"
payload = {
"wholesale_product_id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"delivery_type": "<string>",
"channels": ["display"],
"format_options": [{}],
"inventory": {},
"pricing_options": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wholesale_product_id: '<string>',
name: '<string>',
description: '<string>',
status: '<string>',
delivery_type: '<string>',
channels: ['display'],
format_options: [{}],
inventory: {},
pricing_options: [{}]
})
};
fetch('https://api.interchange.io/api/v2/storefront/esa/{esaId}/products/{productId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Path Parameters
Ad server source connection id. The wire field remains esaId for API compatibility.
0 < x <= 9007199254740991123
Upstream product id for the ad server source.
1"prod_abc"
Body
Partial change body for an ad-server-source product. Only the fields present are applied; an omitted field — or one sent as null — keeps its stored value, and inventory merges one level deep. Unknown/extra fields are forwarded as-is.
1 - 1001 - 200display Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
Change only the named fields of a product for an ad server source