Codex × Dots
Codex meets payouts.
Dotex gives Codex controlled access to Dots. Ask Codex to find a payee, prepare a payout, inspect transfers, manage payout links, or handle repetitive payout operations without giving the agent unrestricted access to your money.
Also works with other compatible agent and MCP clients.
Live example
The agent prepares. You approve.
Read operations run freely. Anything that moves money stops at an approval card with the full payload in plain sight.
Send Alex $250
I found Alex in your Dots account. I've prepared a $250 payout. This action moves funds, so it requires your approval before it can be submitted.
Approve Payout?
- Recipient
- Alex
- Amount
- $250.00
- Method
- Dots
- Status
- Requires approval
Capabilities
A controlled account for your agent.
Find payees
Search users in your Dots account by name, email, or external ID.
Prepare payouts
Draft a transfer with amount, method, and memo — never send it.
Inspect transfers
Read-only access to transfer history, status, and failures.
Payout links
Generate and expire payout links under approval rules.
Scoped keys
Per-agent credentials with explicit read and write scopes.
Full audit trail
Every agent action logged with prompt, payload, and approver.
Inside the app
Wallet, skills, approvals, activity.
| Request | Agent | Amount | Status |
|---|---|---|---|
| Payout · Alex Rivera | codex-main | $250.00 | Requires approval |
| Payout · Mina Osei | codex-main | $1,120.00 | Approved |
| Payout link · Contractors | codex-ops | — | Approved |
| Payout · J. Alvarez | codex-ops | $85.00 | Declined |
Open source
Open source. Open ecosystem.
Dotex is extended through skills — small, declarative packages that give Codex new Dots capabilities. Each skill declares its scopes and which actions require human approval, so adding capability never means widening trust.
export default defineSkill({
id: "dots-payouts",
title: "Dots Payouts",
description: "Prepare and manage payouts with Dots.",
category: "payments",
skills: [
createPayout({ requiresApproval: true }),
listTransfers({ readOnly: true }),
findPayee({ readOnly: true }),
createPayoutLink({ requiresApproval: true }),
],
});