How To: Implement Venmo Payments
How To: Implement Venmo Payments
Overview
This guide covers the three ways to accept Venmo with Coinflow:
- Prebuilt Checkout UI (iframe) — Venmo appears automatically inside Coinflow’s hosted checkout.
CoinflowVenmoButtonSDK component — Embed the Venmo button in your own checkout UI.- Direct API + PayPal SDK — Render the Venmo button with PayPal’s own SDK and call Coinflow’s checkout endpoints directly.
Before using any of these options, Venmo must be enabled on your Coinflow account. Contact your Coinflow integrations team to have Venmo configured.
Venmo is a US-only payment method. The button only renders when Venmo is an eligible funding source for the customer (US buyers); for everyone else it will not appear.
Option 1: Prebuilt Checkout UI (iframe)
This is the simplest path. If you already embed Coinflow’s hosted checkout, there is nothing to build — once Venmo is enabled on your account, the Venmo button automatically appears alongside your other payment methods in the checkout iframe.
If you have not yet integrated the hosted checkout, see Implement Checkout for how to embed the CoinflowPurchase component.
Option 2: CoinflowVenmoButton SDK Component
Use the CoinflowVenmoButton component when you have built your own checkout UI but want Coinflow to manage the Venmo order creation, approval flow, and settlement. You render a single React component where you want the Venmo button to appear, and Coinflow handles the rest inside a secure iframe.
Unlike the CoinflowPayPalButton, Venmo’s approval flow runs in a popup window rather than an in-page overlay. The button iframe stays inline, so there is no overlay element to position over and no overlayId prop.
Component Props
In addition to the standard Coinflow purchase props (env, merchantId, sessionKey, subtotal, handleHeightChange, etc.), the CoinflowVenmoButton accepts the following:
The button requires at least one customer identifier — email, phoneNumber, or token. Until one is provided, the button renders disabled.
Option 3: Direct API + PayPal SDK
This is the most flexible path. Venmo runs on the PayPal JS SDK — you load the SDK with Venmo enabled as a funding source, render the Venmo button, and call Coinflow’s Venmo checkout endpoints to create the order. Use this when you need full control over the Venmo experience.
Fetch your PayPal merchant ID
Venmo uses your PayPal merchant configuration. Call the Get Merchant (v2) endpoint and read merchant.paypalMerchantId from the response. This value is passed to the PayPal SDK as the merchant-id.
Response (truncated):
paypalMerchantId is unique to your account and is set when the integrations team enables PayPal/Venmo. The value above is an example only — read the real value from the API response.
Initialize the PayPal SDK with Venmo enabled
Load the PayPal JS SDK using your paypalMerchantId as the merchant-id and the Coinflow-provided PayPal client-id. Initialize with intent=authorize, pass enable-funding=venmo, and set the partner attribution ID (BN code) to CoinflowLabsLimited_PSP via the data-partner-attribution-id attribute on the script tag.
You must pass the data-partner-attribution-id (BN code) CoinflowLabsLimited_PSP when loading the SDK. This identifies the integration as processed through Coinflow — payments will not be attributed correctly without it.
Venmo only renders for US customers. When testing against a non-production environment, the SDK should be loaded with buyer-country=US so the Venmo funding source is eligible.
The sandbox client-id is:
AZ27v54Pd6dItFBi39hcHPCSrFSbaylVU4ExPpHi3z0UIIDquGWG4psZK63Sz1EUZVKXyh3ucAAWE9oS
This value is for sandbox only. Contact your Coinflow integrations team for the production client-id.
Create the order via Coinflow
Render the Venmo button with fundingSource set to the Venmo funding source and, in its createOrder callback, call the Venmo New Checkout endpoint. Coinflow creates the order and returns a paymentId.
Response:
The venmo object accepts either an email or a phoneNumber ({countryCode, nationalNumber}) tied to the customer’s Venmo account.
The paymentId returned by Coinflow is the Venmo/PayPal order ID. Return it directly from your createOrder callback so the PayPal SDK uses it as the order ID — do not create a separate order with PayPal.
For customers paying with a previously saved Venmo account, call the Venmo Saved Checkout endpoint instead and pass the saved token.
Render the Venmo button only where it is eligible. The PayPal SDK exposes isEligible() on the button instance — skip rendering when it returns false rather than forcing the button to appear.
Confirm settlement with webhooks
Configure your webhook endpoint to listen for Settled events. This is the recommended way to confirm a payment has completed.
Important Notes
Account Configuration: Venmo must be enabled on your account by the Coinflow integrations team before any of these options will work.
US Only: Venmo is available only to US customers. The button renders only when Venmo is an eligible funding source.
PayPal Rails: Venmo runs on PayPal’s processor. It uses your
paypalMerchantIdand the same PayPalclient-id, loaded withenable-funding=venmo.
Sandbox vs. Production: The sandbox
client-idprovided above only works against the PayPal and Coinflow sandbox environments. Use your productionclient-id(from the integrations team) and the production API base URL (https://api.coinflow.cash) when going live.
Settlement: Regardless of which integration path you choose, funds are delivered to your configured settlement location, and the recommended way to confirm completion is by listening for
Settledwebhook events.

