Skip to content
Integra Agentic Connectors

The agreement step

Where the payment carries no public proof of the hash, a nominal payment that carries it comes first.

Some pairings' payments carry no public proof of H: on a card payment, nothing the buyer signs carries it. For such a pairing a seller can configure the agreement step: before the full payment, the buyer's agent pays a nominal amount in a payment whose signed payload carries H. That agreement payment is the public proof, and it is on record before the payment it covers.

The pairings whose publicProof is "no" are marked in the pairings reference.

How it runs

sequenceDiagram
    participant C as Connector
    participant D as Seller door
    participant B as Buyer's agent
    C->>D: issue
    D-->>C: atrHash, link, carriers, agreement {url, network, pairing}
    C->>B: the carriers, with agreement.url beside them
    B->>D: pays agreement.url (a nominal payment carrying H)
    C->>D: status
    D-->>C: agreement.state recorded
    C->>B: the full payment may start
    C->>D: report the full payment
  1. issue answers with agreement: {url, network, pairing}. The URL is on the tenant's host, at /agreement/<atrHash>.
  2. Place agreement.url where the buyer's agent can see it, beside the carriers:
    • on MPP, as opaque.legalContextAgreementUrl;
    • elsewhere, as legalContextAgreementUrl beside legalContextUrl, or the protocol's own place beside the link.
  3. The buyer's agent pays the nominal amount at agreement.url, on agreement.network, with the agreement's pairing, in a payment whose signed payload carries H.
  4. Read status until agreement.state is recorded. Until then, claim answers 409 claim/agreement-first.
  5. Take the full payment, and claim or report it as its pairing needs.

Never start or accept the full payment before the agreement is recorded.

What the record states

Once the agreement is recorded, the record's proves.pattern.proves names it: its network and its transaction take the places of <network> and <transaction> in the pairing's sentence. The sentences are in the pairings reference.

A payment before the agreement

A payment reported before the agreement is recorded has moved, so it is recorded. Its record states what is missing (vector CV10):

before-agreement.ts
import type { RecordView } from "@integraledger/agentic-connectors";
import {  } from "@integraledger/agentic-connectors";

const  = .. ?? "https://seller.example/door";
const  = .. ?? "";
const  = { : `Bearer ${}`, "content-type": "application/json" };

const [, ] = ["CV10"]!.;
await (`${}/issue`, { : "POST", , : .(!..) });
const  = await (`${}/report`, { : "POST", , : .(!..) });
const  = (await .()) as RecordView;
.(., ., .?., ..);
.(..?.);
200 paid required seller-report
No agreement was recorded before this payment; nothing public carries this ATR's hash.
Edit on GitHub

Last updated on

On this page