Skip to content
Back to skills

Payment Migrator

ASecurity

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.

  • 37 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
ai-agentsgorailsapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add Hainrixz/agente-pagokit --skill payment-migrator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Payment Migrator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Payment Migrator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hainrixz-payment-migrator/badge)](https://www.skillsdirectory.com/skills/hainrixz-payment-migrator)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.