Official pluginLast verified 2026-09-11 · Reviewed by a person 2026-09-25
PayPal connects to commercetools through the PayPal payment Connector (connect-payment-integration-paypal), a public Connect connector that commercetools itself develops and lists in the Connect marketplace; installing it from the Merchant Center makes a PayPal wallet button available to commercetools Checkout in the web components integration type, with the latest release v1.6.0 on 2026-07-31. A second, third-party connector by MediaOpt (paypal-commercetools-connector, 1.2.7 on 2026-08-04) is what commercetools' partner directory and the old marketplace URL point to; it adds cards, Apple Pay, Google Pay, Pay Later and vaulting as an API Extension for your own storefront rather than through Checkout. PayPal does not publish a commercetools integration of its own.1
UAT-Ops testing: PayPal's sandbox was verified by UAT-Ops on 2026-09-11 with the directory's card flow (5 passed) → evidence on the PayPal hub. The commercetools integration itself has not been run.
Sources checked: 29 claims from 7 sites, listed at the foot of the page.
Connects through Connect connector (enabler assets + processor service) installed from the Connect marketplace in the Merchant Center; the enabler renders the PayPal JS SDK button, the processor creates and captures Orders v2 orders, persists commercetools Payments, and turns PayPal webhooks (verified through verify-webhook-signature) into transactions. Biggest gotcha: Two connectors, and commercetools' own directory points at the other one.
How it connects
Method
Connect connector (enabler assets + processor service) installed from the Connect marketplace in the Merchant Center; the enabler renders the PayPal JS SDK button, the processor creates and captures Orders v2 orders, persists commercetools Payments, and turns PayPal webhooks (verified through verify-webhook-signature) into transactions1
commercetools Checkout (Complete Checkout and Payment Only) with the web components Payment Integration Type, Enabler loaded directly by a custom storefront that bypasses Checkout1
What works on this platform
Yes: a source confirms it on this integration. Not verified here: the gateway supports it, but no source confirms this integration exposes it. No: not available. A capability with no source either way is left off.
The only method the commercetools connector offers; the enabler renders one PayPal button with fundingSource restricted to PayPal, and Checkout labels the method 'PayPal (Venmo)' by default with a branded button that cannot be customised.
Not in the commercetools connector, whose only payment component type is 'paypal'. MediaOpt's third-party connector adds Advanced Credit and Debit Card fields for a custom storefront, outside commercetools Checkout.
The commercetools connector's button is limited to the PayPal funding source, so Pay Later is not rendered; MediaOpt's connector supports Pay Later and Pay Upon Invoice (RatePay) in its own client.
The processor compares the requested amount with amountPlanned and calls the Payments v2 capture refund with an amount object when it is smaller, writing a REFUND transaction.
The cart's currencyCode passes through unchanged; amounts convert with the currency's fractionDigits and a zero-fraction-digit currency with a decimal point in PayPal's response raises an error rather than rounding.
PayPal supports this; no source confirms it on this integration.
Capability status reflects the integration and documentation available at the time of verification, not necessarily every capability of the underlying gateway or platform.
Testing it
Create a REST app in the PayPal Developer Dashboard and take its sandbox client ID and secret; register a webhook for that app on the sandbox side and note its webhook ID, because PAYPAL_WEBHOOK_ID is a required install field. Install the PayPal connector from the Organization's Connect tab into a commercetools Project with an API client holding manage_payments, manage_orders, view_sessions, view_api_clients, manage_checkout_payment_intents and introspect_oauth_tokens, fill CTP_* URLs for your region, set PAYPAL_ENVIRONMENT=TEST (the processor then calls api-m.sandbox.paypal.com), then create an Application, add the PayPal Payment Integration and toggle its Status on, since integrations are deactivated by default. The webhook URL is {processorUrl}/notifications; the processor URL only exists after the deployment finishes, so create or update the PayPal webhook afterwards with at least PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.DECLINED, PAYMENT.CAPTURE.REFUNDED and PAYMENT.CAPTURE.REVERSED, and avoid subscribing to all events because unhandled types make the handler throw. Pay in Checkout with a personal sandbox buyer account (the wallet is the only funding source; card testing with 4012000033330026 or CCREJECT-EC style names applies only to MediaOpt's card fields, not this connector). Assert the Payment gets an Initial CHARGE transaction that turns Success once the capture completes, that a refund from the Merchant Center adds exactly one REFUND transaction, and that the PayPal-Request-Id header is present on create, capture and refund calls. For local runs, the README starts the modules with docker compose from .env.template copies; the processor verifies every webhook through PayPal's verify-webhook-signature call, so the listener must be reachable from PayPal.11
UAT-Ops runs integration flows like this against the real sandbox and keeps the evidence. Get one email when it opens.
Gotchas
Two connectors, and commercetools' own directory points at the other one
commercetools' Checkout docs say the PayPal connector is developed by commercetools (connect-payment-integration-paypal, v1.6.0 on 2026-07-31). Its technology-partner page, which the old marketplace URL redirects to, describes a different connector built by MediaOpt (1.2.7 on 2026-08-04). Only the commercetools one plugs into Checkout; MediaOpt's is an API Extension plus NPM client for a storefront you build. Pick by where your checkout lives, not by which listing you found first.
PayPal itself lists no PayPal connector for commercetools
PayPal's third-party plugins page has one commercetools entry and it is Braintree, linking to marketplace.commercetools.com/integration/paypal-braintree. Neither PayPal-branded connector appears there, so there is no vendor-published version, support statement or changelog to check against; treat GitHub releases as the only release record for both.
The webhook ID is required before the webhook URL exists
PAYPAL_WEBHOOK_ID is a mandatory install field, but the listener URL is {processorUrl}/notifications and the processor URL is only known once the deployment finishes. So the PayPal-side webhook is set up in two passes: one before install to obtain an ID, one after to point it at the live processor URL. Subscribe only to PAYMENT.CAPTURE.COMPLETED, DECLINED, REFUNDED and REVERSED: any other event type makes the handler throw, and PayPal then retries the failing delivery up to 25 times over three days.
The enabler creates orders with intent CAPTURE and renders one button with the funding source pinned to PayPal, so no Pay Later, Venmo or card buttons appear even though Checkout labels the method "PayPal (Venmo)" by default. The service's cancelPayment throws "operation not supported"; a reversal is a full refund. Cards, wallets and vaulting on commercetools mean MediaOpt's connector or a different PSP.
MediaOpt's connector subscribes to every PayPal event and dislikes some tax setups
Its post-deploy step registers a PayPal webhook for "*" (every event type) at the extension's webhook URL, and skips creation when one already exists there, so pruning event types by hand in the Developer Dashboard is undone on the next fresh deployment. Multiple shipping addresses are "limited support" and only work with Platform tax mode, HalfEven rounding and LineItemLevel calculation; anything else is on you.
Last verified 2026-09-11 · Reviewed by a person 2026-09-25
Integration capabilities, requirements, pricing, availability, and vendor policies may change over time. UAT-Ops documents information based on the authoritative sources and testing available at the time of review.
Where newer information, testing, or vendor documentation materially changes a published claim, UAT-Ops may revise the page to reflect the most current verified information. Readers should confirm time-sensitive requirements with the relevant vendor before making production or purchasing decisions.