Janus · Automated Disputes
Money, quietly
leaking.
Every day, delivery platforms charge restaurants for orders that went wrong — and most of those charges are never challenged. This is the story of the machine that challenges them.
The problem
The customer gets a refund.
The restaurant gets the bill.
When a delivery order goes wrong — a missing item, the wrong item, a quality complaint — DoorDash or Uber Eats refunds the customer and charges the restaurant for it. These are error charges. Many are wrong, exaggerated, or perfectly disputable.
But clawing the money back means logging into every platform's portal, finding every charge, and filing each dispute before a deadline — across dozens or hundreds of outlets. Nobody has the time.
So the money is silently written off.
Enter Janus
An automated disputes engine that recovers that money at scale — safely.
In one line: it signs in like a human would, finds every disputable charge, decides which ones are actually worth fighting, files them with a human-sounding explanation and evidence, and tracks whether the money came back.
A business opts in, picks its platforms,
and four keys fall into place.
A delegated login
Not their password — they never hand it over. The business invites an identity we mint into their portal, as a team member on their own account. We provision and run that account; its password is ours — generated by us, sealed with AES-256-GCM the moment it exists, never plaintext, never logged. Session cookies get the same treatment.
The code channels
One-time codes by email land in a dedicated alias inbox we mint — one real mailbox, a unique alias per account. Codes by SMS land on a dedicated phone number we assign per business. Both are read by machine — logins complete without a person watching an inbox or a phone.
The invitation
The invitation itself is the authorization: the business admits our identity into their portal and switches the account on. Until both have happened, nothing is filed in their name.
The store mapping
Which of their outlets on each platform correspond to which real-world locations — joined on the platform's own restaurant ID, so every charge, tracked to the cent, lands against the right store.
Janus signs into the portal.
The twist is the verification code.
Code arrives by email
Janus reads it automatically from the dedicated alias inbox and carries on — a timestamp guard rejects any code older than the login that asked for it. No human ever sees it.
Code arrives by SMS
It lands on a dedicated number assigned to the business and is read automatically — the message's origin verified, the code matched to the login that asked for it by number and time, and spent exactly once. After the first success the device becomes trusted, and future logins are smooth.
Whether a login gets challenged is decided per account — does it have a phone or 2-step verification enrolled — not because the device is new. A brand-new machine can walk straight in on password alone, if the account has no 2FA.
Every order carrying an error charge, read and measured.
Janus scans the store's activity and pulls out each order that carries an error charge. For every one of them, it learns exactly three things — the three facts that make a dispute possible.
Can this charge actually be disputed at all?
The money on the table for this charge.
The last day a dispute will still be accepted.
It does not dispute everything.
That's the point.
Every filing spends something scarce — on one platform, headroom under a tripwire; on the other, one of a handful of monthly slots. Volume is a trap either way.
expected value = amount × odds of winning
So Janus ranks every charge by expected value and files only the best. The odds are no guess — they come from a model trained on the store's own record: how many disputes are already in flight, how much budget is left, whether it's on a losing streak. Every verdict re-tunes it, and every month-end the win-rates are re-measured.
Charges ranked by expected value · file the best, not the most
The odds are computed from the store's complete dispute history — including the ones the merchant filed by hand. Off a partial view, the model once promised a 93% win worth ~$104; rebuilt from the full record it read 15% and ~$10 — and the real outcome, zero for six, sat exactly where the honest model said it would.
Written to sound human.
Reviewed before it's filed.
Each dispute goes in with a reason, evidence, and a short appeal written by a language model to read like a busy owner typed it — natural, direct, unpolished. It's drafted the moment a charge is detected, so a person can review it long before anything goes live — and a plain template stands in if the model ever falters.
Real submissions sit behind three independent switches — global, per-business, per-store — every one off by default. And there are no pretend filings: off means Janus scans and drafts but files nothing; on means a real submission or nothing at all.
“We packed and sealed this order ourselves before handoff. Every item on the receipt was checked and included — the missing-item claim doesn’t match what left our kitchen. Happy to share the prep record for this order.”
— written the moment the charge appeared, ready for human eyes before anything is filed.
Every dispute is followed
until the money answers back.
Janus polls every filed dispute every few hours — and any pending one can be re-checked on demand. A win means money recovered — credited back to the restaurant. And then it reports, so the business sees exactly what came home.
The charge is reversed. Money recovered, back to the restaurant.
The platform held its ground — and Janus's win-rate model just got smarter.
Still with the platform. Janus keeps checking until there's an answer.
The fork in the road
Two platforms,
two personalities.
The lifecycle is the same. The mechanics are not. Pick a door — you can switch or come back to this fork at any time.
or keep scrolling — the road runs through both
Platform one
DoorDash
the two-step fortress.
A corporate-style sign-in, a captcha you never see, and no monthly quota — just a tripwire: file too fast, and a store loses the right to file at all. Here's how Janus works the red door.
The door
Who gets challenged?
The account decides. Not the device.
DoorDash runs a corporate-style sign-in. Many accounts get in on password alone. Others hit a 2-step verification wall. The difference isn't where you're logging in from — it's what the account has enrolled.
Straight through
Even from a completely fresh browser — no history, no trust — password alone was enough.
Pushed to the wall
The same flow, a different account — and the platform demanded a code by SMS.
DoorDash screens every read and every write behind Cloudflare plus a rotating in-page key — a bare scripted request is turned away with an HTTP 418: “I'm a teapot.” So Janus lives inside a real, signed-in browser, re-discovers the key after every deploy, and alarms the moment it stops matching.
When a code is needed
You can ask for email.
The account overrules you.
DoorDash decides the delivery channel — the account's own settings control it, and they override whatever you request. Ask for email, and an SMS-only account still gets SMS. So Janus reads back which channel the platform actually chose, and routes there.
Read automatically
The code lands in the dedicated alias inbox and Janus lifts it out on its own. No hands, no waiting.
Also read automatically
The code lands on a dedicated number assigned to the business, arrives over a signature-verified line, is matched to the very login that asked — right number, right moment — and is spent exactly once. No person watches a phone.
Five wrong codes and the account locks for 30 minutes. Janus treats every attempt as precious. Once verified, the device is trusted — and the wall stays down.
The only time a person is asked for anything: an SMS-only account that was never assigned a number — a setup gap, not a step in the flow.
A side door
The magic link —
charming, but not a way in.
DoorDash also offers a passwordless sign-in: click a link sent by email — good for about a day — and you're in. No password, no code.
Finding the charges
Fourteen days.
Then the door closes.
Same sweep as Uber Eats — but on harder ground. Every DoorDash read rides inside a warm, logged-in browser, carrying the invisible att-key pass. No shortcut over the wire.
And not every charge fights alike — missing-item claims win ~90%, wrong-item ~25%, quality barely 15% — which shapes what Janus files next.
The pace
No monthly quota.
A tripwire — and nobody says where.
File too fast and the whole store is locked out of disputing — high-value charges included. So Janus paces the way the internet paces an unknown pipe: grow gently while it holds, retreat hard the instant it trips — filings spaced 20–45 unpredictable minutes apart, never a machine-gun burst.
Grow while it's quiet
Start at a burst of six. Every clean run earns two more, up to about twelve.
Trip → halve
The moment a store trips the threshold: the burst is cut in half and everything holds for 3–4 days.
Twice burned → a week off
Two blocks inside a fortnight and the store rests a full week. Patience is cheaper than a lockout.
Before each burst, a costless read asks whether the store may still dispute — a blocked write is never the first signal. And a charge running out of time — three days left, ten dollars or more — jumps the queue.
Filing — a two-step handshake
First, prove you're human.
Without a single click.
Before accepting a dispute, DoorDash demands proof of humanity — Cloudflare Turnstile, running in “managed” mode. On Janus's warm, logged-in browser it solves itself in the background: no image grid, no traffic lights, no puzzle at all.
Ask DoorDash to open a dispute; it answers with a challenge, not a form.
The invisible Turnstile challenge stands between Janus and the submit.
It auto-solves mid-handshake, minting an ~800-character pass that lives barely five minutes.
The dispute goes in: amount, per-item reason, the written appeal, evidence files.
Two calls. One captcha. No clicks.
And if the gate ever changes shape, Janus fails closed — no token, no submit, no guessing.
The verdict
Three ways a red dispute
comes home.
Won
The error charge is reversed — money recovered for the restaurant.
Lost
DoorDash upheld the charge. The outcome feeds the win-rate model.
Pending
Filed and waiting. Janus keeps polling until it resolves.
Every outcome is surfaced back to the business — nothing disappears into the portal.
Platform two
Uber Eats
the fast lane.
A door where the server chooses your next step, a cold start that handles itself, and a filing flow with no captcha wall at all. The green track moves quicker.
The door
You type the email.
The server picks the next screen.
Uber Eats runs an identifier-first sign-in. You enter the email — and only then does the server decide what comes next: a password screen, or a one-time email code.
A new, cold device typically triggers the email code — and Janus reads that code automatically from the shared alias inbox. So even the very first login on a brand-new machine is completely hands-off. And the sign-in is the only part that needs a browser at all — once the session exists, every read runs as plain, fast HTTP.
Finding the charges
Read the ledger,
surface the leaks.
One sweep, entirely over the wire — no browser needed past the front door. Janus walks the order ledger, opens every charged order, and turns each real error charge into one clean, reviewable row.
Uber Eats prints no deadline — but a dispute filed after the order's calendar month tends to be declined. Month-end is the real wall, so every row carries the month it belongs to.
Spending the slots
Two or three slots a month —
and the biggest charge hasn't happened yet.
Spend the slots on day one and you can't bid on the $80 charge that lands on day twenty. So Janus holds a bar that only the exceptional clear early — and lets it fall as the month runs out. The lesson isn't “file early.” It's spend your few slots on the biggest charges the month will produce.
A slot is spent only on a charge too big to gamble against the future.
Fewer days left means less future to protect — the threshold slides down daily.
Whatever budget remains goes to the best charges still standing. No slot dies unused.
Where was the wall, really? Each month's answer re-budgets the next.
It smooths to about two filings a day — and a win followed by two straight denials is read as the wall itself: stop, keep the powder dry, start fresh next month.
Filing
One action.
No wall in front of it.
Uber Eats is refreshingly direct: filing is a single “submit dispute” action carrying the reason, the same human-sounding appeal, and the evidence. No handshake, no challenge, no wall in front of it.
No captcha wall.
Nothing like DoorDash's handshake.
One honest footnote: this last mile is still being finalized — and the safety rule already covers it. Live filing stays off by default, and Janus never fakes a success: until the real submission is wired end-to-end, it files nothing, and says so.
The verdict
Same scoreboard,
same payoff.
Won
Money recovered — credited back to the restaurant.
Lost
Held by the platform — and fed back into the win-rate model.
Pending
Janus keeps polling until the answer lands.
Every status is followed through to a final answer, and every answer is reported back.
Under the hood
Built to run beside the product,
never in its way.
Daily scheduled jobs on a dedicated worker with its own queue — so heavy browser automation never starves the product it serves.
DoorDash and Uber Eats are interchangeable handlers behind a single contract. A third platform is an addition, not surgery.
Janus writes straight into the product's existing disputes dashboard. No copying, no syncing — recoveries simply appear where merchants already look.
Credentials and session cookies are encrypted with AES-256-GCM at rest — keys never logged, never in an audit trail. Every filing job is idempotent: a retry can never file the same dispute twice, and a dispute never moves backwards.
The payoff
While you run the restaurant, Janus runs the claims.
On a quiet schedule, it logs in, scans, ranks, files the ones worth fighting, and banks the wins — turning a pile of ignored error charges into recovered revenue. Across every outlet. On both platforms. End to end, hands off — no one watching an inbox, no one relaying a code.
The money was always yours.
Janus just goes and gets it back.