curl --request GET \
--url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"name": "<string>",
"customerId": 0,
"tenantId": "<string>",
"mcpUrl": "<string>",
"a2aUrl": "<string>",
"adServer": {
"type": "google_ad_manager",
"networkCode": "12345678"
},
"serviceAccountEmail": "jsmith@example.com",
"lastError": "<string>",
"lastErrorCode": "<string>",
"lastTestedAt": "2023-11-07T05:31:56Z",
"provisionedAt": "2023-11-07T05:31:56Z",
"deactivatedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"inventorySync": {
"status": "unknown",
"lastRunAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"itemCount": 0,
"error": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
}{
"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": {}
}
}Get ad-server source connection
Read the connection state for an ad-server-backed inventory source.
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/esa', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"name": "<string>",
"customerId": 0,
"tenantId": "<string>",
"mcpUrl": "<string>",
"a2aUrl": "<string>",
"adServer": {
"type": "google_ad_manager",
"networkCode": "12345678"
},
"serviceAccountEmail": "jsmith@example.com",
"lastError": "<string>",
"lastErrorCode": "<string>",
"lastTestedAt": "2023-11-07T05:31:56Z",
"provisionedAt": "2023-11-07T05:31:56Z",
"deactivatedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"inventorySync": {
"status": "unknown",
"lastRunAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"itemCount": 0,
"error": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
}{
"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
Inventory source ID
1Response
Get ad-server source connection
Storefront → managed ad-server source connection. A storefront can have multiple connections, each addressed by id.
Stable id for this managed ad-server source. Use this id to address per-source actions (provision, deactivate, save ad-server config, etc.). A customer can have multiple managed sources.
Seller-facing inventory-source name linked to this managed ad-server source. Null when there is no active linked inventory-source row.
Owning customer/storefront id.
-9007199254740991 <= x <= 9007199254740991Upstream managed-source id for the managed ad-server source. Null until provisioning succeeds.
MCP endpoint exposed by the provisioned managed ad-server source. May be a relative path (e.g. /mcp/) — the consumer composes the absolute URL using the upstream base URL.
A2A endpoint exposed by the provisioned managed ad-server source. May be a relative path (e.g. /a2a) — see mcpUrl for resolution.
Publisher-supplied ad-server config. Null if not yet collected.
- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
Per-customer service-account email the publisher must grant access to in their ad server. Created when ad-server config is saved. Surfaced so the UI can show it during onboarding.
^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$Failure reason from the most recent provisioning or test-connection attempt.
Machine-readable classification of the most recent provisioning failure. ADAPTER_NETWORK_NOT_FOUND (typo), ADAPTER_PERMISSION_DENIED (GAM grant still propagating), ADAPTER_INVALID_CREDENTIALS (storefront service account broken), ADAPTER_INVALID_CONFIG (bad field-level config), and ADAPTER_CONNECTION_FAILED (transient blip) are the adapter probe failures. INTERNAL_ERROR indicates an upstream or platform problem. Null when there has been no failure or after a successful provision.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Cached inventory-sync state. Null when no signal has landed yet (no webhook delivered and no /status poll has run).
Show child attributes
Show child attributes