Venmo is a redirect payment method, so Embed presents it alongside your other methods and handles the approval popup for you. To integrate directly, see Integration.
Setup
Follow the PayPal setup instructions before configuring Venmo payments, then ask PayPal to enable Venmo on your PayPal merchant account. The connector takes the same Client ID and Client secret as the PayPal wallet connector. You can configure both connectors on the same credentials.Supported countries
Supported currencies
Capabilities
Integration
If you use Embed, Venmo needs no integration work. Embed treats it as a redirect payment method, opens the approval page in a popup, and returns the buyer to your checkout. To integrate directly, setintegration_client on the transaction to one of the following.
redirect: Send the buyer to theapproval_urlGr4vy returns, and let the Gr4vy-hosted page run PayPal’s SDK. See Redirect to the Gr4vy-hosted approval page.web: Render the Venmo button inside your own checkout with the PayPal Web SDK v6. See Web: run the SDK yourself.iosandandroid: Hand the transaction session to PayPal’s mobile SDK. See iOS and Android.
Create the transaction
Every flow starts with the same request:method set to venmo, an integration_client, and a redirect_url your app can handle. Keep this call server-side. Set the transaction intent to match the intent configured on your connection.
The samples below use web. Substitute the integration_client for the route you are integrating.
status of buyer_approval_pending, a session_token, and a payment_method.approval_url.
buyer_approval_pending until the buyer completes approval and your app calls the completion URL. If the Venmo flow fails before that, the transaction remains pending and no error is recorded against it, so do not treat a pending transaction as a failed one. Use webhooks to follow the final status rather than relying on the buyer returning.
Redirect to the Gr4vy-hosted approval page
Use this to offer Venmo without adding the PayPal JS SDK to your checkout. Create the transaction withintegration_client set to redirect, then send the buyer to the returned payment_method.approval_url. That page loads the SDK and starts the Venmo flow as soon as it opens, then returns the buyer to your redirect_url.
Open it in a popup rather than replacing the page. Venmo’s flow opens its own window, and this connection is marked as requiring a popup.
Web: run the SDK yourself
Use this to put a Venmo button inside your own checkout. It uses the PayPal Web SDK v6, not the older Smart Buttons SDK.- On page load, fetch the connection’s standalone session to get its PayPal
clientId. This needs thetransactions.writescope, so call it from your server. It creates no transaction and makes no call to PayPal.
This call is optional. The
clientId is a static connection value, so if you already have it you can pass it straight to the SDK. The session endpoint exists so you don’t have to hard-code or separately distribute the connection’s credentials to your frontend. merchantId is returned for multi-party setups; the Gr4vy-hosted page does not send one.- Load the v6 core script and create an SDK instance scoped to the
venmo-paymentscomponent, then render the SDK’s<venmo-button>.
presentationMode: "auto" lets the SDK choose how to present the flow: an in-page modal, a popup window, or the Venmo app. Pass "modal" or "popup" to fix it.
- Create the transaction (see above) inside
createOrder, then use itssession_tokento get the session data. This returns the PayPalorderIdand adefault_completion_url. It is meant to be called from the frontend and is not exposed in the SDKs, so call it with a plain request authenticated by thesession_token.
start() takes a promise of { orderId }, so return one from createOrder and the flow opens on the buyer’s click while the order is still being created. Create the order in response to the click rather than ahead of time, so it is fresh when the flow opens.
- When
onApprovefires, send the buyer to thedefault_completion_url. Gr4vy finalizes the order with PayPal and then returns the buyer to theredirect_urlyou set on the transaction.
iOS and Android
Setintegration_client to ios or android and use an app deep link (for example yourapp://) as the redirect_url. The transaction session returns the same session_data as the web flow — clientId, orderId and returnUrl — which you hand to PayPal’s mobile SDK to collect the buyer’s approval. On approval, call the default_completion_url to finalize the order.
About tokenization
Passstore: true on a transaction to vault the buyer’s Venmo account for future use, together with a buyer so the stored account can be found again. Subsequent payments then charge the stored token without sending the buyer back to Venmo.
Testing
PayPal’s Venmo sandbox is limited and is built around buyers in the United States. Expect it to be unreliable, and budget time for retries.- Create a sandbox Venmo buyer at account.ext.live.venmo.com/signup. A successful sign-up does not guarantee a successful payment: an account that authenticates can still fail to complete one.
- Set both sandbox accounts to the United States — the business account and the personal account. If either is set elsewhere, the Venmo button does not render at all.
- No Venmo app is needed. The sandbox offers a web login on desktop and on mobile web.
- Pass
sandboxSupport: { enabled: true }tostart()outside production when you run the SDK yourself. The Gr4vy-hosted approval page already does this. testBuyerCountry: "US"oncreateInstancedeclares a United States buyer. It is sandbox-only and rejected in production, and the Gr4vy-hosted page does not send it.
PayPal has acknowledged that Venmo’s sandbox has limited functionality, including for buyers inside the United States, and that they are working to improve it.