Financial intelligence for AI: manage balances, transactions, payments, and more
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a bank account to the user's saved accounts. For EU: provide IBAN (and optionally BIC). For US: provide accountNumber, routingNumber, and accountType (CHECKING or SAVINGS). US banks support ACH transfers only. Bank capability is verified before saving.
Country code (e.g. 'US', 'DE', 'FR')
Account holder last name
Account holder first name
BIC/SWIFT code (optional for EU)
IBAN for European bank accounts
US account type
US bank account number
US ACH routing number
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add a bank account to the user's saved accounts. For EU: provide IBAN (and optionally BIC). For US: provide accountNumber, routingNumber, and accountType (CHECKING or SAVINGS). US banks support ACH transfers only. Bank capability is verified before saving.
| Argument | Type | Description |
|---|---|---|
| bic | string | BIC/SWIFT code (optional for EU) |
| iban | string | IBAN for European bank accounts |
| country* | string | Country code (e.g. 'US', 'DE', 'FR') |
| lastName* | string | Account holder last name |
| firstName* | string | Account holder first name |
| accountType | string | US account type |
| accountNumber | string | US bank account number |
| routingNumber | string | US ACH routing number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"country",
"firstName",
"lastName"
],
"properties": {
"bic": {
"type": "string",
"description": "BIC/SWIFT code (optional for EU)"
},
"iban": {
"type": "string",
"description": "IBAN for European bank accounts"
},
"country": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Country code (e.g. 'US', 'DE', 'FR')"
},
"lastName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Account holder last name"
},
"firstName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Account holder first name"
},
"accountType": {
"enum": [
"CHECKING",
"SAVINGS"
],
"type": "string",
"description": "US account type"
},
"accountNumber": {
"type": "string",
"description": "US bank account number"
},
"routingNumber": {
"type": "string",
"description": "US ACH routing number"
}
},
"additionalProperties": false
}Register an external (non-Moneda) contact with their details. EU Travel Rule requires first name, last name, and country of residence. At least one wallet address or bank account must be provided. For wallets, the user must confirm Base network USDC/EURC/CHFAU/CADD/MXNB support before saving.
| Argument | Type | Description |
|---|---|---|
| bic | string | BIC/SWIFT code (optional) |
| iban | string | IBAN for EU bank accounts |
| string | Contact's email for automatic payment confirmations (optional) | |
| lastName* | string | Contact's last name (required by EU Travel Rule) |
| firstName* | string | Contact's first name (required by EU Travel Rule) |
| walletName | string | Descriptive name for the wallet |
| accountType | string | US account type |
| bankCountry | string | Bank country code |
| accountNumber | string | US bank account number |
Add a Moneda user to your contacts by their username. If the contact already exists but was deactivated, it will be reactivated.
| Argument | Type | Description |
|---|---|---|
| username* | string | The Moneda username to add (without the @ prefix) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"username"
],
"properties": {
"username": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "The Moneda username to add (without the @ prefix)"
}
},
"additionalProperties": false
}Add or update a personal note on a transaction. Identify the transaction by its transactionHash from get_transactions. Maximum 140 characters.
| Argument | Type | Description |
|---|---|---|
| note* | string | The note to attach (max 140 characters) |
| transactionHash* | string | The transaction hash (from get_transactions output) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"transactionHash",
"note"
],
"properties": {
"note": {
"type": "string",
"maxLength": 140,
"minLength": 1,
"description": "The note to attach (max 140 characters)"
},
"transactionHash": {
"type": "string",
"description": "The transaction hash (from get_transactions output)"
}
},
"additionalProperties": false
}Add a crypto wallet to the user's saved external accounts. IMPORTANT: The wallet must support USDC, EURC, CHFAU, CADD, and MXNB on the Base network. Sending other tokens or using other chains will result in permanent loss of funds. The user MUST confirm they understand this before the wallet is saved — set confirmed=true only after explicit user acknowledgment.
| Argument | Type | Description |
|---|---|---|
| confirmed* | boolean | Set to true ONLY after the user has explicitly confirmed the wallet supports USDC/EURC/CHFAU/CADD/MXNB on Base. If false, the tool returns a confirmation prompt instead of saving. |
| walletName* | string | A descriptive name for the wallet (e.g. 'My Coinbase Wallet') |
| walletAddress* | string | The wallet address (0x-prefixed hex, 42 characters) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"walletName",
"walletAddress",
"confirmed"
],
"properties": {
"confirmed": {
"type": "boolean",
"description": "Set to true ONLY after the user has explicitly confirmed the wallet supports USDC/EURC/CHFAU/CADD/MXNB on Base. If false, the tool returns a confirmation prompt instead of saving."
},
"walletName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A descriptive name for the wallet (e.g. 'My Coinbase Wallet')"
},
"walletAddress": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "The wallet address (0x-prefixed hex, 42 characters)"
}
},
"additionalProperties": false
}Execute a payment to an ACTIVE agent session's pinned recipient, within its on-chain spending policy — no per-payment user approval. The recipient and amount must satisfy the session's allowlist and per-execution / per-period caps, and the child Safe must hold enough balance. For safe retries pass a stable idempotencyKey: retrying with the SAME key returns the original transaction instead of double-spending. WITHOUT an idempotencyKey, retries are only de-duplicated within a ~30s window — a delayed retry (e.g. after a bundler/network timeout) could send a second payment. Call get_agent_session first to confirm the session is ACTIVE and check remainingPeriodCap.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount to send, in user-facing units (e.g. '10.00'). Must satisfy the per-execution and remaining per-period caps. |
| currency* | string | Stablecoin denomination — must match the session token. |
| recipient* | string | The crypto recipient address (0x…). Must match the session's pinned recipient. |
| sessionId* | string | The agent session id returned by create_agent_session. |
| idempotencyKey | string | Optional stable key for safe retries. Reuse the SAME key when retrying a payment you're unsure completed (e.g. after a timeout) — the original transaction is returned rather than sending twice. Use a FRESH key for each new payment. If omitted, retries are only de-duplicated within a ~30s window. |
File an unattached receipt against a transaction. A transaction holds at most ONE receipt, so this returns a conflict if another is already attached — detach that one first. Also clears any pending match suggestion, since the user has now decided.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to attach (from list_receipts output). |
| transactionId* | string | Transaction id to attach it to. Resolve this from get_transactions first — this is the internal id, not the transaction hash. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId",
"transactionId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to attach (from list_receipts output)."
},
"transactionId": {
"type": "string",
"format": "uuid",
"description": "Transaction id to attach it to. Resolve this from get_transactions first — this is the internal id, not the transaction hash."
}
},
"additionalProperties": false
}Add or update notes on multiple transactions at once. Accepts up to 25 items. Each item maps a transactionHash to a note (max 140 chars). Returns per-item results. Use with get_transactions hasNote=false to find unannotated transactions first.
| Argument | Type | Description |
|---|---|---|
| items* | array | Array of {transactionHash, note} pairs |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"transactionHash",
"note"
],
"properties": {
"note": {
"type": "string",
"maxLength": 140,
"minLength": 1,
"description": "The note to attach (max 140 characters)"
},
"transactionHash": {
"type": "string",
"description": "The transaction hash (from get_transactions output)"
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1,
"description": "Array of {transactionHash, note} pairs"
}
},
"additionalProperties": false
}Assign spending categories to multiple transactions at once. Accepts up to 25 items. Each item maps a transactionHash to a category. Returns per-item results. Use with get_transactions hasCategory=false to find uncategorized transactions first.
| Argument | Type | Description |
|---|---|---|
| items* | array | Array of {transactionHash, category} pairs |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"transactionHash",
"category"
],
"properties": {
"category": {
"enum": [
"TOP_UP",
"INVESTMENT",
"FRIENDS_FAMILY",
"INTEREST_EARNINGS",
"SUBSCRIPTIONS",
"SERVICES",
"GROCERIES",
"SHOPPING",
"RESTAURANTS",
"TRANSPORT",
"TRAVEL",
"UTILITIES",
"CASH",
"SALARY",
"FUEL",
"EV_CHARGING",
"GAMBLING",
"CHARITY_DONATIONS",
"TAXES",
"INSURANCE",
"HEALTHCARE",
"GENERAL"
],
"type": "string",
"description": "The category to assign"
},
"transactionHash": {
"type": "string",
"description": "The transaction hash (from get_transactions output)"
}
},
"additionalProperties": false
},
"maxItems": 25,
"minItems": 1,
"description": "Array of {transactionHash, category} pairs"
}
},
"additionalProperties": false
}Cancel a crypto conditional order rule: every open repeat (PENDING_ACTIVATION, ARMED, PUBLISHED or WAITING) of the order's rule is cancelled, so passing any repeat's id stops the whole repeating rule. A PUBLISHED order is live in the CoW order book: it is withdrawn on-chain first, then marked CANCELLED; if the withdrawal fails the order stays live and the call errors (retry). Filled, cancelled or expired orders return a conflict error. Confirm with the user before calling.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | Conditional order id (from list_conditional_orders). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"orderId"
],
"properties": {
"orderId": {
"type": "string",
"format": "uuid",
"description": "Conditional order id (from list_conditional_orders)."
}
},
"additionalProperties": false
}Accept the matcher's suggested transaction for a receipt, promoting the soft suggestion to a real attachment. Suggestions exist when the match score was too low to attach automatically — read `suggestedTransactionId` / `suggestedMatchScore` from get_receipt and check the suggestion with the user before confirming.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id carrying the suggestion (from get_receipt). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id carrying the suggestion (from get_receipt)."
}
},
"additionalProperties": false
}Create a scoped autonomous payment session bound to your agent. The user pre-funds a dedicated child Safe and installs an on-chain spending policy (single pinned recipient, per-execution and per-period caps) with a passkey in the Moneda app. After that you can call agent_execute_payment repeatedly within the policy — no per-payment approval. This call does NOT activate the session: it returns a counterfactual child Safe address and an activation deep link the user must open in the Moneda app. Poll get_agent_session until status is ACTIVE before executing.
| Argument | Type | Description |
|---|---|---|
| currency* | string | Stablecoin denomination for the session (USD or EUR). |
| expiresAt | string | Optional ISO-8601 expiry. After this, executions are rejected and the session can no longer be used. |
| recipient* | string | The single crypto recipient address (0x…) pinned for this session. Phase 1 is crypto-to-crypto; every execution must go to this address. |
| fundingAmount | string | Optional initial parent→child funding amount, in user-facing units. The child Safe balance is the hard ceiling on worst-case loss. |
| periodSeconds* | integer | Length of the spending period in seconds (e.g. 86400 for a daily cap). |
| maxAmountPerPeriod* | string | Max total spend per rolling period, in user-facing units (e.g. '100.00'). Must be > 0. |
Create an API key for a script, the CLI, or an integration. Returns the secret ONCE — it cannot be retrieved again, so hand it to the user immediately and tell them to store it somewhere safe. Maximum 10 active keys. The key can only carry scopes this connection already holds, and payment scopes are never available on an API key.
| Argument | Type | Description |
|---|---|---|
| name* | string | What the key is for, e.g. 'monthly export script' |
| scopes* | array | Permissions for the key. Grant the narrowest set that does the job — it is a long-lived credential. |
| expiresInDays | integer | Optional expiry, 1-3650 days. Omit for a key that does not expire. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"scopes"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What the key is for, e.g. 'monthly export script'"
},
"scopes": {
"type": "array",
"items": {
"enum": [
"read:account",
"read:balances",
"read:transactions",
"read:rates",
"read:points",
"read:referrals",
"read:virtual_accounts",
"read:contacts",
"read:settings",
"read:recovery",
"read:passkeys",
"read:external_accounts",
"read:knowledge",
"read:earnings",
"read:spending",
"read:users",
"read:payments",
"read:sub_accounts",
"read:notifications",
"read:receipts",
"read:subscriptions",
"read:scheduled_tx",
"write:profile",
"write:transactions",
"write:external_accounts",
"write:contacts"
],
"type": "string"
},
"description": "Permissions for the key. Grant the narrowest set that does the job — it is a long-lived credential."
},
"expiresInDays": {
"type": "integer",
"maximum": 3650,
"description": "Optional expiry, 1-3650 days. Omit for a key that does not expire.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Permanently delete a receipt and its stored file. This is a HARD delete — the row, its line items, and any Bewirtungsbeleg/Eigenbeleg overlay go with it, and there is no undo and no recycle bin. Confirm with the user before calling. To move a receipt to a different transaction use detach_receipt + attach_receipt instead; deleting loses the extraction.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to delete (from list_receipts output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to delete (from list_receipts output)."
}
},
"additionalProperties": false
}Unlink a receipt from its transaction, leaving the receipt itself intact as an orphan. Use this to correct a wrong match, or to free a transaction so a different receipt can be attached. Does NOT delete anything.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to detach (from list_receipts output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to detach (from list_receipts output)."
}
},
"additionalProperties": false
}Disconnect a connected agent (MCP integration) by id (from list_active_sessions) or by its OAuth client id. Revokes its access immediately. If you disconnect the agent making this call, this connection ends.
| Argument | Type | Description |
|---|---|---|
| serviceId* | string | The connected-agent id from list_active_sessions, or the agent's OAuth client id. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"serviceId"
],
"properties": {
"serviceId": {
"type": "string",
"description": "The connected-agent id from list_active_sessions, or the agent's OAuth client id."
}
},
"additionalProperties": false
}Step 2 of 2 for uploading a local receipt file. Pass the `uploadKey` returned from `request_receipt_upload` AFTER you've executed the `curlCommand` to PUT the file to S3. Validates the staged file, runs OCR + LLM extraction, attempts to auto-match to an existing transaction, and persists line items. Returns `receiptId`, optional `billId` (for invoice-shaped docs), and `matched`/`suggested`/`transactionId`.
| Argument | Type | Description |
|---|---|---|
| uploadKey* | string | The opaque signed key returned by request_receipt_upload. |
| captureSource | string | Provenance label for the audit trail. Defaults to MANUAL_UPLOAD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"uploadKey"
],
"properties": {
"uploadKey": {
"type": "string",
"description": "The opaque signed key returned by request_receipt_upload."
},
"captureSource": {
"enum": [
"MANUAL_UPLOAD",
"EMAIL_FORWARD",
"GMAIL_AUTO_SCAN",
"CAMERA_PROMPT",
"CALENDAR_PROMPT",
"OTHER"
],
"type": "string",
"description": "Provenance label for the audit trail. Defaults to MANUAL_UPLOAD."
}
},
"additionalProperties": false
}Generate a PDF balance statement of your activity (opening/closing balances, transactions with home-currency values, fees, FX rates) for a tax year or date range. Async: returns a requestId immediately — poll get_statement_status until it is READY to get a time-limited download link. Not tax advice.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO-8601 end (exclusive, UTC). Defaults to now; a future date is clamped to now. The period can cover at most 366 days. |
| from | string | ISO-8601 start (inclusive, UTC). Required if `year` is omitted. Not before 2020-01-01. |
| year | integer | Tax year (Jan 1 – Dec 31 UTC). Use this OR from/to, not both. |
| currency | any | Statement filter: USD, EUR, CHF, CAD, MXN or CRYPTO. A currency scopes the statement to that currency's balance and activity (e.g. an 'EUR, June 2026' statement). CRYPTO lists crypto and stock trades; the currency filters leave those out, and an exchange between two currencies is on the statement of both. Omit or null for everything. |
| reportingCurrency | string | Currency the amounts are valued in (USD, EUR, CHF or CAD). Defaults to the `currency` filter when it is one of those, then your account's display currency, then USD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "ISO-8601 end (exclusive, UTC). Defaults to now; a future date is clamped to now. The period can cover at most 366 days."
},
"from": {
"type": "string",
"description": "ISO-8601 start (inclusive, UTC). Required if `year` is omitted. Not before 2020-01-01."
},
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 2020,
"description": "Tax year (Jan 1 – Dec 31 UTC). Use this OR from/to, not both."
},
"currency": {
"anyOf": [
{
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN",
"CRYPTO"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Statement filter: USD, EUR, CHF, CAD, MXN or CRYPTO. A currency scopes the statement to that currency's balance and activity (e.g. an 'EUR, June 2026' statement). CRYPTO lists crypto and stock trades; the currency filters leave those out, and an exchange between two currencies is on the statement of both. Omit or null for everything."
},
"reportingCurrency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD"
],
"type": "string",
"description": "Currency the amounts are valued in (USD, EUR, CHF or CAD). Defaults to the `currency` filter when it is one of those, then your account's display currency, then USD."
}
},
"additionalProperties": false
}Fetch complete account overview in one call: balances, recent transactions (last 7 days), and current APY rates. Use this instead of calling get_balance + get_transactions + get_apy_rates separately.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get one agent session's full detail by id: status, spending policy, remaining period cap, and the 5 most recent executions. Poll this after create_agent_session until status is ACTIVE.
| Argument | Type | Description |
|---|---|---|
| sessionId* | string | The agent session id. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sessionId"
],
"properties": {
"sessionId": {
"type": "string",
"format": "uuid",
"description": "The agent session id."
}
},
"additionalProperties": false
}Get the current APY (Annual Percentage Yield) rates for Moneda earnings products. Morpho Earnings is a DeFi lending vault and YO Smart Earnings is a higher-yield vault. USD and EUR have both Morpho and YO vaults; MXN has a Morpho-only vault (no YO). CHF and CAD are accepted at the parameter boundary for consistency but currently return empty (no yield vault on those currencies yet).
| Argument | Type | Description |
|---|---|---|
| currency | string | Filter by currency (USD, EUR, CHF, CAD, or MXN) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Filter by currency (USD, EUR, CHF, CAD, or MXN)"
}
},
"additionalProperties": false
}Get the user's account balances (USD Account, EUR Account, CHF Account, CAD Account, MXN Account, USD Earnings, EUR Earnings, USD Smart Earnings, EUR Smart Earnings), optionally filtered by currency. CHF, CAD, and MXN rows only appear for users in their staged rollouts (gated by ENABLE_CHFAU, ENABLE_CANADA, and ENABLE_MXNB). Balances are fetched live from the blockchain by default. If blockchain queries fail, returns the latest database snapshot with a notice. Check the 'source' field: 'live' means real-time blockchain data, 'snapshot' means historical data from the last periodic sync. Includes sparkline trend data from recent snapshots and current APY rates for earnings accounts.
| Argument | Type | Description |
|---|---|---|
| currency | string | Filter by currency (USD, EUR, CHF, CAD, or MXN) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Filter by currency (USD, EUR, CHF, CAD, or MXN)"
}
},
"additionalProperties": false
}Fetch balance check data in one call: all account balances, exchange rates, and APY rates. Use this instead of calling get_balance + get_exchange_rate + get_apy_rates separately.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Fetch a single bill by id with full extracted detail — merchant (name, taxId, address), total, currency, due date, invoice number, vendor IBAN/BIC/routing/account, payment status, and a presigned `downloadUrl` valid for ~15 minutes.
| Argument | Type | Description |
|---|---|---|
| billId* | string | Bill id (from list_bills output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"billId"
],
"properties": {
"billId": {
"type": "string",
"format": "uuid",
"description": "Bill id (from list_bills output)."
}
},
"additionalProperties": false
}Get one crypto conditional order by id, with its full status, trigger, amounts and fill details.
| Argument | Type | Description |
|---|---|---|
| orderId* | string | Conditional order id (from list_conditional_orders). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"orderId"
],
"properties": {
"orderId": {
"type": "string",
"format": "uuid",
"description": "Conditional order id (from list_conditional_orders)."
}
},
"additionalProperties": false
}Get the user's contacts: Moneda users they interact with, saved external wallets, and saved bank accounts. Each wallet and bank entry has a contactAccountId field — pass it as the contactAccountId parameter to initiate_payment (transfer_contact_bank / transfer_contact_wallet). Use the contact's username (from the owner field or the username field) as contactUsername.
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of contacts to return (default: 20, max: 50) |
| offset | number | Number of contacts to skip for pagination |
| search | string | Search by username, display name, wallet name, or IBAN |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"maximum": 50,
"minimum": 1,
"description": "Number of contacts to return (default: 20, max: 50)"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Number of contacts to skip for pagination"
},
"search": {
"type": "string",
"description": "Search by username, display name, wallet name, or IBAN"
}
},
"additionalProperties": false
}Get the user's CURRENT subscription plan and how it is billed. Returns hasLiveSubscription, status (TRIALING/PENDING_FIRST_CHARGE/ACTIVE/PAST_DUE/CANCELLED), planType (STANDARD/PREMIUM/ULTRA), billingProvider (ONCHAIN/STRIPE/APP_STORE/PLAY_STORE), billedTo ('balance' | 'card' | 'app_store'; app_store plans are cancelled or changed in the user's Apple or Google account settings, not in Moneda), balanceFundsRenewal (true only for ONCHAIN — a non-zero stablecoin balance is needed for the next renewal; false for STRIPE card plans, where the wallet balance is irrelevant), currency, billingPeriod, periodEnd, cancelledAt. Use this before advising on a low/zero balance: a 0 balance only threatens the subscription when balanceFundsRenewal is true.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get daily spending totals for a stablecoin over a window. Returns one data point per UTC day with non-zero spending. Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO 8601 UTC end of an absolute window |
| from | string | ISO 8601 UTC start of an absolute window |
| period | string | Rolling time window. Mutually exclusive with from/to. |
| currency* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency"
],
"properties": {
"to": {
"type": "string",
"description": "ISO 8601 UTC end of an absolute window"
},
"from": {
"type": "string",
"description": "ISO 8601 UTC start of an absolute window"
},
"period": {
"enum": [
"1d",
"1w",
"1m",
"1y"
],
"type": "string",
"description": "Rolling time window. Mutually exclusive with from/to."
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
}
},
"additionalProperties": false
}Check what the user may currently do with tokenized equities (dShares): whether they can trade, which regulatory jurisdiction they are onboarded under, and — if they cannot trade — the ordered list of reasons why. Call this before proposing any stock purchase so the user is told what to fix rather than hitting a failure at approval time.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}For a US-jurisdiction user, list what is still outstanding before their brokerage account can be opened: missing profile answers, unaccepted disclosures, and whether a taxpayer id is on file. Returns field NAMES and counts only, never the user's answers. Regulatory disclosures and attestations can only be completed by the user in the Moneda app — this tool tells you what to explain and where to send them, it does not let you supply any of it. A non-US user gets an empty, already-complete result.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Fetch earnings overview data in one call: earnings vault balances, APY rates, and recent earnings transactions. Use this instead of calling get_balance + get_apy_rates + get_transactions(typeGroup=earnings) separately.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get a daily time series of earnings and vault balance for a Morpho or YO vault account. Returns up to one year of UTC-day data points (timestamp, earnings, balance) plus totalEarnings and netDeposits summaries.
| Argument | Type | Description |
|---|---|---|
| chainRef* | string | Chain reference (e.g. 'base') |
| accountId* | string | Account ID of the vault account to fetch earnings for |
| vaultProvider* | string | Vault provider — MORPHO (Earnings) or YO (Smart Earnings) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainRef",
"accountId",
"vaultProvider"
],
"properties": {
"chainRef": {
"type": "string",
"description": "Chain reference (e.g. 'base')"
},
"accountId": {
"type": "string",
"description": "Account ID of the vault account to fetch earnings for"
},
"vaultProvider": {
"enum": [
"MORPHO",
"YO"
],
"type": "string",
"description": "Vault provider — MORPHO (Earnings) or YO (Smart Earnings)"
}
},
"additionalProperties": false
}Get the current exchange rate between two currencies
| Argument | Type | Description |
|---|---|---|
| to* | string | Target currency |
| from* | string | Source currency |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to"
],
"properties": {
"to": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Target currency"
},
"from": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Source currency"
}
},
"additionalProperties": false
}Get all FAQ items in a specific category. Use the moneda://knowledge resource to discover available category slugs.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Category slug (e.g. 'about-moneda', 'fees', 'security-and-privacy', 'earnings-account', 'deposits-and-withdrawals', 'virtual-accounts', 'legal-compliance', 'using-moneda', 'moneda-card', 'technical-web3', 'help') |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Category slug (e.g. 'about-moneda', 'fees', 'security-and-privacy', 'earnings-account', 'deposits-and-withdrawals', 'virtual-accounts', 'legal-compliance', 'using-moneda', 'moneda-card', 'technical-web3', 'help')"
}
},
"additionalProperties": false
}Get a specific FAQ item by ID, including its full answer and resolved related questions. Use this after search_knowledge or get_faq_category to drill into a specific question.
| Argument | Type | Description |
|---|---|---|
| id* | string | The FAQ item ID (returned by search_knowledge and get_faq_category) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The FAQ item ID (returned by search_knowledge and get_faq_category)"
}
},
"additionalProperties": false
}Fetch comprehensive financial summary data in one call: balances, recent transactions (10), APY rates, and exchange rates. Use this instead of calling 5+ individual tools.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}How many commission-free stock trades the user has left this window, without quoting an order. The window steps from their own subscription anniversary, not the calendar month, so quote resetsAt rather than a day of the month. If degraded is true the count could not be read: say so, never state it as fact.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the compliance information requests (RFIs) Iron/MoonPay has sent the user about their virtual account: status, the open round's questions and any requested documents. Read-only. MoonPay requires the user to answer personally, so NEVER answer on their behalf or draft answers for them to paste: tell them to open the Moneda app at Settings > Features and limits and respond to the information request there. While a request is waiting on a response, transfers may be held.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get your lifetime accumulated savings from using Moneda — total fees Moneda covered on your behalf (sponsored network fees + on/off-ramp fees) plus your plan's fee discount vs the Standard plan. This is NOT a balance: never answer "how much have I saved" from wallet or vault amounts. Returns the total AND its three components, so you can say where the savings came from.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Is the US stock market open, and when does it change? Returns the current session (pre_market, open, after_hours or closed), whether today is a trading day, any holiday or early close, the trading day's four windows as ISO instants, and the next session change. Render the instants in the user's own timezone.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Read one message from Moneda (a notification with type MONEDA_MESSAGE, id from list_notifications): title, body, tone, optional button, attached documents (by index), and `reply`, which is null when no reply is asked for, else says whether a document is none/optional/required. `repliedAt` is set once the user has replied.
| Argument | Type | Description |
|---|---|---|
| notificationId* | string | Id of the MONEDA_MESSAGE notification. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"notificationId"
],
"properties": {
"notificationId": {
"type": "string",
"format": "uuid",
"description": "Id of the MONEDA_MESSAGE notification."
}
},
"additionalProperties": false
}Get a download link (valid 10 minutes) for a document Moneda attached to a message. `index` comes from the message's `attachments` list in get_moneda_message.
| Argument | Type | Description |
|---|---|---|
| index* | integer | Attachment index from get_moneda_message. |
| notificationId* | string | Id of the MONEDA_MESSAGE notification. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"notificationId",
"index"
],
"properties": {
"index": {
"type": "integer",
"minimum": 0,
"description": "Attachment index from get_moneda_message."
},
"notificationId": {
"type": "string",
"format": "uuid",
"description": "Id of the MONEDA_MESSAGE notification."
}
},
"additionalProperties": false
}Get the user's saved external wallets and bank accounts for withdrawals/off-ramping. Each entry has an accountId field — pass it as the accountId parameter to initiate_payment (transfer_account). These are NOT the user's Moneda wallet — use get_wallet instead to get the user's actual Moneda smart wallet address.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Fetch all account setup data in one call: wallet address, Moneda account balances, virtual bank accounts, and saved external accounts. Use this instead of calling get_wallet + get_balance + get_virtual_accounts + get_my_accounts separately.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the user's passkeys (security keys). target='WALLET' (default) lists the smart-account signing keys — id, label, provider, status, masked wallet address, creation date, kind ('primary' = the key from signup, 'backup' = an extra key added later as a second Safe owner), and onchainStatus (a 'pending' backup exists but cannot sign yet). target='LOGIN' lists the email-login credentials — id, label, status, masked credential id, device, last used, and provider when it could be identified (absent means unknown, including every credential registered before Moneda recorded it). Pass the id plus the same target to set_passkey_label to rename one. This does NOT report which key the app will use for the NEXT signature: that preference is stored only on the user's own device and is not readable through any API, so never infer it from kind or ordering.
| Argument | Type | Description |
|---|---|---|
| target | string | WALLET (default) = smart-account signing keys, LOGIN = email login credentials |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"target": {
"enum": [
"WALLET",
"LOGIN"
],
"type": "string",
"description": "WALLET (default) = smart-account signing keys, LOGIN = email login credentials"
}
},
"additionalProperties": false
}Preview the cost, FX rate, and final amount for moving money between two currencies. Provide exactly one of `amountIn` (what the user sends) or `amountOut` (what they want to receive). Returns the quote ID, exchange rate, fee, and how long the quote stays valid. Use this BEFORE initiate_payment so the user can confirm the rate. Routes internally based on the currency pair — agents don't need to know which provider handles which corridor.
| Argument | Type | Description |
|---|---|---|
| amountIn | number | Amount to send (in `fromCurrency` units). Omit if specifying `amountOut`. |
| amountOut | number | Amount to receive (in `toCurrency` units). Omit if specifying `amountIn`. |
| toCurrency* | string | Destination currency. ONRAMP example: 'USDC'. OFFRAMP example: 'BRL'. |
| fromCurrency* | string | Source currency. ONRAMP example: 'BRL' (sending Brazilian reais). OFFRAMP example: 'USDC' (sending Base USDC). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"fromCurrency",
"toCurrency"
],
"properties": {
"amountIn": {
"type": "number",
"description": "Amount to send (in `fromCurrency` units). Omit if specifying `amountOut`.",
"exclusiveMinimum": 0
},
"amountOut": {
"type": "number",
"description": "Amount to receive (in `toCurrency` units). Omit if specifying `amountIn`.",
"exclusiveMinimum": 0
},
"toCurrency": {
"type": "string",
"maxLength": 5,
"minLength": 3,
"description": "Destination currency. ONRAMP example: 'USDC'. OFFRAMP example: 'BRL'."
},
"fromCurrency": {
"type": "string",
"maxLength": 5,
"minLength": 3,
"description": "Source currency. ONRAMP example: 'BRL' (sending Brazilian reais). OFFRAMP example: 'USDC' (sending Base USDC)."
}
},
"additionalProperties": false
}Fetch payment readiness data in one call: KYC status, virtual accounts, external accounts, contact count, and balances. Use this instead of calling 5 individual tools to check payment readiness.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Check the current status of a payment request. Use this to poll for approval after calling initiate_payment. Terminal statuses: COMPLETED, FAILED, EXPIRED, REJECTED.
| Argument | Type | Description |
|---|---|---|
| paymentRequestId* | string | The payment request ID returned by initiate_payment |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paymentRequestId"
],
"properties": {
"paymentRequestId": {
"type": "string",
"format": "uuid",
"description": "The payment request ID returned by initiate_payment"
}
},
"additionalProperties": false
}Get the user's points activity history showing what actions earned or spent points
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of activities to return (default: 10, max: 50) |
| offset | number | Number of activities to skip for pagination |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"maximum": 50,
"minimum": 1,
"description": "Number of activities to return (default: 10, max: 50)"
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Number of activities to skip for pagination"
}
},
"additionalProperties": false
}Get the user's current points balance from the rewards program
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Read the config for redeeming Moneda Points into AI usage credits: the points-per-$1 rate, the minimum redemption, the monthly cap, the user's current points balance, and how much of the monthly allowance is left. Call this before redeem_points to price and gate a redemption.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Fetch points and referral data in one call: points balance, recent activity, referral code, and referees. Use this instead of calling get_points_balance + get_points_activity + get_referral_code + get_referees separately.
| Argument | Type | Description |
|---|---|---|
| activityLimit | number | Number of recent points activities to return (default: 10) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"activityLimit": {
"type": "number",
"maximum": 50,
"minimum": 1,
"description": "Number of recent points activities to return (default: 10)"
}
},
"additionalProperties": false
}Fetch a single receipt by id with full extracted fields (merchant, total, currency, tax breakdown, line-item count) plus a presigned `downloadUrl` valid for ~15 minutes. Use this when the user asks about a specific receipt or to surface the file URL to the LLM context.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id (from list_receipts output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id (from list_receipts output)."
}
},
"additionalProperties": false
}List the parsed line items on a receipt — description, quantity, unitPrice, totalPrice, taxRate, and category. Useful for spend-by-product breakdowns or itemized review of an invoice.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id whose line items to fetch. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id whose line items to fetch."
}
},
"additionalProperties": false
}Get the recovery configuration for an account: accepted recovery emails, total weight, and the threshold required to approve a recovery. The threshold is a fixed number that must match the on-chain Universal Email Recovery Module config.
| Argument | Type | Description |
|---|---|---|
| accountId | string | Account UUID. Defaults to the user's main LOCAL account when omitted. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"accountId": {
"type": "string",
"format": "uuid",
"description": "Account UUID. Defaults to the user's main LOCAL account when omitted."
}
},
"additionalProperties": false
}Get the user's recovery contacts and the people who have you as their recovery contact (guardian).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get one recovery email's full detail by id — email, weight, status, timestamps, notes, and the on-chain account address it protects.
| Argument | Type | Description |
|---|---|---|
| id* | string | Recovery email UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Recovery email UUID"
}
},
"additionalProperties": false
}Get the most recent ZK email recovery request snapshot for an account. Returns hasActiveRecovery: false when no recovery exists or the latest is in a terminal state (cancelled/completed/expired); otherwise returns recovery details including approved/pending recovery emails (anonymized as a***@domain) and time until executable. Reads from DB only — agents tolerate the slight lag while the cron syncs on-chain state.
| Argument | Type | Description |
|---|---|---|
| accountId | string | Account UUID. Defaults to the user's main LOCAL account when omitted. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"accountId": {
"type": "string",
"format": "uuid",
"description": "Account UUID. Defaults to the user's main LOCAL account when omitted."
}
},
"additionalProperties": false
}Get the list of users this user has referred to Moneda
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the user's unique referral code and referral count
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Fetch security checkup data in one call: passkeys, recovery contacts, and security-related settings. Use this instead of calling get_passkeys + get_recovery_contacts + get_settings separately.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the user's app settings and preferences: language, currency, country, theme, notifications, biometrics, and display options.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the date a US bank (ACH) transfer would actually settle. Accounts for Iron's 3:00 PM ET same-day cutoff, weekends, AND US federal bank holidays — a transfer sent the afternoon before Thanksgiving does not arrive the next day. Use this to answer 'when will my money arrive?' instead of saying 'next business day'. USD/ACH only; Iron publishes no equivalent cutoff for EUR/SEPA.
| Argument | Type | Description |
|---|---|---|
| submittedAt | string | ISO timestamp of when the transfer was submitted. Omit to estimate for a transfer sent right now. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"submittedAt": {
"type": "string",
"description": "ISO timestamp of when the transfer was submitted. Omit to estimate for a transfer sent right now."
}
},
"additionalProperties": false
}Fetch spending analysis data in one call: spending by type group, daily totals, and category breakdown for a period. Use this instead of calling get_spending_by_type_group + get_daily_spending + get_spending_by_category separately. All totals are in USDC units (26.5 means 26.50).
| Argument | Type | Description |
|---|---|---|
| period | string | Analysis period (default: 30d) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"period": {
"enum": [
"7d",
"30d",
"90d"
],
"type": "string",
"description": "Analysis period (default: 30d)"
}
},
"additionalProperties": false
}Get spending grouped by user-assigned transaction category over a window. Transactions without a category land in an 'UNCATEGORIZED' bucket. Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO 8601 UTC end of an absolute window |
| from | string | ISO 8601 UTC start of an absolute window |
| period | string | Rolling time window. Mutually exclusive with from/to. |
| currency* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency"
],
"properties": {
"to": {
"type": "string",
"description": "ISO 8601 UTC end of an absolute window"
},
"from": {
"type": "string",
"description": "ISO 8601 UTC start of an absolute window"
},
"period": {
"enum": [
"1d",
"1w",
"1m",
"1y"
],
"type": "string",
"description": "Rolling time window. Mutually exclusive with from/to."
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
}
},
"additionalProperties": false
}Get the total amount sent to a single recipient (Moneda user, external bank, or external wallet) over a window. Identify the recipient by their account ID (recipientAccountId). Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO 8601 UTC end of an absolute window |
| from | string | ISO 8601 UTC start of an absolute window |
| period | string | Rolling time window. Mutually exclusive with from/to. |
| currency* | string | |
| recipientAccountId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency",
"recipientAccountId"
],
"properties": {
"to": {
"type": "string",
"description": "ISO 8601 UTC end of an absolute window"
},
"from": {
"type": "string",
"description": "ISO 8601 UTC start of an absolute window"
},
"period": {
"enum": [
"1d",
"1w",
"1m",
"1y"
],
"type": "string",
"description": "Rolling time window. Mutually exclusive with from/to."
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
},
"recipientAccountId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Get spending grouped by recipient/merchant. Each Moneda user gets their own bucket; off-ramps share a single bucket per type (bank-withdrawal, external-wallet, coinbase, wallet-connect). Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO 8601 UTC end of an absolute window |
| from | string | ISO 8601 UTC start of an absolute window |
| period | string | Rolling time window. Mutually exclusive with from/to. |
| currency* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency"
],
"properties": {
"to": {
"type": "string",
"description": "ISO 8601 UTC end of an absolute window"
},
"from": {
"type": "string",
"description": "ISO 8601 UTC start of an absolute window"
},
"period": {
"enum": [
"1d",
"1w",
"1m",
"1y"
],
"type": "string",
"description": "Rolling time window. Mutually exclusive with from/to."
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
}
},
"additionalProperties": false
}Get spending grouped by transaction type group (transfer, exchange, deposit, withdrawal, earnings, topup, offramp) for a 7/30/90-day window. Includes period-over-period comparison. For finer breakdowns by user-assigned category, contact, or merchant, use get_spending_by_category / get_spending_by_contact / get_spending_by_merchant. (This tool was previously named get_spending_summary.)
| Argument | Type | Description |
|---|---|---|
| period* | string | Time period for the summary |
| currency | string | Filter by currency (USD, EUR, CHF, CAD, or MXN) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"period"
],
"properties": {
"period": {
"enum": [
"7d",
"30d",
"90d"
],
"type": "string",
"description": "Time period for the summary"
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Filter by currency (USD, EUR, CHF, CAD, or MXN)"
}
},
"additionalProperties": false
}Compare total spending across two arbitrary windows (e.g. this month vs last month, year-over-year). Returns absolute and percentage deltas; deltaPct is null when previous total is 0. Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| currency* | string | |
| currentTo* | string | |
| previousTo* | string | |
| currentFrom* | string | |
| previousFrom* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency",
"currentFrom",
"currentTo",
"previousFrom",
"previousTo"
],
"properties": {
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
},
"currentTo": {
"type": "string"
},
"previousTo": {
"type": "string"
},
"currentFrom": {
"type": "string"
},
"previousFrom": {
"type": "string"
}
},
"additionalProperties": false
}List the underlying spending transactions for a window. Optionally drill down into a category bucket (bucketKind='category', bucketId=CategoryType or 'UNCATEGORIZED') or a merchant bucket (bucketKind='merchant', bucketType=..., bucketId=user UUID for type='user'). Paginated via take/skip. Amounts are in currency units (26.5 means 26.50), like `get_transactions`.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO 8601 UTC end of an absolute window |
| from | string | ISO 8601 UTC start of an absolute window |
| skip | integer | |
| take | integer | |
| period | string | Rolling time window. Mutually exclusive with from/to. |
| orderBy | string | |
| bucketId | string | |
| currency | string | |
| direction | string | |
| bucketKind |
Check the status of your most recent balance-statement request. When READY, returns a time-limited PDF download URL. Not tax advice.
| Argument | Type | Description |
|---|---|---|
| currency | any | Without requestId: scope to the latest statement for a specific filter (USD, EUR, CHF, CAD, MXN or CRYPTO; matches what you passed to generate_statement). null = the latest all-activity statement. |
| requestId | string | The requestId returned by generate_statement. Pass it to poll that exact statement; without it you get the most recent one. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"currency": {
"anyOf": [
{
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN",
"CRYPTO"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Without requestId: scope to the latest statement for a specific filter (USD, EUR, CHF, CAD, MXN or CRYPTO; matches what you passed to generate_statement). null = the latest all-activity statement."
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "The requestId returned by generate_statement. Pass it to poll that exact statement; without it you get the most recent one."
}
},
"additionalProperties": false
}Get one sub-account by id with full detail — name, status, type, members, parent + child Safe addresses, deployment index, close timestamp.
| Argument | Type | Description |
|---|---|---|
| id* | string | Sub-account UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID"
}
},
"additionalProperties": false
}Read on-chain balances for a sub-account's child Safe. Pass currency (USDC / EURC / CHFAU / CADD / MXNB) to filter to a single token; omit to get every enabled token. Balances are returned as raw bigint strings — 6 decimals for USDC/EURC/CHFAU/MXNB, 18 for CADD.
| Argument | Type | Description |
|---|---|---|
| id* | string | Sub-account UUID |
| currency | string | Filter to a single token. Omit for all enabled currencies. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID"
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string",
"description": "Filter to a single token. Omit for all enabled currencies."
}
},
"additionalProperties": false
}Get one joint-account request by id, including the per-member approval list (who approved, who rejected, and when). Read-only.
| Argument | Type | Description |
|---|---|---|
| proposalId* | string | Proposal UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"proposalId"
],
"properties": {
"proposalId": {
"type": "string",
"format": "uuid",
"description": "Proposal UUID"
}
},
"additionalProperties": false
}Generate (idempotently) the ZUGFeRD plan invoice PDF for a single subscription charge and return a 1-hour presigned download URL. First call allocates the invoice number (YYYY-NNNNNN), renders the PDF/A-3 with embedded EN 16931 XML, and uploads to S3; subsequent calls return a fresh presigned URL for the existing row. The user must own the underlying charge. Returns `{ invoiceNumber, downloadUrl }`.
| Argument | Type | Description |
|---|---|---|
| chargeTransactionId* | string | The SUBSCRIPTION_CHARGE Transaction id (from list_subscription_charges output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chargeTransactionId"
],
"properties": {
"chargeTransactionId": {
"type": "string",
"format": "uuid",
"description": "The SUBSCRIPTION_CHARGE Transaction id (from list_subscription_charges output)."
}
},
"additionalProperties": false
}Aggregate wealth across the user's main account + every live vault. Returns per-leg breakdown (wallet + Morpho + YO for main; wallet-only for vaults) plus per-currency totals (USDC, EURC, CHFAU, CADD, MXNB) and combined totalUsd/totalEur grand totals. USDC/EURC are cross-converted using the on-chain Aerodrome rate; CHFAU, CADD and MXNB keep their own columns but are also folded into totalUsd/totalEur using their fiat rates (MXNB via its Aerodrome pool). MXNB includes the Juno MXNB Prime Morpho vault. `stocksUsd` is the value of stocks and ETFs in the brokerage account at the latest delayed quote, and `cryptoUsd` the value of crypto held in the main account and every vault at the current reference price (both 6-decimal USD; null means it could not be priced, not zero). The app's Total wealth adds both on top of the currency totals; the app prices crypto at what selling now would return, so its figure can differ slightly. `stockPositions` and `cryptoPositions` list each held asset (symbol, quantity in whole units, valueUsd, costUsd, realizedUsd): use them for 'how much crypto do I hold', 'what is my bitcoin worth' (cbBTC) or 'what stocks do I own'. `costUsd` is what the user paid for the position, so valueUsd minus costUsd is how much they are up or down; null means the cost is not on record (for example tokens received from outside), so do not report a gain or loss for it. `realizedUsd` is the profit or loss the user already locked in by selling part of that position (negative for a loss), separate from the unrealized figure: quote it for 'how much have I made selling X'; null means it is not on record, so say so rather than zero. `closedStockPositions` lists stocks and ETFs the user has sold all of, each with `realizedUsd` (what selling it made or lost): use it for 'how did my Tesla trade end up' or 'what have I made on stocks I sold'. `closedCryptoPositions` is the same for crypto the user bought in the app and has fully sold; a token they moved in or out some other way is left out, so absence does not mean no profit or loss. Both are history, not holdings, and are in no total. `totalWealthUsd` is everything combined (currencies + stocks + crypto) in 6-decimal USD, null when any part could not be valued: quote it for 'what is my total balance' instead of adding legs yourself. `otherCryptoPositions` lists any other listed tokens in the account at a reference price (valueUsd may be null); they are shown in the app but NOT counted in cryptoUsd or totalWealthUsd, so mention them separately.
Get transaction history including card programme activity. Standard format returns JSON; tax_export returns a compact CSV with full unmasked addresses, token contracts, vault tokens, sender/recipient details, and tax labels (Koinly/CoinTracker/TaxBit compatible). Use year for annual tax exports (up to 250 per request). Filter by typeGroup, type, category, currency, dates, counterparty, amount, status, hasNote, hasCategory, hasReceipt, and card. For card queries, pass `card` (matches a card by its last 4 digits like "1234" or by a substring of the card alias like "subscriptions"), `cardId` if you already have the UUID, or `typeGroup: "card"` for activity across all cards. CARD_* rows include merchantName, MCC, country, and last4.
| Argument | Type | Description |
|---|---|---|
| card | string | Friendly card filter — accepts either a 4-digit string (matches Card.lastFourDigits, e.g. "1234") or any other string (case-insensitive substring match on the card alias, e.g. "subscriptions"). Multiple cards can match the same alias; all matching cards owned by the user are included. |
| sort | string | Sort: newest/oldest by date, amount_desc/amount_asc by raw amount (default: newest) |
| type | string | Exact TransactionType: TRANSFER, SWAP, DEPOSIT_YO, WITHDRAWAL, ON_RAMP, OFF_RAMP_BANK, etc. |
| year | integer | Tax year (e.g. 2025). Filters Jan 1 – Dec 31. Overrides startDate/endDate. |
| limit | number | Max results (standard: default 5, max 10; tax_export: default 50, max 250) |
Number of unread in-app notifications for the user. Cheaper than list_notifications when the agent only needs the count to answer 'do I have anything new?'.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Companies that have filed with the SEC to go public in the US (S-1 or F-1) and have not listed yet: name, stage (filed, priced or listed), proposed ticker, website, and first and latest filing dates. Use for "what IPOs are coming up?" or "is X going public?". Nothing on the list can be bought until it lists; to follow one and be alerted when it prices, send the user to the IPO page under Invest in the Moneda app. Returns available:false when market data is off for the user.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get how much of the user's Iron virtual-account spending limit is left, per direction (deposit = money in, withdrawal = money out), on a rolling 52-week window. Also reports whether Iron is currently requesting enhanced due diligence (EDD). Crossing a limit does NOT reject the transfer: Iron PAUSES it and gives the user 24 hours to supply a Source-of-Wealth document, so check this BEFORE proposing a large deposit or withdrawal. `rfiRequired: true` means Iron has an open information request waiting on the user's answers (see get_information_requests). `missingRequirements` (only while `eddRequired`) lists the Iron requirement codes still outstanding, e.g. `kyc_questionnaire`, `kyc_proof_of_residence`: the user finishes them in the Moneda app at Settings > Features and limits. `threshold: null` means the customer has no enforced cap. Thresholds are personalised per customer — never assume a number, always read it here.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the user's virtual bank account details (IBAN and ACH), payment capabilities, and activation status. Minimum transfer: €1 for EUR (IBAN/SEPA) and $1 for USD (ACH).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the user's Moneda smart wallet address on Base network. IMPORTANT: Only supports USDC, EURC, CHFAU, CADD, and MXNB on Base — other tokens or chains will result in permanent loss of funds. For Moneda-to-Moneda transfers, prefer sharing @username (instant, feeless).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Check the health and status of the Moneda MCP server
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Import a receipt directly from an https:// URL (S3, Drive shared link, public file host, etc.). The server fetches the file behind an SSRF guard (rejects private IPs, Moneda infra, and non-https), validates it, then runs OCR + matching. Single tool call, no sandbox needed. Use this when the receipt is already accessible at a URL.
| Argument | Type | Description |
|---|---|---|
| url* | string | https:// URL the receipt file can be fetched from. Public hosts only (S3, Drive shared, etc.). |
| fileName | string | Override the auto-derived filename. Defaults to the last path segment of the URL. |
| mimeType | string | Override the Content-Type the source server returns. Useful when the source serves application/octet-stream. |
| captureSource | string | Provenance label for the audit trail. Defaults to MANUAL_UPLOAD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "https:// URL the receipt file can be fetched from. Public hosts only (S3, Drive shared, etc.)."
},
"fileName": {
"type": "string",
"maxLength": 256,
"description": "Override the auto-derived filename. Defaults to the last path segment of the URL."
},
"mimeType": {
"enum": [
"application/pdf",
"image/jpeg",
"image/png"
],
"type": "string",
"description": "Override the Content-Type the source server returns. Useful when the source serves application/octet-stream."
},
"captureSource": {
"enum": [
"MANUAL_UPLOAD",
"EMAIL_FORWARD",
"GMAIL_AUTO_SCAN",
"CAMERA_PROMPT",
"CALENDAR_PROMPT",
"OTHER"
],
"type": "string",
"description": "Provenance label for the audit trail. Defaults to MANUAL_UPLOAD."
}
},
"additionalProperties": false
}Send crypto out of a Safe — the main account, a vault or a joint account — to a Moneda contact or a raw Base address, for any token the account holds. Not for selling a token (use initiate_crypto_trade), buying one (initiate_token_buy) or sending money (initiate_payment). Amounts are in the token's own smallest unit (atoms): call list_sendable_crypto first and use its `decimals` and `address`. Creates a request the user reviews, approves and signs in the Moneda mobile app — nothing moves until they do. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | How much to send, in the token's smallest unit (atoms), e.g. '500000000000000000' for 0.5 of an 18-decimal token |
| subAccountId | string | Vault or joint account to send FROM. Omit for the main Safe. |
| tokenAddress* | string | Base ERC-20 contract address of the token to send |
| recipientAddress | string | Raw Base address to send to, for an external send |
| recipientAccountId | string | Moneda contact / account UUID to send to |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tokenAddress",
"amount"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+$",
"description": "How much to send, in the token's smallest unit (atoms), e.g. '500000000000000000' for 0.5 of an 18-decimal token"
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Vault or joint account to send FROM. Omit for the main Safe."
},
"tokenAddress": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Base ERC-20 contract address of the token to send"
},
"recipientAddress": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Raw Base address to send to, for an external send"
},
"recipientAccountId": {
"type": "string",
"format": "uuid",
"description": "Moneda contact / account UUID to send to"
}
},
"additionalProperties": false
}Buy or sell a crypto asset (e.g. cbBTC for Bitcoin, WETH for Ethereum) with the user's own balance. Not for sending money (use initiate_payment) or converting between currencies (use initiate_currency_exchange). The route/venue is chosen by the server. Creates a request the user reviews at the live price, approves and signs in the Moneda mobile app. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| side* | string | BUY spends stableCurrency; SELL spends the asset |
| amount* | string | Amount spent, in user-facing units: stableCurrency on BUY (e.g. '100'), the asset on SELL (e.g. '0.001') |
| symbol* | string | Crypto asset symbol, e.g. 'cbBTC' or 'WETH' |
| stableCurrency* | string | The user's balance the trade pays from or lands in |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"symbol",
"side",
"stableCurrency",
"amount"
],
"properties": {
"side": {
"enum": [
"BUY",
"SELL"
],
"type": "string",
"description": "BUY spends stableCurrency; SELL spends the asset"
},
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount spent, in user-facing units: stableCurrency on BUY (e.g. '100'), the asset on SELL (e.g. '0.001')"
},
"symbol": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "Crypto asset symbol, e.g. 'cbBTC' or 'WETH'"
},
"stableCurrency": {
"enum": [
"USD",
"EUR",
"CAD",
"MXN"
],
"type": "string",
"description": "The user's balance the trade pays from or lands in"
}
},
"additionalProperties": false
}Convert money between two of the user's own currency accounts (e.g. USD to EUR). Nothing leaves the user; to pay or send to anyone, use initiate_payment instead. Creates a request the user approves in the Moneda mobile app; the destination is the user's own account in toCurrency. Check balance with get_balance first. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount of fromCurrency to exchange, in user-facing units (e.g. '50.00') |
| toCurrency* | string | Currency that arrives in the user's account |
| fromCurrency* | string | Currency that leaves the user's account |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"fromCurrency",
"toCurrency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,6})?$",
"description": "Amount of fromCurrency to exchange, in user-facing units (e.g. '50.00')"
},
"toCurrency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency that arrives in the user's account"
},
"fromCurrency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency that leaves the user's account"
}
},
"additionalProperties": false
}Move the user's own money into or out of an earnings vault: DEPOSIT from a currency account into Earnings (MORPHO) or Smart Earnings (YO), WITHDRAW back out. Not for sending money (use initiate_payment), converting currencies (use initiate_currency_exchange) or trading (use initiate_crypto_trade). YO has USD and EUR vaults; MORPHO has USD, EUR and MXN. Check balances with get_balance and rates with get_apy_rates first. Creates a request the user approves and signs in the Moneda mobile app. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount in user-facing units, e.g. '50.00' |
| currency* | string | Currency of the account and vault |
| direction* | string | DEPOSIT into the vault, or WITHDRAW back to the account |
| reference | string | Optional note shown on the approval |
| vaultProvider* | string | MORPHO = Earnings, YO = Smart Earnings |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"direction",
"vaultProvider",
"currency",
"amount"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount in user-facing units, e.g. '50.00'"
},
"currency": {
"enum": [
"USD",
"EUR",
"MXN"
],
"type": "string",
"description": "Currency of the account and vault"
},
"direction": {
"enum": [
"DEPOSIT",
"WITHDRAW"
],
"type": "string",
"description": "DEPOSIT into the vault, or WITHDRAW back to the account"
},
"reference": {
"type": "string",
"maxLength": 140,
"description": "Optional note shown on the approval"
},
"vaultProvider": {
"enum": [
"MORPHO",
"YO"
],
"type": "string",
"description": "MORPHO = Earnings, YO = Smart Earnings"
}
},
"additionalProperties": false
}Send money to someone else (a Moneda user, a contact, or an external bank/wallet). Creates a payment request that requires user approval in the Moneda mobile app. Not for converting between the user's own currencies: use initiate_currency_exchange for that. Look up the recipient first via search_users, get_my_accounts, or get_contacts. Check balance with get_balance before calling. After calling, poll get_payment_status. Bank transfers require an active Iron account and a registered autoramp.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount in user-facing units (e.g. '50.00'). Must be greater than zero. |
| source | object | Where the money comes from. Omit to pay from the main balance. |
| currency* | string | Currency for the payment |
| accountId | string | Account ID for transfer_account payments (from get_my_accounts) |
| reference | string | Optional payment memo. For bank transfers: SEPA max 140 chars, ACH max 10 chars. Allowed: letters, numbers, spaces, and / - . |
| paymentType* | string | Type of payment: transfer_moneda (to a Moneda user), transfer_account (to own external account), transfer_contact_bank (to contact's bank), transfer_contact_wallet (to contact's wallet) |
Buy a Base token that is not in initiate_crypto_trade's catalogue, by contract address, spending the user's own USD, EUR, CHF or MXN balance. Use initiate_crypto_trade for catalogue assets (cbBTC, WETH, …). The token must be tradeable on Base via LiFi. Creates a request the user reviews at the live price, approves and signs in the Moneda mobile app. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | How much to spend, in stableCurrency (e.g. '25') |
| tokenAddress* | string | Base ERC-20 contract address |
| stableCurrency* | string | The user's balance the buy is paid from |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tokenAddress",
"stableCurrency",
"amount"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d{1,6})?$",
"description": "How much to spend, in stableCurrency (e.g. '25')"
},
"tokenAddress": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Base ERC-20 contract address"
},
"stableCurrency": {
"enum": [
"USD",
"EUR",
"CHF",
"MXN"
],
"type": "string",
"description": "The user's balance the buy is paid from"
}
},
"additionalProperties": false
}List the user's active login sessions (signed-in devices and clients: mobile app, web, CLI, API) and connected agents (MCP integrations). Use this to answer 'what devices am I signed in on?' or before terminating a session. Each login session has an `id` (pass to terminate_session), a `type`, device/location info, and `lastActive`. Each connected agent has an `id` (pass to disconnect_connected_service) and `isThisConnection: true` marks the agent making this call.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List your scoped autonomous agent sessions, newest first, with status, policy, remaining period cap, and expiry. Filter by status to find ACTIVE sessions ready to execute against.
| Argument | Type | Description |
|---|---|---|
| status | string | Optional status filter. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"PENDING_ACTIVATION",
"ACTIVE",
"PAUSED",
"REVOKED",
"EXPIRED",
"FAILED_ACTIVATION"
],
"type": "string",
"description": "Optional status filter."
}
},
"additionalProperties": false
}List the API keys on the account: name, prefix (first 12 characters), scopes, last use, expiry, and whether each is still active. The secret itself is stored hashed and is never returned here — it is shown only once, when the key is created.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the banks Koywe supports for a LATAM country, used when registering a third-party or first-party bank account that requires an explicit bank code (Colombia/PSE, Chile/CLP_BANK, Bolivia/BOB_BANK). Each bank entry has: name (human label), value (Koywe entity code — pass back as bankCode), and domain (for logo display). Mexico/Argentina/Peru also return banks but those rails resolve the bank from the account number automatically.
| Argument | Type | Description |
|---|---|---|
| countrySymbol* | string | ISO 3166-1 alpha-2 country code. Supported: MX, AR, PE, BR, CO, CL, BO. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"countrySymbol"
],
"properties": {
"countrySymbol": {
"enum": [
"MX",
"AR",
"PE",
"BR",
"CO",
"CL",
"BO"
],
"type": "string",
"description": "ISO 3166-1 alpha-2 country code. Supported: MX, AR, PE, BR, CO, CL, BO."
}
},
"additionalProperties": false
}List German hospitality-receipt (Bewirtungsbeleg) overlays attached to the user's transactions. Each row carries the underlying transactionId, date, location, occasion, total/tip/subtotal split, deductible vs non-deductible amounts, and signing state. Pass `transactionHash` (from `get_transactions`) to scope to one transaction. Default page 20, max 100.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 20, max 100). |
| offset | integer | Number of rows to skip for pagination. |
| transactionHash | string | Restrict to overlays linked to a single transaction (on-chain hash from get_transactions). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size (default 20, max 100)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of rows to skip for pagination."
},
"transactionHash": {
"type": "string",
"description": "Restrict to overlays linked to a single transaction (on-chain hash from get_transactions)."
}
},
"additionalProperties": false
}List the user's bills (AP queue), ordered 'due-soon first' (dueDate ASC NULLS LAST, id DESC). Filter by `status[]` — defaults to `['PENDING']`. Cursor-paginated; pass `nextCursor` from the previous page back as `cursor` to advance. Each row carries the extracted merchant, total, currency, invoice number, and due date.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 25, max 100). |
| cursor | string | Opaque cursor from a previous response's `nextCursor`. |
| status | array | Filter by BillStatus. Default ['PENDING']. Pass multiple to include several states (e.g. ['PENDING','PAID']). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size (default 25, max 100)."
},
"cursor": {
"type": "string",
"description": "Opaque cursor from a previous response's `nextCursor`."
},
"status": {
"type": "array",
"items": {
"enum": [
"PENDING",
"PAID_VIA_MONEDA",
"PAID_EXTERNALLY",
"DISMISSED"
],
"type": "string"
},
"description": "Filter by BillStatus. Default ['PENDING']. Pass multiple to include several states (e.g. ['PENDING','PAID'])."
}
},
"additionalProperties": false
}List the user's crypto conditional orders (LIMIT / STOP_LOSS / TAKE_PROFIT / TRAILING_STOP, settled via CoW), newest first. Each has status (PENDING_ACTIVATION / ARMED / PUBLISHED / FILLED / CANCELLED / EXPIRED), side, assetSymbol, triggerPrice or trailPercent, raw-unit sellAmount / minBuyAmount, expiresAt and skipReason (why the keeper last did not act, e.g. insufficient_balance). Orders can only be created in the Moneda app.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List self-issued substitute receipts (Eigenbeleg) — used when the original receipt for a transaction was lost or never issued. Each row carries the linked transactionId, recipientName, amount, reason, and signing state. Pass `transactionHash` (from `get_transactions`) to scope to one transaction. Default page 20, max 100.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 20, max 100). |
| offset | integer | Number of rows to skip for pagination. |
| transactionHash | string | Restrict to Eigenbelege linked to a single transaction (on-chain hash from get_transactions). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size (default 20, max 100)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of rows to skip for pagination."
},
"transactionHash": {
"type": "string",
"description": "Restrict to Eigenbelege linked to a single transaction (on-chain hash from get_transactions)."
}
},
"additionalProperties": false
}List the FAQ table of contents: every category (slug, name) with each item's id and question. Use an id with get_faq_item for the full answer.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List the replies the user sent to messages from Moneda, newest first: text, the message title, and the attached document's name if any. Returns up to `limit` items (default 20, max 50) with a `nextCursor` for pagination.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of replies to return (default 20, max 50). |
| cursor | string | Pagination cursor: id of the last seen reply. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of replies to return (default 20, max 50)."
},
"cursor": {
"type": "string",
"format": "uuid",
"description": "Pagination cursor: id of the last seen reply."
}
},
"additionalProperties": false
}List the user's in-app notifications, newest first. Pass filter='unread' to scope to unread items (use this to answer 'do I have any new notifications?'). Each notification has a `type`, an optional `deepLink`, and a `metadata` JSON blob whose shape varies by type. Returns up to `limit` items (default 20, max 50) with a `nextCursor` for pagination.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of notifications to return (default 20, max 50). |
| cursor | string | Pagination cursor — id of the last seen notification. |
| filter | string | Filter by read state. Default: all. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of notifications to return (default 20, max 50)."
},
"cursor": {
"type": "string",
"format": "uuid",
"description": "Pagination cursor — id of the last seen notification."
},
"filter": {
"enum": [
"all",
"unread"
],
"type": "string",
"description": "Filter by read state. Default: all."
}
},
"additionalProperties": false
}List the user's transaction receipts (PDFs, images, structured invoices), newest first. Each entry carries extracted summary fields (merchant, total, date, currency) plus the linked transactionId when attached. Use `transactionHash` (from `get_transactions`) to scope to one transaction, `needsReview=true` to find rows flagged for manual review, and `status` to filter by lifecycle state. Default page 20, max 100.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 20, max 100). |
| offset | integer | Number of receipts to skip for pagination. |
| status | string | Filter by lifecycle status. Default: everything except DELETED. |
| needsReview | boolean | If true, only return rows the extractor flagged for manual review. |
| transactionHash | string | Restrict to receipts linked to a single transaction (on-chain hash from get_transactions). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size (default 20, max 100)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of receipts to skip for pagination."
},
"status": {
"enum": [
"UPLOADING",
"PROCESSING",
"VALID",
"INVALID",
"DELETED"
],
"type": "string",
"description": "Filter by lifecycle status. Default: everything except DELETED."
},
"needsReview": {
"type": "boolean",
"description": "If true, only return rows the extractor flagged for manual review."
},
"transactionHash": {
"type": "string",
"description": "Restrict to receipts linked to a single transaction (on-chain hash from get_transactions)."
}
},
"additionalProperties": false
}List the email addresses set up for ZK email-based account recovery. Returns id, email, weight, status (pending/invited/accepted/declined/removed), and timestamps. Defaults to the user's main account when accountId is omitted.
| Argument | Type | Description |
|---|---|---|
| accountId | string | Account UUID. Defaults to the user's main LOCAL account when omitted. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"accountId": {
"type": "string",
"format": "uuid",
"description": "Account UUID. Defaults to the user's main LOCAL account when omitted."
}
},
"additionalProperties": false
}List the crypto held in a Safe that can be sent out: balance (in the token's smallest unit), decimals, USD value where one can be found, and whether the token is allowlisted or merely discovered on LiFi's Base list. Covers the main account, vaults and joint accounts. Pass the returned contract address to initiate_crypto_send — never the symbol, because two tokens can claim the same one. `enabled: false` means crypto transfers are off for this account, which is not the same as holding nothing.
| Argument | Type | Description |
|---|---|---|
| subAccountId | string | Vault or joint account to list. Omit for the main account's Safe. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Vault or joint account to list. Omit for the main account's Safe."
}
},
"additionalProperties": false
}List the OPEN spend / withdraw / membership / threshold requests on a joint account that needs multiple approvals (M-of-N). Returns each request's type, status, amount, how many approvals it has out of the threshold, and who proposed it. Read-only: voting and executing need the user's passkey on their device.
| Argument | Type | Description |
|---|---|---|
| subAccountId* | string | Joint sub-account UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Joint sub-account UUID"
}
},
"additionalProperties": false
}List the user's sub-accounts (vaults / nested Safes). Excludes CLOSED vaults by default; pass includeClosed: true to see archived ones too. Returns id, name, status, type, and the on-chain child Safe address.
| Argument | Type | Description |
|---|---|---|
| includeClosed | boolean | Include CLOSED (archived) vaults in the result. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"includeClosed": {
"type": "boolean",
"description": "Include CLOSED (archived) vaults in the result."
}
},
"additionalProperties": false
}List the user's subscription charge history (SUBSCRIPTION_CHARGE rows from the keeper cron), newest first. Cursor-paginated — pass `nextCursor` from the previous page back as `cursor` to advance. Each row carries the plan tier, billing period (MONTHLY/ANNUAL), amount (lower-units string), currency, status, on-chain transaction hash, billing period start/end, and the invoice number (null until the user generates the invoice). Use get_subscription_invoice to generate the PDF for a charge.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size (default 25, max 100). |
| cursor | string | Opaque cursor from a previous response's `nextCursor`. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Page size (default 25, max 100)."
},
"cursor": {
"type": "string",
"description": "Opaque cursor from a previous response's `nextCursor`."
}
},
"additionalProperties": false
}List the country, currency, and rail combinations Moneda can pay out to. Each entry includes the required fields you'll need to collect from the user before calling add_bank, add_contact_external, or initiate_payment. The output is provider-agnostic — don't branch on which underlying processor handles each rail. Pass an optional `countrySymbol` to filter (e.g. 'BR' returns only Brazilian PIX). Empty result for a country means Moneda doesn't currently support it.
| Argument | Type | Description |
|---|---|---|
| countrySymbol | string | Optional ISO 3166-1 alpha-2 filter (e.g. 'US', 'BR', 'CO'). Use 'EU' for SEPA destinations. Omit to list everything. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"countrySymbol": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Optional ISO 3166-1 alpha-2 filter (e.g. 'US', 'BR', 'CO'). Use 'EU' for SEPA destinations. Omit to list everything."
}
},
"additionalProperties": false
}Mark a receipt as a partial payment: the document covers more than this one payment (a deposit or instalment against a larger invoice), so its total differing from the transaction amount is expected. Replaces the `amount_mismatch` review reason with `partial_payment` so the receipt stops warning; the flag survives a reparse. Does not change any amounts. Check with the user first; only use it when get_receipt shows an amount mismatch the user confirms is intentional.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to mark (from list_receipts output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to mark (from list_receipts output)."
}
},
"additionalProperties": false
}Pay for a resource using the x402 protocol (HTTP 402 Payment Required). When an API returns HTTP 402 with x402 paymentRequirements, use this tool to initiate the payment. The payment requires user approval in the Moneda app before it executes. Parameters map to x402 paymentRequirements fields: - payTo: the recipient wallet address from the 402 response - amount: the payment amount (e.g. "0.01") - currency: USD or EUR (maps to USDC or EURC on Base) - resource: the URL being paid for (shown to the user for context) - network: must match the Moneda deployment ("base" or "base-sepolia") After calling this tool, poll get_payment_status every 10-15 seconds until a terminal status (COMPLETED, FAILED, EXPIRED, REJECTED). On COMPLETED the funds settle on-chain to payTo. Note: Moneda does not yet emit the x402 X-PAYMENT proof header, so a bare retry only unlocks the resource if its facilitator accepts on-chain settlement as proof.
| Argument | Type | Description |
|---|---|---|
| payTo* | string | Recipient wallet address (0x-prefixed, 42 chars) from paymentRequirements.payTo. |
| amount* | string | Payment amount in human-readable form (e.g. "0.01"). From paymentRequirements.maxAmountRequired or the exact price. |
| network* | string | Blockchain network from paymentRequirements.network. Must be "base" or "base-sepolia". |
| currency* | string | Payment currency. USD maps to USDC, EUR maps to EURC. |
| resource |
Propose a RECURRING payment (e.g. $50 monthly to a Moneda user or a contact's Base wallet). Creates a draft the user reviews, approves and signs with their passkey in the Moneda mobile app; nothing is sent until then and you never schedule or move funds yourself. Not for one-off payments: use initiate_payment. Look up the recipient first (search_users, get_contacts). The draft expires after 48 hours if the user does not approve it.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount per payment in user-facing units (e.g. '50.00') |
| endDate | string | Last possible payment date, YYYY-MM-DD. Omit for no end. |
| currency* | string | |
| frequency* | string | |
| reference | string | Optional memo attached to each payment |
| startDate* | string | First payment date, YYYY-MM-DD in the user's timezone. Today or later, within a year. |
| paymentType* | string | transfer_moneda (to a Moneda user, pass recipientUsername) or transfer_contact_wallet (to a contact's wallet on Base, pass contactUsername or contactAccountId) |
Freeze a sub-account the user created, blocking its spending. Unfreezing can only be done in the app. Creates a request the user approves in the Moneda mobile app; nothing happens until then. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| subAccountId* | string | Sub-account UUID (from list_sub_accounts) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID (from list_sub_accounts)"
}
},
"additionalProperties": false
}Open a SPEND or WITHDRAW proposal on a joint account that needs more than one approval. This only creates the proposal; co-owners still approve and execute it in the Moneda app. For single-signature sub-accounts use propose_sub_account_withdraw or initiate_payment with source.kind=sub_account. Creates a request the user approves in the Moneda mobile app; nothing happens until then. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount in user-facing units, e.g. '25.00' |
| currency* | string | Currency |
| accountId | string | SPEND only: one of the user's saved wallets |
| description | string | Note shown to co-owners |
| proposalType* | string | SPEND pays a recipient; WITHDRAW returns to main |
| subAccountId* | string | Sub-account UUID (from list_sub_accounts) |
| contactUsername | string | SPEND only: contact username |
Swap inside a sub-account between a currency (USD, EUR, CHF, CAD, MXN) and a crypto asset (e.g. cbBTC), or between two currencies. Funds stay in the sub-account. Not for the main account (use initiate_crypto_trade or initiate_currency_exchange). Creates a request the user approves in the Moneda mobile app; nothing happens until then. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount of fromAsset to sell, e.g. '100' |
| toAsset* | string | What to buy: a currency code (EUR) or asset symbol (WETH) |
| fromAsset* | string | What to sell: a currency code (USD) or asset symbol (cbBTC) |
| slippageBps | integer | Max slippage in basis points (default 50) |
| subAccountId* | string | Sub-account UUID (from list_sub_accounts) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"fromAsset",
"toAsset",
"amount"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount of fromAsset to sell, e.g. '100'"
},
"toAsset": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "What to buy: a currency code (EUR) or asset symbol (WETH)"
},
"fromAsset": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "What to sell: a currency code (USD) or asset symbol (cbBTC)"
},
"slippageBps": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Max slippage in basis points (default 50)"
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID (from list_sub_accounts)"
}
},
"additionalProperties": false
}Move money from the user's main account INTO one of their sub-accounts. Not for paying someone (use initiate_payment) or converting currencies (use initiate_currency_exchange). Creates a request the user approves in the Moneda mobile app; nothing happens until then. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount in user-facing units, e.g. '25.00' |
| currency* | string | Currency |
| subAccountId* | string | Sub-account UUID (from list_sub_accounts) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount in user-facing units, e.g. '25.00'"
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency"
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID (from list_sub_accounts)"
}
},
"additionalProperties": false
}Move money from a sub-account back to the user's own main account. Not for paying someone from a sub-account (use initiate_payment with source.kind=sub_account). Single-signature sub-accounts only; for a joint account use propose_sub_account_multisig_proposal. Creates a request the user approves in the Moneda mobile app; nothing happens until then. After calling, poll get_payment_status.
| Argument | Type | Description |
|---|---|---|
| amount* | string | Amount in user-facing units, e.g. '25.00' |
| currency* | string | Currency |
| subAccountId* | string | Sub-account UUID (from list_sub_accounts) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount in user-facing units, e.g. '25.00'"
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency"
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID (from list_sub_accounts)"
}
},
"additionalProperties": false
}Redeem a CONFIRMED on-chain charge for prepaid AI usage credits. Provide the transactionHash of a completed transfer you (the user) sent to the Moneda treasury tagged as a usage-credit purchase. The amount is read from the verified on-chain charge — never from input — converted to USD budget with the standard markup, and granted exactly once (idempotent on the hash, so re-calling is safe).
| Argument | Type | Description |
|---|---|---|
| transactionHash* | string | Hash of the confirmed on-chain charge to the Moneda treasury (from get_transactions). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"transactionHash"
],
"properties": {
"transactionHash": {
"type": "string",
"description": "Hash of the confirmed on-chain charge to the Moneda treasury (from get_transactions)."
}
},
"additionalProperties": false
}Redeem the user's Moneda Points for prepaid AI usage credits. Spends points (a negative points transaction) and grants the matching AI budget atomically. Enforces the minimum, the sufficient-balance check, and the monthly cap (see get_points_redemption_config). Pass a stable requestId (uuid) held across retries when you can: retrying with the same value is a no-op (returns granted:false). Omitting it is safe. The server derives the key from (user, points, 30s window) rather than minting a random one, so a retry still dedupes.
| Argument | Type | Description |
|---|---|---|
| points* | integer | How many points to redeem for AI credits. |
| requestId | string | Optional idempotency key (uuid). Reuse the same value on a retry; if omitted the server derives one from (user, points, 30s window). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"points"
],
"properties": {
"points": {
"type": "integer",
"description": "How many points to redeem for AI credits.",
"exclusiveMinimum": 0
},
"requestId": {
"type": "string",
"format": "uuid",
"description": "Optional idempotency key (uuid). Reuse the same value on a retry; if omitted the server derives one from (user, points, 30s window)."
}
},
"additionalProperties": false
}Dismiss the matcher's suggested transaction for a receipt. The receipt stays an unattached orphan and stops being offered against that transaction. Use attach_receipt afterwards if you know the correct one.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id carrying the suggestion (from get_receipt). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id carrying the suggestion (from get_receipt)."
}
},
"additionalProperties": false
}Re-run the OCR / LLM extraction pipeline on an existing receipt and return the refreshed fields. Use this when the user reports incorrect extraction or after a model upgrade. Refuses DELETED rows and rows without a stored file. Synchronous — the response carries the post-extraction snapshot.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to reparse (from list_receipts output). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to reparse (from list_receipts output)."
}
},
"additionalProperties": false
}Send the user's reply to a message from Moneda that asks for one. The reply is delivered to the Moneda team, so only send text the user wrote or explicitly approved word for word, never text you composed on your own, and show it to the user before sending. One reply per message (max 600 characters); it cannot be edited afterwards, only undone within 10 seconds (undo_message_reply). When the message takes a document, first stage it with request_message_reply_upload and pass the `uploadKey` plus the file's display name.
| Argument | Type | Description |
|---|---|---|
| body* | string | Reply text, written or approved by the user. |
| fileName | string | Display name of the attached document, e.g. 'payslip.pdf'. |
| uploadKey | string | From request_message_reply_upload, after the curl PUT succeeded. |
| notificationId* | string | Id of the MONEDA_MESSAGE notification. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"notificationId",
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 600,
"minLength": 1,
"description": "Reply text, written or approved by the user."
},
"fileName": {
"type": "string",
"maxLength": 200,
"description": "Display name of the attached document, e.g. 'payslip.pdf'."
},
"uploadKey": {
"type": "string",
"description": "From request_message_reply_upload, after the curl PUT succeeded."
},
"notificationId": {
"type": "string",
"format": "uuid",
"description": "Id of the MONEDA_MESSAGE notification."
}
},
"additionalProperties": false
}Step 1 of 2 for attaching a document to a reply to a message from Moneda (only when get_moneda_message shows `reply.attachment` optional or required). Returns a presigned S3 PUT URL (`uploadUrl`), a signed `uploadKey` and a literal `curlCommand` to run in your code sandbox; the file bytes go straight to S3 and never enter the conversation. After the PUT succeeds, pass `uploadKey` to reply_to_moneda_message. PDF, JPEG or PNG, max 5 MB; the slot expires in 15 minutes. Only upload a file the user chose for this reply.
| Argument | Type | Description |
|---|---|---|
| mimeType* | string | MIME type of the file. |
| fileSizeBytes* | integer | Exact file size in bytes (e.g. `wc -c <file>`). Signed into the URL: the PUT fails if the body differs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"mimeType",
"fileSizeBytes"
],
"properties": {
"mimeType": {
"enum": [
"application/pdf",
"image/jpeg",
"image/png"
],
"type": "string",
"description": "MIME type of the file."
},
"fileSizeBytes": {
"type": "integer",
"description": "Exact file size in bytes (e.g. `wc -c <file>`). Signed into the URL: the PUT fails if the body differs.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Step 1 of 2 for uploading a local receipt file. Returns a presigned S3 PUT URL (`uploadUrl`), a signed `uploadKey`, and a literal `curlCommand` to execute in your code sandbox to stage the file. The file bytes are sent directly to S3 — they never enter the conversation context. After the curl PUT succeeds, call `finalize_receipt_upload` with the returned `uploadKey` to run OCR + matching. Use this for any local file (PDF, JPEG, or PNG, max ~5 MB).
| Argument | Type | Description |
|---|---|---|
| fileName* | string | Original file name (used for the audit trail). E.g. 'rent-may.pdf'. |
| mimeType* | string | MIME type. Only PDF, JPEG, and PNG are accepted by the pipeline. |
| fileSizeBytes* | integer | Size of the file in bytes (use `wc -c <file>` or your stdlib's stat). Signed into the URL — the S3 PUT will fail if the actual body doesn't match. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"fileName",
"mimeType",
"fileSizeBytes"
],
"properties": {
"fileName": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "Original file name (used for the audit trail). E.g. 'rent-may.pdf'."
},
"mimeType": {
"enum": [
"application/pdf",
"image/jpeg",
"image/png"
],
"type": "string",
"description": "MIME type. Only PDF, JPEG, and PNG are accepted by the pipeline."
},
"fileSizeBytes": {
"type": "integer",
"description": "Size of the file in bytes (use `wc -c <file>` or your stdlib's stat). Signed into the URL — the S3 PUT will fail if the actual body doesn't match.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Revoke an agent session. This immediately halts all further execution on the backend (the execute path only runs ACTIVE sessions). The on-chain session remains installed until the user completes the uninstall in the Moneda app, but no payments can be made through it in the meantime. Use this when the agent is done with the mandate or the user asks to stop it.
| Argument | Type | Description |
|---|---|---|
| sessionId* | string | The agent session id to revoke. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sessionId"
],
"properties": {
"sessionId": {
"type": "string",
"format": "uuid",
"description": "The agent session id to revoke."
}
},
"additionalProperties": false
}Revoke an API key by its id (from list_api_keys). The key stops working on its very next request. Irreversible — a new key must be created to restore access.
| Argument | Type | Description |
|---|---|---|
| keyId* | string | Key id from list_api_keys |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keyId"
],
"properties": {
"keyId": {
"type": "string",
"format": "uuid",
"description": "Key id from list_api_keys"
}
},
"additionalProperties": false
}Search the Moneda knowledge base (FAQ) for answers to questions about Moneda's features, fees, security, accounts, earnings, deposits, withdrawals, legal info, and more. Use this whenever a user asks about how Moneda works.
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum number of results to return (default: 5, max: 20) |
| query* | string | Search term or question to look up in the knowledge base (e.g. 'fees', 'security', 'how to deposit') |
| category | string | Optional category slug to narrow results (e.g. 'fees', 'security-and-privacy', 'earnings-account'). Use the moneda://knowledge resource to see available slugs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Maximum number of results to return (default: 5, max: 20)"
},
"query": {
"type": "string",
"description": "Search term or question to look up in the knowledge base (e.g. 'fees', 'security', 'how to deposit')"
},
"category": {
"type": "string",
"description": "Optional category slug to narrow results (e.g. 'fees', 'security-and-privacy', 'earnings-account'). Use the moneda://knowledge resource to see available slugs."
}
},
"additionalProperties": false
}Search across every parsed line item the user has uploaded (case-insensitive substring on description + normalized description). Returns matching items, total count, and aggregate spend grouped by currency. Optional `category`, `startDate`, and `endDate` further narrow the window. Use this for questions like 'how much did I spend on cappuccinos this year?'.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Page size for the items array (default 50, max 200). |
| query* | string | Free-text query (>= 2 chars). Matched against item description. |
| offset | integer | Number of items to skip for pagination. |
| endDate | string | ISO date — items from receipts dated on/before. |
| category | string | Restrict to a line-item category id (e.g. 'food_dairy'). |
| startDate | string | ISO date — items from receipts dated on/after. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Page size for the items array (default 50, max 200)."
},
"query": {
"type": "string",
"minLength": 2,
"description": "Free-text query (>= 2 chars). Matched against item description."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip for pagination."
},
"endDate": {
"type": "string",
"description": "ISO date — items from receipts dated on/before."
},
"category": {
"type": "string",
"description": "Restrict to a line-item category id (e.g. 'food_dairy')."
},
"startDate": {
"type": "string",
"description": "ISO date — items from receipts dated on/after."
}
},
"additionalProperties": false
}Search for Moneda users by username, display name, full email, or phone number. Respects user privacy settings — users who have disabled search visibility for specific fields will not appear in results matching those fields. Returns username and display name for matching users.
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum results to return (default: 10, max: 20) |
| query* | string | Search term: username, display name, full email address, or phone number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "number",
"maximum": 20,
"minimum": 1,
"description": "Maximum results to return (default: 10, max: 20)"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 3,
"description": "Search term: username, display name, full email address, or phone number"
}
},
"additionalProperties": false
}Set (or clear) the monthly spend limit on AI usage credits — the ceiling on how much of the prepaid balance may be consumed per calendar month (resets the 1st, UTC). Pass a USD amount to cap spending, or null to remove the cap (unlimited). Idempotent: setting the same value twice is a no-op.
| Argument | Type | Description |
|---|---|---|
| monthlyLimitUsd* | any | Monthly USD cap on prepaid-balance draw-down, or null for no limit (unlimited). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monthlyLimitUsd"
],
"properties": {
"monthlyLimitUsd": {
"anyOf": [
{
"type": "number",
"maximum": 100000,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Monthly USD cap on prepaid-balance draw-down, or null for no limit (unlimited)."
}
},
"additionalProperties": false
}Set whether the user's conversations with Moneda AI may be used to train Moneda's own models (the Settings > Privacy toggle). enabled=false turns it off; enabled=true turns it back on. The choice applies to what the user sends from then on: messages sent while objected stay excluded even if it is turned back on. It does not change how Moneda answers the user, security logging, or quality measurement. Always on for the free Standard plan: turning it off needs a paid plan and is refused otherwise. Only call this when the user explicitly asks. Read the current value with get_settings (helpImproveMoneda).
| Argument | Type | Description |
|---|---|---|
| enabled* | boolean | false = object to AI training on my conversations; true = allow it (the default) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "false = object to AI training on my conversations; true = allow it (the default)"
}
},
"additionalProperties": false
}Rename a passkey so it is recognisable in the security screen (e.g. 'Work laptop'). Pass the passkey id from get_passkeys. Cosmetic only — it cannot add, remove, or weaken a credential. Send an empty label to clear it back to the provider name.
| Argument | Type | Description |
|---|---|---|
| id* | string | The passkey id, as returned by get_passkeys (`id` field) |
| label* | any | New nickname, max 40 characters. Empty or null clears it. |
| target | string | WALLET for a smart-account passkey (what get_passkeys lists), LOGIN for an email login passkey |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"label"
],
"properties": {
"id": {
"type": "string",
"description": "The passkey id, as returned by get_passkeys (`id` field)"
},
"label": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"description": "New nickname, max 40 characters. Empty or null clears it."
},
"target": {
"enum": [
"WALLET",
"LOGIN"
],
"type": "string",
"default": "WALLET",
"description": "WALLET for a smart-account passkey (what get_passkeys lists), LOGIN for an email login passkey"
}
},
"additionalProperties": false
}Terminate all of the user's login sessions on other devices (every signed-in app/web/CLI/API session). Does NOT disconnect agent connections — use disconnect_connected_service for those. Returns { revoked } = how many were terminated.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Terminate one login session by id (from list_active_sessions). The device is signed out immediately and cannot renew. Returns { success } — false means the session was already gone or isn't the user's.
| Argument | Type | Description |
|---|---|---|
| sessionId* | string | The login session id from list_active_sessions. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sessionId"
],
"properties": {
"sessionId": {
"type": "string",
"format": "uuid",
"description": "The login session id from list_active_sessions."
}
},
"additionalProperties": false
}Undo a reply the user just sent to a message from Moneda. Only call this when the user asks to undo, and only within 10 seconds of sending (until the reply's `undoableUntil`); afterwards it fails with "too late". The reply and its document are deleted and the message asks for a reply again.
| Argument | Type | Description |
|---|---|---|
| replyId* | string | Id of the reply, from reply_to_moneda_message. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"replyId"
],
"properties": {
"replyId": {
"type": "string",
"format": "uuid",
"description": "Id of the reply, from reply_to_moneda_message."
}
},
"additionalProperties": false
}Update the authenticated user's display name
| Argument | Type | Description |
|---|---|---|
| displayName* | string | The new display name |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"displayName"
],
"properties": {
"displayName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The new display name"
}
},
"additionalProperties": false
}Correct a receipt's top-line amounts when the scan read them wrong: total, subtotal, tax amount, tax rate and tip. Each field is optional: omit it to leave it unchanged, pass null to clear it. At least one field is required. taxRateValue is a percentage (19 for 19%, not 0.19). Only the stored amounts change; a later reparse_receipt re-extracts and overwrites them. Use values the user gave or confirmed. Returns the receipt's amounts after the update.
| Argument | Type | Description |
|---|---|---|
| receiptId* | string | Receipt id to update (from list_receipts output). |
| taxRateValue | any | Tax rate as a percentage, 0-100 (19 for 19%). Omit to leave unchanged; null clears it. |
| subtotalValue | any | Subtotal before tax and tip. Omit to leave unchanged; null clears it. |
| taxAmountValue | any | Tax amount. Omit to leave unchanged; null clears it. |
| tipAmountValue | any | Tip amount. Omit to leave unchanged; null clears it. |
| totalAmountValue | any | Receipt total. Omit to leave unchanged; null clears it. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receiptId"
],
"properties": {
"receiptId": {
"type": "string",
"format": "uuid",
"description": "Receipt id to update (from list_receipts output)."
},
"taxRateValue": {
"anyOf": [
{
"type": "number",
"maximum": 100,
"minimum": 0
},
{
"type": "null"
}
],
"description": "Tax rate as a percentage, 0-100 (19 for 19%). Omit to leave unchanged; null clears it."
},
"subtotalValue": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Subtotal before tax and tip. Omit to leave unchanged; null clears it."
},
"taxAmountValue": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Tax amount. Omit to leave unchanged; null clears it."
},
"tipAmountValue": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Tip amount. Omit to leave unchanged; null clears it."
},
"totalAmountValue": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Receipt total. Omit to leave unchanged; null clears it."
}
},
"additionalProperties": false
}Change the user's decimal separator (DOT = 1,234.56, COMMA = 1.234,56), or opt in or out of marketing and product-update emails and push notifications. Pass only what the user asked to change; at least one field. Security and transactional messages always send and cannot be turned off. Only call this when the user explicitly asks. Returns the settings after the change. Language and theme are app-only.
| Argument | Type | Description |
|---|---|---|
| marketingPush | boolean | Marketing push |
| marketingEmails | boolean | Marketing emails |
| decimalSeparator | string | DOT for 1,234.56, COMMA for 1.234,56 |
| productUpdatesPush | boolean | Product-update push |
| productUpdatesEmails | boolean | Product-update emails |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"marketingPush": {
"type": "boolean",
"description": "Marketing push"
},
"marketingEmails": {
"type": "boolean",
"description": "Marketing emails"
},
"decimalSeparator": {
"enum": [
"DOT",
"COMMA"
],
"type": "string",
"description": "DOT for 1,234.56, COMMA for 1.234,56"
},
"productUpdatesPush": {
"type": "boolean",
"description": "Product-update push"
},
"productUpdatesEmails": {
"type": "boolean",
"description": "Product-update emails"
}
},
"additionalProperties": false
}Assign a spending category to a transaction. Identify the transaction by its transactionHash from get_transactions.
| Argument | Type | Description |
|---|---|---|
| category* | string | The category to assign |
| transactionHash* | string | The transaction hash (from get_transactions output) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"transactionHash",
"category"
],
"properties": {
"category": {
"enum": [
"TOP_UP",
"INVESTMENT",
"FRIENDS_FAMILY",
"INTEREST_EARNINGS",
"SUBSCRIPTIONS",
"SERVICES",
"GROCERIES",
"SHOPPING",
"RESTAURANTS",
"TRANSPORT",
"TRAVEL",
"UTILITIES",
"CASH",
"SALARY",
"FUEL",
"EV_CHARGING",
"GAMBLING",
"CHARITY_DONATIONS",
"TAXES",
"INSURANCE",
"HEALTHCARE",
"GENERAL"
],
"type": "string",
"description": "The category to assign"
},
"transactionHash": {
"type": "string",
"description": "The transaction hash (from get_transactions output)"
}
},
"additionalProperties": false
}| routingNumber |
| string |
| US ACH routing number |
| walletAddress | string | Wallet address (0x-prefixed, 40 hex characters) |
| walletConfirmed | boolean | Confirm wallet supports USDC/EURC/CHFAU/CADD/MXNB on Base. Required if walletAddress is provided. |
| countryOfResidence* | string | Contact's country of residence — ISO 3166-1 alpha-2 (e.g. 'DE', 'US') or alpha-3 (e.g. 'DEU', 'USA') code. Required by EU Travel Rule. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"firstName",
"lastName",
"countryOfResidence"
],
"properties": {
"bic": {
"type": "string",
"description": "BIC/SWIFT code (optional)"
},
"iban": {
"type": "string",
"description": "IBAN for EU bank accounts"
},
"email": {
"type": "string",
"format": "email",
"description": "Contact's email for automatic payment confirmations (optional)"
},
"lastName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Contact's last name (required by EU Travel Rule)"
},
"firstName": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Contact's first name (required by EU Travel Rule)"
},
"walletName": {
"type": "string",
"maxLength": 100,
"description": "Descriptive name for the wallet"
},
"accountType": {
"enum": [
"CHECKING",
"SAVINGS"
],
"type": "string",
"description": "US account type"
},
"bankCountry": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Bank country code"
},
"accountNumber": {
"type": "string",
"description": "US bank account number"
},
"routingNumber": {
"type": "string",
"description": "US ACH routing number"
},
"walletAddress": {
"type": "string",
"description": "Wallet address (0x-prefixed, 40 hex characters)"
},
"walletConfirmed": {
"type": "boolean",
"description": "Confirm wallet supports USDC/EURC/CHFAU/CADD/MXNB on Base. Required if walletAddress is provided."
},
"countryOfResidence": {
"type": "string",
"maxLength": 3,
"minLength": 2,
"description": "Contact's country of residence — ISO 3166-1 alpha-2 (e.g. 'DE', 'US') or alpha-3 (e.g. 'DEU', 'USA') code. Required by EU Travel Rule."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sessionId",
"recipient",
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"description": "Amount to send, in user-facing units (e.g. '10.00'). Must satisfy the per-execution and remaining per-period caps."
},
"currency": {
"enum": [
"USD",
"EUR"
],
"type": "string",
"description": "Stablecoin denomination — must match the session token."
},
"recipient": {
"type": "string",
"description": "The crypto recipient address (0x…). Must match the session's pinned recipient."
},
"sessionId": {
"type": "string",
"format": "uuid",
"description": "The agent session id returned by create_agent_session."
},
"idempotencyKey": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Optional stable key for safe retries. Reuse the SAME key when retrying a payment you're unsure completed (e.g. after a timeout) — the original transaction is returned rather than sending twice. Use a FRESH key for each new payment. If omitted, retries are only de-duplicated within a ~30s window."
}
},
"additionalProperties": false
}| maxAmountPerExecution* | string | Max per single payment, in user-facing units (e.g. '25.00'). Must be > 0 and ≤ maxAmountPerPeriod. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"recipient",
"currency",
"maxAmountPerExecution",
"maxAmountPerPeriod",
"periodSeconds"
],
"properties": {
"currency": {
"enum": [
"USD",
"EUR"
],
"type": "string",
"description": "Stablecoin denomination for the session (USD or EUR)."
},
"expiresAt": {
"type": "string",
"format": "date-time",
"description": "Optional ISO-8601 expiry. After this, executions are rejected and the session can no longer be used."
},
"recipient": {
"type": "string",
"description": "The single crypto recipient address (0x…) pinned for this session. Phase 1 is crypto-to-crypto; every execution must go to this address."
},
"fundingAmount": {
"type": "string",
"description": "Optional initial parent→child funding amount, in user-facing units. The child Safe balance is the hard ceiling on worst-case loss."
},
"periodSeconds": {
"type": "integer",
"description": "Length of the spending period in seconds (e.g. 86400 for a daily cap).",
"exclusiveMinimum": 0
},
"maxAmountPerPeriod": {
"type": "string",
"description": "Max total spend per rolling period, in user-facing units (e.g. '100.00'). Must be > 0."
},
"maxAmountPerExecution": {
"type": "string",
"description": "Max per single payment, in user-facing units (e.g. '25.00'). Must be > 0 and ≤ maxAmountPerPeriod."
}
},
"additionalProperties": false
}| string |
| bucketType | string |
| recipientAccountId | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "ISO 8601 UTC end of an absolute window"
},
"from": {
"type": "string",
"description": "ISO 8601 UTC start of an absolute window"
},
"skip": {
"type": "integer",
"minimum": 0
},
"take": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"period": {
"enum": [
"1d",
"1w",
"1m",
"1y"
],
"type": "string",
"description": "Rolling time window. Mutually exclusive with from/to."
},
"orderBy": {
"enum": [
"createdAt",
"amount"
],
"type": "string"
},
"bucketId": {
"type": "string"
},
"currency": {
"enum": [
"USDC",
"EURC",
"CHFAU",
"CADD",
"MXNB"
],
"type": "string"
},
"direction": {
"enum": [
"asc",
"desc"
],
"type": "string"
},
"bucketKind": {
"enum": [
"category",
"merchant"
],
"type": "string"
},
"bucketType": {
"enum": [
"user",
"bank-withdrawal",
"external-wallet",
"coinbase",
"wallet-connect",
"other"
],
"type": "string"
},
"recipientAccountId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}| cardId | string | Card programme card UUID. Use this when you already have the id. For natural-language queries like 'my subscriptions card' or 'card ending in 1234', use the `card` parameter instead. |
| format | string | "standard" (default): JSON with direction, amount, counterparty. "tax_export": compact CSV with sent/received amounts, token addresses, sender/recipient with full unmasked addresses, user address, and tax labels. Use with year param for annual exports. |
| offset | number | Skip N transactions for pagination |
| search | string | Free-text substring search across transaction notes, raw reference fields, and card-transaction merchant names (case-insensitive). Use this for natural-language queries like 'Lidl' or 'rent' that could appear in any user-visible description of a transaction. |
| status | string | Status filter. Default hides PENDING/FAILED (returns COMPLETED + COMPLETED_DELAYED). Pass "all" to return every status. |
| endDate | string | To date (ISO 8601, e.g. 2025-12-31) |
| hasNote | boolean | Filter by note presence. false = missing notes (for bulk annotation). true = only annotated. |
| category | string | Spending category: FRIENDS_FAMILY, GROCERIES, RESTAURANTS, SHOPPING, TRAVEL, SALARY, etc. |
| currency | string | Currency filter |
| direction | string | Direction relative to the user: incoming (you received), outgoing (you sent), or exchange (internal swap). |
| maxAmount | number | Max amount in human units (e.g. 500 = $500) |
| minAmount | number | Min amount in human units (e.g. 100 = $100) |
| startDate | string | From date (ISO 8601, e.g. 2025-01-01) |
| typeGroup | string | Group filter: transfer, exchange, deposit, withdrawal, earnings, topup, offramp, card, trade (crypto/stock buys and sells; rows carry a `trade` block with fills, fees and failure) |
| hasReceipt | boolean | Filter by receipt presence. false = no receipt attached (e.g. to chase missing receipts). true = has a receipt. |
| hasCategory | boolean | Filter by category presence. false = uncategorized transactions. true = only categorized. |
| counterparty | string | @username, wallet address, wallet name, IBAN, external provider (e.g. 'Coinbase'), or card merchant name (matches CARD_PURCHASE / CARD_ATM_WITHDRAWAL / CARD_REFUND rows by their `merchantName`). Use this for 'who was this transaction with' queries; use `search` for free-text catch-all. |
| transactionHash | string | Exact transaction hash (0x prefix optional, case-insensitive). Returns at most one transaction. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"card": {
"type": "string",
"description": "Friendly card filter — accepts either a 4-digit string (matches Card.lastFourDigits, e.g. \"1234\") or any other string (case-insensitive substring match on the card alias, e.g. \"subscriptions\"). Multiple cards can match the same alias; all matching cards owned by the user are included."
},
"sort": {
"enum": [
"newest",
"oldest",
"amount_desc",
"amount_asc"
],
"type": "string",
"description": "Sort: newest/oldest by date, amount_desc/amount_asc by raw amount (default: newest)"
},
"type": {
"type": "string",
"description": "Exact TransactionType: TRANSFER, SWAP, DEPOSIT_YO, WITHDRAWAL, ON_RAMP, OFF_RAMP_BANK, etc."
},
"year": {
"type": "integer",
"maximum": 2030,
"minimum": 2024,
"description": "Tax year (e.g. 2025). Filters Jan 1 – Dec 31. Overrides startDate/endDate."
},
"limit": {
"type": "number",
"minimum": 1,
"description": "Max results (standard: default 5, max 10; tax_export: default 50, max 250)"
},
"cardId": {
"type": "string",
"format": "uuid",
"description": "Card programme card UUID. Use this when you already have the id. For natural-language queries like 'my subscriptions card' or 'card ending in 1234', use the `card` parameter instead."
},
"format": {
"enum": [
"standard",
"tax_export"
],
"type": "string",
"description": "\"standard\" (default): JSON with direction, amount, counterparty. \"tax_export\": compact CSV with sent/received amounts, token addresses, sender/recipient with full unmasked addresses, user address, and tax labels. Use with year param for annual exports."
},
"offset": {
"type": "number",
"minimum": 0,
"description": "Skip N transactions for pagination"
},
"search": {
"type": "string",
"description": "Free-text substring search across transaction notes, raw reference fields, and card-transaction merchant names (case-insensitive). Use this for natural-language queries like 'Lidl' or 'rent' that could appear in any user-visible description of a transaction."
},
"status": {
"enum": [
"COMPLETED",
"COMPLETED_DELAYED",
"PENDING",
"FAILED",
"all"
],
"type": "string",
"description": "Status filter. Default hides PENDING/FAILED (returns COMPLETED + COMPLETED_DELAYED). Pass \"all\" to return every status."
},
"endDate": {
"type": "string",
"description": "To date (ISO 8601, e.g. 2025-12-31)"
},
"hasNote": {
"type": "boolean",
"description": "Filter by note presence. false = missing notes (for bulk annotation). true = only annotated."
},
"category": {
"type": "string",
"description": "Spending category: FRIENDS_FAMILY, GROCERIES, RESTAURANTS, SHOPPING, TRAVEL, SALARY, etc."
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency filter"
},
"direction": {
"enum": [
"incoming",
"outgoing",
"exchange"
],
"type": "string",
"description": "Direction relative to the user: incoming (you received), outgoing (you sent), or exchange (internal swap)."
},
"maxAmount": {
"type": "number",
"description": "Max amount in human units (e.g. 500 = $500)"
},
"minAmount": {
"type": "number",
"description": "Min amount in human units (e.g. 100 = $100)"
},
"startDate": {
"type": "string",
"description": "From date (ISO 8601, e.g. 2025-01-01)"
},
"typeGroup": {
"type": "string",
"description": "Group filter: transfer, exchange, deposit, withdrawal, earnings, topup, offramp, card, trade (crypto/stock buys and sells; rows carry a `trade` block with fills, fees and failure)"
},
"hasReceipt": {
"type": "boolean",
"description": "Filter by receipt presence. false = no receipt attached (e.g. to chase missing receipts). true = has a receipt."
},
"hasCategory": {
"type": "boolean",
"description": "Filter by category presence. false = uncategorized transactions. true = only categorized."
},
"counterparty": {
"type": "string",
"description": "@username, wallet address, wallet name, IBAN, external provider (e.g. 'Coinbase'), or card merchant name (matches CARD_PURCHASE / CARD_ATM_WITHDRAWAL / CARD_REFUND rows by their `merchantName`). Use this for 'who was this transaction with' queries; use `search` for free-text catch-all."
},
"transactionHash": {
"type": "string",
"description": "Exact transaction hash (0x prefix optional, case-insensitive). Returns at most one transaction."
}
},
"additionalProperties": false
}| contactUsername | string | Contact username or display name for transfer_contact_bank or transfer_contact_wallet. Accepts @username, username, or display name. |
| contactAccountId | string | Account ID for the contact's bank or wallet (contactAccountId from get_contacts). Required when a contact has multiple bank accounts or wallets. |
| recipientUsername | string | Moneda username (without @) for transfer_moneda payments |
| destinationChainId | string | Only Base ("eip155:8453") is accepted. Cross-chain payouts cannot be requested through an agent yet and are refused; the user can make them in the Moneda app. Only applies to transfer_contact_wallet. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paymentType",
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"description": "Amount in user-facing units (e.g. '50.00'). Must be greater than zero."
},
"source": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"main",
"earnings",
"sub_account"
],
"type": "string",
"description": "main (default): the checking balance. earnings: withdraw from the USD earnings vault (USD/EUR sends only). sub_account: pay from one of the user's single-signature sub-accounts (Base wallet recipients only; requires the write:sub_accounts scope)."
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Required when kind is sub_account (from list_sub_accounts)"
}
},
"description": "Where the money comes from. Omit to pay from the main balance.",
"additionalProperties": false
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD"
],
"type": "string",
"description": "Currency for the payment"
},
"accountId": {
"type": "string",
"format": "uuid",
"description": "Account ID for transfer_account payments (from get_my_accounts)"
},
"reference": {
"type": "string",
"maxLength": 140,
"description": "Optional payment memo. For bank transfers: SEPA max 140 chars, ACH max 10 chars. Allowed: letters, numbers, spaces, and / - ."
},
"paymentType": {
"enum": [
"transfer_moneda",
"transfer_account",
"transfer_contact_bank",
"transfer_contact_wallet"
],
"type": "string",
"description": "Type of payment: transfer_moneda (to a Moneda user), transfer_account (to own external account), transfer_contact_bank (to contact's bank), transfer_contact_wallet (to contact's wallet)"
},
"contactUsername": {
"type": "string",
"description": "Contact username or display name for transfer_contact_bank or transfer_contact_wallet. Accepts @username, username, or display name."
},
"contactAccountId": {
"type": "string",
"format": "uuid",
"description": "Account ID for the contact's bank or wallet (contactAccountId from get_contacts). Required when a contact has multiple bank accounts or wallets."
},
"recipientUsername": {
"type": "string",
"description": "Moneda username (without @) for transfer_moneda payments"
},
"destinationChainId": {
"type": "string",
"description": "Only Base (\"eip155:8453\") is accepted. Cross-chain payouts cannot be requested through an agent yet and are refused; the user can make them in the Moneda app. Only applies to transfer_contact_wallet."
}
},
"additionalProperties": false
}| string |
| The URL that returned HTTP 402. Stored for audit and shown to the user. |
| reference | string | Optional payment memo/reference (max 140 chars). |
| maxAmountRequired | string | Maximum amount from the 402 response, if different from amount. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"currency",
"payTo",
"resource",
"network"
],
"properties": {
"payTo": {
"type": "string",
"description": "Recipient wallet address (0x-prefixed, 42 chars) from paymentRequirements.payTo."
},
"amount": {
"type": "string",
"description": "Payment amount in human-readable form (e.g. \"0.01\"). From paymentRequirements.maxAmountRequired or the exact price."
},
"network": {
"type": "string",
"description": "Blockchain network from paymentRequirements.network. Must be \"base\" or \"base-sepolia\"."
},
"currency": {
"enum": [
"USD",
"EUR"
],
"type": "string",
"description": "Payment currency. USD maps to USDC, EUR maps to EURC."
},
"resource": {
"type": "string",
"format": "uri",
"description": "The URL that returned HTTP 402. Stored for audit and shown to the user."
},
"reference": {
"type": "string",
"maxLength": 140,
"description": "Optional payment memo/reference (max 140 chars)."
},
"maxAmountRequired": {
"type": "string",
"description": "Maximum amount from the 402 response, if different from amount."
}
},
"additionalProperties": false
}| contactUsername |
| string |
| Contact username or display name for transfer_contact_wallet |
| contactAccountId | string | The contact wallet's account ID (from get_contacts), when the contact has several wallets |
| recipientUsername | string | Moneda username (without @) for transfer_moneda |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"paymentType",
"amount",
"currency",
"frequency",
"startDate"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount per payment in user-facing units (e.g. '50.00')"
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last possible payment date, YYYY-MM-DD. Omit for no end."
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD"
],
"type": "string"
},
"frequency": {
"enum": [
"DAILY",
"WEEKLY",
"BIWEEKLY",
"MONTHLY",
"QUARTERLY"
],
"type": "string"
},
"reference": {
"type": "string",
"maxLength": 140,
"description": "Optional memo attached to each payment"
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First payment date, YYYY-MM-DD in the user's timezone. Today or later, within a year."
},
"paymentType": {
"enum": [
"transfer_moneda",
"transfer_contact_wallet"
],
"type": "string",
"description": "transfer_moneda (to a Moneda user, pass recipientUsername) or transfer_contact_wallet (to a contact's wallet on Base, pass contactUsername or contactAccountId)"
},
"contactUsername": {
"type": "string",
"description": "Contact username or display name for transfer_contact_wallet"
},
"contactAccountId": {
"type": "string",
"format": "uuid",
"description": "The contact wallet's account ID (from get_contacts), when the contact has several wallets"
},
"recipientUsername": {
"type": "string",
"description": "Moneda username (without @) for transfer_moneda"
}
},
"additionalProperties": false
}| contactAccountId |
| string |
| SPEND only: contact wallet account ID |
| recipientUsername | string | SPEND only: Moneda username (without @) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"proposalType",
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$",
"description": "Amount in user-facing units, e.g. '25.00'"
},
"currency": {
"enum": [
"USD",
"EUR",
"CHF",
"CAD",
"MXN"
],
"type": "string",
"description": "Currency"
},
"accountId": {
"type": "string",
"format": "uuid",
"description": "SPEND only: one of the user's saved wallets"
},
"description": {
"type": "string",
"maxLength": 280,
"description": "Note shown to co-owners"
},
"proposalType": {
"enum": [
"SPEND",
"WITHDRAW"
],
"type": "string",
"description": "SPEND pays a recipient; WITHDRAW returns to main"
},
"subAccountId": {
"type": "string",
"format": "uuid",
"description": "Sub-account UUID (from list_sub_accounts)"
},
"contactUsername": {
"type": "string",
"description": "SPEND only: contact username"
},
"contactAccountId": {
"type": "string",
"format": "uuid",
"description": "SPEND only: contact wallet account ID"
},
"recipientUsername": {
"type": "string",
"description": "SPEND only: Moneda username (without @)"
}
},
"additionalProperties": false
}