This skill enables you to execute the AdCP Brand Protocol with brand agents. The Brand Protocol provides access to brand identity, creative guidelines, and licensable rights (talent, IP, content).
Buyer-side basics — idempotency replay,
oneOfvariants, asyncstatus:'submitted'polling, error recovery fromadcp_error.issues[]— live inskills/call-adcp-agent/SKILL.md. This skill covers per-task semantics only.
Overview
The Brand Protocol provides 4 standardized tasks:
| Task | Purpose | Response Time |
|---|---|---|
get_brand_identity |
Get brand identity and guidelines | ~1-3s |
get_rights |
Search licensable rights | ~1-5s |
acquire_rights |
Acquire rights for a campaign | ~1-10s |
update_rights |
Modify an existing grant | ~1-5s |
Typical Workflow
Brand Identity Lookup
- Get identity:
get_brand_identitywith brand domain and optional field filter - Use data: Apply colors, logos, tone, guidelines to creative generation
Rights Licensing
- Search rights:
get_rightswith natural language query and use types - Review options: Evaluate matches by pricing, availability, compatibility
- Acquire:
acquire_rightswith selected pricing option and campaign details - Manage:
update_rightsto extend, adjust caps, or pause/resume
Task Reference
get_brand_identity
Get brand identity data from a brand agent.
Request:
{
"brand_id": "athlete-jane-doe",
"fields": ["description", "logos", "colors", "tone"],
"use_case": "creative_production",
"authorized": true
}
Key fields:
brand_id(string, required): Brand identifier within the agent's rosterfields(array, optional): Sections to include —description,industry,keller_type,logos,colors,fonts,visual_guidelines,tone,tagline,voice_synthesis,assets,rights. Omit for all.use_case(string, optional): Intended use —endorsement,voice_synthesis,likeness,creative_production,media_planningauthorized(boolean, optional): Sandbox only — simulate authorized access to see protected fields. Real agents use OAuth. Default false.
Response contains:
brand: Brand identity object with requested fields- Public fields (always available):
description,industry,logos(public subset) - Protected fields (require authorization):
colors,fonts,tone,voice_synthesis,visual_guidelines, fullassets
get_rights
Search for licensable rights (talent, IP, content) from a brand agent.
Request:
{
"query": "Dutch athlete for restaurant brand in Amsterdam, budget 400 EUR/month",
"uses": ["likeness", "endorsement"],
"buyer_brand": {
"domain": "restaurant.nl"
},
"countries": ["NL"],
"include_excluded": false
}
Key fields:
query(string, required): Natural language description of desired rightsuses(array, required): Rights uses —likeness,voice,name,endorsementbuyer_brand(object, optional): Buyer brand for compatibility filtering —{ domain, brand_id }countries(array, optional): Countries where rights are needed (ISO 3166-1 alpha-2)brand_id(string, optional): Search within a specific brand onlyinclude_excluded(boolean, optional): Include filtered-out results with reasons. Default false.
Response contains:
rights: Array of matching rights offerings with:rights_id: Use inacquire_rightsbrand_id,name,description: Who/what the rights coveruses: Available use typespricing_options: Array withpricing_option_id,price,currency,periodavailability: Geographic and temporal restrictionsexclusions: Any brand/category conflicts
acquire_rights
Acquire rights from a brand agent for a campaign.
Request:
{
"rights_id": "rights_jane_doe_endorsement",
"pricing_option_id": "monthly_standard",
"buyer": {
"domain": "restaurant.nl"
},
"campaign": {
"description": "Social media campaign featuring athlete endorsement for Amsterdam restaurant launch",
"uses": ["likeness", "endorsement"],
"countries": ["NL"],
"estimated_impressions": 500000,
"start_date": "2025-03-01",
"end_date": "2025-06-30"
}
}
Key fields:
rights_id(string, required): Fromget_rightsresponsepricing_option_id(string, required): Selected pricing optionbuyer(object, required): Buyer brand identity —{ domain, brand_id }campaign(object, required): Campaign details for rights clearancedescription(string, required): How the rights will be useduses(array, required): Rights uses for this campaigncountries(array, optional): Campaign countriesestimated_impressions(integer, optional): Estimated total impressionsstart_date,end_date(string, optional): Campaign dates (YYYY-MM-DD)
Response contains:
status:acquired,pending_approval, orrejectedrights_grant_id: Grant identifier (if acquired)generation_credentials: Credentials for AI generation (voice synthesis, likeness, etc.)rejection_reason: Why the request was rejected (category conflict, exclusivity, etc.)
update_rights
Update an existing rights grant — extend dates, adjust impression caps, or pause/resume.
Request:
{
"rights_id": "grant_abc123",
"end_date": "2025-09-30",
"impression_cap": 1000000,
"paused": false
}
Key fields:
rights_id(string, required): Rights grant identifier fromacquire_rightsend_date(string, optional): New end date (must be >= current end date)impression_cap(number, optional): New impression cap (must be >= current)paused(boolean, optional): Pause or resume the grant
Key Concepts
Public vs Protected Fields
Brand agents distinguish between public and protected data:
- Public: Available without authorization — basic description, industry, public logos
- Protected: Requires OAuth or authorized flag — colors, fonts, tone, voice synthesis credentials, full asset library
Rights Use Types
likeness: Use of a person's visual likeness (photos, AI-generated images)voice: Voice synthesis or audio recording rightsname: Use of a person's name in advertisingendorsement: Endorsement/testimonial rights
Rights Clearance
acquire_rights checks:
- Brand/category compatibility (no competitor conflicts)
- Geographic availability
- Temporal availability
- Existing exclusivity agreements
Results: acquired (immediate), pending_approval (human review), or rejected (with reason).
Error Handling
Common error codes:
REFERENCE_NOT_FOUND: Invalid brand_id, rights_id, or pricing_option_id (brand-protocol resources use the universal not-found fallback pererror-handling.mdx; brands lack a dedicated*_NOT_FOUNDcode)CATEGORY_CONFLICT: Buyer brand conflicts with existing agreementsGEOGRAPHIC_RESTRICTION: Rights not available in requested countriesAUTHORIZATION_REQUIRED: Protected fields require OAuth