Important
This project uses reverse engineered non-public Venmo API endpoints. They can change or stop working without notice.
Most Venmo CLIs focus on basic payments and requests. This one covers much more of the Venmo experience from the terminal:
- Full payment controls. Inspect funding options, select an exact balance/bank/card source, choose private/friends/public visibility, and optionally request Venmo Purchase Protection.
- The complete request lifecycle. List and inspect pending requests, create new ones, accept with funding and protection controls, decline incoming requests, or cancel outgoing requests.
- Built-in OTP challenges (2FA). Interactive login, payments, request creation, and request acceptance can complete Venmo's SMS verification flow when required.
- Social features. Search and inspect users, browse your or another user's visible friends and activity, manage friendships, like or unlike activity, and list, add, or remove comments.
- Balance and cash-out. Check your wallet balance, inspect transfer eligibility, and transfer a fixed amount or all available funds to the selected standard bank destination.
- Native and security-conscious. Prebuilt arm64 and x86_64 binaries require no language runtime. Linux releases are standalone, fully static musl binaries with no glibc dependency. macOS releases are signed and notarized, credentials use the platform keyring when available, and uncertain API outcomes fail closed instead of being guessed.
On macOS or Linux, install the latest release with Homebrew:
brew install jeph/tap/venmoWith Rust installed, build and install from the repository root:
cargo install --locked --path .After installing the CLI, install the optional skill globally for your supported AI agents:
npx skills add jeph/venmo-cli@venmo-cli -gStart the interactive login flow:
venmo auth loginVenmo requires a trusted browser v_id when the CLI signs in. Retrieve it from your own Venmo
session:
- Open Venmo's account site in a normal browser window.
- Sign in, complete any MFA challenge, and choose to remember or trust the device if prompted.
- After the account page loads, open the browser's developer tools and select Application/Storage → Cookies.
- Select the
account.venmo.comorvenmo.comorigin, find the cookie namedv_id, and copy only its value. - Paste the value at the
Trusted Venmo v_id/device IDprompt.
The cookie exists before authentication but is not trusted until the browser login and device-trust flow completes, so retrieve it only after signing in.
Check the current authorization status:
venmo auth statusRemove the locally stored authorization:
venmo auth logoutCredentials are stored in macOS Keychain or Linux Secret Service when available. On Linux without
Secret Service, the bearer token is stored unencrypted in an owner-only XDG state file at
$XDG_STATE_HOME/venmo-cli/credential.json. If a keyring becomes available later, run
venmo auth login again; the CLI verifies the new keyring entry before deleting the fallback file.
venmo auth logout removes locally stored credentials but does not revoke the remote token.
Inspect your balance and the funding sources available for peer payments:
venmo balance
venmo pay optionsPay a user or create a request:
venmo pay user <USERNAME> <AMOUNT> <NOTE> [--source <SOURCE_ID>] [--protect] [--visibility private|friends|public]
venmo requests create <USERNAME> <AMOUNT> <NOTE> [--visibility private|friends|public]Quote notes, messages, and multi-word search queries when they contain spaces.
Without --source, payments choose an eligible Venmo balance or the unique eligible external
method. Use a source ID from venmo pay options to select an exact balance, bank, or card.
--protect requests Venmo Purchase Protection for an eligible personal payment.
List, inspect, and act on pending requests:
venmo requests list [--direction all|incoming|outgoing] [--limit <N>] [--before <TOKEN>]
venmo requests info <REQUEST_ID>
venmo requests accept <REQUEST_ID> [--source <SOURCE_ID>] [--protect]
venmo requests decline <REQUEST_ID>
venmo requests cancel <REQUEST_ID>Use an incoming request ID with accept or decline, and an outgoing request ID with cancel.
Accepting a request supports the same funding-source and Purchase Protection controls as paying a
user.
List activity for your account or another visible personal profile, then inspect an individual record:
venmo activity list [--user <USERNAME>] [--limit <N>] [--before-id <TOKEN>]
venmo activity info <ACTIVITY_ID>activity list defaults to the active account. Pass --user <USERNAME> to list the activity
visible to you for another personal profile. The username may include a leading @. Venmo privacy
settings determine which records are visible, and amounts are omitted from other-user activity.
Some activity types, including rewards disbursements, do not provide an amount or status. Their
unavailable table fields are blank, and activity info omits those detail lines.
Like, unlike, and manage comments on visible activity:
venmo activity like <ACTIVITY_ID>
venmo activity unlike <ACTIVITY_ID>
venmo activity comments list <ACTIVITY_ID> [--limit <N>] [--offset <N>]
venmo activity comments add <ACTIVITY_ID> <MESSAGE>
venmo activity comments remove <COMMENT_ID>List commands print a continuation when another page is available. Pass that value back through
the matching --before-id or --offset option. Continuation types are not interchangeable.
Inspect standard bank-transfer eligibility, then transfer a fixed amount or the full available balance:
venmo transfer options
venmo transfer out <AMOUNT_OR_ALL> [--speed standard]Use a positive dollar amount or the exact value all. The CLI supports standard cash-out to the
unique eligible bank destination. Instant transfers and manual destination selection are not
supported.
Search for users, inspect a profile, and browse visible friend lists:
venmo users search <QUERY> [--limit <N>] [--offset <N>]
venmo users info <USERNAME>
venmo friends list [--user <USERNAME>] [--limit <N>] [--offset <N>]friends list defaults to the active account. Pass --user <USERNAME> to list the friends visible
to you for another personal profile. The username may include a leading @. Venmo privacy settings
may hide some or all of that profile's friends.
Manage friendships by exact username:
venmo friends add <USERNAME>
venmo friends remove <USERNAME>friends add sends a new request or accepts an incoming request according to the current
relationship. friends remove removes an existing friend or cancels an outgoing request. It does
not decline an incoming request.
Every financial or social mutation displays its action details and requires confirmation that
defaults to No. Pass --yes to skip only the final confirmation. Validation and any available
preflight still run. Pass --dry-run instead to preview the action without performing the mutation
or asking for confirmation. The two flags are mutually exclusive.
For example, preview a payment or perform it without the confirmation prompt:
venmo pay user <USERNAME> <AMOUNT> <NOTE> --dry-run
venmo pay user <USERNAME> <AMOUNT> <NOTE> --yesThe second command performs the payment after validation and preflight.
Mutations are never automatically retried. If the CLI reports exit code 3 or an unknown outcome, check activity, pending requests, and the official Venmo app before attempting anything else.
Pass the global --debug flag before or after a subcommand:
venmo --debug balance
venmo activity list --debugDebug diagnostics are written to stderr and include bounded request timing, route, status, retry, response-size, and sanitized error information. Credentials, raw request and response bodies, dynamic identifiers, usernames, notes, and amounts are omitted.
Pass the global --json flag before or after a subcommand to receive one compact, newline-terminated
JSON object:
venmo --json balance
venmo activity list --json
venmo requests create @alice 12.50 "Dinner" --dry-run --jsonExample:
$ venmo balance --json
{"command":"balance","ok":true,"data":{"balance":{"available":{"amount":"12.34","currency":"USD"},"on_hold":{"amount":"0.00","currency":"USD"}}}}Successful results go to stdout. Failures go to stderr.
If venmo auth login reports that the local credential update could not be verified, first check
whether a credential was stored:
venmo auth status --debugIf it reports that no credential is stored, the login Keychain may be locked. Unlock it interactively:
security unlock-keychain ~/Library/Keychains/login.keychain-dbEnter the password at the prompt; do not pass it with -p, which can expose it in shell history.
Then retry venmo auth login. Unlocking the login Keychain is normal—macOS usually does it when you
sign in. It can be relocked afterward:
security lock-keychain ~/Library/Keychains/login.keychain-dbIf login still cannot verify the credential after unlocking the Keychain, the failure has another credential-storage cause.
This project is currently alpha and will probably remain there for a while. The commands are tested to a reasonable degree, but broader user testing and issue reports are needed before the implementation can be considered stable. The OTP challenge (2FA) flows especially need more real-world validation.
Planned work includes:
- Transfer in. Add a command for moving money into Venmo once the private API contract can be reverse engineered and validated with enough confidence. That endpoint has not yet been reliably established.
- Simpler login. Investigate a reliable way to establish a trusted device without requiring
users to retrieve and enter a browser
v_idmanually. - Non-interactive OTP challenges. Design a secure structured flow that lets scripts and LLM-based tools respond to SMS OTP challenges without an interactive terminal prompt.
- Clearer terminal output. Make the regular non-JSON output less wordy, more consistent, and easier to scan while preserving important safety and recovery information.
- Windows support. Add and validate native Windows builds, credential storage, terminal prompts, and release packaging.
- Fee visibility. Resolve and display applicable fee rates more consistently so fewer commands
fall back to
unknown, without guessing when Venmo does not provide authoritative fee data. - Activity reactions. Support Venmo reactions on activity beyond the current like, unlike, and comment commands once the private API behavior is reliably established.
- Beta stabilization. Move to beta after enough users have exercised the CLI and reported issues.
The beta phase will focus especially on making the
--jsonoutput shapes consistent and stable.
Pull requests are welcome. If you run into a bug, unexpected behavior, unclear output, or a platform-specific problem, please open an issue. Reports from real-world usage are especially helpful while the project is in alpha.
If this project is useful to you and you would like to support its development, donations are welcome to @Jephrey on Venmo.
I'd encourage you to use the CLI if donating 😊
venmo pay user @Jephrey 5.00 "Supporting venmo-cli"