“In addition, Revolut has contributed directly to Google’s AP2 open protocol by adapting the flows specifically for account-to-account payments.” That sentence is from your own January 19, 2026 announcement, carried verbatim in Disruption Banking and confirmed independently by FinTech Global. It is a bigger sentence than it looks.
A card sits on a rail with a reversal built into it. A push does not. Under the SEPA Instant rulebook, a Recall “can be initiated only by the Originator PSP”, for three reasons only, and the Beneficiary PSP is allowed to answer “Beneficiary’s refusal”, per the 2025 SCT Inst rulebook. You said something close to this yourself when you shipped Pay by Bank: transactions that need direct authorisation from the customer’s own banking app mean “the risk of fraud and chargebacks is drastically reduced”, per Revolut, September 10, 2025.
Good for merchants. Also a design constraint. If there is little to reverse, then evidence collected after the fact has nothing to act on. The whole weight moves forward, to the moment before the effect. That is the only kind of instrument this page leads with.
Twelve receipt types, all deployed in production, twenty four live runs in your browser on this page against open verify routes. Two of them come back valid false on purpose, so you can watch the instrument refuse a receipt that lies about its own result.
Nothing here argues that Revolut missed something. This section is the source material, so you can check the reading before you read the argument. One honesty note first: revolut.com/news does not list the AP2 announcement, and revolut.com refuses scripted fetches, so the verbatim release text below is taken from outlets that reproduce it in full and is attributed that way. If any of it is misquoted at the source, say so and it comes off this page.
“Revolut Pay has become one of the first EU payment methods compatible with Google’s Agent Payments Protocol (AP2).”Revolut press release, 19 January 2026, carried in full · Disruption Banking, corroborated by The Paypers
“In addition, Revolut has contributed directly to Google’s AP2 open protocol by adapting the flows specifically for account-to-account payments.”Same release · Disruption Banking. Independently reported as “adapting payment flows specifically for account-to-account transactions” by FinTech Global, 19 January 2026
“The future of shopping isn’t a website; it’s a conversation. We aim to move beyond the click-and-pay model to a world where your AI assistant streamlines the checkout for you.”Alex Codina, General Manager of Acquiring at Revolut · same release
“This will ensure speed, trust, and absolute zero friction for the next generation of digital buying.”Alex Codina · same release. The word in the middle of that sentence is the one this page is about
“The future of digital commerce relies on trust, security and speed. By leveraging Google’s AP2 protocol, Revolut will remove friction from AI-assisted shopping.”Tara Brady, President, Google Cloud EMEA · same release
“Because transactions require direct customer authorisation from their chosen banking app, the risk of fraud and chargebacks is drastically reduced.”Revolut, on Pay by Bank in the Revolut Gateway · revolut.com, 10 September 2025. This one is from your own domain
“In the case of a dispute, the Checkout Mandate and Receipt, and Payment Mandate and Receipt can be brought together to provide a non-repudiable picture of the transaction. Specific details of how this is used for dispute resolution, retention, and retrieval requirements are outside the scope of this specification.”The protocol you contributed to, saying where it stops · AP2 specification v0.2
Read the last two together. Your own product page says the chargeback path is thin under bank to bank. The protocol’s own text says what happens after a dispute starts is out of its scope. Neither of those is a flaw. They are two accurate statements that, put side by side, describe where a separate object has to sit.
This is the part that makes an account to account agent flow different from a card agent flow, and it is worth being precise rather than dramatic about it. The rules below are quoted from the schemes and the regulator, not paraphrased.
| What the rule actually says | Source | What follows for an agent initiated push |
|---|---|---|
| “An SCT Inst Recall occurs when the Originator PSP requests to cancel an SCT Inst Transaction.” And: “The Recall procedure can be initiated only by the Originator PSP which may do it on behalf of the Originator.” | EPC 2025 SCT Inst rulebook v1.0 | The payer has no unilateral undo. Getting money back is a request your institution makes on the customer’s behalf, not a right the customer exercises. |
| A Recall is permitted for three reasons only: “Duplicate sending”, “Technical problems resulting in an erroneous SCT Inst Transaction”, and “Fraudulent originated SCT Inst Instruction”. | Same rulebook | “My agent bought the wrong thing” is not on that list. An agent that acted outside its mandate but inside the rails produced a transfer with no Recall reason attached to it. |
| The Beneficiary PSP may answer with a negative response for reasons including “Beneficiary’s refusal”, “Insufficient Funds on the Payment Account”, and “The Payment Account is closed”. | Same rulebook | Even a valid Recall can be declined by the party holding the money. Recovery depends on cooperation, which is exactly what is missing in the cases that matter. |
| “Only one (1) SCT Inst Recall can be sent for a given SCT Inst Transaction”, within 10 Banking Business Days for the operational reasons and 13 months for the fraud reason. | Same rulebook | One shot, on a clock. Whatever evidence you are going to have, you need to already have it. |
| In the UK, the fix for the fraud case is a reimbursement duty rather than a reversal: sending PSPs reimburse within five business days, subject to a £85,000 maximum, with receiving PSPs paying the sending PSP 50% of it, and two exceptions for first party fraud and gross negligence. | PSR PS25/5, May 2025, PSR APP scams | Note what that regime is. It is an argument about who was at fault, settled between two institutions, on a split. That is a determination problem, and it is the one place on this page where post effect instruments belong. |
What the AP2 specification says about any of this: nothing, on purpose. The text was read for irrevocability, chargebacks, refunds, mandate revocation, payment reversal, recovery of funds after a push, liability allocation, dispute deadlines and retention. None of those words appear. What it does say about a push is narrow and correct: “In the case that the payment method pushes funds to the Merchant, the Merchant will instead receive confirmation of funds sent, and confirm the receipt of those funds,” per the AP2 specification. Confirmation that funds were sent is a fact about the rail. It is not a finding about whether sending them was inside the authority.
So the evidence has to move forward in time. On a card, an evidence layer can be built lazily, because the reversal mechanism buys you months to assemble a story. On a push there is no equivalent buffer, and an instrument that only produces value during a dispute produces very little. Everything in the next section is designed to be signed before the transfer leaves, or in the seconds around it, and to be checkable by someone who was not there.
One caveat so this is not overstated. The rulebook nowhere uses the word irrevocable, and this page does not put that word in its mouth. What it says is exactly what is quoted above: one initiator, three reasons, one attempt, a clock, and a counterparty who is allowed to say no.
Any pitch that pretends otherwise is wasting your time. AP2 gives you signed mandates, and Google describes them as “tamper-proof, cryptographically-signed digital contracts that serve as verifiable proof of a user’s instructions,” per the Google Cloud announcement, September 16, 2025. That is proof of intent, it is good, and Hive does not duplicate it, improve on it, or replace it. If you already hold a Payment Mandate, you already hold the thing Hive would otherwise have to be asked for.
| Question | Who answers it today | Whether Hive adds anything |
|---|---|---|
| What did the user authorise? | AP2. The Checkout Mandate and the Payment Mandate, signed, with a vct, an amount, a payee, an execution date and an expiry, per the Payment Mandate spec. | No. This is answered. Hive reads a mandate reference and a scope digest. It never asks for a second mandate and never claims a better one. |
| Who checks the mandate? | Parties to the transaction. The spec is explicit: the Checkout Mandate is “verified by the Merchant”, and the Payment Mandate is “verified by the Credential Provider, Network, and Merchant Payment Processor”, per AP2 v0.2. | Yes, and this is the whole of it. Every verifier AP2 names has a position in the outcome. Hive signs the same arithmetic as a party with no position, so the answer survives being handed to someone who does not trust the party who computed it. |
| Can authority be handed on from one agent to another? | Left open. “Conceptually, it is possible to use this protocol to support delegation of Mandates from one Shopping Agent to another. This is outside the scope of the current specification,” per AP2 v0.2. | Yes. delegation.attenuation checks a chain of hops for whether each one only narrowed. It is not a proposal for AP2. It is an object you can hold beside whatever AP2 settles on later. |
| What happens when authority is pulled? | Not addressed. The specification and the flows document contain no revocation mechanism and no propagation model. | Yes. authority.revocation classifies an action against a revocation and a propagation bound that was committed in advance, and effect.quiescence covers the harder claim that nothing then happened. |
| Was the instruction checkable at all? | Not in scope. AP2 signs what was said. It does not classify whether what was said can be tested. | Yes. intent.verifiability classifies predicate kinds against a ruleset committed before the intent was fixed, and never reads the text. |
| Who pays when it went wrong anyway? | Out of scope by the spec’s own words, quoted in the previous section. | Yes, but only as a fallback. The last two instruments on this page do that, and they are secondary here for a reason stated plainly when you get to them. |
The one line summary, and it is deliberately modest. AP2 signs the mandate. Hive signs the determination that an action stayed inside it, and signs it as an entity that is not the merchant, not the bank, not the processor and not the agent operator. That is a different object with a different signer, and the value of it is entirely in the signer, not in the cryptography. The cryptography is ordinary.
Nothing here suggests AP2 should have covered these. A protocol that defines roles and messages is doing its job when it declines to appoint an arbiter over its own participants. The spec even says so structurally: “Roles MAY always delegate their responsibilities to another party,” and “While AP2 defines five roles, it is possible for a single entity to play multiple (or even all) of the roles,” per AP2 v0.2. When one entity can hold every role, an independent finding is worth more, not less.
These are in causal order, not in order of importance. Each one is a receipt type deployed in production with its live run further down the page. Read the order as a single sentence: was the granter entitled, did every hop narrow, was the instruction checkable, is the agent the one that was admitted, was the decision inside the live mandate, did the transaction conform, did anything happen after the pull.
| The question, in order | Why it is fatal for a push and merely awkward for a card | The signed record |
|---|---|---|
| Was the party who granted this authority entitled to grant it? | On a card, a bad root grant gets unwound through the scheme. On a push, a bad root grant produces a completed transfer that is nobody’s Recall reason. | authority.qualification |
| Did every delegation hop narrow the authority, or did one widen it? | AP2 leaves agent to agent delegation out of scope by its own text. A widening hop is invisible unless someone checks the whole chain mechanically. | delegation.attenuation |
| Was the instruction checkable before it was acted on? | “Find me something reasonable” cannot be tested against an outcome. On a card that becomes a dispute. On a push it becomes a transfer. | intent.verifiability |
| Is the agent that transacted the agent that was admitted? | Detection tells you which agent is calling now. It does not tie today’s conduct to the credential that agent joined under. | admission.binding |
| Was the decision to authorise taken against a mandate that was still live? | A stale mandate on a card is a representment argument. A stale mandate on a push is money at a beneficiary who is entitled to refuse a Recall. | authorization.decision |
| Did this specific transaction stay inside that authority? | This is the one the whole flow turns on, and it is the one AP2 hands to parties with a position in the answer. | mandate.conformance |
| Did anything land after the authority was pulled? | Revocation is only worth something if the absence of effect afterwards can be shown. Otherwise pulling authority is a message nobody can audit. | authority.revocation, then effect.quiescence |
| And the one that only shows up across merchants. A mandate spent in small pieces at many different acceptors, each piece inside the per transaction limit. | An acquirer sees this shape before anyone else does, because it sees many acceptors at once. A per transaction check cannot see it, because it only ever looks at one transaction. | mandate.crossacceptor |
Then, and only then, the two that admit prevention failed. fault.attribution and recovery.determination are on this page, and they are good instruments, but they are second class citizens here. They run after the money is gone. Under the UK reimbursement regime they map onto a real question with real money attached, since a 50:50 split between sending and receiving institutions is precisely a fault argument. They still cannot bring a transfer back, and this page will not imply that they can.
Two boundaries before the instruments start. None of these needs an account number, an IBAN, a card number, a cart, or a customer identity. Every input is a digest, a commitment, or an instant. And none of them is a control: no receipt here blocks, delays, holds or reverses a payment. They are findings, produced beside the flow, that other people can recompute.
Each row is an object that exists in the published AP2 documents, matched to the receipt type whose own stated scope covers it. Only direct matches are shown, and the right hand column is deliberately narrow. Nothing here proposes a change to AP2.
| Object, from the specification | Receipt type | What the type proves about it, and nothing more |
|---|---|---|
Payment Mandate, closed form mandate.payment.1 and open form mandate.payment.open.1, carrying transaction_id, payee, payment_amount, payment_instrument, execution_date, iat and exp, per the Payment Mandate document. | mandate.conformance | Comparison of one named transaction against the constraints of one authority signed before it, with the outcome recomputed by the service rather than supplied by the caller. |
| “Execution Date: Constrains the execution date to a specific range,” plus the exp claim, per the same document. | authorization.decision | Recomputation of whether a decision was taken while the mandate was still live, with MANDATE_LIVENESS_RECOMPUTE deriving liveness rather than reading it off the body. |
| Delegation of Mandates between Shopping Agents, which AP2 v0.2 names and then places “outside the scope of the current specification”, per AP2 v0.2. | delegation.attenuation, beside authority.delegation | Mechanical attenuation comparisons over a supplied chain: ceilings non increasing, expiries non extending, categories a subset, depth strictly decreasing. |
“The agent_pk is included as a confirmation claim to sender-constrain the Mandate usage,” per the AP2 flows document. | admission.binding | Byte identical subject commitments across an admission credential and one conduct receipt, with the conduct at or after admission and inside a signed maximum separation. |
| “Shopping Agents MUST NOT present any subsequent open Payment or Checkout Mandates without receiving a rejection receipt from the previous one,” and the related double spend rule in the flows, per AP2 v0.2 and the flows. | mandate.crossacceptor | A recomputed distinct acceptor count, dispersion class and cumulative relation across a window, with no acceptor identity disclosed. It answers spread, which a per mandate rule cannot see. |
| “The User now leaves the session, having delegated the shopping task to the Shopping Agent,” the human not present flow, per the flows document. | effect.quiescence | A deterministic absence finding over a channel roster committed before the interval opened. When nobody is watching, the useful claim is that nothing happened, and that claim needs its own object. |
| “The Mandate selection mechanism is outside the scope of this specification,” per AP2 v0.2. | authority.qualification | Containment and ordering over a grant, an entitlement source the granting party held, and a qualification record. It says whether the granter held what it granted, which is upstream of which mandate got picked. |
What this mapping deliberately does not claim. It is a scope comparison, not a quality comparison. AP2 verifies what it was built to verify and it does that well, and several of the rows above exist only because the specification was honest enough to write the words “outside the scope” instead of hand waving. A protocol cannot appoint its own referee. AP2 did not try to, and that restraint is the reason a separate object is coherent rather than redundant.
Before anything downstream is worth checking, one thing has to be true: the party who granted the authority actually held it. On a card this is soft, because a bad grant unwinds through the scheme. On a push it is hard, because a transfer under a grant nobody was entitled to make is still a completed transfer. Two runs below, and the second one is the interesting one.
Three artifacts go in. A grant, an entitlement source the granting party claims to hold, and a qualification record. SCOPE_CONTAINMENT and QUANTITY_CONTAINMENT check that the grant fits inside the entitlement, ENTITLEMENT_INTERVAL_ORDER checks the timing, and QUALIFICATION_RECOMPUTE derives the class rather than reading it. QUALIFICATION_PRECEDENCE requires the qualification record to have been committed in the right order, so nobody produces the paperwork after the fact.
Run the unqualified case. It returns valid true with a class of unqualified, because the granter granted more than its own entitlement source supported. A valid true receipt saying the grant was bad is the more useful of the two outcomes, and it is the one that is hard to get from any party with a stake in the grant standing up.
QUALIFIER_DISJOINT is the gate that carries the independence claim. The qualifier cannot be the granting party. That is enforced in the verifier rather than promised in a sales deck.
What it does not prove, in plain words. It does not say the entitlement source is genuine, accurate, current, or lawfully obtained. It does not say the qualifier is competent or free of conflict in fact. A class of qualified does not make the grant valid, enforceable or binding, and does not authorize the grantee to act. The boundary, verbatim from the schema. This receipt attests only that a named grant, a named entitlement source held by the granting party, and a named qualification record satisfy the stated deterministic containment and ordering procedure over disclosed commitments. It does not establish that the entitlement source is genuine, accurate, current, lawfully obtained, or sufficient under any contract, mandate, charter, licence, regulation, or statute. It does not establish that the qualifier is competent, diligent, independent in fact, or free of conflict. A qualification of qualified does not make the grant valid, enforceable, or binding, does not ratify the grant, and does not authorize the grantee to act. A qualification of unqualified does not make the grant void, does not establish fault, breach, negligence, or bad faith, and does not allocate risk, responsibility, liability, loss, or remedy. This receipt decides no contractual, statutory, regulatory, evidentiary, or legal consequence, and it authorizes no action, payment, sanction, denial, or remedy.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
AP2 v0.2 names agent to agent delegation and then says it is “outside the scope of the current specification”, per the spec. That is the right call for a protocol at v0.2. It also means that when an assistant hands a task to a specialist agent, nothing in the protocol checks that the second hop is smaller than the first. This receipt does exactly that check and nothing else.
Four comparisons carry the meaning, and they are all mechanical. ATTENUATION_CEILING_NONINCREASING says no hop raised the amount ceiling. ATTENUATION_EXPIRY_NONEXTENDING says no hop pushed the expiry out. ATTENUATION_CATEGORY_SUBSET says no hop added a category the parent did not have. ATTENUATION_DEPTH_STRICT_DECREASING says the remaining depth went down every time. Then ACTION_CEILING_WITHIN_FINAL_LINK, ACTION_TIME_WITHIN_FINAL_TERM and ACTION_CATEGORY_MEMBER check the action that actually happened against the last link in the chain.
Category names travel as commitments, not as strings. The receipt can say an action was inside a permitted category without revealing which category, which matters when the chain crosses an institutional boundary and neither side wants to publish its taxonomy.
The conforms run below is the positive case. Note what it costs to fake: to widen an authority mid chain and still verify, you would need the parent link to have been signed with the wider ceiling in the first place, which puts the evidence right back where it belongs.
What it does not prove, in plain words. It does not say the root authority is valid, that a grantor was entitled to delegate, or that the supplied chain is complete or exclusive. It cannot decide whether authority exists outside the chain it was handed. It does not say the action occurred, was authorized, lawful, effective, paid, settled, or accepted. The boundary, verbatim from the schema. This receipt attests only that the supplied delegation links and supplied action assertion satisfy the stated mechanical attenuation comparisons at verification. It does not attest that the root authority is valid, that a grantor is entitled to delegate, that the supplied chain is complete or exclusive, that any linked credential is the one an acceptor uses, that an action occurs, that the action is authorized, lawful, effective, enforceable, paid, settled, or accepted, that any party has knowledge or notice, that a category name is revealed, or that any person bears responsibility, loss, harm, fault, or liability. It cannot decide whether authority exists outside the supplied chain, whether a missing link exists, whether an action is proper, or whether an external rule permits it.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
A signed mandate proves what was said. It does not tell you whether what was said can be checked against an outcome. “Book me something sensible” is a perfectly good instruction to a human and a useless one to a verifier. On a card, that gap surfaces as a dispute. On an account to account push, it surfaces as a transfer that already happened. This receipt classifies the gap in advance.
The operator declares the kinds of predicate its committed instruction contained. Not the text, kinds, carried as keyed pseudonyms. The service classifies each kind against a published ruleset and recomputes a verifiability_class of machine_checkable, partially_checkable, subjective or unclassifiable. VERIFIABILITY_CLASS_RECOMPUTE derives the class, and mint refuses to sign a body that arrives with the class already filled in.
RULESET_PRECEDENCE is the gate that makes it worth anything. The ruleset digest has to have been committed at or before the instant the instruction was fixed. If the ruleset came later, the receipt gets a precedence_class of ruleset_follows_intent and fails closed. That cuts both ways on purpose, which is the point of an independent instrument.
Run subjective and then unclassified. The first says nothing in the instruction could be machine checked. The second returns valid true with a class of unclassifiable, because the precommitted ruleset never named one of the declared kinds. That second one is the receipt declining to guess, and it is the state a careful reader looks for first. The service never receives the instruction text, and NO_INTENT_CONTENT_LEAK is a gate rather than a policy.
What it does not prove, in plain words. It does not say the instruction was reasonable or that the customer understood it. It does not say the declared predicate kinds are complete or honestly declared, and it does not say these are the predicates a court or a regulator would think mattered. It decides no dispute and entitles nobody to rely on the class. The boundary, verbatim from the schema. This receipt attests only that a named observer recomputed a verifiability class from the declared predicate kinds of one committed intent, against a classification ruleset whose digest was committed at or before the intent was fixed. It does not attest that the intent was reasonable, that the Card Member understood it, that the declared predicate kinds are complete or honestly declared, that the predicates are the ones a court or regulator would consider material, that any claim is payable or deniable, or that any party is entitled to rely on the class. This service does not read the intent text and never receives it.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
One note on the boundary text printed above. It uses the phrase Card Member, because this schema was first written for a card issuer context and the boundary constant is reproduced here byte for byte rather than edited to suit the reader. The mechanics are indifferent to the rail. Editing a published boundary to look better on a partner page would defeat the only reason a boundary is worth printing.
AP2 sender constrains a mandate with an agent_pk confirmation claim, per the flows document. That answers which key is presenting. A month later the question is narrower and harder: whether the agent that moved money is the agent that was admitted to your gateway, and whether the gap between admission and conduct was inside a bound somebody signed in advance.
Two artifacts go in. One admission credential, and one receipt of something the agent did. Both are reduced to a subject commitment under a single salt the credential itself already committed to, and SUBJECT_COMMITMENTS_IDENTICAL wants those two commitments byte identical. TEMPORAL_RELATION then checks the conduct happened at or after the admission and inside a maximum separation signed in advance, so a credential cannot be stretched over conduct it was never meant to cover.
Neither identifier appears in the signed body. The receipt travels to a merchant, a scheme or a counterparty institution without naming the agent, the operator, or the customer. Both sides can recompute the same answer from the same two artifacts, and neither has to open its detection stack to the other.
What it does not prove, in plain words. It does not say the credential was validly issued or that the admitting party was entitled to admit. It does not say the conduct occurred or that the conduct was allowed. It ties two artifacts to one subject and puts them in order, and that is all. The boundary, verbatim from the schema. This receipt attests only that a supplied admission credential and one supplied conduct receipt yield byte identical subject commitments under one disclosed binding salt that the admission credential already commits to, and that the extracted conduct instant is at or after the stated admission instant and within the signed maximum separation. It does not attest that the admission credential is validly issued, that any admitting party is entitled to admit, that either identifier is true, that the subject is a person or entity of any asserted kind, that the conduct occurred, or that the conduct is authorized. It does not decide authenticity beyond the checked signatures and stated verification class, completeness of records, actual knowledge, intent, fault, fraud, contractual effect, legal effect, regulatory effect, eligibility, title, responsibility, liability, or any dispute. It does not authorize admission, access, conduct, a transaction, credential presentation, disclosure, or reliance by any party. It does not establish that either source artifact is complete, exclusive, current, unrevoked, unaltered before receipt, or truthful. It cannot decide whether an absent conduct receipt exists, whether another admission credential exists, whether the admitting party relied on the credential, whether the conduct service observed all conduct, or whether any party knew of the other artifact.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
AP2 Payment Mandates carry an execution date range and an exp claim, per the Payment Mandate document. So a mandate has a lifetime, and a decision taken outside that lifetime is a different kind of error from a decision taken inside it. This receipt records which one happened, recomputed, at the instant of the decision. The revoked run is the one to read.
MANDATE_LIVENESS_RECOMPUTE derives whether the mandate was live at the decision instant instead of accepting a flag. CONSTRAINT_EVALUATION_RECOMPUTE and DECISION_RELATION_RECOMPUTE derive the per constraint results and the relation between them and the stated decision. If a body claims approved where the recomputation says otherwise, the relation gate is what catches it.
The three runs below are the three outcomes an operator actually needs to distinguish afterwards. approved, the decision was inside a live mandate. declined, the request asked for more than the mandate allowed and was refused. revoked, the mandate had already been pulled when the decision was taken. On a push flow the third one is the expensive case, because the transfer it produced has no Recall reason attached to it.
NO_CARDHOLDER_IDENTITY_LEAK is a gate, and OBSERVER_ROLE_DECLARED forces the signer to state the role it observed from. The amount travels as a commitment, so the receipt can be handed across an institutional boundary without disclosing the figure.
What it does not prove, in plain words. It does not say the goods or services were delivered, that the customer intended the purchase, that the merchant is legitimate, that funds settled, or that any party outside the named observer agrees with the finding. The boundary, verbatim from the schema. This receipt attests only that a named observer recomputed the stated authorization decision from the supplied confidential evidence at the stated instant. It does not attest that the underlying goods or services were delivered, that the cardholder intended the purchase, that the merchant is legitimate, that funds settled, that the issuer honored the decision, or that any party outside the named observer agrees with the finding.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Here is the sentence that matters, said as plainly as it can be said. AP2 gives you the signed mandate. This receipt is the signed determination that a transaction stayed inside it, produced by a party with no stake in the answer. Those are two different objects. The second one does not replace the first, cannot exist without it, and is only worth having because of who signs it. The second run below hands in a receipt that calls a breach a pass, and the verifier returns valid false.
The amount, the currency, the timing and the scope of one transaction are compared against the constraints of one authority receipt, and MANDATE_PRECEDES_TRANSACTION requires that authority to have been signed before the transaction was authorised. CONFORMANCE_RECOMPUTE and OUTCOME_RECOMPUTE then derive the per constraint results and the overall outcome rather than accepting them. That is what the fail run demonstrates: a body whose declared result is pass where the recomputed result is fail does not verify, and the failed gate is printed on screen.
Why the signer matters more here than anywhere else on the page. AP2 states that the Payment Mandate is “verified by the Credential Provider, Network, and Merchant Payment Processor,” per the specification. Every one of those parties is inside the transaction. Their verification is correct and it is also self interested, and on a rail with no reversal, self interested is the property that eventually gets challenged. A non party signer produces the same arithmetic with that objection removed.
NO_PAN is a gate and there is no account identifier field either. The check runs on commitments and constraint terms, so it sits beside the payment flow rather than inside it, and it never becomes a place where customer credentials live.
What it does not prove, in plain words. It does not attest that the customer granted the delegation, that the declared agent identity is genuine, or that the transaction was authorised or settled by any scheme. It is not a payment authorisation. It does not deny, resolve or adjudicate any dispute, and it does not limit any right a consumer holds under any reimbursement rule. It evaluates one transaction against a per transaction constraint and evaluates no cumulative spend or velocity limit, which is the reason the next instrument exists. The boundary, verbatim from the schema. This receipt attests that the named transaction's amount, currency, timing and scope were compared against the constraints of one specific delegated authority receipt that was signed before the transaction was authorised, and that the outcome was recomputed by this service from that comparison rather than supplied by the caller. It does not attest that the cardholder granted the delegation, that the declared agent identity is genuine, that the transaction was authorised or settled by any network, that goods or services were delivered, or that the displayed terms digest corresponds to anything a person actually read. It is not a payment authorisation and carries no cardholder credential. No card network, issuer, or regulator currently recognises this receipt as authentication data, as compelling evidence, or as a liability shift, and it does not create one. It does not deny, resolve, adjudicate or affect any dispute, and it does not limit any right a consumer holds under Regulation E, Regulation Z, or any equivalent rule. This receipt evaluates one transaction against a per transaction constraint and does not evaluate cumulative spend, transaction velocity, or any aggregate limit across multiple transactions under the same mandate, so a series of individually conforming transactions may still exceed a spending intent this receipt cannot see. It evaluates the delegated authority receipt as supplied and inherits that receipt's revocation limitation, so it does not attest that the mandate was still unrevoked at the moment the transaction was authorised.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Every check above is per transaction. Run a mandate as forty small transfers to forty different acceptors and every single one passes. You are the party who sees that pattern first, because you sit across many acceptors rather than one storefront. This receipt measures spread and cumulative position across a window without naming a single acceptor.
Acceptors travel as keyed pseudonyms derived under a window salt the receipt committed to. DISTINCT_ACCEPTOR_COUNT_RECOMPUTE and DISPERSION_CLASS_RECOMPUTE derive the count and the shape, CUMULATIVE_RELATION_RECOMPUTE derives whether the accumulated position stayed inside the declared constraint, and WINDOW_CONTINUITY plus WINDOW_PREDECESSOR_INTEGRITY chain windows so a period cannot be quietly skipped.
NO_ACCEPTOR_IDENTITY_LEAK is a gate. The window salt, the acceptor identities, the contribution multiset, the exact dispersion ratio and the accumulated amount are all withheld. What comes out is a class and a relation, which is enough for a counterparty to act on and not enough for it to reconstruct your book.
The breached run returns valid true with a cumulative relation that went past the mandate. Read that alongside the AP2 rule that Shopping Agents “MUST NOT present any subsequent open Payment or Checkout Mandates without receiving a rejection receipt from the previous one,” per the specification. That rule governs one agent’s sequencing. This receipt measures what actually accumulated.
What it does not prove, in plain words. It does not say every action under the authority reached the issuing service, that every acceptor reported, or that a non reporting acceptor was inactive. It does not say the declared expected acceptor population is complete or that any acceptors are unrelated. It is not an authorization control and does not prevent, block, reverse, delay or validate an underlying action. The boundary, verbatim from the schema. This receipt attests only that the issuing service, for the declared authority grouping and accounting window, receives the contribution and coverage evidence it describes, verifies the stated keyed pseudonym derivations under a committed window salt, recomputes the stated distinct acceptor count, dispersion class, commitments, cumulative relation, and coverage class, and signs that limited result. It does not attest that every action under the authority reaches the issuing service, that every acceptor reports, that a nonreporting acceptor is inactive, that the declared expected acceptor population is complete, that any acceptors are legally or institutionally unrelated, or that any pseudonym reveals an acceptor identity. It does not disclose the window salt, acceptor identities, contribution multiset, checked action count, exact dispersion ratio, cumulative constraint, or accumulated amount. It is not an authorization control and does not prevent, block, reverse, delay, ratify, or validate an underlying action. It does not decide whether an action, authority, constraint, report, acceptor, or actor is valid, authorized, proper, compliant, enforceable, or lawful. It does not deny, resolve, adjudicate, or affect any dispute or right.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
AP2 has no revocation mechanism. That is not a criticism, it is what reading the specification and the flows document shows. But pulling authority from a running agent is a real operational event, and the interesting part is not the pull, it is the window between the pull and the moment every downstream component has heard about it. This receipt classifies one action against that window.
A named action, a named revocation, and a propagation bound that was committed before any of it happened. PROPAGATION_COMMITMENT_MATCH and PRECOMMITMENT_ORDER enforce that ordering, so the bound cannot be widened after an awkward action shows up. CLASSIFICATION_RECOMPUTE derives the class. CLOCK_CONSERVATISM resolves ambiguous timing against the party asserting the favourable reading, rather than in its favour.
Run before and then after. The first is an action that ran while the authority was still good. The second is an action that ran once the pull had been given its committed time to propagate, and there is no honest reading of that one that excuses it. NOTIFICATION_EVIDENCE_CANDOUR is worth noting: evidence of notification records only its stated class, and the schema refuses to let that be read as proof anyone received, read, or understood it.
What it does not prove, in plain words. It does not say the revocation was authorized, delivered, valid, or effective as a matter of contract or law. It does not say the action was authorized, unauthorized, excused, ratified or wrongful. A class of within_propagation_bound does not excuse the action and allocates no fault, liability, loss or remedy. The boundary, verbatim from the schema. This receipt attests only that a named action, a named revocation, and a precommitted propagation bound satisfy the stated deterministic temporal classification procedure. It does not establish that the revocation is authorized, delivered, valid, enforceable, or effective as a matter of contract or law. It does not establish that the action is authorized, unauthorized, excused, ratified, wrongful, binding, or ineffective. A class of within_propagation_bound does not excuse the action and does not allocate risk, fault, responsibility, liability, loss, or remedy. Notification evidence records only the stated evidence class and does not establish that an actor receives, reads, understands, or has actual knowledge of revocation. This receipt does not decide any contractual, statutory, regulatory, evidentiary, or legal consequence, and it does not authorize any action, payment, sanction, denial, or remedy.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Revoking authority is only worth something if you can show that nothing then happened. Proving a negative is the hardest claim on this page, and this receipt does it the only honest way: by fixing the list of channels before the interval opens, and then requiring continuity anchors from each of them. It closes the loop that authority.revocation opens.
ROSTER_PRECOMMITMENT_ORDER requires the channel roster to have been committed before the interval opened, which is what stops anyone quietly dropping the channel where the effect actually landed. OPENING_ANCHOR_PRECEDENCE, CLOSING_ANCHOR_LAG, CHAIN_CONTINUITY and GAP_BOUND then require an unbroken chain of anchors per channel across the whole interval, so an unobserved stretch shows up as a gap rather than as silence.
Run quiescent and then effect. The second returns valid true and reports that something did land. A quiescence instrument that could only ever say yes would be worthless, and the schema is blunt about the residual limit: a verdict of quiescent means only that no effect was admitted on the committed channels, as reported by the anchoring parties.
This is the natural object for the AP2 human not present flow, where “The User now leaves the session, having delegated the shopping task to the Shopping Agent,” per the flows document. When nobody is watching for an hour, the claim worth signing is that the hour was uneventful.
What it does not prove, in plain words. It does not say the roster enumerates every channel through which an effect could occur, that the anchoring parties are complete, honest or diligent, or that no effect occurred outside the committed roster or the covered interval. It proves absence within a fence that somebody drew, and it makes you look at who drew the fence. The boundary, verbatim from the schema. This receipt attests only that a named authority, a channel roster committed before the interval opened, and a set of per channel continuity anchors satisfy the stated deterministic absence procedure over the named closed interval. A verdict of quiescent means only that no effect was admitted on the committed channels within the covered interval as reported by the anchoring parties. It does not establish that the roster enumerates every channel through which an effect could occur, that the anchoring parties are complete, honest, or diligent, or that no effect occurred outside the committed roster, outside the covered interval, or through an unreported path. It does not establish that any authority was suspended, revoked, exhausted, dormant, or unused as a matter of contract or law, and it does not establish quiescence of intent, capability, or obligation. A verdict of effect_observed does not establish that the effect was unauthorized, wrongful, or in breach. This receipt decides no contractual, statutory, regulatory, evidentiary, or legal consequence, allocates no risk, fault, responsibility, liability, loss, or remedy, and authorizes no action, payment, sanction, denial, or remedy.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Two adjacent canon entries are worth naming here even though they have no demo on this page, because they are the other half of this spine. authority.delegation carries the delegated authority chain that mandate.conformance reads, and effect.closure closes an effect rather than proving its absence. Both are deployed in production and both appear in the canon cross reference at the bottom of this page, where their schema and state are stated in full. They are listed rather than demonstrated because the published example bodies this page runs from do not include a case for either one, and inventing a case to fill the gap would make the demos less honest, not more.
Every receipt above tries to make a determination while a payment can still be stopped. The two below do not. They run after a loss, and on an account to account push that means after a transfer that one party can initiate a Recall on, for three reasons, once, and the other party can refuse. Nothing here reverses anything.
They are on this page for one specific reason. The UK reimbursement regime is not a reversal mechanism, it is a fault and allocation mechanism: the sending institution reimburses, then takes 50% from the receiving institution, with exceptions for first party fraud and gross negligence, per PSR PS25/5. That is a recomputable question with money attached, and it is currently answered by two institutions arguing from their own records. So these two earn their place. They just do not lead.
It allocates a loss among four roles, principal, agent_operator, acceptor and issuer, by recomputing which party’s own precommitted constraint the observed facts violated. It does not weigh blame, read intent, or decide a dispute. It checks whose stated rule the facts broke, and it says nothing when the answer is not there.
A precommitment only counts if it was committed strictly before the loss instant. PRECOMMITMENT_PRECEDENCE computes a precedence_class of all_precommitments_precede_loss or some_precommitments_follow_loss from the timestamps rather than trusting the field. So nobody writes a rule after the loss and points at it. Not the agent platform, not the merchant, and not the institution holding the exposure.
Run hindsight and watch it come back naming nobody, because the precommitments in that body post date the loss. That is the behaviour that makes the object usable in front of a counterparty institution or a regulator, since the first thing either of them looks for is the case where it guessed. And note the signer again: an attribution signed by one of the two institutions splitting a reimbursement is an argument, and the same arithmetic signed by a non party is something the other side has to answer.
What it does not prove, in plain words. It does not say the loss occurred, that the observations are complete, that any party acted with intent, that any legal duty was breached, or that any amount is owed. It cannot bring money back and nothing on this page suggests it can. The boundary, verbatim from the schema. This receipt attests only that a named observer recomputed which precommitted constraints the supplied observations violated, and which parties had made those precommitments before the loss instant. It does not attest that the loss occurred, that the observations are complete, that any party acted with intent, that any legal duty was breached, or that any amount is owed.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
This maps an attribution outcome to a settlement position between two named parties, using an allocation table whose digest was committed before the loss. It is the object a bilateral agreement gets written against. On its own it moves no money, and the second run below is the one that shows it refusing to.
ALLOCATION_PRECEDENCE requires the table digest to predate the loss instant, ATTRIBUTION_LINK and ATTRIBUTION_INTEGRITY bind it to a specific fault attribution, and SETTLEMENT_POSITION_RECOMPUTE derives the position rather than reading it. The outcome keys are ordinary: a single party position, a shared position, or none.
Run respondent and then none. The second is built on an indeterminate attribution and maps to no position at all. An allocation instrument that always produces an answer is just a coin flip with a signature on it, and the none outcome is the reason this one is not that.
What it does not prove, in plain words. It does not say any amount is owed, that any party will pay, that the allocation table is enforceable, or that any contract exists between the named parties. Whether the recomputed position entitles anyone to payment is decided solely by the parties’ own agreement. The boundary, verbatim from the schema. This receipt attests only that a named observer recomputed a settlement position between two named parties from one named fault attribution outcome and a precommitted allocation table whose digest was committed before the loss instant. It does not attest that any amount is owed, that any party will pay, that the allocation table is enforceable, or that any contract exists between the named parties. Whether the recomputed position entitles anyone to payment is decided solely by the parties' own agreement.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Account to account settlement puts two institutions holding two records of the same movement. When those records disagree, somebody has to open a book, and neither side wants to. This receipt compares two committed digests at a named cursor and a named instant and reports whether they match, without either side disclosing a position, a balance, or an account identifier. The second run hands in a disagreement relabelled as a match and comes back valid false.
Each side commits a keyed digest over the same declared field list, signed by a distinct registered attestor key. ATTESTOR_KEY_DISTINCTNESS and ATTESTOR_QUORUM enforce that they really are two parties, TIME_ANCHOR_DRIFT_BOUND and OBSERVATION_WINDOW_TOLERANCE bound how far apart the two observations may be, and COMMITMENT_EQUALITY_RECOMPUTE derives the comparison. NO_RAW_STATE_LEAK is a gate.
When the books genuinely disagree, the receipt says so and names no winner, because it cannot know which record is right without read access it deliberately does not have. That limit is in the boundary text, printed below, in the schema’s own words.
What it does not prove, in plain words. It does not disclose any position, balance, holder identity or account identifier. It does not say either committed digest is a correct digest of the record it names, because confirming that needs read access this receipt does not confer. It does not decide which record is correct when the two disagree. The boundary, verbatim from the schema. This receipt attests that two named records, each observed at a named cursor and at a named instant, and each committed by a distinct registered attestor key to a keyed digest computed over the same declared list of fields, produced the comparison outcome that this service recomputed from those two committed digests and those two instants against the declared window tolerance. It does not disclose any position, balance, holder identity, or account identifier. It does not attest that either committed digest is a correct digest of the record it names, because confirming that requires read access which this receipt does not confer. It does not decide which record is correct when the two records diverge, assigns no fault to either operator, does not decide whether the underlying settlement, transfer, or register update was proper, and does not effect or reverse any settlement. A window_exceeded outcome records only that the two observations were too far apart for the comparison to be decisive.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Nothing has run yet. Click Run it and the answer below comes back from the verifier, not from this page.
Every run on this page posts a request body from this domain to https://thehiveryiq.com/v1 plus the route shown above each block, and prints what came back. The example receipts are signed with published example keys, so verify reports key_trust example_registry. That is deliberate. Nothing here is a production issuance, a customer record, or an endorsement. Patent Pending.
Agentic volume is small today. Any instrument that only pays off once it gets large is a bet, and you would be right to price it as one. Most of these are not that. The account to account problem this page is about is a property of the rail, not of the agent, and you shipped that rail in September 2025 across the UK, Austria, Belgium, Croatia, Finland, France, Greece, Germany, Ireland, Italy, Lithuania, the Netherlands, Portugal, Spain.
| Receipt | What it does with no agent anywhere in the picture | Why that is true |
|---|---|---|
| ledger.parity | Ordinary settlement and funding reconciliation between two institutions, compared at a named cursor without either side opening a book. | The word mandate does not appear in this schema, and the only string containing agent is the record kind transfer_agent_register, which is a securities register. |
| authority.qualification | Any delegated authority a business customer grants to an employee, a bookkeeper, or a subsidiary. Did the granting entity hold what it granted. | The schema is written over a grant, an entitlement source and a qualification record. None of the three has anything to do with agents. |
| authority.revocation | Any access or mandate withdrawal where the propagation window matters. Offboarding, a revoked standing instruction, a withdrawn open banking consent. | It classifies one action against one revocation and one committed propagation bound. The actor can be a person, a service, or a batch job. |
| mandate.crossacceptor | Spend spread across many merchants under one corporate authority, measured without naming any of them. | The acceptors are pseudonyms under a window salt. Nothing in the schema requires the spender to be software. |
| fault.attribution | An ordinary APP reimbursement argument between a sending and a receiving institution over a 50:50 split. | Four roles are allowed and none of them is required. party_count runs from 2 to 4 and agent_operator is one option, not a condition. |
One precise caveat, because it would be easy to overstate this. The published example bodies behind several runs on this page are agentic commerce demonstrations and do contain an agent party. The claim above is about what the deployed schemas require, which is what a reader can check for themselves against the schema links on every card. Two of the rows, ledger.parity and authority.qualification, you can confirm straight from the demo output, because those bodies carry no agent field of any kind.
So the position is simple. This earns something on the bank to bank volume you run today, and it is already installed on the day agentic volume gets large. Your own framing of why the rail matters, from the September announcement: Pay by Bank “ensures funds are received in real-time, improving cash flow,” per revolut.com. Real time funds are exactly the case where an after the fact evidence layer arrives too late.
Twelve receipt types is a lot to read. The install is not, and the way it installs is the reason this is cheap to try and cheap to stop. For a bank, that is the only part of an evaluation that actually matters.
Hive sits next to your gateway and your controls, not inside them. Minting and verifying are ordinary HTTP calls to a service outside your loop, the verifier makes no outbound call of its own, and nothing in it sits between an instruction and a transfer. The evidence is emitted beside the event, so the payment never waits on the receipt.
If Hive is slow, if Hive is down, or if you rip Hive out, authorisation and settlement complete exactly as they do today. Nothing declines because of Hive. A receipt that never got written stays visibly missing rather than getting backfilled later. Receipts you already hold keep verifying offline against the published key, with no call to us.
Every verify route on this page is open and unauthenticated. No token to request, no signup, no invoice. The envelope form, the canonical bytes and the schemas are published, so a merchant, a counterparty institution or a regulator holding one receipt can check it on a laptop with an Ed25519 library and no network.
Two kinds of failing, pointed in opposite directions on purpose. The deployment fails open, because Hive is not standing in the way of a transfer. The instrument fails closed: when a constraint was written after the loss, when a declared result does not match the recomputed one, or when two clocks overlap too much to order, the receipt returns indeterminate or refuses to verify. Scroll up and watch it. The hindsight run names nobody, the none run maps to no position, and the two fail runs come back valid false with the gate that stopped them printed on screen.
Taking it out leaves nothing to unwind. No shim in the authorisation path, no policy to restore, no settlement dependency to migrate, because Hive never held any of them. What you keep is every receipt you already collected, and those verify without us. That is the honest version of a low switching cost. It cuts against us and it is still the right way to build this.
Signing details, since your team will ask. Ed25519 plus ML-DSA-65 under FIPS 204, with a 1952 byte public key and a 3309 byte signature, over RFC 8785 JCS canonical bytes. Verification runs in single digit milliseconds. All methods Patent Pending.
What this section does not claim. It describes where the software sits and how it behaves when it is absent. It says nothing about anything Revolut has built, bought or deployed, and it is not a claim that any of this is running anywhere near you.
You did not adopt AP2, you contributed to it, and specifically for the rail with the least reversal underneath it. That puts you in an unusual position: the institution most exposed to the gap is also one of the few able to define what fills it.
Signed proof of what the user instructed, per Google Cloud. Hive does not restate this and could not improve it. Every instrument on this page takes a mandate reference as an input rather than trying to be one.
The spec assigns mandate verification to the Merchant, the Credential Provider, the Network and the Merchant Payment Processor, per AP2 v0.2. All of them are parties. That is a sensible protocol design and it leaves independent recomputation unclaimed.
You told merchants Pay by Bank means “the risk of fraud and chargebacks is drastically reduced”, per revolut.com. True, and it also means the evidence has to be earlier. The rail sets the deadline. It does not produce the finding.
One initiator, three reasons, one attempt, and a counterparty allowed to refuse, per EPC 2025. Scheme rules define the recovery window. They do not say whether an action was inside its authority.
Reimburse in five business days, split 50:50, two exceptions, per PSR PS25/5. It allocates cost between institutions. It supplies no recomputable input for the allocation, which is what fault.attribution is.
An independent verification layer the work above deliberately leaves open, because a protocol cannot appoint its own referee. Small objects with a fixed non party signer role and a published boundary. Free to verify, offline, against a published key, with no account.
And the timing is yours rather than ours. Tara Brady, President, Google Cloud EMEA, on the same announcement: “Together, Revolut and Google are transforming digital commerce for millions of users in the European Economic Area (EEA) and the UK,” per the January 19, 2026 release. An evidence layer is cheap to add while a flow is being defined and expensive to retrofit onto one that is carrying volume.
Point one sandbox agent at it, in shadow. Your own keys, your own sandbox, nothing in the money path, whatever slice of an agentic test flow you are comfortable with. Mint the receipts beside the transactions you are already running. Nothing about it can decline a payment, delay a transfer, or change a Recall outcome, because it is not standing anywhere near any of those.
Then hold the receipts against your own logs. Take a week of sandbox agent runs where you know what the agent did, and check whether the conformance findings the verifier recomputes match what your own systems concluded, and whether the cases it returns indeterminate are the cases that were genuinely ambiguous. If it disagrees with your systems more than it agrees, you lost a sprint and you keep every receipt.
If it agrees, Revolut is the first institution on an account to account agentic rail that can hand a merchant, an agent platform, or a counterparty bank a determination nobody has to take your word for. On a rail where the money does not come back, that is the difference between an argument and a record.
Nothing in the money path. Nothing to unwind if you stop. Every receipt you collect stays yours and stays checkable either way.
Fourteen entries, in the order they appear above. Twelve of them have a live run on this page. Two, the delegated authority chain and the effect closure receipt, are listed without a demo because the published example bodies carry no case for either one. Each link opens that entry in the canon implementation explorer, where its schema, verify route, auth requirement, benchmark and implementation state are stated in full. The state shown here is read from the same registry file the explorer renders from, so the two cannot drift apart. Nothing here implies a customer, a deployment or an endorsement.