What it does
Verified Attribution keeps one case per referral. The referrer signs a referral that names the seller, pins the seller's public key and the hash of the commission terms; the seller signs an acknowledgement of the same terms, then reports a result (sale or job, order hash, amount, return window) and any reversal; a buyer or an evidence party such as a payment processor can sign the same order hash. We check every signature and key, the time order and that one order counts for one case, chain the events and sign a receipt with our time. attribution_statement then gives the case state (open, acknowledged, hold_period, settleable, fully_reversed), derived from the receipts by published rules you can re-run offline. Kept 400 days after the last event: ids, keys, hashes, amounts, signatures, times (the A2A door keeps a result 7 days). Never kept: order contents, names, addresses. No model. No money moves.
- Where it sits
- Agents › Trust › Verify
- Who it is for
- Agents and businesses that pay or earn commissions on agent-made sales or jobs: the agent that referred, the seller that completed, and whoever settles. Feeds the identity and payment rails road: commissions settled on a signed record, not on a ledger one side keeps.
- Price
- Free: 120 events an hour per address, 40 new cases a day. A fee per verified result is planned, not charging.
- Limits
- Events: referral (referrer: seller_id, seller_key, offer_hash, terms_hash, window_days 1 to 90), ack (seller: terms_hash), result (seller: kind sale or job, order_hash, amount_minor, currency, hold_days, confirmer_keys: up to 3 keys allowed to confirm, may be empty), confirm (a buyer or evidence party whose key the seller named: order_hash), reversal (seller: reason, reversed_minor). Hashes are SHA-256 hex; amounts are whole minor units; keys are Ed25519 in canonical base64 (weak keys refused). Each event is signed over the canonical JSON of {case_id, event_type, party_id, payload, role, type: attribution-event, v: 1}. Up to 24 events per case, 4 KB per call. A party id keeps one key and one role in a case; the referrer, seller and confirmers hold different keys; the seller key is the one the referrer pinned; a result must land inside the window; one order (seller key and order hash) belongs to one case. Use a long random case id (at least 32 random hex characters): anyone who knows it can read the case, and whoever sends first takes an unused id. A case nobody acknowledges is deleted after 14 days, and a deleted case id cannot be used again. Verified Attribution does not show that the sale or job happened, that a key belongs to the company it claims, that no other event exists or that the commission terms are fair. A seller who never reports a result leaves the case at acknowledged, which is not proof of no sale. The seller names its own confirmer keys and may name keys it controls: the statement says independence is not checked, so whoever settles must know the seller and confirmer keys from outside. The time is our clock and the order we saw events in; no public log yet (bp-ts2). Not a payment, escrow or money transmission service: no funds are held or moved.
For developers: try it
POST https://llpro.ai/mcp tools/call attribution_record
{"case_id":"<long random id both sides use>","party_id":"agent-r","role":"referrer","event_type":"referral",
"payload":{"seller_id":"shop-s","seller_key":"<b64>","offer_hash":"<sha256 hex>","terms_hash":"<sha256 hex>","window_days":30},
"public_key":"<b64>","sig":"<b64 over the canonical JSON of {case_id,event_type,party_id,payload,role,type:'attribution-event',v:1}>"}
-> receipt: seq, witnessed_at, prev_chain_hash, chain_hash, signed observation
tools/call attribution_statement {"case_id":"<id>"}
-> signed statement: state, evidence level, net amount, and every receipt
Offline verifier, rules and test vector: llpro.ai/verified-attribution-verify (attribution_verify.py, runs without our server).
For agents
Tool attribution_record on https://llpro.ai/mcp and in the tools list. Signed answers are checked with the public key below (signer llpro1:wmjdezlpxkcjwezpurvsu7i65e): an Ed25519 signature over the observation as canonical JSON (sorted keys, no spaces).
Public key (base64): knPtMEboNFAMhWajnVA12zj3yp0SrpeSlw7/8Z1qskk=
Road: identity and payment rails. A referring agent and a selling business each sign their part of one case, and whoever settles the commission re-runs the published rules on the receipts instead of trusting one side's ledger. It rides the Countersign hub: look up who a key is claimed to be there, and pin the seller key from outside. It records signed events; it does not show the sale happened and holds no money. How a stamp is checked: https://llpro.ai/stamp
Next
- Connect your agent: Use this and the other LLPRO tools from your own agent.
- Witness a whole deal: Verified Attribution covers a referral and its result; Witness covers any live deal.
- Hand the whole job to the Hub: Tell the Hub the job; it routes you to the right check.
For agents: this page as Markdown · JSON · llms.txt · MCP endpoint llpro.ai/mcp · agent card