Live Demo: Music
Let’s continue the Live Demo with a case from the music industry. There, an agent bought a license to read one article. Here, an agent buys a license to use a music track in a video.
Today, licensing music for a video is manual work: every library has its own tiers and terms, and it is easy to buy the wrong one. An agent can do this work only if it can read and compare the terms before it pays.
The scenario we recorded: an AI agent is editing a short video clip and needs background music. It searches the Harmonia Records catalog through FORA, reads the three licenses offered for the track it picks, buys one and places the audio on the timeline. Then we give it the same task again, but with a different customer and a different use. The first video is for the creator’s own YouTube channel, the second for a broadcaster’s program. Same track, same agent, same catalog — and the agent buys a different license, because the one that fits a personal channel does not cover broadcast.
In short: for the personal YouTube video, the agent buys Online Creator for €29, and the license asks it to record the video URL for Content ID. For the broadcast program, it buys Broadcast for €450, and the license asks for a cue sheet. See the full comparison at the end of the page.
Each step shows the screen and the protocol call under it, so you can see which part of the protocol does the work.
Agent-ready licensing without custom development
Section titled “Agent-ready licensing without custom development”Harmonia Records (the fictional music publisher in this demo) wrote no code. It described its catalog in one file, called a feed, and pushed that file to the Exchange. See the example feed at the end of the page.
After a one-time setup of its domain and CDN, FORA gives the catalog everything the agent uses on this page:
- Search. Agents find tracks by genre, mood, tempo and other music fields.
- Terms an agent can read. Each license becomes a signed offer with the price and the main terms. The full license text is at a public URL, so an agent can read it before it pays.
- Payment. The Exchange checks the offer, charges the agent’s account and records the transaction.
- Delivery. The agent gets a short-lived signed download link. The CDN checks the link before it serves the file.
- Evidence. Each purchase leaves signed records that anyone can check later.
The catalog owner publishes one feed, and FORA handles discovery, purchase and delivery for compatible AI agents. Here’s how the pieces fit together:
The setup
Section titled “The setup”For this demo, we used Claude Desktop with two MCP servers connected:
- The FORA demo MCP server, with an agent identity that is already registered with the Exchange. This is the same setup as in the Live Demo: add the server, get an identity and register with the Exchange. We do not repeat those steps here.
- DaVinci Resolve (the free version) with the davinci-resolve-mcp bridge, so the agent can work in the editing project: import the audio, place it on the timeline and add markers.
The editing project holds a 40-second clip from Tears of Steel: two people talk on a bridge. The music goes under their conversation.
The catalog and its three licenses
Section titled “The catalog and its three licenses”Harmonia’s catalog is on demo.fora-protocol.org. It lists instrumental background tracks with the fields people search music by: genre, mood, tempo, energy, vocals, instruments and what the track suits. The catalog shows no prices, because a price belongs to a license, not to a track.
To keep the demo simple, every track is offered under the same three licenses, at the same prices:
- Online Creator — for an individual’s own online channel. €29.
- Broadcast — for broadcasters and commercial clients, including TV. €450.
- Advertising — for paid advertising. €1,200.
For the same reason, one plain-language license document describes all three, one section per license. This is the text a music supervisor would read, and it is the same text the agent reads.
First run: a personal YouTube video
Section titled “First run: a personal YouTube video”1. Searching for a track
Section titled “1. Searching for a track”The creator asks the agent for music:
I’m making a sci-fi video for my own personal YouTube channel. It starts with a scene featuring a conversation. I’m an individual creator, not a company.
Find calm background music in the FORA demo catalog, with mysterious mood, no vocals, for this video. I will trim the track to fit the clip. Show me the license options for the best track, compare them for my use, pick the one that fits, and explain why the others do not fit.
The agent does not know the catalog or the track names. It describes what it needs, and the FORA search service finds the tracks that match. The search returned a few tracks, and the best match is Ancient Rite by Kevin MacLeod: calm, low energy and a slow tempo that stays under a conversation.
The same answer carries the track’s three offers, one per license. This is where the prices first reach the agent: they come from the signed offers, not from the catalog page. The agent turns the offers into the table above: the price, who can buy, the allowed uses, the scope and what is not allowed.
2. Reading the terms
Section titled “2. Reading the terms”The agent now has three offers for the same track and has to pick one. It compares each license with what it was told: a personal video for the creator’s own YouTube channel.
The license document gives a clear answer for each offer:
- Online Creator fits. It is for an individual making their own production, and it covers one YouTube video streamed online.
- Broadcast does not fit. It is for a broadcaster or a commercial company making a television program. The customer here is an individual, and the video is not going to TV.
- Advertising does not fit. It is for one paid advertisement for a named advertiser. The document says directly that it is “not an upgrade covering every use”, and that it does not cover a personal YouTube video. It is also the most expensive offer.
This is the grant the agent buys, section 2 of the Online Creator license in the license document:
For EUR 29 in demo funds, the offer models a non-exclusive, worldwide, perpetual right to synchronize the identified sound recording and its musical composition into one personal YouTube video and stream that completed video online. Necessary production copies, trimming, fades and mixing under dialogue are included. Platform ad-revenue monetization of the personal video is allowed. The fee is charged once for the one production, not per view, stream or download.
The rest of the section covers what a music licensing professional checks next. The grant covers both the recording rights and the composition rights, for the use it names. It does not cover performance royalties paid through collecting societies. It excludes client work, sponsorship, paid promotion and AI training. The licensee must credit the track’s real creator, and record the published video URL for Content ID clearance.
The Exchange does not check who the customer is. The agent picks the license from what it was told about the customer and the use, and the person who gave the task is responsible for that statement being true. In the second run, the customer and the use change, and nothing else.
3. Buying the license
Section titled “3. Buying the license”The agent buys the Online Creator offer. The Exchange confirms the purchase and returns a transaction ID, a billing ID and a signed link to the audio file. The link is valid for five minutes. The agent downloads the MP3 through that link and checks that it is exactly the file the offer describes.
The €29 comes from the agent’s test balance. The agent reads its balance with the Fora status tool, which asks the Exchange.
Before the purchase:
After the purchase:
In the Live Demo, the agent filed a usage report after it read the article. This purchase requires no usage report: the Exchange’s answer contains no reporting obligation. The license’s credit and Content ID obligations still apply, but they are between the licensee and the publisher, not part of the protocol.
4. Placing the music on the timeline
Section titled “4. Placing the music on the timeline”With the MP3 downloaded, the agent switches to DaVinci Resolve. Through the Resolve MCP bridge, it makes four edits:
- Imports the track and places it on an audio track under the dialogue.
- Trims it to the length of the clip.
- Fades it out over the last 2–3 seconds.
- Lowers its level so the voice stays clear.
This step has nothing to do with FORA. It is here because it shows that the download worked: the file delivered through the signed link is the file that plays in the project.
5. Keeping the receipt
Section titled “5. Keeping the receipt”The agent does not keep a receipt on its own. We asked it to, and it wrote the receipt in two places: as a note on a timeline marker in the Resolve project, and as license-receipt.json next to the project. The receipt holds everything that identifies the purchase: the transaction and billing IDs, the track, the offer, the license name with a fingerprint of its document, the price, the time, and the Exchange’s signature over the offer. The second run shows the marker in the timeline.
license-receipt.json from the first run
This is the receipt, shortened:
{ "transaction_id": "0341e443-9a12-4443-9d3a-2bfaba64631e", "billing_id": "8f208fbbb8b3e627f1e39085ba51c286", "track": { "title": "Ancient Rite", "artist": "Kevin MacLeod", "isrc": "USUAN1900048", "resource_uri": "https://demo.fora-protocol.org/tracks/ancient-rite.mp3", "content_hash": "sha256:9bbb23e094e851e0…", "downloaded_file_sha256_verified": true }, "offer_id": "b74f68b2-ed5a-41c6-bc5f-71ff82522482", "license": { "name": "Harmonia illustrative music alternatives (Online Creator / Broadcast / Advertising)", "section": "Online Creator", "id": "harmonia-music-demo-v0.1", "uri": "https://demo.fora-protocol.org/licensing/harmonia/music-v0.1.txt", "uri_digest": "sha256:e27dce2aea538b1e…" }, "price": { "amount": "29", "currency": "EUR" }, "exchange": "exchange.demo.fora-protocol.org", "execute_request_id": "457f0ca2-b684-416b-9531-f2377cd1dd78", "timestamp": "2026-09-28T13:53:16Z", "timestamp_note": "Approximate purchase time: the delivery URL expired 13:58:16Z and FORA delivery URLs live about 5 minutes after purchase. fora_execute returned no explicit purchase timestamp.", "signed_offer": { "offer_id": "b74f68b2-ed5a-41c6-bc5f-71ff82522482", "expires_at": "2026-09-28T13:58:01.851253005Z", "pricing": { "model": "PRICING_MODEL_FLAT", "rate": "29", "currency": "EUR", "metering": "PRICING_METERING_NONE" }, "signature": "a54f191bb8fbef7f…", "signature_algorithm": "EdDSA" // … the rest of the signed offer, unchanged }}The time in the receipt is the agent’s estimate, and the receipt says so. The Exchange’s own records carry the real time.
The agent wrote this file itself, so the file alone proves nothing. It is useful because each value in it can be checked against a record the agent does not control:
- The offer signature proves which terms and price the Exchange offered. Anyone can verify it with the Exchange’s public key. The license digest ties those terms to the exact license text.
- The agent’s signed acceptance proves that this agent accepted this exact offer. The agent signs it with its own key when it buys, and the Exchange keeps it with the transaction.
- The Broker’s record shows, from a second party, that the Broker sent this offer to this agent in its search results.
- The Exchange’s transaction record proves that the purchase happened and which signed link the Exchange issued for it.
- The edge delivery log proves that the edge verified that same link and released the request for the file. It does not prove that the download finished — the audio in the timeline shows that.
None of this proves that Harmonia owns the rights, that Content ID was cleared, or that any real money was paid.
The transaction ID is the key to all of these records. With it, the demo operator collects the evidence from every party in the purchase — the Exchange, the Broker and the delivery edge — and checks that the records agree with each other. For the first purchase, all seven checks pass.
The evidence for the first purchase
This is the demo operator’s report. The tenant line and the correlator column are left out, and long values are shortened:
FORA evidence chain transaction 0341e443-9a12-4443-9d3a-2bfaba64631e
PARTY STEP EVENT CRYPTOExchange 1. offer signed issued and signed offer b74f68b2-ed5a-41c6-bc5f-71ff82522482 EdDSA a54f191bb8fbef7fb2…Broker 2. offer routed offered b74f68b2-… among 3 candidates for …/tracks/ancient-rite.mp3 unsigned audit rowAgent 3. offer accepted signed an acceptance as requester agent-gpqyy3en.mcp.demo.fora-… EdDSA 4e5d49fbdd76bb4d0d…Exchange 4. URL minted minted a signed retrieval URL, expiring 2026-09-28T13:58:16Z sha256 25f46a406377b4ea3…Edge 5. URL verified verified the signature on GET /tracks/ancient-rite.mp3 and authorized sha256 25f46a406377b4ea3… delivery, served from eu-central-1Edge 6. origin fetch released released the request to the CDN for the origin fetch (cdn-origin- — fetch); no origin response was observed by this witnessExchange 7. reporting — no reporting obligation was minted for this transaction
ASSERTIONS [v] Exchange offer signature re-verifies offline ed25519.Verify accepted 2725 canonical bytes against the stored Exchange key [v] Agent acceptance signature re-verifies offline ed25519.Verify accepted 342 canonical bytes against the stored agent key [v] Acceptance binds this exact agreement (all 4 signed members) offer_sig, requester_id, requester_domain and idempotency_key inside the signed bytes all match the row [v] Transaction-log key derives from the signed request key "ancient-rite-online-creator-2026-09-28-b74f68b2:b74f68b2-ed5a-41c6-bc5f-71ff82522482" = signed key + ":" + offer id [v] Broker independently recorded offering this offer selection sel-1b695d6c-dd3b-4e66-b905-367161934d64 recorded at 2026-09-28T13:53:01Z lists offer b74f68b2-ed5a-41c6-bc5f-71ff82522482 among its candidates [v] Broker's agent and the signing agent are the same identity Exchange and Broker both name "agent-gpqyy3en.mcp.demo.fora-protocol.org" [v] Delivered URL is the URL the Exchange minted sha256 25f46a406377b4ea35e9dfb3f5ce941effdfec32e64062e62280dbd26662b31d on both sides
7 of 7 checked assertions hold.The evidence does not include billing: the €29 charge is shown by the balance before and after the purchase.
Second run: a broadcast program
Section titled “Second run: a broadcast program”1. The same task, a different customer
Section titled “1. The same task, a different customer”We start again with the same project and the same agent. This time the editor says the video is for a broadcaster’s television program:
This is a separate job. I’m an editor at Northwind Television, a broadcaster. We are preparing a 60-second documentary segment that starts with a scene featuring a conversation, for a non-advertising TV programme on our channel. The same segment will run in the programme’s online version. Northwind Television is the licensee, and I’m acting for the company.
Find calm background music, no vocals, for this segment. I will trim the track to fit the clip. Show me the license options for the best track, compare them for this use, pick the one that fits, and explain why the others do not fit.
The prompt says 60 seconds, but the project holds the same 40-second clip as in the first run, and the agent trims the track to it. The search returns a few calm tracks with no vocals. The best match for a documentary is again Ancient Rite, and the Exchange returns the same three offers at the same prices. Nothing in the catalog has changed.
2. Reading the terms again
Section titled “2. Reading the terms again”
The same license document now gives a different answer:
- Online Creator does not fit any more. It is only for an individual’s own production. It excludes client work and television broadcast.
- Broadcast fits. It is for a broadcaster or a commercial company making a non-advertising TV program. It covers the broadcast, repeat transmissions of the same program, and its online version, including catch-up.
- Advertising still does not fit. The program is not an advertisement, and the document says the Advertising license does not cover “a non-advertising editorial television programme”.
The Broadcast section also says who is responsible for the customer’s statement: “The producer must state the represented customer and authority accurately; the Exchange does not verify that representation.” The agent chose Broadcast because it was told the customer is a broadcaster. FORA did not check that.
3. Buying, editing and the second receipt
Section titled “3. Buying, editing and the second receipt”The rest of the run repeats the first one. The agent buys the Broadcast offer, and €450 comes from the test balance. It places the track on the timeline with the same four edits, and writes a second receipt. The second receipt goes to a separate project folder, so it does not overwrite the first one.
Before the purchase:
After the purchase:
license-receipt.json from the second run
This is the second receipt, shortened to the fields that differ from the first one:
{ "transaction_id": "9a5746de-08ce-425a-aee6-3c4b8ace0bfb", "billing_id": "64da27582351aa9bd7132ebf5a97d74e", "offer_id": "866f22b3-aa6f-48f9-b560-4677776cdfb1", "license": { "section": "Broadcast" // … name, uri and uri_digest: the same license document as in the first receipt }, "price": { "amount": "450", "currency": "EUR" }, "execute_request_id": "ee858324-8c1b-4286-8c7e-7df75e845815", "intended_licensee": "Northwind Television (broadcaster)", "licensee_note": "Demo test purchase. Bought on the demo account (billing ref eac7b30b-cd3c-4a14-ab6c-f8ed6eca39a6), which also bought an individual-only Online Creator license; the licensee on record is that account's owner, not necessarily Northwind.", "timestamp": "2026-09-28T14:08:38Z", "signed_offer": { "offer_id": "866f22b3-aa6f-48f9-b560-4677776cdfb1", "expires_at": "2026-09-28T14:13:10.128627608Z", "pricing": { "model": "PRICING_MODEL_FLAT", "rate": "450", "currency": "EUR", "metering": "PRICING_METERING_NONE" }, "signature": "87f2d89f5a5b295e…", "signature_algorithm": "EdDSA" // … the rest of the signed offer, unchanged } // track: the same as in the first receipt}The agent added licensee_note on its own. The same demo account bought both licenses, first as an individual and then for Northwind Television. The agent points out that the licensee on record is the account’s owner, and that the Exchange did not check who the account acts for. This is the limit described in the previous step, and the receipt records it.
4. The cue sheet
Section titled “4. The cue sheet”The Broadcast license adds an obligation that the Online Creator license does not have: a cue sheet. A cue sheet lists the music used in a program — the track, its composer and publisher, where the cue starts, how long it plays and how it is used. Broadcasters pay collecting societies for the right to broadcast music, and the cue sheet tells the society whose music was used, so it can pay the right writers and publishers.
The license is clear that the €450 does not include those royalties. The sync fee pays for putting the music into the program. Performance royalties are a separate payment, made through the broadcaster’s arrangement with the collecting societies.
This demo does not create a cue sheet. There is no real program and no broadcaster to send it to. In a real production, the cue sheet is prepared when the edit is final and delivered to the broadcaster. Like the credit in the first run, it is an obligation of the license, not of FORA. Neither purchase asks for a usage report.
Side by side
Section titled “Side by side”Same track, same agent, same catalog, same three offers. The only thing that changed between the runs is what the agent was told about the customer and the intended use.
| Personal YouTube video | Broadcast program | |
|---|---|---|
| License bought | Online Creator | Broadcast |
| Price | €29 | €450 |
| Key terms | Individual’s own production; one YouTube video, streamed online | Broadcaster or commercial company; one TV program, repeats and online version |
| Obligations | Record the video URL for Content ID | Cue sheet; performance royalties not included |
| Rejected |
|
|
All three licenses share the same base: one production, worldwide and perpetual; the recording and the composition in one grant; a credit to the track’s real creator; no AI training; a one-time flat fee with no usage reports.
For catalog owners
Section titled “For catalog owners”Nothing in this demo is specific to Harmonia. Each line of its feed describes the audio file, the search fields, the license document, and the licenses the publisher sells with their prices. This is the line for one of the tracks, shortened:
{ "domain": "demo.fora-protocol.org", "path": "/tracks/ancient-rite.mp3", "title": "Ancient Rite — Kevin MacLeod (illustrative Harmonia offers)", "content_hash": "sha256:9bbb23e0…", "ext": { "music.genre": "soundtrack", "music.mood": ["calm", "mysterious", "somber"], "music.bpm": 70, "music.energy": "low", "music.vocals": false, "music.instruments": ["choir", "percussion", "bass"], "music.duration_seconds": 60.03, "music.suitable_for": ["documentary", "meditation"] }, "license": { "name": "Harmonia illustrative music alternatives (Online Creator / Broadcast / Advertising)", "uri": "https://demo.fora-protocol.org/licensing/harmonia/music-v0.1.txt", "uri_digest": "sha256:e27dce2a…" }, "terms": [ { "user_types": ["individual"], "pricing": { "model": "flat", "rate": "29", "currency": "EUR", "metering": "none" } /* … */ }, { "user_types": ["broadcaster", "commercial_entity"], "pricing": { "model": "flat", "rate": "450", "currency": "EUR", "metering": "none" } /* … */ }, { "user_types": ["commercial_entity"], "pricing": { "model": "flat", "rate": "1200", "currency": "EUR", "metering": "none" } /* … */ } ]}The publisher, or a catalog contributor it authorizes, pushes the feed to an Exchange. The Exchange turns each term into a signed offer, and the Broker builds its search index from the music.* fields in ext of the same feed. These fields follow the fora-music-v1 profile, which defines each field and the search filters an agent can send.
The Exchange can be run for you by an operator, or you can run your own. See Deployment Models for the options, Publisher Onboarding for what a publisher sets up to push its own feed, and JSONL Ingestion for the feed format.
Further reading
Section titled “Further reading”- Live Demo: First License — the setup this page skips, and the protocol calls in more detail
- Licensing Terms — how terms become offers, and what
reference_onlymeans - Transaction Flow — every message of discovery and purchase, with payloads
- Extension: fora-music-v1 — the
music.*fields and the music search filters - Broker Overview — how the Broker searches and ranks offers
- CatalogService API Push — how a publisher, or a contributor it authorizes, pushes a catalog to an Exchange
Credits
Section titled “Credits”- Video: Tears of Steel, (CC) Blender Foundation | mango.blender.org, licensed under CC BY 3.0. A 40-second excerpt is used, with music added under the dialogue.
- Music: Ancient Rite by Kevin MacLeod (incompetech.com), licensed under CC BY 4.0. The track is trimmed to the clip, faded out and mixed under the dialogue.
The video and the music are real works under Creative Commons licenses. The Online Creator and Broadcast licenses bought in this demo are fictional Harmonia examples, paid with test money. They do not license Tears of Steel or the music. The Blender Foundation does not endorse FORA.