Send with ZapRemit

ClickPesa: read and free preview tools, send_tzs order, get_payment exact frozen amount, customer pays Base USDC or EURC, BTC on-chain or Lightning (bank orders Base USDC only), watchers or native proof verify, mobile payout automatic, bank needs approval and float, get_order read-onlyZapRemit: catalog, quote, provider Lightning invoice, customer pays provider, authenticated status, funding separate from delivery, terminal states. Separate: request_tzs and get_request collection; optional router route_price and route_payOther tools: request_tzs USSD collection and get_request; optional router route_price and route_pay, off unless configured
Diagram source
%% remit-flow.mmd
flowchart TD
  A["ClickPesa payout · TZS<br/>POST /mcp"]
  B["Read: list_banks · list_lipa_providers<br/>get_balance: float, not a transfer max<br/>get_rates"]
  C["Preview, free: check_recipient · check_bank<br/>check_lipa · quote_tzs"]
  D["send_tzs → HTTP 402: orderId + pay offers"]
  E["get_payment: exact frozen amount,<br/>address + QR, unpaid order only"]
  F["Customer pays once, exact frozen amount:<br/>Base USDC or EURC · BTC on-chain · Lightning<br/>Bank order: Base USDC only"]
  G["Server verifies: Base watcher · BTC watcher<br/>Lightning watcher, preimage checked<br/>or native proof on send_tzs retry"]
  H["payment_verified"]
  I["Mobile money, Lipa / TanQR:<br/>automatic payout"]
  J["Bank: manual approval"]
  K["Float enough: pay now, else<br/>payout_scheduled, scheduler retries"]
  L["get_order: read-only status,<br/>never confirms a payment"]
  A --> B --> C --> D --> E --> F --> G --> H
  H --> I
  H --> J --> K
  I --> L
  K --> L
  classDef h fill:#073642,stroke:#073642,color:#fdf6e3,font-weight:bold
  class A h

%% remit-flow-mobile.mmd
flowchart TD
  A["ClickPesa payout · TZS<br/>POST /mcp"]
  B["Read:<br/>list_banks<br/>list_lipa_providers<br/>get_balance: float,<br/>not a transfer max<br/>get_rates"]
  C["Preview, free:<br/>check_recipient<br/>check_bank<br/>check_lipa<br/>quote_tzs"]
  D["send_tzs<br/>HTTP 402:<br/>orderId + pay offers"]
  E["get_payment:<br/>exact frozen amount,<br/>address + QR,<br/>unpaid order only"]
  F["Customer pays once,<br/>exact frozen amount:<br/>Base USDC or EURC<br/>BTC on-chain<br/>Lightning<br/>Bank order:<br/>Base USDC only"]
  G["Server verifies:<br/>Base watcher<br/>BTC watcher<br/>Lightning watcher,<br/>preimage checked<br/>or native proof<br/>on send_tzs retry"]
  H["payment_verified"]
  I["Mobile,<br/>Lipa,<br/>TanQR:<br/>automatic<br/>payout"]
  J["Bank:<br/>manual<br/>approval"]
  K["Float enough:<br/>pay now; else<br/>payout_scheduled,<br/>scheduler<br/>retries"]
  L["get_order:<br/>read-only status,<br/>never confirms<br/>a payment"]
  A --> B --> C --> D --> E --> F --> G --> H
  H --> I
  H --> J --> K
  I --> L
  K --> L
  classDef h fill:#073642,stroke:#073642,color:#fdf6e3,font-weight:bold
  class A h

%% remit-zap.mmd
flowchart TD
  A["ZapRemit · Lightning<br/>POST /mcp"]
  B["Catalog:<br/>zapremit_countries<br/>zapremit_methods<br/>zapremit_options<br/>zapremit_rates"]
  C["zapremit_quote:<br/>quote expires,<br/>then a new quote"]
  D["zapremit_payment:<br/>one provider<br/>Lightning invoice<br/>+ QR, same invoice<br/>on repeat calls"]
  E["Customer pays<br/>provider invoice<br/>from own wallet;<br/>server never pays it"]
  F["zapremit_order:<br/>authenticated<br/>provider status;<br/>form polls 5 s"]
  G["Funding proven by<br/>funded, processing,<br/>completed, refunding<br/>or refunded;<br/>separate from<br/>delivery status"]
  H["Terminal:<br/>completed, expired<br/>or refunded.<br/>Invoice + QR only<br/>while pending,<br/>unpaid, unexpired"]
  A --> B --> C --> D --> E --> F --> G --> H
  subgraph CL["Collect TZS"]
    OB["POST /mcp<br/>request_tzs:<br/>USSD prompt,<br/>owner approves<br/>with PIN; funds go<br/>to ClickPesa account"]
    OC["get_request:<br/>status by ref"]
    OB --> OC
  end
  subgraph RT["Router, optional"]
    OE["POST /mcp<br/>route_price<br/>route_pay:<br/>external x402<br/>service; L402<br/>Lightning proof"]
    OF["Off unless<br/>router configured:<br/>router_off"]
    OE --> OF
  end
  CL ~~~ RT
  classDef h fill:#073642,stroke:#073642,color:#fdf6e3,font-weight:bold
  class A h

%% remit-zap-mobile.mmd
flowchart TD
  A["ZapRemit · Lightning · POST /mcp"]
  B["Catalog: zapremit_countries · zapremit_methods<br/>zapremit_options · zapremit_rates"]
  C["zapremit_quote: quote expires, then a new quote"]
  D["zapremit_payment: one provider Lightning invoice<br/>+ QR, same invoice on repeat calls"]
  E["Customer pays provider invoice from own wallet;<br/>server never pays it"]
  F["zapremit_order: authenticated provider status;<br/>form polls 5 s"]
  G["Funding proven by funded, processing, completed,<br/>refunding or refunded; separate from delivery status"]
  H["Terminal: completed, expired or refunded.<br/>Invoice + QR only while pending, unpaid, unexpired"]
  A --> B --> C --> D --> E --> F --> G --> H
  classDef h fill:#073642,stroke:#073642,color:#fdf6e3,font-weight:bold
  class A h

%% remit-ops-mobile.mmd
flowchart TD
  A["Collect TZS · POST /mcp"]
  B["request_tzs: USSD prompt, owner approves<br/>with PIN; funds go to ClickPesa account"]
  C["get_request: status by ref"]
  D["Router, optional · POST /mcp"]
  E["route_price · route_pay: external x402 service;<br/>L402 Lightning proof"]
  F["Off unless router configured: router_off"]
  A --> B --> C
  C ~~~ D
  D --> E --> F
  classDef h fill:#073642,stroke:#073642,color:#fdf6e3,font-weight:bold
  class A,D h
remit-flow.mmd · remit-flow-mobile.mmd · remit-zap.mmd · remit-zap-mobile.mmd · remit-ops-mobile.mmd

1. Choose country and method. 2. Fill in the recipient. 3. Get a quote. 4. Confirm and pay the Lightning invoice.

Advanced: tools and raw data

Lists come live from zapremit_countries, zapremit_methods and zapremit_options. Get quote calls zapremit_quote, the invoice comes from zapremit_payment, and status from zapremit_order. The amount defaults to the payout currency; SAT is optional. The review and status boxes show the raw JSON the tools return.

Back to Send money · Tools