# Visa TAP · Integra

> The agent’s payer signature covers a field holding the ATR hash.

URL: https://integraledger.com/protocols/visa-tap

Protocol

## Visa TAP

Trusted Agent Protocol

The agent’s payer signature covers a field holding the ATR hash. [Source: lcp docs: agentic checkouts⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/guides/checkouts.md)

The Trusted Agent Protocol is a Visa project. [Source: LCP §13⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#13-references) Integra is not affiliated; we read their published interfaces.

**Sources (1)**

[lcp docs: agentic checkouts⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/guides/checkouts.md)

[The protocol’s own site⁠ (opens in a new tab)](https://developer.visa.com/capabilities/trusted-agent-protocol) [The standard’s illustration of this protocol (LCP §C.6)⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#c6-visa-tap-trusted-agent-protocol)

### What it is

The Trusted Agent Protocol is a framework for agent-initiated transactions on HTTP Message Signatures (RFC 9421), with signatures establishing the agent’s identity, the consumer’s identity and the payment authorization. [Source: LCP §C.6⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#c6-visa-tap-trusted-agent-protocol)

**Sources (1)**

[LCP §C.6⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#c6-visa-tap-trusted-agent-protocol)

### Where the ATR hash rides

The signature the agent sends with the payment covers the ATR hash.

#### The standard

The agent sends the ATR hash in an `lcp-hash` field and lists that field among the covered components of every `agent-payer-auth` signature it sends, so the payer signature the seller verifies covers it. [Source: lcp docs: agentic checkouts⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/guides/checkouts.md)

The package classes this placement as a protocol extension (LCP §8.3.6): TAP publishes no extension registry, so covering the field is an arrangement between the agent and the seller rather than a filing. [Source: LCP §C.6⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#c6-visa-tap-trusted-agent-protocol) · [Source: lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md)

The card authorization itself does not carry the ATR hash. [Source: lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md)

### What a payment through it proves

Each pairing’s record states what a payment through it shows, and what it does not, in the package’s own words. These are read from the package when the site is built. [Source: lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md)

Of these 1 pairings, 1 have the buyer’s signature cover the ATR hash, 0 leave a public proof of it, and 0 let anyone read it back from the chain alone. [Source: lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md)

Switch to Technical to see each pairing, and the sentence its record states about what a payment through it proves.

**Sources (1)**

[lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md)

#### The standard

- **`card/visa-tap` Protocol Extension Buyer signs H: yes H on chain: no Public proof: no Recoverable from chain: no**

  Pattern: [Protocol Extension (LCP §8.3.6)⁠ (opens in a new tab)](https://github.com/legal-context-protocol/legal-context-protocol/blob/c8df26d/spec/legal-context-protocol-v1.md#836-protocol-extension)

  What a payment through it proves: Before this payment, the buyer signed and paid an agreement transaction carrying this ATR's hash on \<network>, recorded in \<transaction>. The buyer's agent sent this ATR's hash in the lcp-hash field and listed that field among the covered components of every TAP agent-payer-auth message signature in the request. The seller checked that listing and did not verify a signature here, which belongs to its TAP recognition step. The card authorization itself does not carry the hash. This does not show that amount, payee or timing match the ATR's content.

  LCP profile: [card/visa-tap⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/lcp/profiles/card-visa-tap.md)

Where a sentence names `<network>` and `<transaction>`, the pairing’s record fills them in: they name the agreement payment the buyer made first. [Source: lcp docs: pairings reference⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/reference/pairings.md) · [Source: lcp docs: the agreement URL⁠ (opens in a new tab)](https://github.com/IntegraLedger/integra-protocol/blob/66274bf/docs/concepts/buyer-gate.md#the-agreement-url)

### The rails it settles on

- [Card networks](https://integraledger.com/rails/card)
