Skip to main content
Glama

send_payment

Destructive

Send a payment via Venmo or PayPal

Pay USDC to send money to a Venmo or PayPal recipient. The x402 USDC price is the requested amount plus a 4.9% 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 dispatches the payout.

Asynchronous. A dispatched payout answers 202 Accepted, not 200: the payment is recorded and handed to the payout provider, which settles it afterwards. Poll the returned status_url (GET /get-payment-status?payment_id=...) until state reaches a terminal value rather than treating the 202 as money received. A 200 means the opposite: nothing was dispatched because identity verification is required.

KYC required. The first time a wallet sends a Venmo or PayPal payout it must complete identity verification. If the wallet is not yet verified the response returns kyc_required: true and a kyc_url — open the URL, complete the flow, and retry. If you don't want to proceed, the credited account balance can be withdrawn with POST /withdraw.

Recipient details. For Venmo, recipient_id is the recipient's 10-digit U.S. phone number, and the first and last name are optional. No email is needed. For PayPal, recipient_id is the recipient's PayPal email, which also serves as recipient_email (so recipient_email is optional), and the first and last name are required.

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

PAID ROUTE (6.50-1049 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 amount to send to the recipient (min $5, max $1,000). The x402 payment price is this amount plus a 4.9% fee (with a $1.50 minimum).
platformYesPayment platform.
recipient_idYesRecipient identifier. For Venmo: 10-digit U.S. phone number. For PayPal: email address.
recipient_emailNoPayPal only. Recipient's email address; defaults to recipient_id (the PayPal email). Ignored for Venmo.
recipient_last_nameNoRecipient's last name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo.
recipient_first_nameNoRecipient's first name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "amount": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "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"
      -        ]
      -      },
      -      "callable_base_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "message": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "platform": {
      -        "description": "One of: venmo, paypal.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "recipient_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "state": {
      -        "description": "Payment lifecycle state (e.g. `in-process`, `queued`).",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "success": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "user_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "amount": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "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"
      -        ]
      -      },
      -      "callable_base_url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "kyc_required": {
      -        "description": "One of: true.",
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      },
      -      "kyc_url": {
      -        "description": "URL the wallet owner must open to complete identity verification. No payout was sent, but the x402 payment you made was still credited to your Laso account balance. After verifying, retry /send-payment to dispatch the payout, or call POST /withdraw to pull the credited USDC back to your wallet.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "message": {
      -        "description": "Human-readable explanation of the KYC requirement and how to recover the credited funds via retry or POST /withdraw.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "platform": {
      -        "description": "One of: venmo, paypal.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "recipient_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "user_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "amount": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "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"
      +        ]
      +      },
      +      "callable_base_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "kyc_required": {
      +        "description": "One of: true.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "kyc_url": {
      +        "description": "URL the wallet owner must open to complete identity verification. No payout was sent, but the x402 payment you made was still credited to your Laso account balance. After verifying, retry /send-payment to dispatch the payout, or call POST /withdraw to pull the credited USDC back to your wallet.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "description": "Human-readable explanation of the KYC requirement and how to recover the credited funds via retry or POST /withdraw.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "platform": {
      +        "description": "One of: venmo, paypal.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "recipient_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "user_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "amount": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "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"
      +        ]
      +      },
      +      "callable_base_url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "payment_id": {
      +        "description": "Id of the payout record just created. Pass it to `GET /get-payment-status?payment_id=...` to follow this specific payout.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "platform": {
      +        "description": "One of: venmo, paypal.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "recipient_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "state": {
      +        "description": "Payment lifecycle state (e.g. `in-process`, `queued`).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "status_url": {
      +        "description": "Absolute URL to poll for this payout's state. Always present, so prefer it over the `Location` header.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "success": {
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "user_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
  2. Changed4 schema fields changed
    • changedInput schema / properties / recipient_email / description
      Previous value: -"Recipient's email address. Required for Venmo. Optional for PayPal, where it defaults to recipient_id (the PayPal email)."New value: +"PayPal only. Recipient's email address; defaults to recipient_id (the PayPal email). Ignored for Venmo."
    • changedInput schema / properties / recipient_first_name / description
      Previous value: -"Recipient's first name (English letters A-Z and a-z only)."New value: +"Recipient's first name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo."
    • changedInput schema / properties / recipient_last_name / description
      Previous value: -"Recipient's last name (English letters A-Z and a-z only)."New value: +"Recipient's last name (English letters A-Z and a-z only). Required for PayPal, optional for Venmo."
    • changedInput schema / required
      Previous value: -[
      -  "amount",
      -  "platform",
      -  "recipient_id",
      -  "recipient_first_name",
      -  "recipient_last_name"
      -]New value: +[
      +  "amount",
      +  "platform",
      +  "recipient_id"
      +]
  3. 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: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "amount": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "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"
      +          ]
      +        },
      +        "callable_base_url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "message": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "platform": {
      +          "description": "One of: venmo, paypal.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "recipient_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "state": {
      +          "description": "Payment lifecycle state (e.g. `in-process`, `queued`).",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "success": {
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "user_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "properties": {
      +        "amount": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "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"
      +          ]
      +        },
      +        "callable_base_url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "kyc_required": {
      +          "description": "One of: true.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "kyc_url": {
      +          "description": "URL the wallet owner must open to complete identity verification. No payout was sent, but the x402 payment you made was still credited to your Laso account balance. After verifying, retry /send-payment to dispatch the payout, or call POST /withdraw to pull the credited USDC back to your wallet.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "message": {
      +          "description": "Human-readable explanation of the KYC requirement and how to recover the credited funds via retry or POST /withdraw.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "platform": {
      +          "description": "One of: venmo, paypal.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "recipient_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "user_id": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "anyOf": [
      -    {
      -      "properties": {
      -        "amount": {
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "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"
      -          ]
      -        },
      -        "callable_base_url": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "message": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "platform": {
      -          "description": "One of: venmo, paypal.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "recipient_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "state": {
      -          "description": "Payment lifecycle state (e.g. `in-process`, `queued`).",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "success": {
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "user_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    {
      -      "properties": {
      -        "amount": {
      -          "type": [
      -            "number",
      -            "null"
      -          ]
      -        },
      -        "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"
      -          ]
      -        },
      -        "callable_base_url": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "kyc_required": {
      -          "description": "One of: true.",
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "kyc_url": {
      -          "description": "URL the wallet owner must open to complete identity verification. No payout was sent, but the x402 payment you made was still credited to your Laso account balance. After verifying, retry /send-payment to dispatch the payout, or call POST /withdraw to pull the credited USDC back to your wallet.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "message": {
      -          "description": "Human-readable explanation of the KYC requirement and how to recover the credited funds via retry or POST /withdraw.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "platform": {
      -          "description": "One of: venmo, paypal.",
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "recipient_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "user_id": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    }
      -  ],
      -  "type": "object"
      -}New value: +null
  5. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint/openWorld/idempotent) by explaining the 202-vs-200 distinction, the async polling contract via status_url, the on-chain credit/deposit webhook flow, the fee math, and the KYC escape hatch. An agent knows exactly what state the money is in.

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

Conciseness4/5

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

Long but tightly organized with bold lead-ins that let an agent skim to the async, KYC, recipient, and fee sections. Front-loaded with the core action, though the fee is stated twice (top and bottom).

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 complex, mutating, cross-chain payment tool this covers everything an agent needs before calling: prerequisites, async semantics, failure/KYC branches, and per-platform recipient rules. The output schema handles return shape, so no gap remains.

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 coverage is 100% and the field descriptions already document the Venmo phone/PayPal email rules and the required/optional name fields. The description restates these per-platform rules but adds little the schema does not already carry, so baseline 3 is appropriate.

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?

States a specific verb and resource (send a payment) and names the two supported networks. This cleanly separates it from sibling send_bank_payment and the order_/top-up tools.

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?

Gives strong procedural context: KYC must be completed before the first payout, the wallet must exist and be funded, and if the user declines they can withdraw instead. It does not explicitly say when to prefer this over send_bank_payment, so it stops short of a full routing rule.

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