Skip to main content
PUT
/
inventory-sources
/
{sourceId}
Update inventory source
curl --request PUT \
  --url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{}'
{
  "id": "<string>",
  "sourceId": "<string>",
  "name": "<string>",
  "executionType": "<string>",
  "agentId": "<string>",
  "createdAt": "2023-11-07T05:31:56Z",
  "updatedAt": "2023-11-07T05:31:56Z",
  "endpointUrl": "<string>",
  "description": "<string>",
  "authConfigured": true,
  "oauth": {
    "authorizationUrl": "<string>",
    "agentId": "<string>",
    "agentName": "<string>"
  },
  "managedSa": {
    "connectionId": "<string>",
    "tenantId": "<string>",
    "adServer": {
      "type": "google_ad_manager",
      "networkCode": "12345678"
    },
    "lastError": "<string>",
    "lastTestedAt": "2023-11-07T05:31:56Z",
    "provisionedAt": "2023-11-07T05:31:56Z",
    "deactivatedAt": "2023-11-07T05:31:56Z"
  },
  "linkedStorefront": {
    "buyer": {
      "storefrontId": "1234",
      "platformId": "acme-media",
      "name": "Acme Media",
      "publisherDomain": "acme.com",
      "operatorDomain": "scope3.com",
      "brandName": "Scope3",
      "logoUrl": "<string>",
      "regions": [
        "<string>"
      ],
      "description": "<string>",
      "channels": [
        "<string>"
      ],
      "website": "<string>",
      "demandContactName": "<string>",
      "demandContactEmail": "<string>",
      "operatorDomainVerified": true,
      "adapterCredentialMode": "BYOK",
      "plan": "basic",
      "transacting": true,
      "archivedAt": "2023-11-07T05:31:56Z",
      "capabilities": {
        "offersCreativeReview": false,
        "offersCampaignApproval": false,
        "offersProductComposition": false
      },
      "compositionPricing": {
        "targetPercentile": "p75",
        "rateCard": {
          "facts": []
        }
      },
      "capabilitiesLocked": true,
      "advertiseAsAgent": true,
      "createdAt": "2023-11-07T05:31:56Z",
      "updatedAt": "2023-11-07T05:31:56Z",
      "businessProfile": {
        "summary": "<string>",
        "agentName": "<string>",
        "agentPersonality": "<string>",
        "propertyCount": 5000,
        "channels": [],
        "regions": [
          "UK",
          "EMEA"
        ],
        "verticals": [
          "sports",
          "entertainment"
        ],
        "publisherDomains": [
          "pitchside.co.uk",
          "football.pitchside.co.uk"
        ],
        "evidenceUrls": [
          "<string>"
        ],
        "notes": "<string>",
        "updatedBy": "<string>"
      },
      "sellsThirdPartyInventory": true,
      "defaultCurrency": "<string>",
      "paymentCurrencies": [
        "<string>"
      ]
    },
    "seller": {
      "storefrontId": "1234",
      "platformId": "acme-media",
      "name": "Acme Media",
      "publisherDomain": "acme.com",
      "operatorDomain": "scope3.com",
      "brandName": "Scope3",
      "logoUrl": "<string>",
      "regions": [
        "<string>"
      ],
      "description": "<string>",
      "channels": [
        "<string>"
      ],
      "website": "<string>",
      "demandContactName": "<string>",
      "demandContactEmail": "<string>",
      "operatorDomainVerified": true,
      "adapterCredentialMode": "BYOK",
      "plan": "basic",
      "transacting": true,
      "archivedAt": "2023-11-07T05:31:56Z",
      "capabilities": {
        "offersCreativeReview": false,
        "offersCampaignApproval": false,
        "offersProductComposition": false
      },
      "compositionPricing": {
        "targetPercentile": "p75",
        "rateCard": {
          "facts": []
        }
      },
      "capabilitiesLocked": true,
      "advertiseAsAgent": true,
      "createdAt": "2023-11-07T05:31:56Z",
      "updatedAt": "2023-11-07T05:31:56Z",
      "businessProfile": {
        "summary": "<string>",
        "agentName": "<string>",
        "agentPersonality": "<string>",
        "propertyCount": 5000,
        "channels": [],
        "regions": [
          "UK",
          "EMEA"
        ],
        "verticals": [
          "sports",
          "entertainment"
        ],
        "publisherDomains": [
          "pitchside.co.uk",
          "football.pitchside.co.uk"
        ],
        "evidenceUrls": [
          "<string>"
        ],
        "notes": "<string>",
        "updatedBy": "<string>"
      },
      "sellsThirdPartyInventory": true,
      "defaultCurrency": "<string>",
      "paymentCurrencies": [
        "<string>"
      ]
    },
    "requestMessage": "<string>",
    "responseMessage": "<string>",
    "requestedAt": "2023-11-07T05:31:56Z",
    "respondedAt": "2023-11-07T05:31:56Z",
    "cancelledAt": "2023-11-07T05:31:56Z"
  },
  "isAdapterSource": true
}

Authorizations

Authorization
string
header
required

API key or access token

Path Parameters

sourceId
string
required

Inventory source ID

Minimum string length: 1

Body

application/json
name
string

Updated display name

Required string length: 1 - 255
executionType
enum<string>

AGENT inventory sources can be updated here. MANAGED_SALES_AGENT and MODULAR_SOURCE lifecycle transitions happen through dedicated flows; LINKED_STOREFRONT sources are resolved at runtime from the ambient wholesale pool and have no lifecycle endpoint. Storefront-level ADAPTER dispatch is configured on the storefront, not as an inventory source.

Available options:
AGENT
status
enum<string>

Updated source status (PENDING → ACTIVE, ACTIVE → DISABLED)

Available options:
PENDING,
ACTIVE,
DISABLED
description
string

Updated agent description

Maximum string length: 2000
endpointUrl
string<uri>

Updated agent endpoint URL

Maximum string length: 2048
protocol
enum<string>

Updated agent protocol

Available options:
MCP,
A2A
authenticationType
enum<string>

Updated agent authentication type

Available options:
API_KEY,
NO_AUTH,
JWT,
OAUTH,
BASIC_AUTH
auth
object

Updated authentication credentials. Omit to keep existing credentials. For BASIC_AUTH agents, use { type: "basic", username, password }.

oauthAudience
string<uri>

OAuth audience / resource indicator for OAUTH agents (the protected-resource URI the agent gateway validates). Setting it re-mints the token with this aud claim and returns a fresh authorization URL to re-consent. Sent as both Auth0 audience and RFC 8707 resource.

Maximum string length: 2048
Example:

"https://platform.example.com"

Response

Update inventory source

Inventory source response

id
string
required

Globally unique surrogate id (BIGINT serialized as string). Use this when acting on rows the caller does not own (e.g. a seller approving an inbound link).

sourceId
string
required

Storefront-scoped identifier — unique within the row owner's storefront. Use this for actions on the caller's own rows; use id for cross-customer actions.

name
string
required

Display name

executionType
string
required

Execution type

status
enum<string>
required

Source lifecycle status

Available options:
PENDING,
ACTIVE,
DISABLED
agentId
string | null
required

Linked agent ID (when executionType is agent)

createdAt
string<date-time>
required

Creation timestamp (ISO 8601)

Pattern: ^(?:(?:\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))$
updatedAt
string<date-time>
required

Last update timestamp (ISO 8601)

Pattern: ^(?:(?:\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))$
type
enum<string> | null

Agent type

Available options:
SALES,
SIGNAL,
CREATIVE,
OUTCOME
endpointUrl
string | null

Agent endpoint URL

protocol
enum<string> | null

Agent protocol

Available options:
MCP,
A2A
description
string | null

Agent description

authenticationType
enum<string> | null

Agent authentication type

Available options:
API_KEY,
NO_AUTH,
JWT,
OAUTH,
BASIC_AUTH
authConfigured
boolean

Whether the agent has authentication configured

oauth
object

OAuth authorization info (for OAUTH agents)

managedSa
object

Embedded-sales-agent state when executionType is MANAGED_SALES_AGENT. Null/absent for external AGENT-type sources. The current REST surface (/api/v2/storefront/esa/...) remains the way to mutate this state today; subsequent PRs will move those actions under /api/v2/storefront/inventory-sources/:sourceId/....

linkedStorefront
object

Always null. Storefront interchange runs through the ambient wholesale pool: a curator discovers any LISTED storefront’s wholesale inventory automatically, with no per-counterparty link to establish. Retained for response-shape stability.

reportingType
enum<string> | null

How the underlying agent reports delivery (WEBHOOK, BUCKET, POLLING). Mirrors the AdCP-spec values used when registering the agent. Projected from the joined adcp_agent row; null for non-AGENT sources.

Available options:
WEBHOOK,
BUCKET,
POLLING
reportingPollingCadence
enum<string> | null

Polling cadence (DAILY, MONTHLY) — only meaningful when reportingType is POLLING. Projected from the joined adcp_agent row; null for non-AGENT sources or non-polling reporting.

Available options:
DAILY,
MONTHLY
isAdapterSource
boolean

True when this source is routed through an official Scope3-hosted adapter (storefront routing_mode is ADAPTER and the source_id matches the configured adapter). When true, the UI labels this as an official adapter rather than a generic external sales agent.