pay Send an instant transfer from your financial account to another business identified by a Stripe profile handle or network ID. In an interactive terminal, you can omit the recipient, amount, and currency and enter them in the interactive form. With --agent or --json, you must provide all three arguments. The command lists your eligible open financial accounts. If one account is eligible, the command selects it automatically. If multiple accounts are eligible, interactive sessions show a selector. Agent and scripted runs should pass --financial-account. For agent or scripted use: 1. Run stripe whoami to verify the active Stripe account. If authentication fails, ask the user to run stripe login. 2. Run stripe pay @recipient 10.00 usd --agent with the exact recipient, amount, and currency that the user requested. Include --financial-account fa_... if the user supplied a source financial account. Agent and JSON modes return a confirmation_required response before sending money. 3. Review the returned source financial account, recipient, amount, currency, fee, delivery timing, internal note, and memo with the user. 4. Only after the user confirms those details, rerun the same command with --yes. Explicitly pass --financial-account with the financial_account value from the review response, even if the review command selected it automatically. Preserve the exact recipient, amount, currency, and source financial account. If the result has status: approval_required, follow the contract in the returned JSON: - If the result includes approval_url and next_step.command, give the user the approval link and wait for them to approve or reject the request. After the user confirms approval, run the exact command in next_step.command. Don't change its recipient, amount, currency, or financial account. - If the result includes approvals_dashboard_url without next_step, tell the user that the request was submitted for review. Stripe sends the transfer automatically after approval, so don't rerun the pay command or poll it. A resume command checks approval once. If the request is still pending, return the approval link and wait instead of polling. Resumable approval requests expire after 5 minutes. If a request expires or is rejected, report that no transfer was sent and don't reuse its --approval-id. Only start a new transfer from the review step if the user explicitly asks to start over. To verify the workflow without sending money, run stripe pay @recipient 10.00 usd --financial-account fa_... --agent --dry-run. Review the returned details with the user. If they want to complete the dry run, rerun the same command with --agent --dry-run --yes. The completed dry run resolves the profile, source financial account, recipient, transfer rail, and confirmation details, but doesn't create or send the transfer. Supported currencies are usd, gbp, and usdc. Command: stripe pay [recipient] [amount] [currency] ### Arguments - [recipient] Destination Stripe profile handle, such as @recipient, or profile network ID, such as profile_.... Optional in an interactive terminal and required with --agent or --json. - [amount] Positive decimal amount in major units, for example 10.00. Optional in an interactive terminal and required with --agent or --json. Precision is currency-specific. - [currency] Currency code to transfer. Supported values are usd, gbp, and usdc. Optional in an interactive terminal and required with --agent or --json. ### Flags - `--internal-note, -n
Optional internal note that isn't shown to the recipient. Must contain only ASCII characters and be 50 characters or fewer. ---memo, -m
Optional recipient-facing memo. Must contain only ASCII characters and be 22 characters or fewer. ---financial-account
Source financial account ID, such asfa_.... The account must be open, eligible for network transfers, and support the selected currency. - --yes, -yConfirm the transfer without an interactive prompt. Review the transfer details before using this option. ---agent, --jsonUse non-interactive, machine-readable JSON output. Without--yes, the command returns confirmation_requiredand doesn't send money. ---dry-runValidate and review the transfer without creating a profile, recipient, approval request, or outbound payment. ---approval-id
Resume a previously approved request. Use the exact command returned innext_step.command; the recipient, amount, currency, and financial account must match the approval. - --create-profile-if-missingCreate a Stripe profile if the authenticated account doesn't have one. Requires--profile-handle, --profile-display-name, and --profile-email. - --profile-handle
Stripe profile handle to create with--create-profile-if-missing. - --profile-display-name
Display name for the Stripe profile created with--create-profile-if-missing. - --profile-email
Email address for the Stripe profile created with--create-profile-if-missing`. ### Examples Enter transfer details interactively sh stripe pay Send a transfer to a Stripe profile handle sh stripe pay @profile-username 10.00 usd Send a transfer using a profile network ID sh stripe pay profile_... 10.00 usd Review a transfer without sending money sh stripe pay @profile-username 10.00 usd \ --financial-account fa_... \ --internal-note "Invoice 1234" \ --memo "the related setting PAY" \ --dry-run Review a transfer as JSON sh stripe pay @profile-username 10.00 usd \ --financial-account fa_... \ --agent
