v1 — programmable simulated external services, ready

Programmable
simulated external services

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.

Open admin console Learn more ↓
Architecture
  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)

Supported providers

Each provider simulates its own external service set. URL spaces are namespaced per provider; world isolation is shared across providers.

in
LinkedIn (Unipile)
15 endpoints
A faithful replica of the Unipile LinkedIn automation API — messaging, posts, invites, InMail, and more.
MessagingPostsInvitesProfilesInMail

Core capabilities

A simulator built for developers — from fault injection to deterministic state, covering every corner of integration testing.

📜

Contract fidelity

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.

🔁

One-click switch

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.

🎯

Deterministic state

A stateful core manages accounts / chats / messages / invites with read/write consistency; deterministic seeds make scenarios reproducible.

⚡

Fault injection

429 + Retry-After / 422 / timeouts / ban envelopes — retry logic and error handling can finally be exercised in tests.

🎭

Counterparty

Simulated counterparties reply to your app's messages and fire app-side webhooks. Inbox and Invites are the real stage for counterparty replies.

🌍

World isolation

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.

API endpoints

Implemented simulated endpoints, grouped by provider, with contracts consistent with the real captures.

in LinkedIn (Unipile) 15 endpoints
GET /linkedin/api/v1/users/me Current user info
POST /linkedin/api/v1/users/invite Send connection invite
DELETE /linkedin/api/v1/users/invite/sent/:invitationId
GET /linkedin/api/v1/users/:providerId User public profile
POST /linkedin/api/v1/chats Create conversation
POST /linkedin/api/v1/chats/:chatId/messages Send message
GET /linkedin/api/v1/chats/:chatId/messages Chat messages
GET /linkedin/api/v1/chat_attendees/:providerId/chats Conversation list
GET /linkedin/api/v1/messages Message list
GET /linkedin/api/v1/linkedin/inmail_balance InMail balance
POST /linkedin/api/v1/linkedin/search
GET /linkedin/api/v1/users/:providerId/posts User post list
GET /linkedin/api/v1/users/:providerId/comments User comment list
POST /linkedin/api/v1/posts/reaction Like / unlike
POST /linkedin/api/v1/posts/:socialId/comments Comment on post
POST /linkedin/api/v1/posts Create / repost post
GET /linkedin/api/v1/posts/:postId Post details

Get started

Clone the repo, install dependencies, start the dev server — three steps to stand in for the real API.

Enter admin console
$ bun install && bun dev