Autonomous agents negotiate and pay for real music licences with x402, settled live on Hedera.
Kinora is an autonomous music licensing marketplace where two AI agents — one representing a rights holder, one representing a buyer — negotiate, verify each other's identity, pay, and settle real licences entirely on Hedera, with no human approving the deal.
The rights holder writes their licensing terms once, in plain English. An LLM parses that sentence into machine-enforced rules: which licence types are allowed, the minimum price per share, the maximum share a single licence can grant, and any forbidden use cases. From that point on, every incoming offer is checked against three fail-closed gates, in order. Identity: the buyer's HCS-14 agent ID is resolved from an on-chain registry on Hedera Consensus Service and must pass a compliance attestation. Policy: the offer's licence type, price, and share count are checked deterministically against the rights holder's rules — the same offer always gets the same verdict, so it can't be gamed. Availability: is there actually enough of the track's licensing capacity left to grant. Any single failure rejects the offer outright, before anything is priced or paid.
If an offer is accepted, the buyer's agent settles payment over the x402 protocol, moving real HBAR on Hedera testnet, cryptographically bound to the exact negotiated terms so a different request can't be substituted at payment time. Settlement triggers an idempotent chain: an audit entry and reputation feedback are written to Hedera Consensus Service, the track's remaining capacity is decremented, and a licence certificate is minted to the buyer as an NFT via Hedera Token Service — carrying a real 5% royalty fee schedule that automatically pays the rights holder on any future resale.
Negotiation is a genuine multi-round exchange over the A2A protocol: a buyer can open with a low offer, get declined with the price floor disclosed, and counter-offer autonomously within the same session — backed by real, persisted protocol state, not a scripted exchange.
Kinora runs entirely on native Hedera services, with zero Solidity and zero smart contracts, verified by both a source-code grep and a full automated regression suite. Every completed licence, identity check, and payment is independently verifiable through Hedera's mirror node, not just our own database.
Kinora is TypeScript end to end, built directly on Hedera SDKs — no Solidity, no EVM. Two agent processes talk over the A2A protocol (@a2a-js/sdk, AgentCard 1.0/0.3 over JSON-RPC), each backed by a genuine Task state machine — offers, counter-offers, and decisions persist and carry context across rounds, they aren't scripted request/response calls dressed up to look like a negotiation.
Payments run over x402 (@x402/hedera), settled with the blocky402 testnet facilitator, which handled the 402 → sign → 200 payment-verification flow for us so we didn't have to build our own settlement server. The paid endpoint cross-checks every incoming request against the exact terms that were actually negotiated and accepted — track, shares, licence type, territory, use case — so a buyer can't negotiate a cheap licence and then request something different at payment time.
Identity runs on HCS-14: each agent's UAID is derived deterministically from its Hedera account, and its profile is published to a Hedera Consensus Service topic we treat as an on-chain registry, since the HCS-14 spec itself doesn't mandate one. A completed licence triggers an idempotent chain — HCS audit entry, HCS reputation feedback, capacity decrement, and an HTS certificate NFT minted to the buyer, with a real 5% royalty fee schedule baked in at token creation.
The rights holder's licensing terms are written once in plain English and parsed into structured, machine-checkable rules by Groq (llama-3.3-70b), which we chose specifically for low-latency inference so policy updates feel instant in the demo.
The hackiest bug we caught ourselves: our A2A layer was generating a taskId on every reply that looked resumable but wasn't — nothing was actually persisted, so following up on that id threw "task not found." We fixed it by wiring the executor to actually persist the task before replying, which is also what made real multi-round negotiation possible — a buyer's counter-offer now genuinely continues the same session instead of starting fresh. We also deliberately left the royalty's fallback fee unset — our certificate delivery transfer carries no accompanying HBAR, so a fallback fee would have silently charged buyers on every legitimate delivery, not just resales.

