Supported tools
The public sales agent exposes three AdCP tools. tools/list returns
exactly these three. Any other tool name is answered with
UNSUPPORTED_FEATURE (see errors and limits).
| Tool | Status | Needs a key? |
|---|---|---|
get_adcp_capabilities | GA | No |
list_creative_formats | GA | No |
get_products | Beta | No, but anonymous calls return zero products |
All three are read-only. The agent can’t create or change anything yet, so you can’t place a media buy, sync creatives or check delivery through it.
Every call counts toward your rate limit: 30 per minute per IP address anonymously, or 300 per minute per key.
get_adcp_capabilities
Tells you what the agent supports. It takes no arguments. The response includes:
adcp.major_versions: [3]andadcp_version: "3.1".supported_protocols: ["media_buy", "creative"].account.supported_billing: ["operator"]andaccount.default_billing: "operator". Carbnn invoices whoever places the order.required_for_productsisfalse, so you don’t need to name an account to see products.media_buy.featuresandcreativeflags.inline_creative_managementandsupports_generationaretrue. Property-list filtering, content standards, conversion tracking, audience targeting, a creative library, creative transformation and creative compliance are allfalse.
list_creative_formats
Returns the creative formats Carbnn products use: Carbnn’s own global formats plus every format attached to a published product. Anonymous and keyed callers see the same list.
Every format_id that get_products hands out can be looked up here.
Format ids are AdCP structured references, { agent_url, id }, and
agent_url is always https://salesagent.streetsdigital.com.
Supported request fields:
format_ids: look up specific formats by{ agent_url, id }. You can send up to 100 refs per request. More than that returnsINVALID_REQUEST.name_search: case-insensitive match on the format name.
Other filters, including the size filters (min_width, max_width,
min_height, max_height), are accepted but ignored for now.
Example request:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "list_creative_formats",
"arguments": { "name_search": "video" }
}
}Each format in result.structuredContent.formats has a format_id, a
name, a description and its assets (for example a required video
file plus an optional impression tracker URL).
get_products
Returns the products you can buy.
Anonymous callers always get an empty list:
{ "products": [], "cache_scope": "public", "status": "completed", "adcp_version": "3.1" }With a key, you get the published products Carbnn has opened to your key, in the territories they’re opened for. If another buyer holds a territory exclusively, that territory is hidden from you. A product must have at least one format and at least one publisher property to be listed.
Supported request fields:
buying_mode: when it’s"brief",briefmust be a non-empty string, or the call returnsINVALID_REQUESTwithfield: "brief".brief: accepted and logged, but results aren’t filtered or ranked by it yet. Your agent should rank the returned products against its own brief.filters.channels: returns only products in at least one of the given channels.filters.countries: returns only products available in at least one of the given countries. Use upper-case ISO 3166-1 alpha-2 codes, e.g."GB".brand,account: accepted. Naming anaccountchanges thecache_scopeof the response (below).
Other filters are accepted but ignored for now.
cache_scope
Every get_products response carries an AdCP 3.1 cache_scope:
"public": the request named noaccount. Anonymous responses are always"public"."account": a keyed request named anaccount. Don’t share or reuse that response for other accounts.
Limitations
- Products that fail AdCP product validation are left out of the response rather than failing the whole call.
- Some products list publisher properties
by_id. Carbnn doesn’t publish a property list yet, so those property ids can’t be resolved against one.