Xendit
Southeast Asia's single API for cards, virtual accounts, e-wallets, QRIS/QRPH/PromptPay/DuitNow, retail OTC, BNPL, and cross-border payouts — built for Indonesia, Philippines, Malaysia, Thailand, Vietnam, Singapore
Pick Xendit if you sell into Indonesia or the Philippines and need virtual accounts, QRIS/QRPH, and every local e-wallet (OVO, DANA, GCash, Maya, ShopeePay) behind one SDK — trade-offs are a weaker static-token webhook model (vs HMAC elsewhere), heavy negative tail in merchant support reviews, and default T+7 settlement unless you pay for Early Settlement.
◆◆ Moderate
6 SEA countries (ID, PH, MY, TH, VN, SG)
ID 2.9% + Rp2,000 cards / PH 3.2% + ₱10 / QRIS 0.7%
Xendit is a Y Combinator S15 alum (the first Indonesian YC company) founded in 2015 by Moses Lo and co-founders who met at UC Berkeley, headquartered in Jakarta with operations across Indonesia, Philippines, Malaysia, Thailand, Vietnam, and Singapore. The company reached unicorn status in 2021 and closed a $300M Series D in May 2022 co-led by Coatue and Insight Partners, bringing total funding to ~$533M; it acquired Payex in October 2025 and announced Latin America expansion (Mexico, Colombia, then Chile/Argentina/Brazil) in late 2025. The product suite covers cards (Visa/MC/JCB/Amex/UnionPay/BCA/GPN), 38+ local payment methods, virtual accounts (aggregator + switcher models), QRIS/QRPH/PromptPay/DuitNow/PayNow/VietQR, retail OTC (Alfamart, Indomaret, 7-Eleven, Cebuana, Palawan, SM), direct debit (BRI, BPI, UnionBank), e-wallets, PayLater/BNPL (Akulaku, Kredivo, Atome, Billease, SPayLater, Grab), batch disbursement up to 10,000 transfers, cross-border payouts to 450+ channels in 140+ banks, subscriptions, and hosted Payment Links. First-party SDKs cover Node.js, Python, Go, PHP, and Java. Customers include Traveloka, Wise, Wish, and Grab.
Last full audit: April 24, 2026
Trust Score Breakdown
Account Stability
65/100Recurring Trustpilot complaints about merchant activation being 'rejected without reason' and automated-template support responses during KYC review. Country-specific KYC is heavy (ID requires NIB/SIUP/NPWP, PH requires SEC/DTI/BIR). Not as severe as Flutterwave's settlement-hold volume, but the pattern of onboarding opacity is documented. Three rounds of layoffs (Oct 2022 ~100 people, Aug 2023 ~15-20, ongoing silent performance-based cuts per Glassdoor) indicate operational restructuring that can affect merchant ops bandwidth.
Developer Experience
80/100Five first-party server SDKs (Node.js, Python, Go, PHP, Java) with active GitHub repos and consistent API shape across them. docs.xendit.co covers cards, e-wallets, VA, QR, OTC, disbursement, and payouts with per-country nuance. One endpoint handles disbursements across ID/PH/MY/TH/VN with a single payload. Rough edges: webhook verification uses a static x-callback-token (no HMAC of the body) — significantly weaker than Stripe/Flutterwave/Paystack; aggregator vs switcher VA models require reading the country docs carefully; test-card PANs and scenarios are scattered across the help center.
Payout Reliability
75/100Default settlement is T+1 to T+7 calendar days depending on channel (cards typically slower than VA/e-wallet); merchants can opt into paid Early Settlement for instant access. Aggregator-model VAs route through the Xendit account (predictable timing), switcher-model VAs settle directly to the merchant's bank (faster but fewer rails). No large-scale public payout-freeze scandals comparable to peers. Trustpilot one-star reviews surface some delayed settlements during merchant-activation disputes but not a systemic payout failure pattern.
Support Quality
52/100Support is the dominant complaint theme on Trustpilot: 'totally useless', 'endless we will respond shortly', automated template responses, merchant activation rejected without specific reason. One 2025 review calls the product 'a disaster' with 'dysfunctional' customer service. Developer/API questions typically get faster responses than billing/activation tickets. No published 24/7 phone line for merchant support; help desk is ticket + chat with inconsistent turnaround.
Track Record
75/100Founded 2015; Y Combinator S15 (first Indonesian YC company). Unicorn 2021 (Series C, Accel-led $64.6M); $300M Series D May 2022 co-led by Coatue and Insight Partners (~$1B+ valuation); total funding ~$533M from 30 investors. Customers include Traveloka, Wise, Wish, Grab. Acquired Payex October 2025. Announced LatAm expansion (Mexico, Colombia, then Chile/Argentina/Brazil) starting late 2025. Operating across 6 SEA countries with local licensing (OJK Indonesia, BSP Philippines, BNM Malaysia, BOT Thailand, SBV Vietnam where applicable). No major regulatory scandals or security breaches comparable to Flutterwave's 2023/2024 incidents.
Transparency
78/100Public pricing page per country at xendit.co/{cc}/pricing — Indonesia, Philippines, Malaysia, Thailand. Clear fee tables by payment method. No setup, monthly, maintenance, termination, or withdrawal fees on the platform; fees only on successful transactions. Aggregator-vs-switcher VA model and card-processing T+ settlement windows are documented. Gaps: Vietnam/Singapore pricing not public-facing (enterprise sales); chargeback arbitration fee ($500+) is buried in credit-cards docs rather than pricing; country-specific VAT (7% TH, 11% ID) applies on top and is easy to miss.
Availability Matrix
| Region | Countries | Currencies | Payout Timing |
|---|---|---|---|
| Indonesia (primary market) | Indonesia — primary home market. Merchant signup requires Indonesian entity, NIB (Business Registration Number), SIUP, NPWP, and local bank account. Supports the full Xendit product catalog including aggregator + switcher VA models, QRIS, every major e-wallet (OVO, DANA, ShopeePay, LinkAja, AstraPay, JeniusPay), retail OTC (Alfamart, Indomaret), direct debit (BRI), and PayLater (Akulaku, Kredivo, Atome, Indodana, UangMe). | IDR settlement. | T+1 to T+2 (VA/e-wallet); T+3 to T+7 (cards); instant via paid Early Settlement. |
| Philippines | Philippines — full merchant signup available. Supports Visa/MC/JCB cards, GCash, Maya, GrabPay, ShopeePay, direct debit via BPI and UnionBank, bank transfer / virtual account via BPI/UBP/RCBC, QR Ph, and OTC (7-Eleven, Cebuana, Palawan, SM Counters, LBC Express, Robinsons, MLhuillier, USSC). Requires PH entity with SEC or DTI registration and BIR. | PHP settlement; USD card acceptance available. | T+1 to T+3 typical; Early Settlement available for instant access. |
| Malaysia | Malaysia — full merchant signup. Supports Visa/MC/JCB/Amex cards, FPX online banking (personal + corporate), virtual accounts, Touch 'n Go, GrabPay, ShopeePay, WeChat Pay, Alipay / Alipay+, DuitNow Transfer, and Grab PayLater / SPayLater BNPL. | MYR settlement. | T+1 to T+3 typical. |
| Thailand | Thailand — full merchant signup. Supports Visa/MC/JCB/UnionPay/Amex cards, ShopeePay, WeChat, TrueMoney, LINE Pay, PromptPay QR, virtual accounts, mobile banking, and direct debit. All fees are subject to 7% VAT. | THB settlement. | T+1 to T+3 typical. |
| Vietnam | Vietnam — merchant signup available. Supports Visa/MC/JCB cards, bank transfers, VietQR, and local e-wallets (MoMo, ZaloPay). Public pricing page not broadly published; enterprise sales contract. | VND settlement. | Varies by channel; enterprise contract. |
| Singapore | Singapore — cards (Visa, Mastercard) and PayNow / bank transfer supported. Merchant signup is via enterprise sales; product coverage is narrower than ID/PH/MY/TH. | SGD settlement. | T+1 to T+3. |
| Latin America (expansion in progress) | Mexico and Colombia announced as initial LatAm launch markets in late 2025; Chile, Argentina, and Brazil slated to follow in 2026 per Xendit's Wrapped 2025 blog. Product coverage and merchant signup availability in 2026 are still rolling out — treat as enterprise-sales-only. | Local currencies (MXN, COP, CLP, ARS, BRL) — exact rails TBD. | Not yet published. |
| NOT available | Outside the SEA-6 + LatAm expansion set, Xendit does not offer merchant signup. No Africa, no MENA, no India, no North America (US/Canada), no EU/UK, no Australia/NZ, no Northeast Asia (Japan, Korea, mainland China, Taiwan, Hong Kong outside of cross-border disbursement corridors). Customers worldwide can pay a Xendit-enabled merchant via international card acceptance. | N/A | N/A |
Feature Snapshot
Cards (Visa, Mastercard, JCB, Amex, UnionPay, BCA, GPN)
Country-specific scheme coverage: ID (Visa/MC/JCB/Amex/BCA/GPN), MY (Visa/MC/JCB/Amex), PH (Visa/MC/JCB), TH (Visa/MC/JCB/UnionPay/Amex), VN (Visa/MC/JCB), SG (Visa/MC). BCA is Indonesia-local; GPN is the Indonesian domestic scheme.
Virtual Accounts (Indonesia + Philippines)
Aggregator model (funds settle to Xendit account) and Switcher model (funds settle direct to merchant bank). ID: BCA, BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, NOBU. PH: BPI, UnionBank, RCBC.
E-Wallets (OVO, DANA, ShopeePay, LinkAja, GCash, Maya, GrabPay, Touch 'n Go, LINE Pay, TrueMoney, MoMo, ZaloPay, PayNow, AstraPay, JeniusPay, WeChat, Alipay)
38+ local payment methods across SEA-6. Activation is per-channel in the merchant dashboard; some require additional contract terms (e.g., OVO, ShopeePay).
QR Payments (QRIS, QRPH, PromptPay, DuitNow QR, VietQR, PayNow)
Integration with every major SEA national QR rail — QRIS (ID), QRPH (PH), PromptPay (TH), DuitNow QR (MY), VietQR (VN), PayNow (SG). Customers pay from e-wallet or mobile banking apps.
Retail Outlets (Over-the-Counter)
ID: Alfamart, Indomaret. PH: 7-Eleven, Cebuana Lhuillier, Palawan Pawnshop, SM Counters, MLhuillier, USSC, LBC Express, Robinsons, ECPay Loan/School. Customer generates a code and pays cash at the counter.
Direct Debit (BRI, BPI, UnionBank)
One-time authorized bank-account debit. ID via BRI; PH via BPI and UnionBank. Requires the customer to link their bank account once.
PayLater / BNPL
ID: Akulaku, Kredivo, Atome, Indodana, UangMe. PH: Billease. MY: Grab PayLater (Postpaid + Instalment), SPayLater (Shopee PayLater Instalment).
Payment Links (hosted no-code)
Free product. Create shareable hosted payment pages without an integration.
Subscriptions / Recurring
Weekly, monthly, yearly cadences. Card-based recurring uses tokenized card_on_file_type=RECURRING; e-wallet recurring uses account linking. Automatic retry on failed renewals per plan's retry configuration. Rp2,500 / ₱10 / RM1.50 / ฿8 per active plan per month plus transaction fees. Xendit auto-cancels subscriptions on chargeback.
Payouts / Disbursement API (bulk + single)
Single API call or Excel upload of up to 10,000 transfers per batch. 140+ local banks and e-wallets (GoPay, OVO, DANA, LinkAja, ShopeePay). One endpoint handles disbursements to ID/PH/MY/TH/VN with a single payload. Instant processing window 07:00–23:00, 7 days a week including holidays.
Cross-border Payouts (multi-currency corridors)
Send funds across 450+ destination channels in 140+ banks. Multi-currency corridor product for merchant-to-recipient cross-border remittance within SEA.
3D Secure 2 (3DS2)
Frictionless + challenge flows. Optional-3DS toggle available (API merchants can choose per-transaction; Checkout UI follows merchant setting). 3DS shifts chargeback liability to the issuer.
Webhooks (x-callback-token verification)
Static token in x-callback-token header — NOT an HMAC of the body. Retries up to 6 times with exponential backoff on non-2xx. Separate tokens per live/test environment. Markedly weaker than HMAC-SHA256 schemes used by Stripe/Paystack/Flutterwave — token rotation and constant-time comparison are essential.
Refunds API
Full or partial refunds via API or dashboard. Transaction fees are generally not refunded.
Chargebacks / Disputes
Four-stage lifecycle: initial dispute (T+120) → retrieval (T+30) → chargeback (T+30) → arbitration (T+30). Arbitration stage carries an additional ~$500 fee. Xendit auto-cancels subscriptions on chargeback per T&C.
Early Settlement (paid)
Optional paid add-on that advances funds instantly instead of waiting for the standard T+1 to T+7 settlement window. Each merchant has an Early Settlement limit per channel capping unsettled advances.
XenPlatform (marketplace / split payments)
Platform-mode accounts and fee splitting for marketplaces, SaaS, and platforms reselling Xendit. Per-transaction platform fee applies on top of channel fees.
Server SDKs (Node.js, Python, Go, PHP, Java)
First-party libraries: xendit-node, xendit-python, xendit-go (v4), xendit-php, xendit-java. Consistent API shape across languages. Active GitHub repos under github.com/xendit.
Invoice API (hosted checkout)
Core hosted-checkout primitive — generate an Invoice with amount/currency/customer and redirect to Xendit-hosted page that surfaces every enabled channel.
Google Pay
Not universally listed as a supported channel in Xendit's pricing pages (Indonesia/Philippines/Malaysia/Thailand pricing does not enumerate it). Some Google Pay acceptance is possible via card rails but it is not positioned as a first-class channel like Apple Pay is on other SEA gateways.
Apple Pay
Not enumerated on the core country pricing pages as a distinct channel; card acceptance still works for Apple Pay tokens via the card rails. Not advertised as a first-class channel like GCash/Maya/OVO are.
Xendit Terminal (in-person)
Xendit has an in-person Terminal product documented at terminal-docs.xendit.co; availability is focused on select SEA markets and the enterprise tier.
Pricing Breakdown
Security & Compliance
Integration Prompt
✂
Copy & use this 7123-char integration prompt
Production-ready prompt for Claude / GPT / Cursor — handles setup, security, webhooks & gotchas
Copy & use this 7123-char integration prompt
Production-ready prompt for Claude / GPT / Cursor — handles setup, security, webhooks & gotchas
You are building a Xendit integration for [Django / Next.js / Laravel / Rails / Node.js / etc.] targeting [Indonesia / Philippines / Malaysia / Thailand / Vietnam / Singapore]. Follow these rules exactly. ## Architecture 1. Use **Xendit Invoice API (hosted checkout)** or **Xendit Payment Links** for 80% of integrations — never build a custom card form. Xendit is PCI DSS Level 1; routing raw PAN through your server moves PCI scope to you. 2. Flow: server calls `POST /v2/invoices` (Invoice API) with `external_id`, `amount`, `currency`, `customer`, `success_redirect_url`, `failure_redirect_url`, `payment_methods` → customer is redirected to `invoice_url` → completes payment on Xendit's hosted page → Xendit redirects back to `success_redirect_url`. 3. **Do NOT trust the redirect** — Xendit always fires a webhook at your configured URL (per product: `invoice.paid`, `ewallet.capture`, `virtual_account.paid`, `qr_code.payment`, `disbursement`, etc.). Treat the webhook as the source of truth for fulfilment. The redirect is a UX hint only. ## Amounts Xendit uses **main currency units** (not subunits): - IDR 50,000 → `amount: 50000` - PHP 100 → `amount: 100` - MYR 25 → `amount: 25` - THB 500 → `amount: 500` - USD 9.99 → `amount: 9.99` Do all money math in `Decimal`, never floats. Round to the currency's minor-unit precision (IDR 0 decimals, THB/PHP/MYR 2 decimals). ## Webhook verification (this is the weakest link — take it seriously) Xendit does **NOT use HMAC** on the request body. Instead it echoes a static token in the `x-callback-token` header. That means: 1. In Dashboard → Settings → Webhooks, generate a long random token (≥32 bytes, base64 or hex). Use **separate tokens for Live and Test**. 2. Store them as `XENDIT_CALLBACK_TOKEN_LIVE` / `XENDIT_CALLBACK_TOKEN_TEST` secrets — never commit. 3. In your webhook handler, extract `request.headers['x-callback-token']` and compare it to the expected token using a **constant-time comparison** (`hmac.compare_digest` in Python, `crypto.timingSafeEqual` in Node.js, `hash_equals` in PHP). Plain `==` leaks timing information. 4. Reject the request with `401` if it doesn't match. Do NOT log the token value. 5. Layer IP allowlisting on top if your WAF or framework supports it (pull Xendit's current egress IPs from their Dashboard — don't hardcode; they can change). 6. Rotate the token on any staff departure, secret scanner alert, or public-repo mistake. Rotation is immediate — Xendit uses the new token on the next callback. ## Idempotency (webhooks + retries) - Xendit retries failed callbacks up to **6 times with exponential backoff**. Duplicates can also occur on successful deliveries during infrastructure events. - Every handler must be idempotent on a stable unique id — `invoice_id`, `payment_id`, `capture_id`, `disbursement_id`, or `external_id`. Persist processed event ids in a dedupe table and short-circuit replays before writing any side effects. - Return `2xx` within Xendit's timeout window; queue fulfilment (emails, provisioning, ERP writes) to a background job rather than doing it inline. ## Authentication (API) - Xendit uses HTTP Basic Auth: `Authorization: Basic base64(<SECRET_KEY>:)` — note the trailing colon. - `XENDIT_SECRET_KEY` is server-side only; never expose to browser bundles. - Public keys exist for some client-side SDKs (tokenization) but you do not need them for Invoice-based flows. - Use **separate test/live keys** and swap only at deployment time with your env vars. ## Virtual Account model choice (Indonesia specifically) Decide up-front: **Aggregator** or **Switcher**. - Aggregator: customer pays a Xendit-owned VA number → funds land in your Xendit balance (Rp 4,000 fee). T+1/T+2 payout. - Switcher: customer pays a merchant-bank-owned VA number → funds land directly in your bank (Rp 2,000 + bank fee). Setup requires the bank contract separately. - Don't mix them in the same integration unless your finance team can reconcile two settlement streams. ## 3D Secure - Keep 3DS enabled for all cross-border and high-risk card payments — the liability shift to the issuer is worth the ~5% auth-rate cost on legit customers. - For recurring/subscription charges, use `card_on_file_type: "RECURRING"` + the `recurring_configuration` object; Xendit flags subsequent charges as merchant-initiated and skips 3DS where the scheme allows. ## Subscriptions - Create a `Subscription Plan` first (weekly/monthly/yearly cadence, retry configuration) then initiate a transaction with the plan reference. - Subscribe to `recurring.plan.activated`, `recurring.plan.inactivated`, `recurring.cycle.created`, `recurring.cycle.succeeded`, `recurring.cycle.failed` webhooks. - Xendit auto-cancels a subscription on chargeback per the T&Cs — your app needs to detect that state and offer re-subscription rather than assuming the plan is still active. ## Chargebacks - Subscribe to the card-dispute webhook. Lifecycle is initial (T+120) → retrieval (T+30) → chargeback (T+30) → arbitration (T+30, ~$500 fee). - Respond with full evidence (order record, shipping proof, IP log, 3DS result) at the retrieval stage. Don't let disputes escalate to arbitration by default. ## Payouts / Disbursement - Single endpoint handles ID/PH/MY/TH/VN with one payload — use it for cross-country payouts. - Batch disbursement supports up to 10,000 transfers per batch (API or Excel upload). Processing window 07:00–23:00 local, 7 days/week. - Always validate the destination account via Xendit's account-validation endpoint (name check) BEFORE disbursing to avoid unrecoverable misrouting. ## SDK choice Prefer first-party libraries: `xendit-node`, `xendit-python` (Python 3.10+), `xendit-go` (v4), `xendit-php`, or `xendit-java`. All live under github.com/xendit and share API shape. Do not roll your own HTTP client unless you have a specific reason. ## Development workflow - Use separate Test-mode API keys and a separate webhook token. Test-mode transactions are free. - Test card PANs are published per country in the help center (for Indonesia, use `4000000000000002` for success and `4000000000000069` for expired card). E-wallet test flows use mock OTPs. - Use ngrok or cloudflared to expose localhost for webhook testing; register the tunnel URL in the Test-mode dashboard. ## Error handling & reconciliation - Treat every non-2xx from Xendit as retryable with exponential backoff (3 attempts, 1s/5s/30s), except for 4xx validation errors. - Log every webhook's `id`, `event`, `amount`, `status`, and `external_id` to a ledger table. Reconcile daily against Xendit's settlement reports. - Store Xendit's `id`, your `external_id`, channel, and settlement status on your order. ## Dashboard hardening - Enforce 2FA on every admin account. - Rotate the `x-callback-token` and `XENDIT_SECRET_KEY` on any staff departure. - Give analysts read-only dashboard access; production integration keys belong to devops only. Deliver a minimal working integration: Invoice create → hosted redirect → webhook with x-callback-token constant-time comparison → idempotent fulfilment. Do not add features beyond those requested.
Replace [Django / Next.js / etc.] with your stack. Follows PCI DSS best practices and handles common edge cases.
Common Pitfalls
10 itemsWebhook verification is a STATIC TOKEN, not HMAC-SHA256
Unlike Stripe, Paystack, or Flutterwave (which sign the request body with HMAC-SHA256), Xendit simply echoes a shared secret in the x-callback-token header. Anyone who captures or leaks that token can spoof webhooks at will. Treat the token like a database password: store it in a secrets manager, rotate it on staff departure, never commit it, and always compare it with a constant-time function (hmac.compare_digest / crypto.timingSafeEqual). Layer IP allowlisting on top if your platform supports it.
Aggregator vs Switcher VA models behave very differently
Indonesia Virtual Account comes in two flavors. Aggregator: customer pays a Xendit-owned VA number → funds land in your Xendit balance → you disburse to your bank → T+1/T+2 settlement. Switcher: customer pays a merchant-bank-owned VA number → funds land directly in your bank → fee is Rp 2,000 + bank fee. Pick one model per channel and document it on the pricing page internally — mixing in a single integration confuses the finance team during reconciliation.
Default settlement is slow — Early Settlement is a paid add-on
Out-of-the-box settlement for cards is up to T+7 calendar days; e-wallets and VAs are T+1 to T+3. Weekend + holiday payments reflect on the next business day. If your cash-conversion cycle can't absorb that, enable Early Settlement (paid) — but every merchant is assigned an Early Settlement limit per channel, so model your advance needs against that cap before promising daily payouts.
Merchant activation can be rejected without a clear reason
Trustpilot reviews repeatedly mention merchant accounts rejected during onboarding with automated template responses and no specific remediation. Country-specific KYC is heavy: Indonesia wants NIB/SIUP/NPWP and a local bank account; Philippines wants SEC or DTI + BIR; Malaysia wants SSM. Submit complete documents up front, use a business email domain (not Gmail), and escalate through your account manager if you go >10 business days without status.
Webhook duplicates from the 6x retry policy — idempotency required
Xendit retries non-2xx responses up to 6 times with exponential backoff; duplicates can also occur on successful deliveries during infrastructure events. Every webhook handler must be idempotent on the event's unique id (e.g. payment_id, capture_id, invoice_id, or disbursement_id). Store processed event ids in a dedupe table and short-circuit replays.
TrueMoney / LINE jump from 3.20% to 10% for restricted categories in Thailand
Thailand e-wallet pricing for TrueMoney and LINE is 3.20% for e-commerce merchants but 10% for 'e-books, entertainment, games, stickers, live broadcast, social merchants'. If you sell digital content, SaaS, or creator-economy products into Thailand, the listed rate is not what you pay. Confirm your MCC classification with Xendit sales before launch.
Country VAT and taxes stack on top of listed fees
Thailand adds 7% VAT to every listed fee (the number on the pricing page is pre-VAT). Indonesia currently applies 11% VAT on applicable channels (QRIS is listed VAT-inclusive; others are not). Budget for the surcharge in pricing-to-customer math and double-check the VAT-inclusive/exclusive column on each pricing page before publishing internal fee cards.
Chargeback arbitration can cost USD 500+ per dispute
Chargeback lifecycle is initial (T+120 days) → retrieval (T+30) → chargeback (T+30) → arbitration (T+30). Losing or escalating to arbitration can add ~$500 per dispute on top of the lost transaction and card-network fees. Treat the card-dispute webhook as on-call material and respond with full order/shipping/IP evidence at the retrieval stage — don't wait for arbitration.
Subscriptions auto-cancel on chargeback per Terms & Conditions
Per Xendit's card processing T&Cs: on receipt of a chargeback request on a card used for a subscription, Xendit has the right to cancel that subscription immediately with written notice. Plan your renewal retry + customer-communication logic so a recovered subscriber can be re-subscribed programmatically (new tokenization) rather than re-entering card details at a critical churn moment.
Support tickets for risk / activation are notoriously slow
Across Trustpilot and Glassdoor ex-employee reviews, support is the dominant negative theme: 'totally useless', 'endless we'll respond shortly', 'automated template responses'. Developer / API questions typically get faster turnaround than merchant-activation or risk-review tickets. For production-critical merchants, negotiate an enterprise SLA and keep an account-manager escalation path documented in your runbook.
Community Pulse
Developer and merchant sentiment on Xendit is sharply bimodal. On the positive side: it is genuinely the default choice for anyone shipping into Indonesia or the Philippines — the local-method coverage (QRIS, GCash, OVO, DANA, Maya, ShopeePay, Alfamart, Indomaret, 7-Eleven) and first-party SDKs across five languages have no real regional peer, and the batch-disbursement product (up to 10,000 transfers per call across five countries) is widely praised for payroll/marketplace use cases. On the negative side, Trustpilot surfaces a heavy one-star tail around merchant-activation rejections with no stated reason, 'totally useless' and 'endless we'll respond shortly' support descriptions, and a 2025 review calling the product 'a disaster' with 'dysfunctional customer service'. Glassdoor senior-engineer reviews (2.2/5) cite layered technical debt and a pattern of layoffs (Oct 2022 ~100 people, Aug 2023 ~15–20, ongoing silent performance-tier reductions). The reasonable take: excellent product for SEA payment coverage and a good choice if you have clean onboarding documents and can tolerate slow support — riskier if your business depends on responsive account management during a dispute.
Sentiment last updated: April 2026 · We summarize — never copy — community content. Links go to original threads.
Changelog
-
logo
downloaded Xendit official Logo Kit from https://www.xendit.co/en/company/asset-and-branding/ (zip: Xendit-Logo-20210113T094326Z-001.zip); extracted 01-xendit_logo.png (1500×637) and resized to 400×170 transparent PNG (21KB); avg brightness 107.0 (dark logo) so logo_bg left empty
-
pricing
initial pricing — Indonesia cards 2.9%+Rp2k (Amex 3.9%), e-wallets 1.5–4.0%, QRIS 0.7%, VA Rp4k agg / Rp2k+bank switcher, OTC Rp5–5.5k, Direct Debit BRI 1.9%, PayLater 1.7–5%; Philippines cards 3.2%+₱10 local / 4.2% intl / 4% USD, e-wallets 1.8–2.3%, direct debit 1% or ₱25, VA 1% or ₱15, QRPH 1.4% or ₱15, OTC ₱20–25 or 1.5%+₱15, BNPL 1.5%; Malaysia local CC 2.0% / local DC 1.2% / foreign 3.0%, FPX RM1.20–2.00, VA 0.5% (min RM1), e-wallets 1.3–3.0%, BNPL 1.3–8%, DuitNow RM1.50; Thailand cards 3.2% + ฿10 / foreign 4.2% + ฿10, e-wallets 1.5–3.2% (10% restricted), PromptPay 0.8%, VA/Mobile Banking/DD ฿15 + 7% VAT; chargeback arbitration up to USD500+; platform/monthly/setup fees free
-
availability
initial availability — Indonesia (primary home market), Philippines, Malaysia, Thailand with full public pricing + merchant signup; Vietnam and Singapore via enterprise sales (public pricing limited); Latin America (MX, CO, then CL/AR/BR) announced as expansion markets in Wrapped 2025; NOT-available row covers Africa, MENA, India, North America, EU/UK, Australia/NZ, Northeast Asia
-
features
initial 22 features — cards (Visa/MC/JCB/Amex/UnionPay/BCA/GPN), virtual accounts (aggregator + switcher), e-wallets (OVO/DANA/ShopeePay/LinkAja/GCash/Maya/GrabPay/TNG/LINE/TrueMoney/MoMo/ZaloPay/PayNow/AstraPay/JeniusPay/WeChat/Alipay), QR (QRIS/QRPH/PromptPay/DuitNow/VietQR/PayNow), retail OTC, direct debit, PayLater/BNPL, Payment Links, Subscriptions, Payouts/Disbursement (up to 10k/batch, 140+ banks, 450+ channels), cross-border corridors, 3DS2, webhooks (x-callback-token), refunds, chargebacks, Early Settlement, XenPlatform, 5 SDKs (Node/Python/Go/PHP/Java), Invoice API, Google Pay / Apple Pay via card rails only, Xendit Terminal. Webhooks marked 'partial' — static token vs HMAC-SHA256 elsewhere
-
security
initial security entries — PCI DSS Level 1 Service Provider (confirmed via help.xendit.co article 360045674071), 3DS2 with optional-3DS toggle, webhook x-callback-token verification (noted as weaker than HMAC schemes), 2FA on dashboard, regulatory licensing across OJK/BSP/BNM/BOT/SBV; no public breach history comparable to Flutterwave 2023/2024 incidents
-
pitfalls
initial 10 pitfalls — static x-callback-token vs HMAC (constant-time comparison required), aggregator vs switcher VA model split, default T+7 settlement with paid Early Settlement, merchant activation rejections without reason, 6x webhook retry idempotency, TrueMoney/LINE 10% restricted-category fee, country VAT stacking on top of fees (TH 7%, ID 11%), $500+ chargeback arbitration cost, subscription auto-cancel on chargeback, slow support for risk/activation tickets
-
community_pulse
initial synthesis from Trustpilot (heavy one-star tail on merchant activation + support), Glassdoor (2.2/5 for senior engineers, layoff pattern Oct 2022 / Aug 2023 / ongoing), YC company page, Series D $300M press release (May 2022), Xendit Wrapped 2025 (LatAm expansion announcement), plus community Laravel/Medium integration guides
-
trust_score
initial weighted trust score 72 — payout_reliability 75, account_stability 65, developer_experience 80, transparency 78, support_quality 52, track_record 75. Lower than Stripe/Paystack on support_quality and account_stability; stronger than Flutterwave on track_record (no public breach history) and transparency (per-country pricing pages)
-
integration_prompt
initial integration prompt covering Invoice API hosted checkout, main-unit amount handling (no subunits), x-callback-token constant-time verification (vs HMAC on peers), idempotency against 6x retry policy, aggregator vs switcher VA choice, subscriptions with auto-cancel-on-chargeback handling, payouts/disbursement across ID/PH/MY/TH/VN, SDK selection, dashboard hardening, reconciliation ledger
LearnWithHasan.com · Payment Gateway Index · No affiliate links · Builder-first