Moneda
Financial intelligence for AI: manage balances, transactions, payments, and more
What it does
Moneda is an MCP server, a connector that lets an AI assistant use it as a tool. It is hosted: an assistant connects to it over the internet, nothing to install.
From the publisher's description, Electra Index matched it to one capability: payments. That makes it a candidate for tasks such as detect fraudulent transactions or reconcile payments.
Facts come from the Official MCP Registry, as declared by the publisher. Capabilities are matched automatically (low confidence). None of this is a test of the tool.
At a glance
How to connect
As declared in the Official MCP Registry · hosted endpoint tested by Electra Index 36m ago (live check)Hosted endpoint
https://mcp.moneda.com/api/mcpstreamable-http
In Claude Code: claude mcp add --transport http moneda https://mcp.moneda.com/api/mcp
MCP settings (Claude Desktop, Cursor and other MCP clients)
{
"mcpServers": {
"moneda": {
"url": "https://mcp.moneda.com/api/mcp"
}
}
}Live check
Electra Index connected to the hosted endpoint 36m agoONLINE Moneda answered an MCP connection on 27 Oct 2026 and introduced itself as moneda-mcp 0.14.0 (MCP protocol 2025-06-18).
138 tools offered to AI assistants
health· Check the health and status of the Moneda MCP serversearch_knowledge· 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.list_faq_categories· 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.get_faq_category· Get all FAQ items in a specific category. Use the moneda://knowledge resource to discover available category slugs.get_faq_item· 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.get_balance· 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 uget_wallet· 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 @get_transactions· 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/CoinTracget_spending_by_type_group· 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, orget_exchange_rate· Get the current exchange rate between two currenciesget_lifetime_savings· 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 muchlist_bills· 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
Show 88 more
get_bill· 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.get_apy_rates· 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 vaultget_earnings_time_series· 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.update_display_name· Update the authenticated user's display nameset_passkey_label· 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 nset_help_improve_moneda· 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:update_settings· 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 transactionalget_points_balance· Get the user's current points balance from the rewards programget_points_activity· Get the user's points activity history showing what actions earned or spent pointsget_referral_code· Get the user's unique referral code and referral countget_referees· Get the list of users this user has referred to Monedaget_virtual_accounts· 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).get_virtual_account_limits· 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).get_information_requests· 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 NEVERget_settlement_estimate· 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 tget_contacts· 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_conget_settings· Get the user's app settings and preferences: language, currency, country, theme, notifications, biometrics, and display options.get_recovery_contacts· Get the user's recovery contacts and the people who have you as their recovery contact (guardian).get_passkeys· 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 addeget_my_accounts· 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 — useupdate_transaction_category· Assign a spending category to a transaction. Identify the transaction by its transactionHash from get_transactions.add_transaction_note· Add or update a personal note on a transaction. Identify the transaction by its transactionHash from get_transactions. Maximum 140 characters.batch_update_transaction_categories· 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 fibatch_add_transaction_notes· 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 firadd_wallet· 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 useradd_bank· 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 verifieadd_contact_external· 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 netadd_contact_moneda· Add a Moneda user to your contacts by their username. If the contact already exists but was deactivated, it will be reactivated.search_users· 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 usernamlist_banks_for_country· 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)list_supported_destinations· 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 providerget_payment_quote· 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 longinitiate_payment· 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_einitiate_currency_exchange· 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 destinationpropose_scheduled_payment· 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 scheduleinitiate_crypto_trade· 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 byinitiate_token_buy· 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 Bainitiate_earnings_move· 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_get_payment_status· Check the current status of a payment request. Use this to poll for approval after calling initiate_payment. Terminal statuses: COMPLETED, FAILED, EXPIRED, REJECTED.pay_x402· 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 executlist_sendable_crypto· 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,initiate_crypto_send· 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 slist_sub_accounts· 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.get_sub_account· Get one sub-account by id with full detail — name, status, type, members, parent + child Safe addresses, deployment index, close timestamp.get_sub_account_balance· 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/CHget_total_wealth· 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 grlist_sub_account_proposals· 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. Reget_sub_account_proposal· Get one joint-account request by id, including the per-member approval list (who approved, who rejected, and when). Read-only.propose_sub_account_top_up· 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; npropose_sub_account_withdraw· 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_accounpropose_sub_account_swap· 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_exchapropose_sub_account_freeze· 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.propose_sub_account_multisig_proposal· 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_withget_current_subscription· 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_list_subscription_charges· 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 periget_subscription_invoice· 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 upllist_notifications· 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 whget_unread_notification_count· 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?'.get_moneda_message· 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 whetherget_moneda_message_attachment_url· 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.list_message_replies· 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.request_message_reply_upload· 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 `curlComreply_to_moneda_message· 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 userundo_message_reply· 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 documentlist_receipts· 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_receipt· 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 theget_receipt_line_items· 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.search_receipt_line_items· 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`,list_bewirtungsbelege· 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 siglist_eigenbelege· 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 `transactionHasrequest_receipt_upload· 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 — theyfinalize_receipt_upload· 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 autimport_receipt_from_url· 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. Sinreparse_receipt· 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. Synchronousdelete_receipt· 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 movemark_receipt_partial_payment· 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 reupdate_receipt_amounts· 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 isattach_receipt· 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 ddetach_receipt· 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.confirm_receipt_suggestion· 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`reject_receipt_suggestion· 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.list_recovery_emails· 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.get_recovery_email· Get one recovery email's full detail by id — email, weight, status, timestamps, notes, and the on-chain account address it protects.get_recovery_config· 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.get_recovery_status· 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 includingget_daily_spending· 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`.get_spending_by_category· 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`.get_spending_by_contact· 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_tra
The first 100 are shown.
What "online" means: the server answered an MCP connection at the time of the check. It is not a guarantee of security, quality or continuous uptime. How we test: we open an MCP session and ask for the tool list, as an AI assistant would. We never run a tool and never send a key. Checked every few days. Method
Is this your server? Monitoring Pro: a check every 30 minutes and an email within the hour when it stops answering. Launch offer: $39.99 once, for life.
Tasks it helps with
Share of each task's required capabilities it covers| Detect fraudulent transactions Payments | 50% |
| Reconcile payments Payments | 33% |
| Buy products online Payments | 33% |
| Handle refund requests Payments | 33% |
Similar tools
Listed for the same task: detect fraudulent transactions- RevinhoREMOTELOCALRead-only SaaS business intelligence from GA4, Stripe, and Google Search Console
- mcpREMOTELOCALPay-per-query x402 business intelligence on Base, settled in USDC via the native 402 payment flow
- OZmozREMOTELOCALReady-to-use backend for AI-built apps, with Alex AI to analyze your data in plain language
- q402-mcpREMOTELOCALQ402 - gasless payments, yield, escrow, bridge & NAV triggers on 12 EVM chains. Sandbox-default
- BananaSplitREMOTELOCALTrack shared expenses, payments and balances across BananaSplit groups and friends
- Seller Fees CalculatorREMOTELOCALGumroad, Stripe, PayPal and Etsy seller fees, payouts and break-even prices. Local, no API key
Ready-made AI agents
- Digits86$65/mo · Prices & score →
- $15/mo · free plan · Prices & score →
- Cal.com74$12/mo · free plan · Prices & score →
- Tipalti67$99/mo · Prices & score →
Facts & evidence
Each fact shows where it was seen and when.| Fact | Value | Evidence | Source | Last confirmed |
|---|---|---|---|---|
| Hosted endpoint | https://mcp.moneda.com/api/mcp | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Local install (package) | no | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Remote access (hosted) | yes | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Website | https://moneda.com | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Repository | https://github.com/MonedaIO/app | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Registry status | active | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| Version | 0.3.0 | DECLARED | SRC-001 Official MCP Registry | 42m ago |
| MCP server | yes | DECLARED | SRC-001 Official MCP Registry | 42m ago |
Change history
- NEW27 Oct 2026first seen in the index
Is this page accurate?
Flag it and our robot re-checks the official source. Reports never change a score.Is Moneda still online?
Free alerts · no accountDo you run Moneda? Know when it stops answering
For publishers · optionalIts hosted endpoint can be monitored. Monitoring Pro connects every 30 minutes like an AI assistant, emails you within the hour when it stops answering, keeps a 90-day availability history and adds your answer rate to your badge.
Monitoring never changes a score or a rank.
Questions about Moneda
How do I connect Moneda?
Use the hosted endpoint https://mcp.moneda.com/api/mcp in your assistant's MCP settings. The exact settings are in "How to connect" above, as declared in the Official MCP Registry.
What tools does Moneda offer?
When Electra Index connected on 27 Oct 2026, it listed 138 tools: health, search_knowledge, list_faq_categories, get_faq_category, get_faq_item, get_balance, get_wallet, get_transactions and more. The full list is in "Live check" above.
Is Moneda online?
Yes. Its hosted endpoint answered an MCP connection from Electra Index 36m ago.
What can I use Moneda for?
Based on its description, it is most relevant to: detect fraudulent transactions, reconcile payments, buy products online, handle refund requests.