curl --request POST \
--url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"feedId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceId": "<string>",
"revision": {
"schemaVersion": "1.0.0",
"revisionId": "<string>",
"sourceId": "<string>",
"profileId": "<string>",
"profileVersion": "<string>",
"deliverySemantics": "FULL_REPLACEMENT",
"idempotencyKey": "<string>",
"contentDigest": "<string>",
"provenance": {
"actorType": "API",
"submittedAt": "2023-11-07T05:31:56Z",
"contentDigest": "<string>",
"actorId": "<string>",
"adapterId": "<string>",
"fileName": "<string>",
"requestId": "<string>"
},
"facts": [
{
"factId": "<string>",
"sourceId": "<string>",
"scope": {
"scopeType": "component",
"sourceId": "<string>",
"kind": "placement",
"externalId": "<string>"
},
"dimensions": {},
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"observedAt": "2023-11-07T05:31:56Z",
"poolId": "<string>",
"availability": {
"basis": "NET_SELLABLE",
"quantity": {
"unit": "<string>",
"amount": 1
},
"reservable": true,
"upstreamBooked": {
"unit": "<string>",
"amount": 1
},
"temporalJoinFence": {
"grossFactId": "<string>",
"bookingFactId": "<string>",
"sourceId": "<string>",
"poolId": "<string>",
"unit": "<string>",
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"strategy": "SAME_SNAPSHOT",
"grossSnapshot": "<string>",
"bookingSnapshot": "<string>",
"grossObservedThrough": "2023-11-07T05:31:56Z",
"bookingObservedThrough": "2023-11-07T05:31:56Z",
"observedSkewSeconds": 1,
"status": "PROVEN",
"diagnosticCode": "<string>"
}
},
"pricingOptions": [],
"formatOptions": [],
"sourceMetadata": {},
"provenance": {
"actorType": "API",
"submittedAt": "2023-11-07T05:31:56Z",
"contentDigest": "<string>",
"actorId": "<string>",
"adapterId": "<string>",
"fileName": "<string>",
"requestId": "<string>"
}
}
],
"diagnostics": [
{
"code": "<string>",
"severity": "ERROR",
"scope": "REVISION",
"message": "<string>",
"rowIndex": 4503599627370495,
"factId": "<string>",
"field": "<string>",
"details": {}
}
],
"validationStatus": "VALID",
"commitStatus": "PREVIEW",
"snapshot": "<string>",
"cursor": "<string>",
"observedThrough": "2023-11-07T05:31:56Z",
"coveredPeriod": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"catalogRevision": "<string>",
"correction": {
"correctionId": "<string>",
"targetType": "REVISION",
"targetRevisionId": "<string>",
"mode": "REPLACEMENT",
"reason": "<string>"
}
},
"revisionRecord": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"feedId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revisionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotencyKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentDigest": "<string>",
"validationStatus": "VALID",
"commitStatus": "PREVIEW",
"replayed": true
},
"catalogRefresh": {
"invalidated": true,
"warmed": true
}
}{
"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": {}
}
}Push a feed revision (API_PUSH, no preview step)
One-shot API_PUSH ingest: parse, validate, and commit in a single call. No preview or baseline is required. Set dryRun: true to validate without committing. The HITL and API_PUSH transports share the same canonical feed head, so an API_PUSH commit fences subsequent HITL commits that hold a stale baseline.
curl --request POST \
--url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/feed/push', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"feedId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sourceId": "<string>",
"revision": {
"schemaVersion": "1.0.0",
"revisionId": "<string>",
"sourceId": "<string>",
"profileId": "<string>",
"profileVersion": "<string>",
"deliverySemantics": "FULL_REPLACEMENT",
"idempotencyKey": "<string>",
"contentDigest": "<string>",
"provenance": {
"actorType": "API",
"submittedAt": "2023-11-07T05:31:56Z",
"contentDigest": "<string>",
"actorId": "<string>",
"adapterId": "<string>",
"fileName": "<string>",
"requestId": "<string>"
},
"facts": [
{
"factId": "<string>",
"sourceId": "<string>",
"scope": {
"scopeType": "component",
"sourceId": "<string>",
"kind": "placement",
"externalId": "<string>"
},
"dimensions": {},
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"observedAt": "2023-11-07T05:31:56Z",
"poolId": "<string>",
"availability": {
"basis": "NET_SELLABLE",
"quantity": {
"unit": "<string>",
"amount": 1
},
"reservable": true,
"upstreamBooked": {
"unit": "<string>",
"amount": 1
},
"temporalJoinFence": {
"grossFactId": "<string>",
"bookingFactId": "<string>",
"sourceId": "<string>",
"poolId": "<string>",
"unit": "<string>",
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"strategy": "SAME_SNAPSHOT",
"grossSnapshot": "<string>",
"bookingSnapshot": "<string>",
"grossObservedThrough": "2023-11-07T05:31:56Z",
"bookingObservedThrough": "2023-11-07T05:31:56Z",
"observedSkewSeconds": 1,
"status": "PROVEN",
"diagnosticCode": "<string>"
}
},
"pricingOptions": [],
"formatOptions": [],
"sourceMetadata": {},
"provenance": {
"actorType": "API",
"submittedAt": "2023-11-07T05:31:56Z",
"contentDigest": "<string>",
"actorId": "<string>",
"adapterId": "<string>",
"fileName": "<string>",
"requestId": "<string>"
}
}
],
"diagnostics": [
{
"code": "<string>",
"severity": "ERROR",
"scope": "REVISION",
"message": "<string>",
"rowIndex": 4503599627370495,
"factId": "<string>",
"field": "<string>",
"details": {}
}
],
"validationStatus": "VALID",
"commitStatus": "PREVIEW",
"snapshot": "<string>",
"cursor": "<string>",
"observedThrough": "2023-11-07T05:31:56Z",
"coveredPeriod": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"catalogRevision": "<string>",
"correction": {
"correctionId": "<string>",
"targetType": "REVISION",
"targetRevisionId": "<string>",
"mode": "REPLACEMENT",
"reason": "<string>"
}
},
"revisionRecord": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"feedId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revisionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotencyKey": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentDigest": "<string>",
"validationStatus": "VALID",
"commitStatus": "PREVIEW",
"replayed": true
},
"catalogRefresh": {
"invalidated": true,
"warmed": true
}
}{
"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
Inventory source ID
1Body
Request body for POST /inventory-sources/:sourceId/feed/push (API_PUSH one-shot ingest).
Feed contract identifier. static-avails-feed:v1 for static avails CSV/JSON; wholesale-avails-pricing:v1 for wholesale pricing grids.
static-avails-feed:v1, wholesale-avails-pricing:v1 1Show child attributes
Show child attributes
1 - 20000001 - 2000000Deterministic replay idempotency key (UUID). Provide only together with revisionId and observedAt; omit all three fields for server-generated, non-retryable convenience values.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Deterministic replay revision id (UUID). Provide only together with idempotencyKey and observedAt; omit all three fields for server-generated, non-retryable convenience values.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ISO-8601 observation timestamp for deterministic replay. Provide only together with idempotencyKey and revisionId; omit all three fields to default to the current time.
^(?:(?:\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))$When true, the revision is built and validated but not committed. The response carries dryRun: true and the validated revision envelope.
Response
Push a feed revision (API_PUSH, no preview step)
- Option 1
- Option 2
Response from POST /feed/push. When dryRun is true or the revision is REJECTED, only revision is returned. Otherwise feedId, sourceId, revision, and revisionRecord are all present.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Inventory feed revision envelope returned by preview, upload, commit, and push endpoints. Matches the InventoryFeedRevisionSchema contract.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Best-effort publish receipt for the buyer-serving catalog refresh triggered by a committed feed revision.
Show child attributes
Show child attributes