Disclaimer: this post is a synthesis based on publicly shared information from Airbnb Engineering. If you spot an inaccuracy, let me know and I will correct it.
For a long time, credit and debit cards were enough. Across 220+ countries, that assumption breaks down: in many regions, cards are not the default, or are simply not accessible to a meaningful share of users.
The product goal sounds simple; execution is not: ship on the order of twenty local payment methods in about fourteen months, without making every integration a bespoke, non-repeatable effort.
Local payment methods: what they are and why they matter
LPMs span very different realities: digital wallets, bank transfers or instant schemes (QR, push), regional networks, and more. They are not a single uniform category, but a family of user journeys and regulatory constraints.
The product upside is direct:
- •better checkout conversion with a familiar instrument
- •access to markets where cards are not dominant
- •lower friction for users without a usable card
According to the public write-up, Airbnb first mapped a very wide candidate set, then prioritized a subset per market, with a pragmatic "impact first" cut rather than trying to boil the ocean on day one.
Modernize the platform before stacking integrations
The core story is not "plug in another PSP" but reduce the cost of change. A tightly coupled monolith makes every addition slow, regression-prone, and hard to parallelize across teams.
The direction described publicly is to reshape payments around domains and capabilities (pay-in, payout, processing, ledger, wallet, and so on). That is structural work: it pays off when integration velocity and reliability are both non-negotiable.

Domain / capability decomposition - illustrative structure.
MST: PSP-agnostic multi-step transactions
Many LPMs do not follow a single-shot card authorization. They often require redirects, strong authentication, QR flows, session resume, or waiting for asynchronous confirmation.
To avoid a bespoke branch per partner, Airbnb describes a Multi-Step Transactions (MST) framework: the PSP expresses what the user must do as actions, and the platform orchestrates state transitions (for example an "action required"-style status). The architectural bet is composability: the same building blocks serve multiple methods.
Illustrative envelope (simplified, not a real API contract):
{
"actionType": "redirect",
"actionParameters": {
"redirectUrl": "https://...",
"method": "GET"
}
}Three foundational flows
Instead of twenty unique implementations, the public narrative groups behaviors into a small set of flows, each with its own security and state-recovery requirements.
1. Redirect
The user temporarily leaves Airbnb to complete payment at the PSP, then returns through a resume mechanism. The hard parts are session coherence, validating the return path, and managing intermediate states safely.
2. Asynchronous (webhook)
Payment finalizes on a local network (QR, push, etc.); Airbnb learns the outcome later, typically via webhook. Complexity shifts to idempotency, callback load, and correlating external events with internal transactions.
3. Direct
Credentials are collected inside Airbnb's UI and the response is immediate, in a card-like pattern. Useful when the PSP supports it and the product needs a fully in-app experience.
This decomposition is a deliberate trade-off: accept orchestration complexity to prevent an explosion of ad hoc paths.

Multi-step orchestration: action-required handling and flow resume (redirect, QR, etc.).
Config-driven integration: YAML as the single source of truth
To industrialize onboarding a new method, variability (eligibility, required fields, refund rules, flow type, and more) is centralized in a Payment Method Config, publicly described as YAML that acts as a shared contract across teams and systems.
The intended benefit is less duplicated logic across frontend and backend, fewer alignment bugs, and a more declarative integration story. Airbnb goes further by deriving code generation (DTOs, enums, schemas, scaffolding) from that config to speed delivery and reduce missed edge cases.

Before / after - Payment Method Config (YAML) as the shared source of truth.
Dynamic widget: backend-driven fields and validation
LPMs often need method-specific fields (local tax identifiers, account formats, etc.). Rather than hard-coding forms in every mobile and web client, the platform can push a specification (fields, constraints, error messaging). Clients interpret rather than encode business rules.
Trade-off: more operational flexibility and fewer client releases per method, in exchange for a richer API contract, stronger compatibility guardrails, and a wider testing surface.

Checkout UX example: Visa card and alternate local method (Pix) on one screen.

Pix flow driven by config: method, fields, and validation rules.
Testing: a PSP emulator for realistic terrain
Testing every method "for real" is often impossible for a developer: bank accounts, country constraints, reliance on partner sandboxes. The described approach relies on a PSP emulator (redirects, scheduled webhooks, controlled approve/decline paths) to approximate end-to-end journeys without access to every local wallet worldwide.
Cost: build and maintain the tool; benefit: catch regressions earlier on paths that are already fragile by nature.

PSP emulator for realistic end-to-end testing.
Observability: layered metrics and consistent alerting
More methods mean more execution paths. Without aligned telemetry, regressions surface too late, often only in production.
The public narrative emphasizes instrumentation across layers (client, payments backend, PSP calls, webhooks) and standardized alerting rules (volume, failure rates, time windows). The goal is for a new method to be "observable by default" instead of every team reinventing dashboards.
Takeaways
This path is a platform bet: MST, centralized config and codegen, dynamic UI, an emulator, observability, and rollout governance. It is not free in organizational complexity or ongoing maintenance.
It tends to make sense when:
- •checkout is business-critical
- •real-world diversity of methods and flows is high
- •you need fast launches without sacrificing perceived reliability
In a smaller scope (few methods, a PSP that already covers the essentials, tolerance for manual workflows), a simpler architecture may still be the best cost/risk trade-off.
Reference
Airbnb Engineering: "Pay as a Local".
Written by
Youssef LAIDOUNI
Full Stack Engineer | Java • Angular • PHP | APIs, MVP, Performance & Automation