Install
openclaw skills install uah-mono-payoutsClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Use when a user wants an agent to convert USDT BEP20 into UAH payout instructions through a verified exchanger flow with approval, expiry, and payment monitoring.
openclaw skills install uah-mono-payoutsUse this skill when a user asks you to convert USDT BEP20 into a UAH payout through an exchanger.
MVP scope is narrow:
./mandate-wallet/contacts.csv.Do not use this skill for other tokens, other chains, portfolio management, generic wallet operations, or unrelated exchange flows.
You must fail closed.
BEP20 / BNB Smart Chain, not just USDT../mandate-wallet/contacts.csv.payout object with exact bank details.quote_uah_payout.create_uah_payout_order.render_payment_instructions.can_send is true.get_order_status every 60 seconds until the order reaches a final state.Final states:
completedexpiredrejectedfailedcancelledIf status becomes support_needed, show exchanger support details and stop automatic retries.
Contacts usually live in the agent's local project:
./mandate-wallet/contacts.csv
Supported UAH rails:
monobank_uah_cardmonobank_uah_ibanFor monobank_uah_card, the contact must include a card number.
For monobank_uah_iban, the contact must include IBAN, EDRPOU, and recipient full name.
Pass selected details to MCP as payout. For a Monobank card:
{
"rail": "monobank_uah_card",
"currency": "UAH",
"card_number": "4441111122223333",
"recipient_full_name": "Swift Adviser",
"telegram": "@SwiftAdviser",
"email": "swiftadviser@gmail.com"
}
For a Monobank IBAN:
{
"rail": "monobank_uah_iban",
"currency": "UAH",
"iban": "UA...",
"edrpou": "12345678",
"recipient_full_name": "Swift Adviser LLC",
"telegram": "@SwiftAdviser",
"email": "swiftadviser@gmail.com"
}
If an exchanger asks for Telegram, use the contact Telegram if present. If missing and the flow requires a fallback, use:
@SwiftAdviser
If an exchanger requires email and the contact has none, use:
swiftadviser@gmail.com
Do not invent bank details.
Plain language like this is ambiguous:
переведи мне USDT в 5000 гривен
Ask one clarifying question:
5000 UAH should be the amount received, or should I send USDT worth about 5000 UAH?
If the user says they want to receive 5000 UAH, use:
{ "amount_semantics": "receive_fixed_uah" }
If the user says they want to send a 5000 UAH equivalent, use:
{ "amount_semantics": "send_uah_equivalent" }
For a request like:
выведи 500 usdt bep20 на mono uah
Treat 500 as fixed USDT to send:
{
"amount": "500",
"amount_currency": "USDT",
"amount_semantics": "send_uah_equivalent",
"source_token": "USDT",
"source_network": "BEP20"
}
Use the MCP server:
https://mcp-wallet.mandate.md/mcp
Expected tools:
contacts_searchquote_uah_payoutcreate_uah_payout_orderget_order_statuscancel_orderrender_payment_instructionscheck_usdt_bep20_balancecontacts_searchOptional compatibility helper for deployments that expose server-side demo contacts. Do not depend on it for the normal personal-agent flow.
If requires_disambiguation is true, ask the user which account to use before quoting.
quote_uah_payoutUse after payout details and amount semantics are known. Include the selected payout object when available.
The backend ranks BestChange-derived exchanger options. You do not manually choose rates from websites.
Show one best route unless the user asks for alternatives.
create_uah_payout_orderUse after the user has implicitly confirmed the route or asks to proceed. Include the same payout object used for quoting.
This creates an exchanger order and returns an approval URL. It does not mean the user should send funds yet.
render_payment_instructionsUse only after approval.
If the tool returns can_send: false, show its message and do not add payment instructions.
get_order_statusPoll every 60 seconds after payment instructions are shown.
Stop polling when the order is final.
check_usdt_bep20_balanceUse only as a diagnostic probe for a known deposit address. It does not replace order status and must not be used to infer approval.
Keep messages short and operational.
Found route
You receive: 5000 UAH
You send: 119.84 USDT
Network: BEP20 / BNB Smart Chain
Exchanger: Swap-line
Rate: 41.72 UAH
Expires: 18:42 WITA
Approve:
https://mcp-wallet.mandate.md/approve/...
Send now
Amount: 119.84 USDT
Network: BEP20 / BNB Smart Chain
Address: 0x...
Comment: SL-483920
Expires: 18:42 WITA
Send the exact amount. Do not use another network. Do not reuse this order after expiry.
Do not send.
This order expires in under 60 seconds. I will create a fresh one if you want to continue.
Payment received.
Order: SL-483920
Tx: 0x...
Status: completed
Support needed.
Order: SL-483920
Exchanger: Swap-line
Reason: partial payment detected
Support: https://...
Do not say:
Send any amount around 120 USDT.
Say:
Send exactly 119.84 USDT.
Do not say:
Send USDT.
Say:
Send USDT on BEP20 / BNB Smart Chain.
Do not say:
The order is probably still valid.
Say:
I need to check the order status before you send.
If any required tool fails, stop the payment flow and explain the precise blocker:
Never continue by guessing.