Skip to main content
v2 is in active development. Breaking changes may occur before general availability.

Migrating from v1 to v2

The v2 Scope3 Agentic API is a fundamental simplification of v1. The surface is smaller, the conventions are agent-first, and the platform now extends across both the buy side and the sell side. v1 is frozen — every integration must migrate to v2. This guide walks you through what changed and how to translate the calls you already use today.

Overview

v2 is a redesign — not a refactor. The core ideas behind Scope3 (allocation over bidding, agentic orchestration, signal-driven media quality) are unchanged. What changed is the API contract.

Simpler surface

Single endpoint, single object, full intent (SESOFI). RESTful resources replace v1’s per-action verb endpoints.

Agent-first MCP

Two generic MCP wrappers — api_call and ask_about_capability — replace dozens of per-domain MCP tools.

AAO marketplace

Native support for the Agentic Advertising Organization (AAO) — discover and buy from storefronts.

Measurement engine

First-class endpoints for hypotheses, test plans, learning cycles, and measurement data ingestion.

v2 is required. v1 is frozen and will be retired — every integration must move to v2. This guide is the path.
You can migrate incrementally: v1 and v2 run side by side, so you can move one advertiser, campaign type, or workflow at a time rather than cutting over in a single shot.

Key conceptual changes

Brand Agent → Advertiser

v1 used the term Brand Agent as the top-level container for campaigns, creatives, and brand stories. v2 calls this an Advertiser. The model is the same, the name is industry-standard.
v1 termv2 term
Brand AgentAdvertiser
Brand Agent StandardAdvertiser Standard (rolled into measurement / discovery)
TacticMedia Buy (already in v1, now consistent)
Outcome AgentMeasurement Engine + Hypotheses + Test Plans

MCP tool model: per-domain → generic

In v1, each domain had its own MCP tool — brand-agent-create, campaign-update, media-buy-execute, and so on. Agents had to memorize dozens of tool names and argument shapes. In v2, every operation goes through one of three generic tools:
ToolPurpose
healthProbe API connectivity
ask_about_capabilityAsk the API in natural language what it can do — returns operations, fields, and display requirements
api_callExecute any REST endpoint via a named operation, with pathParams, body, and params
The agent discovers capabilities at runtime via ask_about_capability and then dispatches through api_call. There is nothing to register, nothing to update when the API gains new operations.

Skill files

Both buyer and storefront roles ship a skill file that fully describes the API for any agent that can read Markdown:
RoleSkill nameSkill URL
Buyerscope3-agentic-buyer (v2.0.0)https://api.agentic.scope3.com/api/buyer/skill.md
Storefrontscope3-agentic-storefront (v2.0.0)https://api.agentic.scope3.com/api/storefront/skill.md
Point a custom agent at the skill file and it has end-to-end understanding of the API — operations, required fields, display rules, and workflow guidance.

New surfaces in v2

SurfaceWhat it is
StorefrontsSell-side companion API for inventory owners listing products to buyers
Measurement engineHypotheses, test plans, learning cycles, belief state, and feedback loops
AAO complianceNative Agentic Advertising Organization (AAO) support — discover and authenticate against storefronts
Partner agents marketplaceBrowse and connect to third-party signals, sales, and creative agents
DiscoveryFirst-class product discovery with persistent discoveryId and proposal application
Property listsManage allow/block lists at advertiser scope
Frequency cap & pacingReusable configs at advertiser level, applied to campaigns and media buys
Audit logs / Tasks / NotificationsOperational visibility for long-running and async operations

Endpoint mapping

v1 used verb-style RPC paths (/brand-agent-create, /campaign-update). v2 is fully RESTful with resource-oriented paths under /api/buyer and /api/storefront.
v2 base URLs (these aliases always resolve to the latest stable API version):
  • Buyer REST: https://api.agentic.scope3.com/api/buyer
  • Storefront REST: https://api.agentic.scope3.com/api/storefront
ADCP property-list resolution lives at the app-level top — GET /lists/:listId.

Core resources

v1 endpointv2 endpointNotes
POST /brand-agent-createPOST /advertisersRenamed; brand field now required
POST /brand-agent-updatePUT /advertisers/{advertiserId}RESTful update
POST /brand-agent-listGET /advertisersStandard list
POST /brand-agent-getGET /advertisers/{advertiserId}
POST /brand-agent-deleteDELETE /advertisers/{advertiserId}
POST /campaign-createPOST /campaignsNew shape: nested flightDates, budget, performanceConfig
POST /campaign-updatePUT /campaigns/{campaignId}
POST /campaign-listGET /campaignsFilter via query params
POST /campaign-getGET /campaigns/{campaignId}
POST /campaign-deleteDELETE /campaigns/{campaignId}
POST /campaign-validate-brief(folded into discover-products)Brief validation now happens during discovery
POST /media-buy-create(managed via campaigns)Media buys are created by campaign execution / auto-select
POST /media-buy-executePOST /campaigns/{campaignId}/executeExecution is now campaign-scoped
POST /media-buy-listGET /campaigns/{campaignId}/media-buy-statusReturns status for all media buys on a campaign
POST /signals-list (v1 partner API)GET /signals (storefront) / via discoverySignals surface differently per role
POST /creative-createPOST /campaigns/{campaignId}/creatives/createCreatives are now campaign-nested
POST /creative-update / delete / getPUT/DELETE/GET /campaigns/{campaignId}/creatives/{creativeId}RESTful, manifest-based
POST /creative-assignGET /campaigns/{campaignId}/creativeManifestManifest-driven assignment replaces per-call assign
POST /tactic-*(replaced)Tactics are subsumed by media buys + allocations
POST /outcomes-agent-*/advertisers/{advertiserId}/hypotheses etc.Outcome agents become the measurement engine
POST /service-token-*(admin UI / unchanged auth model)Use SSO or API keys; service tokens still work

v2-only endpoints (no v1 equivalent)

These exist only on v2 and are central to the new platform:
  • POST /discovery/discover-products and /discovery/{discoveryId}/... — persistent product discovery
  • POST /campaigns/{campaignId}/auto-select-products — AI-driven product selection and budget allocation
  • GET /audit-logs — full audit trail
  • GET /tasks/{taskId} — track async operations
  • GET /notifications (and unread counts via help / ask_about_capability)
  • GET /storefronts / POST /storefronts (storefront role) — sell-side surfaces
  • /advertisers/{advertiserId}/measurement-config, hypotheses, test-plans, learning-cycle/run, belief-state, testability — measurement engine
  • /advertisers/{advertiserId}/property-lists/... — allow/block lists
  • /advertisers/{advertiserId}/event-sources and /measurement-data/sync — conversion ingestion
  • /advertisers/{advertiserId}/catalogs and /syndicate — partner-agent catalog distribution
  • /accounts/current, /accounts, /accounts/create-child — multi-tenant account hierarchy
  • /notification-preferences and frequency-cap / pacing-period configs

Side-by-side: creating a campaign

# Step 1: create the brand agent
curl -X POST "https://api.agentic.scope3.com/v1/brand-agent-create" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp"
  }'

# Step 2: create the campaign
curl -X POST "https://api.agentic.scope3.com/v1/campaign-create" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "brandAgentId": "agent_123",
    "name": "Q1 Launch",
    "startDate": "2026-02-05",
    "endDate":   "2026-02-28",
    "budget":    50000
  }'
Notable differences:
  • brandAgentId (string) → advertiserId (number)
  • startDate / endDate flat fields → nested flightDates object with ISO 8601 datetimes
  • budget: 50000 → nested budget object with explicit currency
  • New optional performanceConfig.optimizationGoals[] for goal-based optimization
  • Required brand field on advertiser create (e.g., "acme.com")

Authentication changes

The bearer-token model from v1 still works in v2. What’s new:

OAuth for AI agents

Connect Claude, ChatGPT, and other MCP-aware agents via OAuth. No API keys to manage.

SSO

SAML / OIDC SSO for enterprise org sign-in.

AAO OAuth

Sign in to private / member storefronts via the AAO marketplace using OAuth.

API keys

Same Bearer scope3_... format as v1 — your existing keys keep working.
If you only use API keys today, no auth changes are required. Just point your existing key at the v2 base URL.

Breaking changes checklist

When you migrate, audit for these:
  • Path style — every v1 verb endpoint (e.g. /campaign-create) maps to a RESTful resource (e.g. POST /campaigns)
  • brandAgentIdadvertiserId — and the type changed from string to number
  • Date fields — flat startDate / endDate are now nested under flightDates with required ISO 8601 datetimes (with Z suffix)
  • Budget — scalar budget: 50000 is now an object with total and currency
  • Required brand — advertiser create now requires a brand domain (e.g. "acme.com")
  • Creatives — now nested under /campaigns/{campaignId}/creatives and use a manifest model rather than per-call assign
  • Tactics — removed as a top-level concept; functionality lives in media buys + allocations
  • Outcome agents — replaced by the measurement engine (hypotheses, test plans, learning cycles)
  • MCP tools — per-domain v1 tools are not available in v2; use api_call + ask_about_capability
  • Field naming — v2 is strict camelCase. advertiser_id is rejected; use advertiserId. flight_dates is rejected; use flightDates.
  • Optimization goals — now live on performanceConfig.optimizationGoals[] with kind: "event" | "metric". Valid metric values: clicks, views, completed_views, viewed_seconds, attention_seconds, attention_score, engagements, follows, saves, profile_visits.
  • Creative assignment — done via creativeManifest rather than per-creative creative-assign calls

Skill / MCP migration

If your v1 integration drove the API through per-domain MCP tools, you’ll dispatch through the generic v2 tools instead.
// MCP tool call: brand-agent-create
{
  "name": "brand-agent-create",
  "arguments": {
    "name": "Acme Corp"
  }
}
The recommended pattern for any v2 agent:
1

Discover the operation

Call ask_about_capability with a natural-language description of what you want to do. The response lists candidate operations, required fields, display requirements, and workflow notes.
2

Verify every field has a source

Walk every field in body, pathParams, and params and name where it came from — a previous response, the user, or ask_about_capability. Never invent IDs or fabricate values.
3

Dispatch via api_call

Pass operation, pathParams, body, and params to api_call. The named operation enum prevents hallucinated endpoints and wrong HTTP methods.
4

Present results per the display rules

Each operation’s ask_about_capability response describes what to show the user (status, IDs, account links, sandbox flag, etc.). Show those fields — never collapse to vague prose.
The two MCP endpoints to point your client at:
RoleMCP URL
Buyerhttps://api.agentic.scope3.com/mcp/buyer
Storefronthttps://api.agentic.scope3.com/mcp/storefront

Sandbox

v2 has first-class sandbox support. Set "sandbox": true when creating an advertiser and every ADCP operation under that advertiser routes to sandbox accounts — no real spend, no production side effects.

Sandbox guide

Learn how to test campaigns, discovery, and media-buy flows safely.
The sandbox flag is immutable after the advertiser is created. Decide up front whether the advertiser is for production or testing.

Getting help

Quick Start

Connect an agent and make your first call in minutes.

API Reference

Browse every v2 endpoint with request and response schemas.

Authentication

OAuth, SSO, and API key setup.

Built for Agents

Detailed setup for Claude, ChatGPT, Cursor, and custom agents.

Skill File

Why a skill file beats hand-written tool wrappers.

Support

Email support@scope3.com for migration help.