[{"data":1,"prerenderedAt":658},["ShallowReactive",2],{"docs-nav":3,"guide-mcp":629},{"version":4,"groups":5,"schemas":479,"events":514},"2026-09-25",[6,213,336,400],{"name":7,"tags":8},"Accept payments",[9,34,62,85,113,135,172],{"name":10,"slug":11,"operations":12},"Payments","payments",[13,19,24,29],{"id":14,"slug":15,"method":16,"path":17,"summary":18,"tag":10},"listPayments","list-payments","get","\u002Fapi\u002Fv1\u002Fpayments","List payments",{"id":20,"slug":21,"method":22,"path":17,"summary":23,"tag":10},"createPayment","create-payment","post","Create a bank-transfer payment",{"id":25,"slug":26,"method":16,"path":27,"summary":28,"tag":10},"getPayment","get-payment","\u002Fapi\u002Fv1\u002Fpayments\u002F{id}","Retrieve (verify) a payment",{"id":30,"slug":31,"method":16,"path":32,"summary":33,"tag":10},"getPaymentByReference","get-payment-by-reference","\u002Fapi\u002Fv1\u002Fpayments\u002Freference\u002F{reference}","Retrieve (verify) a payment by your reference",{"name":35,"slug":36,"operations":37},"Virtual accounts","virtual-accounts",[38,43,47,52,57],{"id":39,"slug":40,"method":16,"path":41,"summary":42,"tag":35},"listVirtualAccounts","list-virtual-accounts","\u002Fapi\u002Fv1\u002Fvirtual-accounts","List virtual accounts",{"id":44,"slug":45,"method":22,"path":41,"summary":46,"tag":35},"createVirtualAccount","create-virtual-account","Create a virtual account",{"id":48,"slug":49,"method":16,"path":50,"summary":51,"tag":35},"getVirtualAccount","get-virtual-account","\u002Fapi\u002Fv1\u002Fvirtual-accounts\u002F{id}","Retrieve a virtual account",{"id":53,"slug":54,"method":16,"path":55,"summary":56,"tag":35},"getVirtualAccountByReference","get-virtual-account-by-reference","\u002Fapi\u002Fv1\u002Fvirtual-accounts\u002Freference\u002F{reference}","Retrieve a dynamic virtual account by your reference",{"id":58,"slug":59,"method":22,"path":60,"summary":61,"tag":35},"closeVirtualAccount","close-virtual-account","\u002Fapi\u002Fv1\u002Fvirtual-accounts\u002F{id}\u002Fclose","Close a dedicated virtual account",{"name":63,"slug":64,"operations":65},"Customers","customers",[66,71,75,80],{"id":67,"slug":68,"method":16,"path":69,"summary":70,"tag":63},"listCustomers","list-customers","\u002Fapi\u002Fv1\u002Fcustomers","List customers",{"id":72,"slug":73,"method":22,"path":69,"summary":74,"tag":63},"createCustomer","create-customer","Create a customer",{"id":76,"slug":77,"method":16,"path":78,"summary":79,"tag":63},"getCustomer","get-customer","\u002Fapi\u002Fv1\u002Fcustomers\u002F{id}","Retrieve a customer",{"id":81,"slug":82,"method":83,"path":78,"summary":84,"tag":63},"updateCustomer","update-customer","patch","Update a customer",{"name":86,"slug":87,"operations":88},"Checkout","checkout",[89,94,98,103,108],{"id":90,"slug":91,"method":16,"path":92,"summary":93,"tag":86},"listCheckoutSessions","list-checkout-sessions","\u002Fapi\u002Fv1\u002Fcheckout\u002Fsessions","List checkout sessions",{"id":95,"slug":96,"method":22,"path":92,"summary":97,"tag":86},"createCheckoutSession","create-checkout-session","Create a hosted checkout session",{"id":99,"slug":100,"method":16,"path":101,"summary":102,"tag":86},"getCheckoutSession","get-checkout-session","\u002Fapi\u002Fv1\u002Fcheckout\u002Fsessions\u002F{id}","Retrieve a checkout session",{"id":104,"slug":105,"method":16,"path":106,"summary":107,"tag":86},"getCheckoutSessionByReference","get-checkout-session-by-reference","\u002Fapi\u002Fv1\u002Fcheckout\u002Fsessions\u002Freference\u002F{reference}","Retrieve a checkout session by your reference",{"id":109,"slug":110,"method":22,"path":111,"summary":112,"tag":86},"expireCheckoutSession","expire-checkout-session","\u002Fapi\u002Fv1\u002Fcheckout\u002Fsessions\u002F{id}\u002Fexpire","Expire an open checkout session",{"name":114,"slug":115,"operations":116},"Payment links","payment-links",[117,122,126,131],{"id":118,"slug":119,"method":16,"path":120,"summary":121,"tag":114},"listPaymentLinks","list-payment-links","\u002Fapi\u002Fv1\u002Fpayment-links","List payment links",{"id":123,"slug":124,"method":22,"path":120,"summary":125,"tag":114},"createPaymentLink","create-payment-link","Create a payment link",{"id":127,"slug":128,"method":16,"path":129,"summary":130,"tag":114},"getPaymentLink","get-payment-link","\u002Fapi\u002Fv1\u002Fpayment-links\u002F{id}","Retrieve a payment link",{"id":132,"slug":133,"method":83,"path":129,"summary":134,"tag":114},"updatePaymentLink","update-payment-link","Update or deactivate a payment link",{"name":136,"slug":137,"operations":138},"Invoices","invoices",[139,144,148,153,157,162,167],{"id":140,"slug":141,"method":16,"path":142,"summary":143,"tag":136},"listInvoices","list-invoices","\u002Fapi\u002Fv1\u002Finvoices","List invoices",{"id":145,"slug":146,"method":22,"path":142,"summary":147,"tag":136},"createInvoice","create-invoice","Create a draft invoice",{"id":149,"slug":150,"method":16,"path":151,"summary":152,"tag":136},"getInvoice","get-invoice","\u002Fapi\u002Fv1\u002Finvoices\u002F{id}","Retrieve an invoice",{"id":154,"slug":155,"method":83,"path":151,"summary":156,"tag":136},"updateInvoice","update-invoice","Update a draft invoice",{"id":158,"slug":159,"method":22,"path":160,"summary":161,"tag":136},"finalizeInvoice","finalize-invoice","\u002Fapi\u002Fv1\u002Finvoices\u002F{id}\u002Ffinalize","Finalize an invoice",{"id":163,"slug":164,"method":22,"path":165,"summary":166,"tag":136},"voidInvoice","void-invoice","\u002Fapi\u002Fv1\u002Finvoices\u002F{id}\u002Fvoid","Void an invoice",{"id":168,"slug":169,"method":22,"path":170,"summary":171,"tag":136},"markInvoiceUncollectible","mark-invoice-uncollectible","\u002Fapi\u002Fv1\u002Finvoices\u002F{id}\u002Fmark-uncollectible","Mark an invoice uncollectible (it can still be paid)",{"name":173,"slug":174,"operations":175},"Subscriptions","subscriptions",[176,181,185,190,194,199,203,208],{"id":177,"slug":178,"method":16,"path":179,"summary":180,"tag":173},"listPlans","list-plans","\u002Fapi\u002Fv1\u002Fplans","List plans",{"id":182,"slug":183,"method":22,"path":179,"summary":184,"tag":173},"createPlan","create-plan","Create a plan",{"id":186,"slug":187,"method":16,"path":188,"summary":189,"tag":173},"getPlan","get-plan","\u002Fapi\u002Fv1\u002Fplans\u002F{id}","Retrieve a plan",{"id":191,"slug":192,"method":83,"path":188,"summary":193,"tag":173},"updatePlan","update-plan","Update or deactivate a plan",{"id":195,"slug":196,"method":16,"path":197,"summary":198,"tag":173},"listSubscriptions","list-subscriptions","\u002Fapi\u002Fv1\u002Fsubscriptions","List subscriptions",{"id":200,"slug":201,"method":22,"path":197,"summary":202,"tag":173},"createSubscription","create-subscription","Subscribe a customer to a plan",{"id":204,"slug":205,"method":16,"path":206,"summary":207,"tag":173},"getSubscription","get-subscription","\u002Fapi\u002Fv1\u002Fsubscriptions\u002F{id}","Retrieve a subscription",{"id":209,"slug":210,"method":22,"path":211,"summary":212,"tag":173},"cancelSubscription","cancel-subscription","\u002Fapi\u002Fv1\u002Fsubscriptions\u002F{id}\u002Fcancel","Cancel a subscription (now, or at the end of the current period)",{"name":214,"tags":215},"Move money",[216,249,272,291],{"name":217,"slug":218,"operations":219},"Transfers","transfers",[220,225,229,234,239,244],{"id":221,"slug":222,"method":16,"path":223,"summary":224,"tag":217},"listTransfers","list-transfers","\u002Fapi\u002Fv1\u002Ftransfers","List transfers",{"id":226,"slug":227,"method":22,"path":223,"summary":228,"tag":217},"createTransfer","create-transfer","Send money from your available balance",{"id":230,"slug":231,"method":16,"path":232,"summary":233,"tag":217},"getTransfer","get-transfer","\u002Fapi\u002Fv1\u002Ftransfers\u002F{id}","Retrieve a transfer",{"id":235,"slug":236,"method":16,"path":237,"summary":238,"tag":217},"getTransferByReference","get-transfer-by-reference","\u002Fapi\u002Fv1\u002Ftransfers\u002Freference\u002F{reference}","Retrieve a transfer by your reference",{"id":240,"slug":241,"method":22,"path":242,"summary":243,"tag":217},"resolveAccount","resolve-account","\u002Fapi\u002Fv1\u002Ftransfers\u002Fname-enquiry","Resolve a bank account name before sending",{"id":245,"slug":246,"method":16,"path":247,"summary":248,"tag":217},"listBanks","list-banks","\u002Fapi\u002Fv1\u002Fbanks","List supported banks",{"name":250,"slug":251,"operations":252},"Refunds","refunds",[253,258,262,267],{"id":254,"slug":255,"method":16,"path":256,"summary":257,"tag":250},"listRefunds","list-refunds","\u002Fapi\u002Fv1\u002Frefunds","List refunds",{"id":259,"slug":260,"method":22,"path":256,"summary":261,"tag":250},"createRefund","create-refund","Refund a payment (fully or partially)",{"id":263,"slug":264,"method":16,"path":265,"summary":266,"tag":250},"getRefund","get-refund","\u002Fapi\u002Fv1\u002Frefunds\u002F{id}","Retrieve a refund",{"id":268,"slug":269,"method":16,"path":270,"summary":271,"tag":250},"getRefundByReference","get-refund-by-reference","\u002Fapi\u002Fv1\u002Frefunds\u002Freference\u002F{reference}","Retrieve a refund by its reference",{"name":273,"slug":274,"operations":275},"Settlements","settlements",[276,281,286],{"id":277,"slug":278,"method":16,"path":279,"summary":280,"tag":273},"listSettlements","list-settlements","\u002Fapi\u002Fv1\u002Fsettlements","List settlements (payouts of your available balance to your bank account)",{"id":282,"slug":283,"method":16,"path":284,"summary":285,"tag":273},"getSettlement","get-settlement","\u002Fapi\u002Fv1\u002Fsettlements\u002F{id}","Retrieve a settlement",{"id":287,"slug":288,"method":16,"path":289,"summary":290,"tag":273},"listSettlementItems","list-settlement-items","\u002Fapi\u002Fv1\u002Fsettlements\u002F{id}\u002Fitems","Ledger movements covered by a settlement",{"name":292,"slug":293,"operations":294},"Subaccounts & splits","subaccounts-splits",[295,300,304,309,313,318,323,327,332],{"id":296,"slug":297,"method":16,"path":298,"summary":299,"tag":292},"listSubaccounts","list-subaccounts","\u002Fapi\u002Fv1\u002Fsubaccounts","List subaccounts",{"id":301,"slug":302,"method":22,"path":298,"summary":303,"tag":292},"createSubaccount","create-subaccount","Create a subaccount (a seller\u002Fvendor on your platform) with a verified payout account",{"id":305,"slug":306,"method":16,"path":307,"summary":308,"tag":292},"getSubaccount","get-subaccount","\u002Fapi\u002Fv1\u002Fsubaccounts\u002F{id}","Retrieve a subaccount",{"id":310,"slug":311,"method":83,"path":307,"summary":312,"tag":292},"updateSubaccount","update-subaccount","Update a subaccount",{"id":314,"slug":315,"method":16,"path":316,"summary":317,"tag":292},"getSubaccountBalance","get-subaccount-balance","\u002Fapi\u002Fv1\u002Fsubaccounts\u002F{id}\u002Fbalance","A subaccount's balances (from the ledger)",{"id":319,"slug":320,"method":16,"path":321,"summary":322,"tag":292},"listSplitRules","list-split-rules","\u002Fapi\u002Fv1\u002Fsplit-rules","List split rules",{"id":324,"slug":325,"method":22,"path":321,"summary":326,"tag":292},"createSplitRule","create-split-rule","Create a split rule",{"id":328,"slug":329,"method":16,"path":330,"summary":331,"tag":292},"getSplitRule","get-split-rule","\u002Fapi\u002Fv1\u002Fsplit-rules\u002F{id}","Retrieve a split rule",{"id":333,"slug":334,"method":83,"path":330,"summary":335,"tag":292},"updateSplitRule","update-split-rule","Activate or deactivate a split rule",{"name":337,"tags":338},"Account",[339,353,381],{"name":340,"slug":341,"operations":342},"Balance","balance",[343,348],{"id":344,"slug":345,"method":16,"path":346,"summary":347,"tag":340},"getBalance","get-balance","\u002Fapi\u002Fv1\u002Fbalance","Retrieve your balances",{"id":349,"slug":350,"method":16,"path":351,"summary":352,"tag":340},"listTransactions","list-transactions","\u002Fapi\u002Fv1\u002Ftransactions","List ledger transactions",{"name":354,"slug":355,"operations":356},"Reports","reports",[357,362,366,371,376],{"id":358,"slug":359,"method":16,"path":360,"summary":361,"tag":354},"listReports","list-reports","\u002Fapi\u002Fv1\u002Freports","List reports",{"id":363,"slug":364,"method":22,"path":360,"summary":365,"tag":354},"createReport","create-report","Generate a CSV report",{"id":367,"slug":368,"method":16,"path":369,"summary":370,"tag":354},"getReport","get-report","\u002Fapi\u002Fv1\u002Freports\u002F{id}","Retrieve a report",{"id":372,"slug":373,"method":16,"path":374,"summary":375,"tag":354},"downloadReport","download-report","\u002Fapi\u002Fv1\u002Freports\u002F{id}\u002Fdownload","Download a finished report (CSV)",{"id":377,"slug":378,"method":16,"path":379,"summary":380,"tag":354},"getStatement","get-statement","\u002Fapi\u002Fv1\u002Fstatement","Balance statement: opening, credits, debits, closing per balance",{"name":382,"slug":383,"operations":384},"Risk","risk",[385,390,395],{"id":386,"slug":387,"method":16,"path":388,"summary":389,"tag":382},"listRiskEvents","list-risk-events","\u002Fapi\u002Fv1\u002Frisk-events","List risk events (blocked and flagged activity)",{"id":391,"slug":392,"method":16,"path":393,"summary":394,"tag":382},"getRiskLimits","get-risk-limits","\u002Fapi\u002Fv1\u002Frisk-limits","Your effective risk limits (kobo; 0 = no limit)",{"id":396,"slug":397,"method":22,"path":398,"summary":399,"tag":382},"setCustomerRiskStatus","set-customer-risk-status","\u002Fapi\u002Fv1\u002Fcustomers\u002F{id}\u002Frisk-status","Set a customer's risk status",{"name":401,"tags":402},"Developers",[403,465],{"name":404,"slug":405,"operations":406},"Webhooks","webhooks",[407,412,416,421,425,430,435,440,445,450,455,460],{"id":408,"slug":409,"method":16,"path":410,"summary":411,"tag":404},"listWebhookEndpoints","list-webhook-endpoints","\u002Fapi\u002Fv1\u002Fwebhook-endpoints","List webhook endpoints",{"id":413,"slug":414,"method":22,"path":410,"summary":415,"tag":404},"createWebhookEndpoint","create-webhook-endpoint","Register a webhook endpoint. The signing secret is returned only in this response.",{"id":417,"slug":418,"method":16,"path":419,"summary":420,"tag":404},"getWebhookEndpoint","get-webhook-endpoint","\u002Fapi\u002Fv1\u002Fwebhook-endpoints\u002F{id}","Retrieve a webhook endpoint",{"id":422,"slug":423,"method":83,"path":419,"summary":424,"tag":404},"updateWebhookEndpoint","update-webhook-endpoint","Update a webhook endpoint (re-enabling resets its health)",{"id":426,"slug":427,"method":428,"path":419,"summary":429,"tag":404},"deleteWebhookEndpoint","delete-webhook-endpoint","delete","Delete a webhook endpoint (deliveries stop; history is kept)",{"id":431,"slug":432,"method":22,"path":433,"summary":434,"tag":404},"rotateWebhookSecret","rotate-webhook-secret","\u002Fapi\u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Frotate-secret","Rotate the signing secret",{"id":436,"slug":437,"method":22,"path":438,"summary":439,"tag":404},"testWebhookEndpoint","test-webhook-endpoint","\u002Fapi\u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Ftest","Send a signed webhook.test event to this endpoint only",{"id":441,"slug":442,"method":16,"path":443,"summary":444,"tag":404},"listEndpointDeliveries","list-endpoint-deliveries","\u002Fapi\u002Fv1\u002Fwebhook-endpoints\u002F{id}\u002Fdeliveries","Deliveries to this endpoint",{"id":446,"slug":447,"method":16,"path":448,"summary":449,"tag":404},"listEvents","list-events","\u002Fapi\u002Fv1\u002Fevents","List events",{"id":451,"slug":452,"method":16,"path":453,"summary":454,"tag":404},"getEvent","get-event","\u002Fapi\u002Fv1\u002Fevents\u002F{id}","Retrieve an event",{"id":456,"slug":457,"method":16,"path":458,"summary":459,"tag":404},"listEventDeliveries","list-event-deliveries","\u002Fapi\u002Fv1\u002Fevents\u002F{id}\u002Fdeliveries","Delivery history for an event",{"id":461,"slug":462,"method":22,"path":463,"summary":464,"tag":404},"replayEvent","replay-event","\u002Fapi\u002Fv1\u002Fevents\u002F{id}\u002Freplay","Re-deliver an event",{"name":466,"slug":467,"operations":468},"Sandbox","sandbox",[469,474],{"id":470,"slug":471,"method":22,"path":472,"summary":473,"tag":466},"simulateTransfer","simulate-transfer","\u002Fapi\u002Fv1\u002Fsandbox\u002Fsimulate-transfer","Simulate a customer bank transfer (test mode only)",{"id":475,"slug":476,"method":16,"path":477,"summary":478,"tag":466},"listSandboxTestValues","list-sandbox-test-values","\u002Fapi\u002Fv1\u002Fsandbox\u002Ftest-values","List the sandbox test values (test mode only)",[480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,340,503,504,505,506,507,508,509,510,511,512,513],"Error","Customer","BankTransferInstructions","Payment","VirtualAccount","Transfer","Refund","Subaccount","SubaccountBalance","SplitRule","CheckoutSession","PaymentLink","InvoiceItem","InvoiceTax","Invoice","RiskEvent","RiskLimits","Plan","Subscription","Report","Statement","AccountResolution","Bank","LedgerTransaction","WebhookEndpoint","DeletedObject","WebhookTest","Event","WebhookDelivery","SimulatedTransfer","SandboxTestValues","Settlement","SettlementItem","ListMeta",[515,518,521,524,527,530,533,536,539,542,545,548,551,554,557,560,563,566,569,572,575,578,581,584,587,590,593,596,599,602,605,608,611,614,617,620,623,626],{"type":516,"slug":517},"payment.created","payment-created",{"type":519,"slug":520},"payment.pending","payment-pending",{"type":522,"slug":523},"payment.succeeded","payment-succeeded",{"type":525,"slug":526},"payment.failed","payment-failed",{"type":528,"slug":529},"payment.expired","payment-expired",{"type":531,"slug":532},"payment.under_review","payment-under_review",{"type":534,"slug":535},"payment.reversed","payment-reversed",{"type":537,"slug":538},"payment.partially_refunded","payment-partially_refunded",{"type":540,"slug":541},"payment.refunded","payment-refunded",{"type":543,"slug":544},"virtual_account.created","virtual_account-created",{"type":546,"slug":547},"virtual_account.updated","virtual_account-updated",{"type":549,"slug":550},"virtual_account.closed","virtual_account-closed",{"type":552,"slug":553},"transfer.created","transfer-created",{"type":555,"slug":556},"transfer.processing","transfer-processing",{"type":558,"slug":559},"transfer.succeeded","transfer-succeeded",{"type":561,"slug":562},"transfer.failed","transfer-failed",{"type":564,"slug":565},"transfer.reversed","transfer-reversed",{"type":567,"slug":568},"settlement.created","settlement-created",{"type":570,"slug":571},"settlement.completed","settlement-completed",{"type":573,"slug":574},"settlement.failed","settlement-failed",{"type":576,"slug":577},"refund.created","refund-created",{"type":579,"slug":580},"refund.succeeded","refund-succeeded",{"type":582,"slug":583},"refund.failed","refund-failed",{"type":585,"slug":586},"checkout.session.completed","checkout-session-completed",{"type":588,"slug":589},"checkout.session.expired","checkout-session-expired",{"type":591,"slug":592},"invoice.created","invoice-created",{"type":594,"slug":595},"invoice.finalized","invoice-finalized",{"type":597,"slug":598},"invoice.paid","invoice-paid",{"type":600,"slug":601},"invoice.voided","invoice-voided",{"type":603,"slug":604},"invoice.marked_uncollectible","invoice-marked_uncollectible",{"type":606,"slug":607},"subscription.created","subscription-created",{"type":609,"slug":610},"subscription.updated","subscription-updated",{"type":612,"slug":613},"subscription.past_due","subscription-past_due",{"type":615,"slug":616},"subscription.canceled","subscription-canceled",{"type":618,"slug":619},"report.ready","report-ready",{"type":621,"slug":622},"report.failed","report-failed",{"type":624,"slug":625},"risk.event_flagged","risk-event_flagged",{"type":627,"slug":628},"webhook.test","webhook-test",{"slug":630,"path":631,"title":632,"description":633,"html":634,"toc":635},"mcp","\u002Fmcp","MCP server","Let AI agents such as Claude, Cursor and VS Code work with your Pletopay account through the Model Context Protocol.","\u003Cp>The Pletopay MCP server lets AI agents work with your Pletopay account. It speaks the \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\">Model Context Protocol\u003C\u002Fa>, so any MCP client can use it: Claude Desktop, Claude Code, Cursor, VS Code and others. Ask in plain words (&quot;why is ORDER-12345 still pending?&quot;, &quot;reconcile last week's collections&quot;, &quot;create a payment link for ₦25,000&quot;) and the agent calls the Pletopay API for you.\u003C\u002Fp>\n\u003Cp>It gives agents:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>One tool per API operation\u003C\u002Fstrong>: payments, virtual accounts, customers, transfers, refunds, settlements, checkout, payment links, invoices, subscriptions, reports, webhooks, balance and the sandbox. Each tool takes the same fields as the \u003Ca href=\"\u002Freference\">API reference\u003C\u002Fa> and returns the same objects.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Docs search\u003C\u002Fstrong>: \u003Ccode>search_docs\u003C\u002Fcode> and \u003Ccode>get_doc\u003C\u002Fcode> read these guides, offline.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Reference resources\u003C\u002Fstrong>: webhook event types, error codes and the schema of every object.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Prompts\u003C\u002Fstrong>: ready-made workflows for reconciling collections, investigating a payment or a failed transfer, and setting up webhooks.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cblockquote class=\"callout callout-important\">\n\u003Cp class=\"callout-title\">Important\u003C\u002Fp>\n\u003Cp>Start with your \u003Cstrong>test key\u003C\u002Fstrong> (\u003Ccode>sk_test_…\u003C\u002Fcode>). In test mode nothing touches real money, and you can \u003Ca href=\"\u002Ftest-and-live#simulating-a-customers-transfer\">simulate customer transfers\u003C\u002Fa> to see the whole flow. In live mode, the tools that send money are switched off unless you turn them on (see \u003Ca href=\"#money-movement\">Money movement\u003C\u002Fa>).\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"run-it-on-your-machine\">Run it on your machine\u003C\u002Fh2>\n\u003Cp>The server runs locally with \u003Ccode>npx\u003C\u002Fcode> (Node.js 24 or later). Your key stays on your machine and is sent only to the Pletopay API. Pass it in the \u003Ccode>PLETOPAY_SECRET_KEY\u003C\u002Fcode> environment variable.\u003C\u002Fp>\n\u003Cdiv class=\"code-block code-group\">\u003Cdiv class=\"code-head\">\u003Cdiv role=\"tablist\" aria-label=\"Language\" class=\"code-tabs\">\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-1-tab-0\" aria-controls=\"code-group-1-panel-0\" aria-selected=\"true\" tabindex=\"0\" class=\"code-tab\">Claude Code\u003C\u002Fbutton>\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-1-tab-1\" aria-controls=\"code-group-1-panel-1\" aria-selected=\"false\" tabindex=\"-1\" class=\"code-tab\">Claude Desktop\u003C\u002Fbutton>\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-1-tab-2\" aria-controls=\"code-group-1-panel-2\" aria-selected=\"false\" tabindex=\"-1\" class=\"code-tab\">Cursor\u003C\u002Fbutton>\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-1-tab-3\" aria-controls=\"code-group-1-panel-3\" aria-selected=\"false\" tabindex=\"-1\" class=\"code-tab\">VS Code\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-1-panel-0\" aria-labelledby=\"code-group-1-tab-0\" class=\"code-body\" tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">claude\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> mcp\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> pletopay\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --env\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> PLETOPAY_SECRET_KEY=sk_test_…\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> npx\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -y\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> @pletopay\u002Fmcp\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-1-panel-1\" aria-labelledby=\"code-group-1-tab-1\" class=\"code-body\" hidden tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">  \"mcpServers\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">    \"pletopay\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"command\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"npx\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"args\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"-y\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"@pletopay\u002Fmcp\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"env\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"PLETOPAY_SECRET_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"sk_test_…\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-1-panel-2\" aria-labelledby=\"code-group-1-tab-2\" class=\"code-body\" hidden tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">  \"mcpServers\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">    \"pletopay\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"command\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"npx\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"args\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"-y\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"@pletopay\u002Fmcp\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"env\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"PLETOPAY_SECRET_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"sk_test_…\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-1-panel-3\" aria-labelledby=\"code-group-1-tab-3\" class=\"code-body\" hidden tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">  \"inputs\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    { \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"id\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"pletopay-key\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"promptString\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"description\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"Pletopay secret key\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"password\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">true\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">  ],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">  \"servers\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">    \"pletopay\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"stdio\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"command\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"npx\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"args\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"-y\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"@pletopay\u002Fmcp\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"env\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"PLETOPAY_SECRET_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"${input:pletopay-key}\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>\u003Cstrong>Claude Desktop\u003C\u002Fstrong>: add the block to \u003Ccode>claude_desktop_config.json\u003C\u002Fcode> (Settings → Developer → Edit Config) and restart the app.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cursor\u003C\u002Fstrong>: add it to \u003Ccode>.cursor\u002Fmcp.json\u003C\u002Fcode> in your project, or \u003Ccode>~\u002F.cursor\u002Fmcp.json\u003C\u002Fcode> for every project.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>VS Code\u003C\u002Fstrong>: add it to \u003Ccode>.vscode\u002Fmcp.json\u003C\u002Fcode>. VS Code asks for the key once and stores it securely.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Don't commit a file that contains your key. Prefer the environment variable to the \u003Ccode>--api-key\u003C\u002Fcode> flag: command-line arguments are visible to other users of the machine.\u003C\u002Fp>\n\u003Ch2 id=\"use-the-hosted-server\">Use the hosted server\u003C\u002Fh2>\n\u003Cp>If your client connects to remote MCP servers, use the hosted server instead of running one. It is stateless and keeps nothing: every request sends your key in the \u003Ccode>Authorization\u003C\u002Fcode> header, and the server uses it only for that request.\u003C\u002Fp>\n\u003Cdiv class=\"code-block code-group\">\u003Cdiv class=\"code-head\">\u003Cdiv role=\"tablist\" aria-label=\"Language\" class=\"code-tabs\">\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-2-tab-0\" aria-controls=\"code-group-2-panel-0\" aria-selected=\"true\" tabindex=\"0\" class=\"code-tab\">Claude Code\u003C\u002Fbutton>\u003Cbutton type=\"button\" role=\"tab\" id=\"code-group-2-tab-1\" aria-controls=\"code-group-2-panel-1\" aria-selected=\"false\" tabindex=\"-1\" class=\"code-tab\">Other clients\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-2-panel-0\" aria-labelledby=\"code-group-2-tab-0\" class=\"code-body\" tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">claude\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> mcp\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --transport\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> http\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> pletopay\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> https:\u002F\u002Fmcp.pletopay.com\u002Fmcp\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> \"Authorization: Bearer sk_test_…\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv role=\"tabpanel\" id=\"code-group-2-panel-1\" aria-labelledby=\"code-group-2-tab-1\" class=\"code-body\" hidden tabindex=\"0\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">  \"mcpServers\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">    \"pletopay\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"http\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"url\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"https:\u002F\u002Fmcp.pletopay.com\u002Fmcp\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7EE787\">      \"headers\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: { \u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"Bearer sk_test_…\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Cblockquote class=\"callout callout-note\">\n\u003Cp class=\"callout-title\">Note\u003C\u002Fp>\n\u003Cp>If you use an \u003Ca href=\"\u002Fauthentication\">IP allowlist\u003C\u002Fa> for live mode, API calls made through the hosted server come from the hosted server's address, not yours, and are refused. Run the server on your machine (or your own server) instead, so the calls come from an address you allowed.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"options\">Options\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Option\u003C\u002Fth>\n\u003Cth>Environment variable\u003C\u002Fth>\n\u003Cth>Hosted server header\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--toolsets payments,transfers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>PLETOPAY_MCP_TOOLSETS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>X-PletoPay-MCP-Toolsets\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>all\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--read-only\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>PLETOPAY_MCP_READ_ONLY=true\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>X-PletoPay-MCP-Read-Only: true\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Off\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--enable-money-movement\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>PLETOPAY_MCP_ENABLE_MONEY_MOVEMENT=true\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>X-PletoPay-MCP-Money-Movement: enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Off for live keys\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--no-docs\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003Ctd>Docs tools and prompts on\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cul>\n\u003Cli>\u003Cstrong>Toolsets\u003C\u002Fstrong> narrow the tools to the parts of the API you need, which also keeps the agent's context small: \u003Ccode>customers\u003C\u002Fcode>, \u003Ccode>payments\u003C\u002Fcode>, \u003Ccode>virtual_accounts\u003C\u002Fcode>, \u003Ccode>subaccounts\u003C\u002Fcode>, \u003Ccode>transfers\u003C\u002Fcode>, \u003Ccode>settlements\u003C\u002Fcode>, \u003Ccode>refunds\u003C\u002Fcode>, \u003Ccode>checkout\u003C\u002Fcode>, \u003Ccode>payment_links\u003C\u002Fcode>, \u003Ccode>invoices\u003C\u002Fcode>, \u003Ccode>risk\u003C\u002Fcode>, \u003Ccode>subscriptions\u003C\u002Fcode>, \u003Ccode>reports\u003C\u002Fcode>, \u003Ccode>webhooks\u003C\u002Fcode>, \u003Ccode>balance\u003C\u002Fcode>, \u003Ccode>sandbox\u003C\u002Fcode> and \u003Ccode>docs\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Read-only\u003C\u002Fstrong> exposes only the tools that change nothing: lists, lookups, the balance and reports.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>--no-docs\u003C\u002Fcode>\u003C\u002Fstrong> leaves out the docs tools, the guide resources and the prompts.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For example, a read-only agent for your support team that can only look up payments and customers:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cdiv class=\"code-head\">\u003Cspan class=\"code-label\">bash\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cdiv class=\"code-body\" tabindex=\"0\" aria-label=\"bash code\">\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">PLETOPAY_SECRET_KEY\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">sk_live_…\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\"> npx\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -y\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> @pletopay\u002Fmcp\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --read-only\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --toolsets\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> payments,customers,docs\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fdiv>\n\u003Ch2 id=\"money-movement\">Money movement\u003C\u002Fh2>\n\u003Cp>Secret keys can do everything in their mode (there are \u003Ca href=\"\u002Fauthentication\">no restricted keys\u003C\u002Fa>), so the MCP server adds its own safeguards:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>With a live key, money movement is off.\u003C\u002Fstrong> The tools that send money or change where it goes are not offered at all: \u003Ccode>create_transfer\u003C\u002Fcode>, \u003Ccode>create_refund\u003C\u002Fcode>, \u003Ccode>create_subaccount\u003C\u002Fcode>, \u003Ccode>update_subaccount\u003C\u002Fcode>, \u003Ccode>create_split_rule\u003C\u002Fcode> and \u003Ccode>update_split_rule\u003C\u002Fcode>. Turn them on with \u003Ccode>--enable-money-movement\u003C\u002Fcode> (or the \u003Ccode>X-PletoPay-MCP-Money-Movement: enabled\u003C\u002Fcode> header) only when you mean to. With a test key they are always available.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Transfers and refunds need an \u003Ccode>idempotency_key\u003C\u002Fcode>.\u003C\u002Fstrong> The agent chooses it and sends the same key if it retries, so a retried call returns the original transfer instead of sending money twice. See \u003Ca href=\"\u002Fidempotency\">Idempotency\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tools are labelled.\u003C\u002Fstrong> Read-only, destructive and money-moving tools carry MCP annotations, so clients can ask you to approve a call before it runs. Keep approvals on for live keys.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Read-only beats everything.\u003C\u002Fstrong> A server started with \u003Ccode>--read-only\u003C\u002Fcode> stays read-only, whatever a request's headers say.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The agent works with your key's full access within what these switches allow. Review what it proposes before approving a change in live mode, as you would for a colleague.\u003C\u002Fp>\n\u003Ch2 id=\"resources-and-prompts\">Resources and prompts\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Resource\u003C\u002Fth>\n\u003Cth>What it holds\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pletopay:\u002F\u002Fwebhooks\u002Fevents\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Every \u003Ca href=\"\u002Fwebhooks\">webhook\u003C\u002Fa> event type and the object it carries\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pletopay:\u002F\u002Ferrors\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Every \u003Ca href=\"\u002Ferrors\">error\u003C\u002Fa> code, its HTTP status and when it happens\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pletopay:\u002F\u002Fschemas\u002F{name}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The JSON Schema of an object, such as \u003Ccode>Payment\u003C\u002Fcode> or \u003Ccode>Transfer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pletopay:\u002F\u002Fdocs\u002F{slug}\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A guide from this site, as markdown\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pletopay:\u002F\u002Fopenapi\u002Fpublic.v1.yaml\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The full API contract (large)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Prompt\u003C\u002Fth>\n\u003Cth>What it does\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>reconcile_collections\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Matches the payments received in a period against settlements and the balance statement\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>investigate_payment\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Explains what happened to a payment: amounts, status, events and webhook deliveries\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>investigate_failed_transfer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Finds out why a transfer failed and checks the funds came back\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>set_up_webhooks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Registers an endpoint, sends it a test event and shows how to verify signatures\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"try-it-in-test-mode\">Try it in test mode\u003C\u002Fh2>\n\u003Cp>With your test key connected, ask the agent:\u003C\u002Fp>\n\u003Col>\n\u003Cli>&quot;Create a customer called Ada Obi and give her a dedicated virtual account.&quot;\u003C\u002Fli>\n\u003Cli>&quot;Simulate a ₦10,000 transfer into that account, then show me the payment and my balance.&quot;\u003C\u002Fli>\n\u003Cli>&quot;List the sandbox test values, then send ₦1,000 to account 0100000003 at GTBank and tell me what happens.&quot;\u003C\u002Fli>\n\u003Cli>&quot;Set up a webhook endpoint at https:\u002F\u002Fexample.com\u002Fwebhooks for payment events.&quot;\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"troubleshooting\">Troubleshooting\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>The server doesn't start\u003C\u002Fstrong>: check the key starts with \u003Ccode>sk_test_\u003C\u002Fcode> or \u003Ccode>sk_live_\u003C\u002Fcode>. Publishable keys (\u003Ccode>pk_…\u003C\u002Fcode>) can't call the API.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A tool is missing\u003C\u002Fstrong>: it may be outside the toolsets you chose, change something while the server is read-only, move money with a live key, or (for the sandbox tools) need a test key. Calling it by name returns the reason.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>401 authentication_error\u003C\u002Fcode>\u003C\u002Fstrong>: the key was rolled or is wrong. Copy it again from \u003Cstrong>Settings → Developers → API keys\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>403 ip_address_not_allowed\u003C\u002Fcode>\u003C\u002Fstrong>: your IP allowlist doesn't include the address the calls come from. See the note under \u003Ca href=\"#use-the-hosted-server\">Use the hosted server\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Errors in general\u003C\u002Fstrong>: tool errors carry the API's \u003Ccode>type\u003C\u002Fcode>, \u003Ccode>code\u003C\u002Fcode> and \u003Ccode>request_id\u003C\u002Fcode>. Quote the \u003Ccode>request_id\u003C\u002Fcode> if you contact support. See \u003Ca href=\"\u002Ferrors\">Errors\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n",[636,640,643,646,649,652,655],{"id":637,"text":638,"level":639},"run-it-on-your-machine","Run it on your machine",2,{"id":641,"text":642,"level":639},"use-the-hosted-server","Use the hosted server",{"id":644,"text":645,"level":639},"options","Options",{"id":647,"text":648,"level":639},"money-movement","Money movement",{"id":650,"text":651,"level":639},"resources-and-prompts","Resources and prompts",{"id":653,"text":654,"level":639},"try-it-in-test-mode","Try it in test mode",{"id":656,"text":657,"level":639},"troubleshooting","Troubleshooting",1793810344356]