- Brief — Define what the campaign needs
- Discover — Fetch
brand.jsonto find the rights agent - Search — Query available talent with
get_rights - Acquire — Submit a binding request with
acquire_rights - Approve — Handle approval, rejection, or pending paths
- Generate — Create and deliver on-brand ads
- Manage — Extend, pause, or pull the campaign

Step 1: The brief
Bistro Oranje wants a Dutch Olympic athlete as the face of their summer campaign. Video ads, display banners, and audio spots across the Netherlands. Budget: EUR 5,000 for rights, plus creative production and media spend. The campaign runs June through August. Carlos has used AdCP for media buying before. Rights licensing works the same way — his buyer agent talks to a rights agent the same way — same protocol, same tools.Agency language to protocol terms
Agency language to protocol terms
| What Carlos says | What the protocol calls it |
|---|---|
| ”Find me a Dutch athlete for a food brand” | get_rights with natural language query |
| ”How much for likeness and voice?” | pricing_options in the get_rights response |
| ”Lock in 3 months, Netherlands only” | acquire_rights with campaign dates and countries |
| ”Send me the keys so my creative tools can generate” | generation_credentials in the acquire_rights response |
| ”The talent’s agency needs to approve the creative” | creative-approval-request via the approval_webhook |
| ”We need to extend through September” | update_rights with a new end_date |
| ”The talent got injured — pull everything” | Revocation notification to the revocation_webhook |
Step 2: Discover the brand
Carlos’s buyer agent starts where every AdCP interaction starts:brand.json. The agent fetches https://lotientertainment.com/.well-known/brand.json and finds a talent agency managing a roster of athletes.

rights_agent field tells the buyer agent everything it needs to know before making any MCP calls — what is licensable, what types of rights, and where.
get_brand_identity to retrieve visual assets and tone guidelines. These are needed later when creative tools generate on-brand ads featuring the athlete.
Step 3: Search for talent
Now Carlos’s agent callsget_rights on the rights agent. Carlos describes what he wants in plain language. No dropdown menus, no category codes — the agent understands intent.

include_excluded: true flag asks the rights agent to return talent that cannot be licensed as-is, along with reasons and suggestions. Without this flag, the response only includes available talent.
The response returns Daan Janssen as a 92% match — Dutch nationality, no food category conflicts, budget-aligned. Two pricing options: CPM at EUR 3.50 per impression, or a flat monthly rate at EUR 1,500 with a 100K impression cap. The response also shows Emma van Dijk as excluded due to a food category exclusivity in the Netherlands, with suggestions for alternative markets.
Full get_rights response
Full get_rights response
excluded array shows Emma van Dijk is unavailable in the Netherlands for food brands, but the suggestions tell Carlos’s agent she is available in Belgium and Germany, or in the Netherlands starting January 2027. Suggestions mean the exclusion is actionable — the agent can adjust and retry.
Step 4: Acquire the rights
Carlos reviews the options and picks the flat monthly rate. His buyer agent submitsacquire_rights — a binding contractual request.

acquire_rights with the flat monthly pricing option, campaign dates (June through August), webhooks for revocation and push notifications, and an idempotency key for safe retries.
Full acquire_rights request
Full acquire_rights request
Full acquired response
Full acquired response
Step 5: Approval and rejection
Not every request gets approved immediately. The protocol handles two other paths.
Pending approval
Some requests need human review — the talent’s management, a legal team, or the athlete themselves. The rights agent returnspending_approval with an estimated timeline.
push_notification_config URL. The buyer agent does not poll.
Rejection with suggestions (actionable)
If the request cannot be fulfilled as-is, but the buyer can adjust, the rejection includessuggestions. Their presence is the signal — if suggestions exist, the rejection is fixable.
Rejection without suggestions (final)
When there are no suggestions, the rejection is final for this talent and campaign combination.suggestions field. The buyer agent moves on. The reason may be vague intentionally — agencies manage confidential rules (the talent’s personal boundaries, legal constraints, internal policies) that are not appropriate to disclose. The protocol respects this: a sanitized reason is enough for the buyer agent to understand the outcome without exposing private business logic.
At this point, Carlos has licensed talent and is ready to generate creative. The next section covers what happens after acquisition: generation, delivery, and lifecycle management.
Try it yourself
Learn the protocol hands-on through the buyer certification program.
For advertisers
How rights licensing works from the buyer’s perspective.
Step 6: Generate and deliver
With credentials in hand, Carlos’s creative tools go to work. The Midjourney credential generates likeness. The ElevenLabs credential generates voice. Each provider validates therights_key at generation time — the credential itself is the authorization.

Creative approval
For video formats, the content restrictions require approval before distribution. The creative agent submits the finished ad to theapproval_webhook.
Rights constraint in the creative manifest
Every creative that uses licensed talent carries therights_constraint from the acquire_rights response in its manifest — the buyer does not construct it manually. A single ad can combine talent likeness from one rights holder and music from another, each with different validity periods and geographic restrictions. Downstream participants (SSPs, verification vendors) hit the verification_url to confirm the grant is still active before serving.
Usage reporting
Impressions are reported back to the rights agent for billing and cap enforcement. Theimpression_cap in the terms (100,000 per month) is a soft cap by default. If the campaign exceeds it, additional impressions are billed at the overage_cpm rate (EUR 4.00). The rights agent tracks cumulative usage and can notify the buyer when approaching the cap.
Step 7: The lifecycle continues
Rights are not static. Campaigns change, contracts extend, and sometimes things go wrong.
Updating rights
Midway through the campaign, Bistro Oranje wants to extend through September. Carlos’s agent callsupdate_rights.
paused: true. Credentials are suspended. Set paused: false to resume.
Natural expiration
When the campaign ends andvalid_until is reached, credentials expire automatically. Generation requests stop working. No action is required from either party.
Revocation
If the talent’s agency needs to revoke rights — a scandal, a contract violation, a legal issue — they POST a revocation notification to the buyer’srevocation_webhook.
effective_at is in the future, the buyer has a grace period to wind down creative delivery. When it is the current time, the revocation is immediate — stop serving now.
Partial revocation is also supported. If revoked_uses is present in the notification, only those uses are revoked. The rest of the grant remains active.
What you have seen
The brand protocol handles rights from discovery (brand.json) through licensing (get_rights, acquire_rights) to lifecycle management (update_rights, revocation webhooks). Every step uses the same MCP transport your buyer agent already speaks. The rights constraint travels with the creative — so every participant in the supply chain can verify before serving.
Check your understanding
Check your understanding
Bistro Oranje’s campaign is halfway through July when they learn Daan Janssen has signed a new sportswear exclusivity deal that now includes food brands in Belgium. Their campaign only runs in the Netherlands. Does Carlos need to do anything? Why or why not?Think about: geographic scoping in the rights grant, the difference between existing exclusivities and new ones, and what the
countries field in Carlos’s acquire_rights terms actually covers.Go deeper
brand.json spec
Full technical specification for the brand.json file format.
For advertisers
How rights licensing works from the buyer’s perspective.
For rights holders
How AdCP protects and monetizes talent rights.
Building a brand agent
Implement a brand agent that serves identity and rights.
get_rights
Search for licensable talent with pricing and availability.
acquire_rights
Submit a binding request and receive generation credentials.
update_rights
Modify an existing rights grant — extend, pause, adjust.
Certification
Earn your buyer certification and learn the protocol hands-on.