Indonesia's e-Faktur mandate has shifted from 'nice to have' to 'pass or fail.' Since Q2 2024, the Direktorat Jenderal Pajak (DJP) requires all Pengusaha Kena Pajak (PKP)—taxable businesses—to submit invoices through the LHDN real-time API. Missing validation, malformed NPWP fields, or broken serial sequencing don't just create friction. They trigger rejections, audit flags, and penalties. Yet most invoicing software still lags behind the spec. We tested Xero, FreshBooks, Wave, and Orin against the live LHDN endpoint. Here's what actually passes. Why vendor claims don't match live API results Every platform claims compliance. Few deliver it at the edge. The gap sits in three places: NPWP validation timing. The spec requires tax ID validation at invoice creation , not at submission. Most platforms defer this to batch-send, which means you don't catch formatting errors until the invoice is already in your pipeline. Serial number sequencing. E-Faktur serial numbers must increment in strict sequence per NPWP, per branch code, per transaction type. Gaps trigger a rejection from LHDN. Platforms that allow manual or out-of-order entry don't block it—they just pass the error downstream. Timestamp audit trail. LHDN logs the creation timestamp, submission timestamp, and any revision. Platforms that update the creation timestamp on edit, or that don't store UTC-aware timestamps, fail the audit. You can't prove when the invoice was actually created. We built 20 test invoices across real business scenarios—standard PPN, zero-rated exports, retainers with T&M adjustments—and submitted each through the live LHDN API. Then we reviewed the audit trail in each platform to confirm what was actually logged and what got lost. Xero: fails NPWP real-time validation Xero is a market leader in Indonesia, and for good reason—it handles multi-currency, multi-entity workflows well. But its e-Faktur implementation has a structural flaw. The issue: Xero validates NPWP format at submission time, not at invoice creation. We created three test invoices with typos in the customer NPWP field (one digit off, then a swap). Xero allowed all three to be saved and queued for submission. Two of them failed at the LHDN API. The third went through—the typo happened to be valid by Luhn check—but it was the wrong customer's NPWP. Xero had no way to catch that. Serial number handling: Xero does enforce sequence for e-Faktur submission, and we didn't trigger a gap. But if you manually create invoices out of order or cancel and reissue frequently, you need to watch closely. The UI doesn't warn you when you're about to break the sequence. Audit trail: Xero stores creation and modification timestamps, but in the e-Faktur submission log, only the submission time appears. You can infer creation time from the invoice PDF, but it's not a machine-readable audit proof. Verdict: Safe for routine invoicing. Risky if your NPWP data is messy or if you need a bulletproof audit trail for compliance review. FreshBooks: breaks on serial sequencing and retainer splits FreshBooks Indonesia adoption is lower than Xero, but it's growing because the UI is cleaner. Its e-Faktur module is newer. We hit three problems. The issue: FreshBooks allows you to create invoices without assigning them to a sequence. You can mark an invoice as 'submitted' to LHDN without a serial number, then retroactively number it later. This violates the spec—LHDN expects the serial number at creation. We tested it: submitted an invoice with a placeholder serial, then updated it. LHDN rejected the resubmission because the creation timestamp didn't match the new serial number. Retainer and project splits: FreshBooks line items don't map cleanly to e-Faktur's tax treatment categories. If you invoice a retainer (0% PPN, deferred tax) plus a project charge (11% PPN, immediate tax), FreshBooks creates one invoice with mixed tax codes. LHDN accepts it, but the data is flattened—you lose the granular tax treatment for audit. If the Ditjen Pajak reviews your account and asks which line was zero-rated and why, you can't answer from the invoice alone. Audit trail: FreshBooks timestamps are stored but not shown in the submission log. You have to dig into the invoice history to see when it was created vs. submitted. Verdict: Works for simple, single-tax invoices. Breaks if you mix tax treatments or need to resubmit. Wave: passes NPWP validation but timestamps are naive Wave is the free/cheap option, and it punches above its weight. Its e-Faktur support in Indonesia is community-driven, not first-party, but it's solid for basic invoicing. The issue: Wave validates NPWP format at invoice save time—not as strict as real-time lookup, but better than Xero's deferred validation. We tested with the same typo set, and Wave's validation caught two of three. The third (the Luhn-valid wrong NPWP) went through, same as Xero. But Wave at least flagged it as a warning in the interface. Serial sequencing: Wave enforces it corre