Every ERP, CRM or accounting integration works in the demo. It fails on a Tuesday afternoon when the partner API returns 429 for forty minutes, a webhook arrives twice, an order update lands before the order it updates, or someone renames a custom field in the CRM. The integration did not have a bug. It had no design for failure.
At Loop Origin a large share of our work is connecting custom Laravel and Node applications to ERPs, CRMs, accounting tools and courier platforms. This is the architecture I now use by default: a transactional outbox, rate-limited idempotent workers, a dead-letter table with replay, and a daily reconciliation that catches what everything else missed.
How do you build API integrations that survive outages and rate limits?
Direct answer: Never call a partner API inside the user's request.…