Skip to content
Development
Skill

/payment-migrator

Plans and executes a migration from one payment provider to another without downtime. Establishes what cannot move (stored card tokens usually cannot), maps the two providers' event vocabularies, flags architectural differences such as a change of notification model or a move to

From plugin
pagokit
528 skills1 agent8 commands5 hooks
Install
$ npx -y skills add Hainrixz/agente-pagokit --skill payment-migrator --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/payment-migrator

Context preview

The summary Claude sees to decide when to auto-load this skill.

Plans and executes a migration from one payment provider to another without downtime. Establishes what cannot move (stored card tokens usually cannot), maps the two providers' event vocabularies, flags architectural differences such as a change of notification model or a move to

SKILL.md

payment-migrator.SKILL.md
name: payment-migrator
description: Plans and executes a migration from one payment provider to another without downtime. Establishes what cannot move (stored card tokens usually cannot), maps the two providers' event vocabularies, flags architectural differences such as a change of notification model or a move to a merchant of record, and sequences a coexistence period rather than an atomic switch. Powers /pagokit:migrate.
when_to_use: |
  - The user invokes /pagokit:migrate, or asks how to move from one provider to another
  - A provider is being wound down, or its fees or coverage no longer fit
allowed-tools: Read, Glob, Grep

payment-migrator

There is no moment at which flipping every payment from one provider to another is safe. A migration is a period during which both run, and the job is to make that period short, observable and reversible.

Step 1 — Inventory what exists

Read `PAGOKIT_INTEGRATION.md`, then verify it against the code; it goes stale. You need:

  • Routed events and what each one does.
  • Customers with a stored payment method, and how many.
  • Active subscriptions and their next billing dates.
  • Every place a provider id or provider-shaped identifier is persisted.

Step 2 — Establish what cannot move

Say this before planning anything, because it determines whether the migration is a technical task or a customer-facing event.

**Stored card tokens usually cannot migrate.** They belong to the provider that vaulted them. Some providers support a PCI-scoped token export or a network-token migration on request; most do not, and the ones that do require a written agreement between both parties. Until that is confirmed in writing, plan for existing subscribers to re-enter a card — which is a churn event, not a detail.

Step 3 — Diff the two providers

Read both catalog entries and name every difference that changes the architecture:

| Compare | If it differs | |---|---| | `notification_model` | Moving to `return_url_commit` or `ping_then_poll` is a different architecture, not a swapped SDK | | `webhook.required_events_minimum` | Map them explicitly. Flag every event with no equivalent | | `mor.is_mor` | A merchant of record becomes the seller. Invoices, tax handling and the statement descriptor all change | | `methods` and their `reversibility` | New irreversible rails mean the refund path changes shape | | `settlement.payout_delay_days` | Cash flow changes, and someone in finance needs to know | | `recurring.rails` | Card-to-mandate is a different lifecycle entirely | | `pci.scope` | Moving to a direct-API integration can push the merchant from SAQ A to SAQ D |

Step 4 — Sequence the coexistence

1. Add the new provider alongside the old one. Both webhook routes live; they are namespaced already. 2. Route **new** payments to the new provider. Leave everything existing where it is. 3. Migrate subscriptions at their natural renewal, not in a batch. A batch migration turns one bad assumption into every customer's problem simultaneously. 4. Keep the old handler alive for as long as the old provider can still send disputes and refunds — months, not days. 5. Keep the `provider` column on every payment row permanently. Reconciliation needs it long after the old provider is gone.

Step 5 — Write it down

`PAGOKIT_MIGRATION.md`: what moves when, what cannot move, what the customer sees, how to tell whether it is working, and the rollback. A migration without a written rollback is a bet.

Instrument it

Before the first payment routes to the new provider, make these observable: success rate by provider, decline reasons by provider, webhook delivery failures, and time from checkout to confirmed payment. A migration that quietly halves your approval rate looks exactly like a successful one until the end of the month.

Anti-patterns

  • Do not switch atomically.
  • Do not migrate and refactor in the same change. When it breaks you will not know which did it.
  • Do not delete the old webhook handler when the last payment is created — disputes arrive weeks later.
  • Do not promise that stored cards will migrate before both providers have confirmed it in writing.
  • Do not migrate a subscription mid-cycle without deciding what happens to the unused portion.
Read more
Ships withpagokit

Claude Code plugin that picks and implements the right payment method for your app — from your terminal. 42 providers, 136 payment rails, and deterministic validators that block insecure payment code as it is written.

Get the whole plugin

Other skills on pagokit.