Consent patterns for agent commerce.
Agent builders need a clean stop point before checkout, negotiation, booking, or contact sharing. Nexez uses a compact approval object so agents can render the exact action, terms, risk notes, and approval buttons before anything real happens.
Approval required
nexez.buyer-approval.v1
Seller
Nexez Agent Negotiation Lab
AI Agent Negotiation Sprint - $2,500
Budget
USD 2100
Timeline
next week
Before I send this
I will share your proposal terms and contact details with the seller. No payment starts from this step.
Action gates
Approval changes by action.
The copy should name the seller, the offer, what information is being sent, and the next side effect.
Checkout
open_checkout
Approve checkout handoff
Use when an agent will open a payment, booking, or checkout URL for a specific offer.
Negotiation
submit_negotiation
Approve negotiation submission
Use when an agent will send proposed terms, budget, timeline, or buyer contact to a seller.
Contact
share_contact
Approve contact sharing
Use when an agent will share email, phone, company details, location, or custom buyer context.
Booking
book_service
Approve booking request
Use when an agent will reserve a time, request availability, or start a scheduling workflow.
Renderer rules
Dry run first. Ask before action.
The approval card is the boundary between analysis and action. A buyer agent can search, compare, and validate safely, then pause for a clear approve or cancel decision.
Dry-run validation can happen before approval.
Opening checkout requires approval.
Submitting negotiation terms requires approval.
Sharing contact or location requires approval.
Booking or reserving time requires approval.
Agents should show the exact next action and destination.
Schema
`nexez.buyer-approval.v1`
This object is intentionally small enough for chat UIs, voice agents, mobile buyer apps, and tool runners. It pairs machine-readable fields with buyer-facing copy.
schema_version
Stable object version for agent renderers.
action_type
The side effect the buyer is approving.
seller
Name, public URL, website, and location.
offer
Offer key, title, price, summary, and checkout URL.
proposal
Budget, timeline, buyer request, and contact-sharing status.
dry_run
Validation result from checkout or negotiation endpoint.
risk_notes
Short warnings the agent should not hide.
buyer_copy
Human-facing title, body, question, and button labels.
approval.json
schema / dry-run / buyer copy
{
"schema_version": "nexez.buyer-approval.v1",
"requires_buyer_approval": true,
"action_type": "submit_negotiation",
"seller": {
"name": "Nexez Agent Negotiation Lab",
"slug": "nexez-agent-negotiation-lab",
"public_url": "https://nexez.app/nexez-agent-negotiation-lab",
"website_url": "https://nexez.ai/agents",
"location": "Remote - worldwide"
},
"offer": {
"key": "services-0",
"name": "AI Agent Negotiation Sprint",
"price": "$2,500",
"summary": "A focused service package for agent-readable offers and smart negotiation routing.",
"checkout_url": "https://nexez.app/checkout/nexez-agent-negotiation-lab?offer=services-0"
},
"proposal": {
"query": "Buyer wants a one-week agent negotiation sprint.",
"budget": "USD 2100",
"timeline": "next week",
"requested_terms": {
"scope": "Discovery call, offer review, and dry-run guidance."
},
"contact_shared": true
},
"dry_run": {
"ok": true,
"dryRun": true,
"rulesEvaluation": {
"decision": "auto_accept",
"reasons": [
"meets_pricing_rules"
]
}
},
"risk_notes": [
"No money should move before the buyer approves.",
"No buyer contact details should be sent before approval.",
"Dry-run validation is safe; real checkout, booking, contact, or negotiation submission is not."
],
"buyer_copy": {
"title": "Nexez Agent Negotiation Lab - AI Agent Negotiation Sprint",
"body": "I found AI Agent Negotiation Sprint from Nexez Agent Negotiation Lab at $2,500. I can send this proposal to the seller using your budget (USD 2100) and timeline (next week).",
"confirmation_question": "Do you approve this proposal submission?",
"approve_label": "Approve negotiation submission",
"cancel_label": "Cancel"
}
}buyer-approval.ts
validate / render / wait
import { createNexezClient } from '@nexez/agent-sdk'
const nexez = createNexezClient({ buyerAgent: 'buyer-agent' })
const dryRun = await nexez.validateNegotiation({
slug: 'nexez-agent-negotiation-lab',
offer: 'services-0',
query: 'Buyer wants a one-week agent negotiation sprint.',
budget: 'USD 2100',
timeline: 'next week',
contact: 'buyer@example.com',
})
const approval = {
schema_version: 'nexez.buyer-approval.v1',
requires_buyer_approval: true,
action_type: 'submit_negotiation',
dry_run: dryRun,
buyer_copy: {
title: 'AI Agent Negotiation Sprint',
body: 'I can send this proposal using your budget and timeline.',
confirmation_question: 'Do you approve this proposal submission?',
approve_label: 'Approve negotiation submission',
cancel_label: 'Cancel',
},
}
// Render approval.buyer_copy and wait for explicit buyer approval.
// Only after approval:
// await nexez.submitNegotiation(proposal)Examples
Copy the approval boundary.
The repository includes TypeScript and Python examples that produce the approval object, stop by default, and only continue after a real buyer approval event.