-
-
From one photo, Mandat reads the problem, finds a repair shop and checks its AI agent.
-
Just say it: Mandat listens, answers out loud in a few words and keeps working.
-
A new scooter approved in one tap and paid with PayPal, inside the mission budget.
-
Every payment has a receipt with its PayPal order and authorization.
-
Real products from three retailers, with photos. The cancelled repair was refunded.
-
A week in San Francisco, booked day by day from verified merchants.
-
Split to the cent: each friend gets an itemised PayPal invoice with a QR code.
-
Every errand is a mission with its own budget.
-
Activity: paid, held, still to pay and budget left, like a bank statement.
-
AG Studio dashboard: where the money goes, with an assistant you can ask.
-
Bryntum agenda: every booking and delivery. Drag one to ask the merchant to move it.
-
Your rules: three autonomy levels, daily and monthly limits, one switch to stop everything.
-
One PayPal mandate, signed once on the sandbox, revocable anytime.
-
Installs on the home screen like an app.
Inspiration
Everyone has a list of errands that take an evening: book the restaurant, find a gift that will actually please an eight-year-old, get the scooter fixed, sort out the outfits for a gala. AI agents can already do the research. What stops people from letting them finish the job is the money. Either the agent can't pay, so you do the last ten steps yourself, or it gets a card with no real limit and no record of what it did.
We wanted an agent you could hand a budget to the way you'd hand it to a trusted assistant: here is what I want, here is what I can spend, tell me when it's done.
What it does
You write or say what you need ("Dinner for 4 in Paris on Friday, 200 € max, and a ride home") and, optionally, attach a photo. Mandat:
- asks only what it must (two or three questions with tap answers), then works on its own;
- searches real places and real products: Google Places and OpenStreetMap for venues, Channel3 for products from 25,000+ retailers, with the photos checked against the need before anything is suggested;
- negotiates with merchants' AI agents (availability, group discounts, counter-offers) after checking each agent's signed identity card ("Know Your Agent");
- sends simple booking requests to small merchants with no AI: they accept, propose another time or decline with one tap;
- holds deposits with PayPal instead of charging them: an authorization on the saved PayPal account, captured only when the merchant confirms, voided if plans change, refunded if needed;
- keeps every mission inside its budget envelope, at the level of autonomy you chose (ask before every payment, pay small deposits alone, or full autopilot inside the budget), with a daily limit and one switch that freezes everything;
- remembers what matters: sizes and style for you and the people you shop for, allergies, your usual address, and the facts of each mission ("6 people", "I already have my suit"), so it never contradicts what you said;
- splits the bill to the cent and sends each friend a detailed PayPal invoice with a QR code.
Everything lands in two views: Activity, a bank-statement view of every payment with a receipt for each and an AG Studio dashboard you can question ("where did my money go this month?"), and Agenda, a Bryntum calendar of every booking. Drag a booking to another time and Mandat asks the merchant to move it: same booking, nothing paid twice.
How we built it
- PayPal is the core. Every call goes through the official PayPal Server SDK (
@paypal/paypal-server-sdk, generated by APIMatic): Vault v3 to save the PayPal account once (the signed mandate), Orders v2 withintent: AUTHORIZEpaid with the vault token for deposits, then capture, void and refund through the Payments API. Every operation carries its ownPayPal-Request-Id, reused on retries, so a lost connection can never pay twice. The bill shares are real PayPal invoices created through the official PayPal Agent Toolkit (@paypal/agent-toolkit). We wrote this part with the APIMatic Context Plugin for the PayPal SDK installed in our coding assistant, which kept the SDK calls exact. - The agent is a tool-calling loop with 30 tools (search, inspect a place, quote, negotiate, request a booking, hold, void, refund, move a booking, buy a product, save sizes, split a bill, close a mission; capture runs in code once the merchant confirms). The model proposes; the code decides. Amounts are recomputed by code, every payment is checked against the envelope and the limits before PayPal is called, and a fact sheet kept by code is injected at every turn so the agent can't drift on numbers or dates.
- Channel3 provides product search; the agent looks at the product photos with a vision model and drops what doesn't fit.
- AG Studio (AG Grid) powers the Activity dashboard. Its agent framework runs on our own model through a small server adapter, with a custom tool that reads the books exactly as the app computes them.
- Bryntum Calendar powers the Agenda, with drag-to-reschedule wired to the agent.
- Node.js and Express on Render, plain HTML/CSS/JS as an installable PWA, Web Push for the moments that need you, Google speech-to-text and a neural voice for talking to it, data mirrored to Cloudflare R2.
Tools we used, and how
- PayPal Server SDK (
@paypal/paypal-server-sdk2.5): Vault v3 setup and payment tokens (the signed mandate), Orders v2AUTHORIZEpaid with the vault token (deposits held, not charged), Payments API capture, void and refund. Idempotent with onePayPal-Request-Idper operation. - PayPal Agent Toolkit (
@paypal/agent-toolkit): bill splits as real, detailed PayPal invoices with a pay link and a QR code. - APIMatic: the PayPal Server SDK is APIMatic-generated, and we built the PayPal layer with APIMatic's Context Plugin for that SDK in our coding assistant.
- AG Grid / AG Studio: the Activity dashboard (spending by category, committed per mission, every payment in a grid) and its built-in agent, which runs on our model through a server adapter and reads the books through a custom tool.
- Bryntum Calendar: the Agenda of every dated booking and estimated delivery; dragging an event asks Mandat to move the booking with the merchant.
- Channel3: real product search across online retailers; Mandat checks the product photos with a vision model before offering two options.
- Render: hosting of the live demo (free web service, Blueprint in the repo).
- DeepSeek: the agent's reasoning, tool calls and photo reading.
- Google Places, Speech-to-Text and Chirp 3 HD voice; OpenStreetMap and MapLibre; Cloudflare R2: real places and photos, voice in and out, maps and transit, durable storage.
Challenges we ran into
- Money that is right to the cent, every time. Language models round, forget and contradict themselves. We moved every calculation into code, made the code rewrite any answer whose numbers don't match the books, and kept a fact sheet the agent cannot override.
- Rescheduling without paying twice. Moving a booking first created a second one. We redesigned it so a move is a request on the existing booking, which only changes once the merchant agrees.
- Idempotency with PayPal. Retries after a timeout must return the same order and the same authorization, never a new one. One request id per operation, reused on every retry, solved it.
- Never paying twice, never asking twice. A retried request could ask the user to approve the same deposit again. Now one approval stays open per supplier, a payment already made can't be made again, and approvals the plan no longer needs are closed on their own.
- Reading a brand from a photo. The vision model sometimes guessed a brand from the shape. Mandat now reads the name printed on the item five times and keeps the majority spelling, and never names a brand it did not read.
- Product search across markets. A national catalogue was too thin for some products, so the search follows the mission's currency and checks photos before suggesting anything.
Accomplishments that we're proud of
- A full money cycle on the PayPal sandbox: mandate, hold, capture, void, refund, invoices, all through PayPal's official SDK and Agent Toolkit.
- Merchants without any AI can still take part with one tap, which is how most small shops would actually meet an agent.
- It works in English and French, by text, voice or photo, in any city.
What we learned
Trust in an agent comes from limits you can see: a budget per mission, deposits that are held rather than spent, and a record of every movement. The PayPal primitives (vault, authorization, capture, void) map almost one to one onto how people already trust a human assistant with money.
What's next for Mandat
Real merchant onboarding through SMS and email booking requests, PayPal's agent payment flows as they open up, and shared missions where a group plans and pays together.
Built With
- ag-grid
- ag-studio
- apimatic
- bryntum
- channel3
- cloudflare-r2
- css3
- deepseek
- express.js
- google-cloud-speech-to-text
- google-cloud-text-to-speech
- google-places
- html5
- javascript
- maplibre
- node.js
- openstreetmap
- paypal
- paypal-agent-toolkit
- paypal-invoices
- paypal-orders-v2
- paypal-server-sdk
- paypal-vault
- pwa
- render
Log in or sign up for Devpost to join the conversation.