Skip to main content
PUT
/
inventory-sources
/
{sourceId}
/
ad-server
Replace ad-server source config
curl --request PUT \
  --url https://api.interchange.io/api/v2/storefront/inventory-sources/{sourceId}/ad-server \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "type": "google_ad_manager",
  "networkCode": "12345678"
}
'
{
  "id": "<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": {
    "lastRunAt": "2023-11-07T05:31:56Z",
    "completedAt": "2023-11-07T05:31:56Z",
    "itemCount": 0,
    "error": "<string>",
    "updatedAt": "2023-11-07T05:31:56Z"
  }
}

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

Google Ad Manager configuration. Per-customer service-account credentials are managed by Scope3 (publisher grants access in their GAM admin console).

type
enum<string>
required
Available options:
google_ad_manager
networkCode
string
required

Google Ad Manager network code.

Required string length: 1 - 32
Pattern: ^[0-9]+$
Example:

"12345678"

Response

Replace ad-server source config

Storefront → managed ad-server source connection. A storefront can have multiple connections, each addressed by id.

id
string
required

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.

customerId
integer
required

Owning customer/storefront id.

Required range: -9007199254740991 <= x <= 9007199254740991
provisioningStatus
enum<string>
required

Lifecycle of the managed ad-server source. pending: publisher saved an ad-server config but provisioning has not been attempted. provisioning: upstream call in flight. active: source is live. failed: last provisioning attempt failed. deactivated: soft-deleted.

Available options:
pending,
provisioning,
active,
failed,
deactivated
tenantId
string | null
required

Upstream managed-source id for the managed ad-server source. Null until provisioning succeeds.

mcpUrl
string | null
required

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.

a2aUrl
string | null
required

A2A endpoint exposed by the provisioned managed ad-server source. May be a relative path (e.g. /a2a) — see mcpUrl for resolution.

adServer
object
required

Publisher-supplied ad-server config. Null if not yet collected.

serviceAccountEmail
string<email> | null
required

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.

Pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
lastError
string | null
required

Failure reason from the most recent provisioning or test-connection attempt.

lastErrorCode
string | null
required

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.

lastTestedAt
string<date-time> | null
required
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))$
provisionedAt
string<date-time> | null
required
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))$
deactivatedAt
string<date-time> | null
required
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))$
createdAt
string<date-time>
required
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
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))$
inventorySync
object
required

Cached inventory-sync state. Null when no signal has landed yet (no webhook delivered and no /status poll has run).