For development, testing, and staging — no calls to real APIs. Zero risk of account bans, zero risk of stray real messages. The first release is a complete replica of the Unipile LinkedIn API — flip one environment variable and the real API is replaced with zero app code changes; the multi-provider architecture is ready.
Calling app Simulator (simula-forge) ┌─────────────┐ X-API-KEY ┌──────────────────────────┐ │ unipiles/ │ ──────────────────▶ │ /linkedin/api/v1/** │ │ client.ts │ UNIPILE_API_URL │ faults → contract oracle │ └─────────────┘ =host/linkedin │ → endpoints → core (SQLite)│ │ (rides the baseURL — zero code changes) │ → webhook fire-and-forget│ ▼ ├──────────────────────────┤ ┌─────────────┐ │ /brightdata/api/v1/** │ │ bd-client/ │ BD_API_URL │ (coming soon) │ └─────────────┘ ├──────────────────────────┤ ┌─────────────┐ │ /emailengine/api/v1/** │ │ ee-client/ │ EE_API_URL │ (coming soon) │ └─────────────┘ └──────────────────────────┘ ▼ Real Services (direct when running live)
Each provider simulates its own external service set. URL spaces are namespaced per provider; world isolation is shared across providers.
A simulator built for developers — from fault injection to deterministic state, covering every corner of integration testing.
Contracts come from real traffic captures plus caller source code. Error envelopes, pagination, and status vocabularies are anchored by real-world measurements, so response shapes match the real API.
Point an environment variable (e.g. UNIPILE_API_URL) at the simulator — zero app code changes. Each provider has its own URL space; they never interfere.
A stateful core manages accounts / chats / messages / invites with read/write consistency; deterministic seeds make scenarios reproducible.
429 + Retry-After / 422 / timeouts / ban envelopes — retry logic and error handling can finally be exercised in tests.
Simulated counterparties reply to your app's messages and fire app-side webhooks. Inbox and Invites are the real stage for counterparty replies.
Worlds are isolated per API key, so parallel CI tests never pollute each other. Each world has an independent virtual clock — advance time to trigger scheduled jobs.
Implemented simulated endpoints, grouped by provider, with contracts consistent with the real captures.
Clone the repo, install dependencies, start the dev server — three steps to stand in for the real API.
Enter admin console