Inspiration

AI agents can already search, compare and decide for us. At checkout they stop, because nobody has solved how an agent should spend money safely. I kept asking one question: if my agent agrees on a price, what stops it from overspending, and who gets to say no?

Tender is my answer. Agents negotiate, a human stays in control of big decisions, and PayPal moves the money.

What it does

Tender is a control room where buyer and seller agents, each with its own wallet and spending policy, negotiate and settle deals through PayPal.

  • Everyday shopping: The Pantry Butler agent contacts two competing grocery sellers, haggles with each, picks the cheapest offer and settles it.
  • Land and cars: An "Acquisitions Concierge" buyer negotiates with two land brokers or two car dealers. The arguments fit the category: title, zoning and frontage for land, mileage and warranty for cars. They trade offers over several rounds until they agree on a price, and the cheaper seller wins.
  • Human approval: Each agent has a per-transaction cap, a daily cap, a category allow-list and an approval threshold. A six-figure purchase pauses in an Approvals Queue, and no money moves until a person clicks Approve.
  • Payouts: A manager agent gets paid, then automatically splits the revenue among subcontractors with one PayPal Payouts batch.
  • Live dashboard: There are 9 agents, a real-time ledger, an activity feed, pending approvals and spend analytics. Every deal opens into its full negotiation transcript.

How I built it

  • Frontend: React, Vite and Tailwind, with Server-Sent Events so the dashboard updates live as agents negotiate.
  • Backend: Node.js and Express, with Prisma on SQLite.
  • PayPal: The Orders API v2 creates each purchase, and the Payouts API v1 pays sellers and splits revenue. Authentication is OAuth 2.0 client credentials against the PayPal Sandbox. A single environment variable, TENDER_MODE, switches between a safe mock mode and live sandbox.
  • Negotiation engine: It's deterministic by default, so demos are reliable. If you add a Groq or OpenRouter key, the same agents negotiate with a live LLM.
  • Deployment: Both services run on Render from a single blueprint.

Challenges I ran into

  • Making the haggling sound human: My first version was just numbers going back and forth. A buyer that cites closing costs and a broker that defends clean title read much more convincingly, so I made the dialogue depend on the category.
  • Keeping money moves safe: Letting agents spend autonomously is risky. I had to design the order of policy checks and approval so settlement can never happen before a human signs off.
  • Real-time state: Approvals, ledger rows and activity feed items all had to stay in sync over SSE. Pending and settled states were tricky to keep consistent.
  • Free-tier cold starts: The API sleeps when idle, which made demos and recording awkward until I learned to wake it first.
  • Recording the demo: The ledger and detail drawer are interactive, so automating clean screenshots and video took more trial and error than I expected.

Accomplishments that I'm proud of

  • Two agents negotiating over land and cars, with reasoning that reads like a real conversation
  • A human-in-the-loop flow where agents handle the work and people keep the final say
  • Using both the PayPal Orders and Payouts APIs, so Tender covers buying and paying out
  • A live, deployed demo that anyone can try right now

What I learned

  • Trust is the real blocker for agent payments, not intelligence. Caps, allow-lists and approvals matter as much as the AI.
  • Building to PayPal's sandbox APIs, with a mock mode alongside, made development and demos much faster.
  • Streaming updates make agent behavior far easier to understand and trust than a finished result alone.

What's next

  • Plug into real storefronts such as Shopify and WooCommerce, using the merchant's existing PayPal account
  • Add dispute handling and refunds
  • Add per-agent budgets that reset on a schedule, and richer analytics
  • Test with live sandbox flows end to end, then move toward production review

Built With

Share this project:

Updates

Submission history