Skip to main content
Glama

send_bank_payment

Destructive

Send dollars to a bank account

Pay USDC to send dollars to a bank account by ACH. The x402 USDC price is the requested amount plus a 0.25% transfer fee (with a $1.50 minimum fee). On-chain payment credits the calling wallet's Laso account balance via the standard deposit webhook; the callable then debits the gross amount and queues the transfer.

A bank destination is required first. destination_id comes from the banking callables: create the banking profile with createBankingProfile, register who is being paid with createBankingRecipient, and attach their bank account with addBankingDestination, which returns the id. List what you already have at GET /bank-recipients (free). See the bank accounts guide for the full setup.

Identity verification is required on the account that owns the banking profile, and only the human owner can complete it. createBankingProfile hands back a kycUrl when it is outstanding.

If the payout cannot be fulfilled (no approved banking profile, a destination that is not yours, an amount out of range), fix the problem and retry. An error response on an x402 payment means nothing settled, so the USDC is still in your wallet. MPP settles before the route runs, so the same error leaves it in your Laso account balance, recoverable with POST /withdraw.

Settlement: ACH, normally 1-2 business days. Follow it with listBankingTransactions / getBankingTransaction.

Fee: 0.25% with a $1.50 minimum (included in the USDC price).

PAID ROUTE (11.50-50125 USD): the x402 USDC price is paid automatically from your managed agent wallet. Make sure the wallet exists and is funded first (get_agent_wallet).

Input Schema

NameRequiredDescriptionDefault
amountYesUSD delivered to the recipient's bank account (min $10, max $50,000). The x402 payment price is this amount plus a 0.25% fee (with a $1.50 minimum).
destination_idYesBank destination to pay out to. Returned by `addBankingDestination`, and listed by `GET /bank-recipients`.

Output Schema

NameRequiredDescriptionDefault
authNo
messageNo
successNo
user_idNo
bank_paymentNo
callable_base_urlNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / auth_token
      Removed value: -{
      -  "description": "Laso credential. Only if the MCP connection has no Authorization header.",
      -  "type": "string"
      -}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "auth": {
      +      "properties": {
      +        "expires_in": {
      +          "description": "Token lifetime in seconds",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "id_token": {
      +          "description": "ID token — use as Bearer token for Laso Finance APIs",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "refresh_token": {
      +          "description": "Use with POST /auth (grant_type=refresh_token) to get a new id_token when it expires",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "bank_payment": {
      +      "properties": {
      +        "amount": {
      +          "description": "USD delivered to the bank account.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "charged_amount": {
      +          "description": "amount + fee_amount, the total debited.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "destination": {
      +          "description": "The bank account being paid, summarized. The account number is masked to its last four digits.",
      +          "properties": {
      +            "account_holder_name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "account_number_last4": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "bank_name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "destination_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "fee_amount": {
      +          "description": "Transfer fee charged on top of the amount.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "payout_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "state": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "timestamp": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "callable_base_url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "message": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "success": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "user_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "auth": {
      -      "properties": {
      -        "expires_in": {
      -          "description": "Token lifetime in seconds",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "id_token": {
      -          "description": "ID token — use as Bearer token for Laso Finance APIs",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "refresh_token": {
      -          "description": "Use with POST /auth (grant_type=refresh_token) to get a new id_token when it expires",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": [
      -        "object",
      -        "null"
      -      ]
      -    },
      -    "bank_payment": {
      -      "properties": {
      -        "amount": {
      -          "description": "USD delivered to the bank account.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "charged_amount": {
      -          "description": "amount + fee_amount, the total debited.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "destination": {
      -          "description": "The bank account being paid, summarized. The account number is masked to its last four digits.",
      -          "properties": {
      -            "account_holder_name": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "account_number_last4": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "bank_name": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "name": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            }
      -          },
      -          "type": [
      -            "object",
      -            "null"
      -          ]
      -        },
      -        "destination_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "fee_amount": {
      -          "description": "Transfer fee charged on top of the amount.",
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "payout_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "state": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "timestamp": {
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": [
      -        "object",
      -        "null"
      -      ]
      -    },
      -    "callable_base_url": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "message": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "success": {
      -      "type": [
      -        "boolean",
      -        "null"
      -      ]
      -    },
      -    "user_id": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=false, but the description adds substantial behavior beyond them: the 0.25% fee with $1.50 minimum, that the on-chain payment credits the wallet's Laso balance before debiting gross, that x402 errors settle nothing while MPP errors leave funds recoverable via POST /withdraw, and that ACH takes 1-2 business days. This is exactly the kind of settlement and failure-mode context an agent needs before a destructive money movement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence and bolded headers make it scannable, but the fee is stated three times (opening line, Fee section, PAID ROUTE line) and the 'PAID ROUTE (11.50-50125 USD)' fragment is cryptic without explanation. Several sentences could be consolidated without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive paid payout tool, the description covers the setup chain, KYC gating, fee math, funding requirement (get_agent_wallet), settlement timing, and error recovery. An output schema exists, so return values need not be described here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both amount and destination_id are already documented, including the min/max and the fee formula. The description restates the fee relationship and the gross-debit behavior rather than adding new parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb+resource ('Send dollars to a bank account') and immediately explains the mechanism (pay USDC, ACH payout). That distinguishes it from siblings like send_payment, fund_card_balance, or agent_wallet_transfer, which move money through other rails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prerequisites are spelled out explicitly: a destination_id must first come from createBankingProfile → createBankingRecipient → addBankingDestination, and KYC must be complete. It also says what to do on failure (fix and retry) and how to follow up (listBankingTransactions). It stops short of naming when to prefer send_payment or other payout siblings instead, so it's not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources