Providers are plugins, never branches in the core. The interface is defined in
apps/api/src/core/providers/provider-plugin.ts; the registry is
plugin-registry.ts.
#Current status
| Provider | Runtime status | Surface | Fidelity |
|---|---|---|---|
| Mercado Pago | Implemented | Selected Orders operations | Details |
| Stripe | Implemented | Selected PaymentIntents and Refunds operations | Details |
| PayPal | Implemented | Orders v2, Payments v2, OAuth and approval checkout | Details |
“Implemented” is computed: a plugin must have routes and pass static conformance.
It cannot be typed into the gateways table. An operator may enable/disable a
provider, mark planned/skeleton/deprecated and override accounting numbers, but
cannot edit routing, validation or toWire behaviour.
#Plugin responsibilities
| Concern | Plugin provides | Core provides |
|---|---|---|
| HTTP | real routes and contract validation | wildcard entry and request ordering |
| Translation | provider request → canonical command; canonical view → wire | canonical operations/state |
| Credentials | format, recognition and provider-shaped refusal | digest lookup and tenant resolution |
| Idempotency | header name and required operations | fingerprint, lock, replay and conflict |
| Status/errors | total provider vocabulary | decision that a state/refusal exists |
| Accounting | fee/timing/currency declaration | balanced postings and settlement |
| Webhooks | topic, body, signature and verification | outbox, queue, retry and attempts |
| Checkout | URL template and payment-method catalogue | public checkout API and shared shell |
Plugins are plain objects with no injected dependencies. This prevents a provider from creating a second implementation of transactions, idempotency, ledger or delivery.
#The two provider halves
Backend behaviour lives in apps/api/src/providers/<id>/. Buyer-facing identity
lives separately in apps/checkout/providers/<id>/. They do not import each
other. Checkout capabilities cross the boundary through API responses.
For the full addition workflow, see Adding a provider.