Skip to main content
The API is in active development — breaking changes may occur before final release.

Buyer API Reference

Overview

The Scope3 Buyer API provides enhanced capabilities for brand advertisers to manage advertising campaigns through both REST and MCP (Model Context Protocol) interfaces. The API follows the SESOFI (Single Entity, Single Operation, Full Information) design principle:
  • Single Entity - Each endpoint manages one resource type
  • Single Operation - One call does one thing completely
  • Full Information - GET returns everything, PUT/POST accepts everything

Connection Methods

Standard HTTP methods with JSON request/response bodies.Production:
https://api.agentic.scope3.com/api/buyer
Staging:
https://api.agentic.staging.scope3.com/api/buyer
Example:
curl https://api.agentic.scope3.com/api/buyer/advertisers \
  -H "Authorization: Bearer scope3_your_api_key_here"

OpenAPI Specification

Download the OpenAPI specification for SDK generation or API exploration:

Authentication

All API requests require authentication using your Scope3 API key:
Authorization: Bearer scope3_your_api_key_here

Get API Key

Request API credentials to get started

REST API Endpoints

Advertisers

Core advertiser management endpoints. Following SESOFI, GET returns full advertiser data including all nested configuration.
MethodEndpointDescription
GET/api/buyer/advertisersList all advertisers
POST/api/buyer/advertisersCreate a new advertiser
GET/api/buyer/advertisers/:idGet advertiser with full configuration
PUT/api/buyer/advertisers/:idUpdate advertiser (partial or full)
Query Parameters for GET /advertisers:
  • includeAccounts - When true, includes linked partner accounts in each advertiser response (avoids N+1 calls to /accounts)
  • includeBrand - When true, includes resolved brand information (logos, colors, industry)
  • take / skip - Pagination
Example - List Advertisers with Accounts:
curl "https://api.agentic.scope3.com/api/buyer/advertisers?includeAccounts=true" \
  -H "Authorization: Bearer scope3_your_api_key_here"
Example - Get Advertiser (returns EVERYTHING):
curl https://api.agentic.scope3.com/api/buyer/advertisers/adv_123 \
  -H "Authorization: Bearer scope3_your_api_key_here"
Response includes:
  • Advertiser details (name, industry, etc.)
  • All conversion events
  • All test cohorts
  • Measurement configuration
  • Brand associations
Example - Create Advertiser with Linked Accounts:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "brand": { "domain": "acme.com" },
    "linkedAccounts": [
      {
        "partnerId": "premiumvideo_a1b2c3d4",
        "accountId": "acc_acme_pinnacle",
        "billingType": "brand"
      }
    ]
  }'
linkedAccounts field (available on create and update):
  • partnerId - Partner agent ID
  • accountId - Partner-assigned account identifier
  • billingType - Billing arrangement type (e.g. "brand", "agency")
On update, existing linked accounts are not removed — only new ones are added.

Conversion Events

Manage conversion events for measuring campaign effectiveness.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/conversion-eventsList all conversion events
POST/api/buyer/advertisers/:advertiserId/conversion-eventsCreate a conversion event
GET/api/buyer/advertisers/:advertiserId/conversion-events/:idGet a specific conversion event
PUT/api/buyer/advertisers/:advertiserId/conversion-events/:idUpdate a conversion event
DELETE/api/buyer/advertisers/:advertiserId/conversion-events/:idDelete a conversion event
Example - Create Conversion Event:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/conversion-events \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Purchase Complete",
    "eventType": "purchase",
    "value": 50.00,
    "currency": "USD"
  }'

Test Cohorts

Manage test cohorts for A/B testing and incrementality measurement.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/test-cohortsList all test cohorts
POST/api/buyer/advertisers/:advertiserId/test-cohortsCreate a test cohort
GET/api/buyer/advertisers/:advertiserId/test-cohorts/:idGet a specific test cohort
PUT/api/buyer/advertisers/:advertiserId/test-cohorts/:idUpdate a test cohort
DELETE/api/buyer/advertisers/:advertiserId/test-cohorts/:idDelete a test cohort
Example - Create Test Cohort:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/test-cohorts \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Q1 Holdout Test",
    "type": "holdout",
    "percentage": 10,
    "startDate": "2024-01-01",
    "endDate": "2024-03-31"
  }'

Measurement Config

Configure measurement settings for an advertiser. This is a singleton resource per advertiser.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/measurement-configGet measurement configuration
PUT/api/buyer/advertisers/:advertiserId/measurement-configUpdate measurement configuration
Example - Update Measurement Config:
curl -X PUT https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/measurement-config \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "attributionWindow": 30,
    "attributionModel": "lastTouch",
    "measurementEnabled": true,
    "crossDeviceTracking": true
  }'

Brands

MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/brandGet brand for advertiser
POST/api/buyer/advertisers/:advertiserId/brandCreate brand for advertiser
PUT/api/buyer/advertisers/:advertiserId/brandUpdate brand

Campaigns

MethodEndpointDescription
GET/api/buyer/campaignsList all campaigns
POST/api/buyer/campaignsCreate a new campaign
GET/api/buyer/campaigns/:idGet campaign details
PUT/api/buyer/campaigns/:idUpdate campaign
POST/api/buyer/campaigns/:id/executeExecute/launch campaign
POST/api/buyer/campaigns/:id/pausePause campaign

Creative Sets

Manage creative sets containing assets (video, image, text) that can be combined into different creative formats with macro expansion support.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/creative-setsList all creative sets
POST/api/buyer/advertisers/:advertiserId/creative-setsCreate a creative set
GET/api/buyer/advertisers/:advertiserId/creative-sets/:idGet a specific creative set
PUT/api/buyer/advertisers/:advertiserId/creative-sets/:idUpdate a creative set
DELETE/api/buyer/advertisers/:advertiserId/creative-sets/:idDelete a creative set
POST/api/buyer/advertisers/:advertiserId/creative-sets/:id/assetsAdd an asset to a creative set
DELETE/api/buyer/advertisers/:advertiserId/creative-sets/:id/assets/:assetIdRemove an asset from a creative set
Asset Types:
  • video - Video files with duration, dimensions, codec metadata
  • image - Image files with dimensions and alt text
  • text - Text content for headlines, descriptions, CTAs
Creative Formats:
  • display_banner - Standard display banners
  • native - Native ad formats
  • video_instream - In-stream video ads
  • video_outstream - Out-stream video ads
  • audio - Audio ads
  • ctv - Connected TV ads
  • dooh - Digital out-of-home ads
Example - Create Creative Set:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/creative-sets \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer 2025 Campaign Creatives",
    "description": "Creative assets for summer promotional campaign",
    "assets": [
      {
        "type": "video",
        "name": "Hero Video 30s",
        "url": "https://storage.example.com/videos/hero-30s.mp4",
        "metadata": {
          "duration": 30,
          "width": 1920,
          "height": 1080
        }
      },
      {
        "type": "text",
        "name": "Primary Headline",
        "content": "Discover Amazing Savings Today!"
      }
    ],
    "tags": ["summer", "promotional", "2025"]
  }'

Media Buys

View media buy execution status and delivery metrics.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/media-buysList all media buys
GET/api/buyer/advertisers/:advertiserId/media-buys/:idGet a specific media buy
Media Buy Statuses:
  • DRAFT - Initial state, not yet submitted
  • PENDING_APPROVAL - Submitted, awaiting approval
  • INPUT_REQUIRED - Additional information needed
  • ACTIVE - Currently running
  • PAUSED - Temporarily paused
  • COMPLETED - Successfully finished
  • FAILED - Execution failed
  • REJECTED - Not approved
  • ARCHIVED - Archived/deleted
Example - List Media Buys:
curl https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/media-buys \
  -H "Authorization: Bearer scope3_your_api_key_here"

Reporting

Access reporting metrics and performance data for campaigns and media buys.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/reportingGet reporting
Query Parameters:
  • days - Number of days to include (default: 7, max: 90)
  • startDate - Start date in ISO format (YYYY-MM-DD)
  • endDate - End date in ISO format (YYYY-MM-DD)
  • campaignId - Filter by campaign ID
  • mediaBuyId - Filter by media buy ID
Example - Get Reporting:
curl "https://api.agentic.scope3.com/api/buyer/advertisers/adv_123/reporting?days=7" \
  -H "Authorization: Bearer scope3_your_api_key_here"
Response:
{
  "dailyMetrics": [
    {
      "date": "2025-01-15",
      "impressions": 150000,
      "spend": 1250.50,
      "clicks": 450
    }
  ],
  "totals": {
    "impressions": 325000,
    "spend": 2701.25,
    "clicks": 970
  },
  "periodStart": "2025-01-15",
  "periodEnd": "2025-01-21"
}

Partner Accounts

Discover and link advertiser accounts on partner platforms (e.g. a DSP seat). The flow is: discover available accounts via GET .../accounts/available, then assign one to the advertiser via POST .../accounts.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/accounts/availableList accounts discovered on a partner platform
GET/api/buyer/advertisers/:advertiserId/accountsList accounts linked to this advertiser
GET/api/buyer/advertisers/:advertiserId/accounts/:accountIdGet a single linked account
POST/api/buyer/advertisers/:advertiserId/accountsAssign a discovered account to this advertiser
Query Parameters for GET .../accounts/available:
  • partnerId (required) - Partner agent ID to discover accounts from
  • credentialId - ID of a specific registered credential to use for account discovery. Required when the customer has multiple credentials registered for this agent. Use GET /sales-agents/accountCredentials to list credentials and their IDs.
  • refresh - Set to true to re-fetch from the partner; defaults to cached results
Example - Discover available accounts:
curl "https://api.agentic.scope3.com/api/buyer/advertisers/12345/accounts/available?partnerId=premiumvideo_a1b2c3d4" \
  -H "Authorization: Bearer scope3_your_api_key_here"
Example - Assign an account:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/12345/accounts \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "partnerId": "premiumvideo_a1b2c3d4",
    "accountId": "acc_acme_pinnacle"
  }'
Account fields (from partner):
  • accountId - Partner-assigned account identifier
  • name - Human-readable account name (e.g. "Acme c/o Pinnacle")
  • advertiser - Advertiser name as recorded by the partner
  • billingProxy - Agency or proxy buying on behalf of the advertiser
  • house - Domain or house identifier
  • billing - Billing arrangement type (e.g. "brand")

Partner Agents

Discover and configure partner ad platforms. Each agent exposes capabilities describing how it handles account resolution and billing.
MethodEndpointDescription
GET/api/buyer/sales-agentsList available partner agents
POST/api/buyer/sales-agents/:agentId/accountsRegister an account on a partner agent
Query Parameters for GET /sales-agents:
  • supportsRegistration - "true" to return only agents that require operator authentication (requiresOperatorAuth = true)
  • limit / cursor - Pagination
Example - List Partner Agents:
curl "https://api.agentic.scope3.com/api/buyer/sales-agents?supportsRegistration=true" \
  -H "Authorization: Bearer scope3_your_api_key_here"
Agent response fields:
  • requiresOperatorAuth (boolean) - When true, buyers must register their own credentials with this partner before transacting
  • billingOptions - Billing arrangements supported by this partner. null when capabilities have not been fetched yet.
    • default - Default billing type (e.g. "brand")
    • supported - Array of supported billing types (e.g. ["brand", "agency"])
  • accountResolution - How this agent resolves account references. null when capabilities have not been fetched yet.
    • "explicit_account_id" - Accounts are discovered via list_accounts and referenced by their partner-assigned ID
    • "implicit_from_sync" - Buyer declares brand/operator via sync_accounts and the seller provisions accounts
Example - Register an Account:
curl -X POST https://api.agentic.scope3.com/api/buyer/sales-agents/premiumvideo_a1b2c3d4/accounts \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "accountIdentifier": "acme-brand-account",
    "accountType": "brand"
  }'
The advertiserId field has been removed from the register account body. Use the Partner Accounts endpoints to link accounts to specific advertisers after registration.

Catalogs

Manage product and offering catalogs that can be synced to partner platforms.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/catalogsList catalogs
POST/api/buyer/advertisers/:advertiserId/catalogsCreate a catalog
GET/api/buyer/advertisers/:advertiserId/catalogs/:catalogIdGet a catalog
PUT/api/buyer/advertisers/:advertiserId/catalogs/:catalogIdUpdate a catalog
DELETE/api/buyer/advertisers/:advertiserId/catalogs/:catalogIdArchive a catalog (also archives all offerings)
POST/api/buyer/advertisers/:advertiserId/catalogs/syncSync catalogs to partner platforms
Supported catalog types: product, offering, hotel, flight, destination, home_listing, vehicle, job, local, retail, travel, education Example - Create a catalog:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/12345/catalogs \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Summer Products",
    "type": "product",
    "description": "Summer 2025 product catalog"
  }'
Example - Sync to partners:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/12345/catalogs/sync \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "partnerIds": ["premiumvideo_a1b2c3d4"]
  }'

Offerings

Manage individual offerings (products, listings, etc.) within a catalog.
MethodEndpointDescription
GET/api/buyer/advertisers/:advertiserId/catalogs/:catalogId/offeringsList offerings in a catalog
POST/api/buyer/advertisers/:advertiserId/catalogs/:catalogId/offeringsCreate an offering
GET/api/buyer/advertisers/:advertiserId/catalogs/:catalogId/offerings/:offeringIdGet an offering
PUT/api/buyer/advertisers/:advertiserId/catalogs/:catalogId/offerings/:offeringIdUpdate an offering
DELETE/api/buyer/advertisers/:advertiserId/catalogs/:catalogId/offerings/:offeringIdArchive an offering
Example - Create an offering:
curl -X POST https://api.agentic.scope3.com/api/buyer/advertisers/12345/catalogs/cat_abc/offerings \
  -H "Authorization: Bearer scope3_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "offeringId": "sku_001",
    "title": "Wireless Headphones",
    "description": "Premium noise-cancelling headphones",
    "price": 299.99,
    "currency": "USD",
    "landingUrl": "https://example.com/products/headphones"
  }'

MCP Tools

The Buyer MCP server uses a generic tool pattern rather than individual tools per resource. AI agents interact with the full REST API surface through four tools:
ToolDescription
ask_about_capabilityQuery the API documentation to look up correct endpoint paths, field names, and request schemas. Call this before api_call when unsure of the exact interface.
api_callAuthenticated HTTP proxy to any buyer REST endpoint. Supports all methods (GET, POST, PUT, DELETE) with full request/response passthrough.
helpList all available API endpoints with descriptions and categories.
healthHealth check to verify the API is reachable.
Required workflow for AI agents: Always call ask_about_capability first to retrieve accurate field names and schemas before calling api_call. Field names are camelCase (e.g. advertiserId, not advertiser_id).

Using api_call

The api_call tool proxies to any endpoint under /api/buyer/. It handles authentication automatically. MCP Example - List Advertisers:
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "api_call",
    "arguments": {
      "method": "GET",
      "path": "/api/buyer/advertisers",
      "query": { "includeAccounts": true }
    }
  }
}
MCP Example - Create Advertiser:
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "api_call",
    "arguments": {
      "method": "POST",
      "path": "/api/buyer/advertisers",
      "body": {
        "name": "Acme Corp",
        "brand": { "domain": "acme.com" }
      }
    }
  }
}
MCP Example - Get Reporting:
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "api_call",
    "arguments": {
      "method": "GET",
      "path": "/api/buyer/advertisers/adv_123/reporting",
      "query": { "days": 7 }
    }
  }
}

Supported Endpoint Families

The api_call tool allows access to:
Endpoint FamilyExample Operations
/api/buyer/advertisers/*Advertiser CRUD, brand, conversion events, test cohorts, measurement config, accounts, catalogs, offerings
/api/buyer/campaigns/*Campaign CRUD, execute, pause
/api/buyer/discovery/*Product discovery and selection
/api/buyer/creative-sets/*Creative set and asset management
/api/buyer/media-buys/*View media buy status and delivery
/api/buyer/reporting/*Impressions, spend, clicks metrics
/api/buyer/sales-agents/*Partner agent discovery and account registration
/api/buyer/signals/*Audience signal listing

Response Format

All responses follow a consistent structure:
{
  "data": { ... },
  "error": null,
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2024-01-15T10:30:00Z"
  }
}
Error Response:
{
  "data": null,
  "error": {
    "code": "NOT_FOUND",
    "message": "Advertiser not found"
  },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2024-01-15T10:30:00Z"
  }
}

Support

For technical support, contact us at support@scope3.com.