Skip to content

[Bug] Venmo isEligible() returns false on desktop, true on mobile #761

@aaelfe

Description

@aaelfe

Library used

react-paypal-js

🐞 Describe the Bug

Venmo isEligible() returns false on desktop browsers but true on mobile browsers, using the same production client ID and SDK configuration. This causes the Venmo pay button not to render. According to PayPal documentation, desktop users should see the button and be prompted with a QR code flow where they scan with their Venmo app when they click it, but the button never renders because eligibility fails.

🔬 Minimal Reproduction

Set up @paypal/react-paypal-js with Venmo enabled:

const initialOptions = {
  "client-id": "YOUR_PRODUCTION_CLIENT_ID",
  currency: "USD",
  components: "buttons",
  "enable-funding": "venmo",
}
<PayPalScriptProvider options={initialOptions}>
  <PayPalButtons
    fundingSource="venmo"
    createOrder={...}
    onApprove={...}
  />
</PayPalScriptProvider>

Load the page on a desktop browser (Chrome on macOS)
Check window.paypal.Buttons({ fundingSource: 'venmo' }).isEligible() - returns false
Load the same page on a mobile browser (iOS Safari or Android Chrome)
Check eligibility - returns true, button renders

😕 Actual Behavior

On desktop browsers on macOS, the Venmo button does not render. Debug logging shows:

[PayPal Debug] SDK State: {isInitial: false, isPending: false, isResolved: true, isRejected: false}
[PayPal Debug] window.paypal available: true
[PayPal Debug] paypal.FUNDING: {PAYPAL: 'paypal', VENMO: 'venmo', ...}
[PayPal Debug] paypal.version: 5.0.520
[PayPal Debug] Venmo button isEligible(): false
[PayPal Debug] initialOptions: {client-id: 'Afcs...', currency: 'USD', data-page-type: 'checkout', components: 'buttons', enable-funding: 'venmo'}
[PayPal Debug] paymentType: venmo
[PayPal Debug] fundingSource being passed: venmo
[PayPal Debug] User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36

No errors are thrown - the button simply doesn't render because isEligible() returns false.

🤔 Expected Behavior

Per PayPal documentation at https://developer.paypal.com/docs/checkout/pay-with-venmo/:
"Buyers on desktop web browsers can use any major web browser" "If the payer doesn't have Venmo installed or uses a desktop, the SDK presents the payer with a QR code"
The Venmo button should render on desktop and display a QR code for the user to scan with their Venmo mobile app.

🌍 Environment

  • Node.js/npm: - Node: v22.21.1, npm: 10.9.4
  • OS: - macOS Sequoia 15.5
  • Browser: - Chrome 143.0.7499.41/Safari 18

**Note that on Windows/Chrome this issue does not occur.

➕ Additional Context

This is occurring in production with a live PayPal Business client ID, not sandbox (Venmo is not supported in sandbox)
The Braintree SDK has explicit allowDesktop: true and allowDesktopWebLogin: true options - is there an equivalent for the PayPal JS SDK that we're missing?
We've verified enable-funding=venmo is being passed correctly in the SDK options
Is additional merchant account configuration required to enable desktop Venmo/QR code flow?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions