Changing Payment Provider With a Custom API: An Enterprise PSP Migration Guide
Published - 25 August 2026
Revised - 25 August 2026


Libby James is the founder and Managing Director of Merchant Advice Service. Since 2016, she has worked directly with businesses and payment providers across merchant accounts, card processing, payment gateways and complex provider requirements.
Libby specialises in high-risk, declined and harder-to-place merchants, as well as businesses requiring specialist payment methods, integrations or international support. She writes and reviews Merchant Advice Service content, drawing on practical experience gained from real merchant enquiries and provider relationships.
Changing payment provider sounds straightforward in procurement.
Select a new PSP. Agree commercial terms. Build the integration. Switch traffic.
For an established business with a custom payment integration, it rarely works like that.
Your existing payment provider may already sit inside:
checkout → customer accounts → subscriptions → tokens → fraud → 3DS → refunds → finance → webhooks → reporting → reconciliation
It may also control thousands or millions of stored payment credentials.
So when a CTO says:
“We can integrate another API.”
that may be technically correct.
But it does not answer the harder question:
“Can we move the payment estate without disrupting customers, recurring revenue or finance operations?”
For an enterprise merchant, a PSP migration should therefore be treated as a controlled production migration, not simply another supplier switch.
This guide is primarily for established businesses with bespoke payment infrastructure, significant processing volume or recurring/card-on-file payments that are considering changing PSP, gateway or acquiring architecture.
For the broader commercial decision, see the MAS High-Volume Merchant Processing guide and the Payments Strategy Library.
The hardest part of changing payment provider is often not accepting the first transaction through the new API.
It is everything surrounding that transaction.
A serious migration may need to account for:
For larger migrations, running the old and new payment providers in parallel is often more realistic than a single overnight cutover.
Current provider documentation supports this approach. Stripe's current migration guidance describes taking new customers through Stripe while existing customers continue being charged by the incumbent processor until their payment data has migrated. Adyen similarly recommends a staged migration and says payment-data migration usually takes 10 days or more because of technical and compliance complexity.
The objective should not be:
“Switch the API.”
It should be:
“Move payment processing while preserving customer and financial continuity.”
Ask a development team where the existing payment provider appears in the codebase.
The first answer might be:
Checkout.
Then keep asking.
How are refunds triggered?
How are disputes received?
How does finance identify settlement?
How are failed subscriptions retried?
Where are card tokens stored?
What happens when a payment needs 3D Secure?
How does customer service find a transaction?
What happens after an asynchronous payment method completes?
What system marks the order as paid?
What happens if the webhook never arrives?
Suddenly the PSP is not one integration.
It is a dependency shared across several business processes.
At its simplest, the payment flow might appear to be:
Create payment → receive response → fulfil order
A mature implementation is rarely that simple.
It may actually be:
Create payment
↓
Authentication required?
↓
Customer completes 3DS
↓
Authorisation
↓
Webhook received
↓
Order status updated
↓
Capture now or later
↓
Settlement received
↓
Finance reconciles
↓
Possible refund/dispute weeks later
Each provider may represent these states differently.
One PSP might call something:
authorised
while another has separate objects for:
payment created → payment requires action → payment processing → payment succeeded
This is why a successful sandbox transaction does not prove that the migration is ready.
Before designing the new integration, document what the existing provider actually does.
Not the commercial contract.
The technical contract.
For example:
| Existing dependency | Questions to answer |
|---|---|
| Payment creation | What data do we send and receive? |
| Authentication | How is 3DS initiated and completed? |
| Capture | Immediate, delayed or partial? |
| Refund | Full, partial, asynchronous? |
| Tokens | What IDs do we store internally? |
| Recurring | How are subsequent payments initiated? |
| Webhooks | What events drive internal actions? |
| Disputes | How does the business receive notification? |
| Settlement | How do finance systems reconcile? |
| Reporting | Which reports or APIs are consumed? |
| Fraud | Which provider decisions affect checkout? |
| Customer support | How are transactions located and amended? |
This is the real migration scope.
Don't start with the new PSP's API documentation. Start with everything your business currently expects the old PSP to do.
Only then compare the two.
Modern payment systems rely heavily on asynchronous events.
Your application sends a request.
Something happens later.
The provider then tells you about it via webhook.
Examples include:
But webhook behaviour is not universal.
Stripe's current technical documentation, for example, explicitly warns developers that webhook events are not guaranteed to arrive in the order they were generated and that the same event may sometimes be delivered more than once. It recommends designing endpoints to handle duplicate events and asynchronous processing.
That is useful beyond Stripe.
It demonstrates why your business logic should not blindly assume:
webhook received = run action once
or:
events arrive in perfect sequence.
During a migration, you may also temporarily need to process events from:
old PSP + new PSP
at the same time.
This is an architectural opportunity.
Imagine your application currently contains logic like:
if Stripe payment_intent.succeeded → mark order paid
You migrate to another provider.
The tempting solution is:
if NewPSP.payment.completed → mark order paid
That works.
But your internal business logic is still coupled directly to whichever PSP is live.
A more portable model is:
PSP-specific event
↓
payment abstraction layer
↓
internal event: PAYMENT_CONFIRMED
↓
order system
Now your commercial systems understand your language — not the PSP's.
That makes future switching easier.
It can also make multi-provider payments much more realistic.
Imagine a customer exists in your database as:
customer_18472
But in your current PSP they are:
cus_A827DK
and in the new PSP:
shopper_H6JG8
If your internal systems have treated the PSP customer ID as the primary customer identity, migration becomes unnecessarily difficult.
The same applies to:
A mature payment architecture should ideally maintain its own canonical identifiers and map external provider IDs against them.
This is particularly important during dual running.
One customer may temporarily have:
Internal customer ID → old PSP customer ID → new PSP customer ID
at the same time.
This is where the commercial and technical sides collide.
A merchant processing only one-off payments can potentially send future customers to the new provider and let the old infrastructure disappear naturally.
A subscription business cannot.
Imagine:
400,000 active subscriptions
with payment credentials tokenised by the incumbent PSP.
Those customers expect their next payments to happen automatically.
You cannot normally ask all 400,000 to enter their card details again without creating significant churn.
That means the token estate needs its own migration workstream.
Our existing guide to moving stored cards, payment tokens and recurring payments between gateways covers this issue in more detail.
This is something provider migration guides often underestimate.
Imagine you export your stored-card population on Monday.
It takes several days to transfer, import and validate it.
During that time:
So the migration dataset is already changing while you are moving it.
Stripe's current guidance specifically warns that customer payment-method changes occurring between data transfer and completion of an import can be lost unless the merchant designs around that window.
This is one reason staged migrations are safer.
For larger businesses, the better model may be a progressive migration.
Consider:
The old PSP handles live traffic.
The new integration is built and tested.
New customers begin tokenising and paying through the new PSP.
Existing recurring customers remain on the incumbent.
Payments occur through both environments.
Finance reconciles both.
Support teams can see both.
Existing customers progressively move across.
Remaining payment flows move to the new provider.
Old refunds, disputes, settlements and residual activity continue to be handled.
Only when there is no remaining operational dependency should the old environment be shut down.
This is broadly consistent with the staged approach described in current Adyen and Stripe migration documentation.
This catches businesses out.
Suppose the final new transaction goes through PSP A on:
1 October
That does not mean PSP A can be switched off on:
2 October.
You may still receive:
Your contract termination date and your last new payment date may therefore need to be different.
The board may hear:
“We're going live on 14 March.”
Engineering needs a much more precise definition.
Does that mean:
10% of traffic?
All new customers?
One market?
One legal entity?
One payment method?
One ecommerce brand?
All payment traffic?
An enterprise migration should define exactly what “live” means.
A custom payment architecture may allow traffic to be migrated incrementally.
For example:
Week 1: internal/test transactions
Week 2: 1% of new ecommerce traffic
Week 3: 10%
Week 4: 25%
Week 5: 50%
Week 6: 100% new traffic
Or segmentation might be by:
That makes it possible to compare payment performance before committing the entire estate.
Suppose the incumbent PSP reports:
Authorisation rate: 92.8%
The new provider claims it can improve acceptance.
A presentation cannot prove that.
Live traffic can.
If both providers run simultaneously for a controlled period, the business can potentially evaluate:
This can be especially valuable where the original reason for switching is performance rather than simply price.
See the MAS guide to improving payment authorisation rates for enterprise merchants.
There is a trap here.
Suppose:
PSP A handles existing UK customers
while:
PSP B handles new international customers.
PSP B might appear to have poorer authorisation.
That may be caused by the traffic mix rather than the provider.
Useful comparisons should control for factors such as:
Otherwise the business can draw the wrong conclusion.
The development team naturally focuses on accepting payments.
Operations often care just as much about everything that happens afterwards.
A PSP migration needs to answer:
Can we refund an old-provider transaction after cutover?
Which admin interface will support use?
Does customer service know which provider owns the payment?
Can partial refunds still be processed?
What happens if the original merchant account has closed?
How does finance identify refunds across both providers?
Refunding the wrong PSP is impossible.
Your internal systems therefore need to preserve the relationship between:
order → payment → provider
for as long as the transaction could reasonably require further action.
Chargebacks and payment disputes may arise well after the original transaction.
A business could therefore be processing all new payments through the new PSP while still managing disputes through the incumbent.
That means the old provider may continue to require:
Do not decommission operational knowledge too early.
A payment can succeed perfectly while finance concludes the migration has failed.
Why?
Because:
payment accepted
does not automatically mean:
money correctly reconciled.
Finance needs to understand:
This is especially important during dual running.
For several months finance may need to reconcile:
PSP A settlements + PSP B settlements
against one underlying sales ledger.
A common project pattern is:
Procurement selects provider
↓
Engineering builds integration
↓
Finance sees settlement format after launch
That is backwards.
Finance should validate:
before production migration.
For a £50m merchant, reconciliation failure is not a minor inconvenience.
Two PSPs may both support EMV 3-D Secure.
That does not mean the resulting payment journey is identical.
The integration may differ around:
A migration test plan therefore needs more than:
successful card / declined card
It should test actual customer journeys.
Instead of a generic test checklist, use the business's actual payment behaviour.
For example:
First purchase with 3DS.
Stored card checkout.
Customer not present.
Account Updater or failed-payment journey.
Authorise £500, capture £420.
Refund £75 of a £200 transaction.
Customer abandons challenge.
Payment requires further authentication.
No immediate API response.
Can the system prevent double charging?
Can payment state be recovered?
Does fulfilment happen twice?
Does the system still reach the correct state?
Those last cases matter. Current Stripe documentation specifically notes that events may be duplicated and are not guaranteed to arrive in sequence.
The easiest transaction to process is:
£10 Visa → authorised → captured → webhook arrives immediately
That is not where production failures usually hide.
Test:
authorised but webhook delayed
customer closes browser after successful payment
API times out but transaction actually succeeds
refund accepted asynchronously
duplicate request submitted
provider outage
3DS challenge completed after customer session expires
payment accepted but internal order update fails
PSP B unavailable during staged migration
A custom integration needs to know how the business recovers from ambiguity.
A migration plan that only works when everything goes correctly is incomplete.
Before moving traffic, answer:
What condition triggers rollback?
For example:
Then answer:
Can we actually route traffic back?
If the new integration changes database structures irreversibly, rollback may be far harder than the project team assumes.
For a significant migration, I would want something like this in the project governance.
| Area | Before migration | During dual run | Exit criteria |
|---|---|---|---|
| New payments | Incumbent | New PSP gradually introduced | Target traffic stable |
| Tokens | Incumbent vault | New + existing populations | Required credentials migrated |
| Recurring | Incumbent | Split by customer population | Renewal performance validated |
| Webhooks | Incumbent | Both providers | New event processing stable |
| Refunds | Incumbent | Provider-specific | Legacy refund tail understood |
| Disputes | Incumbent | Both | Legacy exposure manageable |
| Settlement | Incumbent | Both | Finance reconciliation signed off |
| Reporting | Incumbent | Dual reporting | New reporting validated |
| Performance | Baseline | Side-by-side measurement | Thresholds met |
| Rollback | N/A | Available | No longer required |
That gives a CFO, CTO and project team a shared definition of progress.
One of the most useful outcomes from switching provider can be improving the architecture for the future.
A merchant does not need to build a full payment-orchestration platform.
But it may be worth reducing provider-specific logic in core business systems.
Instead of:
Order system → PSP A
consider:
Order system → internal payments service → PSP
The internal layer can standardise concepts such as:
Then the provider-specific adapter handles the API differences.
This doesn't make future migrations effortless.
It can make them considerably less invasive.
This distinction matters.
Even beautifully abstracted code cannot remove differences in:
The aim should therefore not be:
“make all PSPs interchangeable.”
They aren't.
The aim is:
“avoid unnecessarily hard-coding one provider into every business process.”
Sometimes.
If the merchant has already done the difficult work of creating a second payment integration, it is reasonable to consider whether both should remain available.
Possible benefits include:
But multi-provider architecture also adds:
It should have a commercial or resilience purpose.
Our guide to acquirer-agnostic payment gateways and multi-acquirer architectures looks at this in more detail.
Before the engineering project.
But not too far before it.
There is little value negotiating an attractive PSP rate and signing a long-term agreement before engineering has established whether:
Likewise, engineering should not spend six months integrating a provider before the business knows whether the commercial arrangement works.
The commercial and technical evaluation should overlap.
Imagine two proposals.
Expected annual saving:
£180,000
Migration cost:
£450,000
Major token work required.
New reconciliation build.
Expected annual saving:
£140,000
Migration cost:
£120,000
Existing token import process.
Simpler finance integration.
The provider with the greater annual saving does not automatically create the stronger business case.
Calculate:
ongoing economics + migration cost + operational impact + payment performance
together.
This is the same principle we use in our high-volume payment strategy work.
Not 200 pages of API specifications.
A board-level decision should be able to answer:
Cost, performance, functionality, geography, resilience or strategy.
Including reasonable assumptions.
Including engineering and operational work.
Where the rationale is financial.
Critical migration risks.
Especially recurring-payment businesses.
And for how long?
A project that cannot answer these questions probably isn't ready for final approval.
Merchant Advice Service is not a software-development agency.
Our role sits earlier in the decision.
For established merchants, we can help work through:
current payment architecture
commercial requirements
processing volume
provider capabilities
token/migration constraints
international requirements
acquiring structure
multi-provider options
and
the realistic routes available
before a business commits to the wrong payment-provider architecture.
That matters because the most expensive outcome is not necessarily paying an extra few basis points.
It can be spending months integrating a provider that never fully met the requirement.
Where appropriate, MAS can then introduce relevant payment providers for detailed commercial and technical evaluation.
You can read more about How Merchant Advice Service Works and How MAS Researches and Compares Payment Providers.
Adyen — Import Data From Another Payment Provider
Adyen's current documentation describes staged payment-data migration, dual-PSP processes and the technical/compliance work involved. Adyen payment-data migration documentation
Stripe — Request a Payments Data Import
Stripe's current migration guidance describes parallel operation between old and new processors, customer/payment-method mapping and protecting customer-data updates during migration. Stripe payment-data migration documentation
Stripe — Webhooks
Current technical documentation covering retries, event ordering, duplicate events, asynchronous handling and webhook security. Stripe webhook documentation
Merchant Advice Service is an independent payments information, comparison and provider-matching service.
MAS may receive commission or a referral fee from some payment providers where a business chooses to proceed following an introduction. This does not determine the factual information, technical considerations or provider capabilities included in this guide.
Payment providers referenced within this article are used as examples of current migration processes and technical documentation. Their inclusion does not represent a ranking or recommendation.
Migration capability, token portability, API functionality, webhooks, acquiring compatibility and stored-payment migration processes vary between providers and can change.
Payment migrations can involve technical, PCI DSS, contractual and regulatory considerations specific to the business. Specialist technical, legal or compliance advice should be obtained where appropriate.
Merchant Advice Service does not provide software-development services and does not guarantee the successful technical implementation of a payment-provider migration.
Merchant Advice Service does not make payment-provider underwriting decisions or guarantee merchant-account acceptance.
Provider information last checked: 25 August 2026
This guide provides general payments information and should not be treated as technical, legal, regulatory or financial advice.
Written or reviewed by Libby James, founder of Merchant Advice Service and specialist in merchant payments and complex provider requirements.