Skip to content
ISH

ISH

A local API mock server. Run fake versions of Google, GitHub, Twilio, and more without touching production.

GitHub ← All Products

ISH runs on your machine and pretends to be seven different APIs. Point your Google, GitHub, Twilio, Discord, SendGrid, or Home Assistant SDK at localhost:9000 instead of the real service, and your code can’t tell the difference. No API quotas burned, no OAuth credentials to manage, no network required. One Go binary, one SQLite file, 50+ endpoints.

Install

go build -o ish ./cmd/ish

Or download a pre-built binary from the releases page.

Then seed it with test data and start the server:

./ish seed
./ish serve --port 9000

What it does

Google APIs — Gmail (messages, threads, labels, attachments, search syntax like is:unread and in:inbox), Calendar (events, time filtering, sync tokens), People (contacts, search, pagination), and Tasks (lists, CRUD, completion tracking).

GitHub — Repos, issues, pull requests, comments, reviews, and SSRF-protected webhooks via the REST v3 API.

Twilio — SMS and voice APIs with async webhook delivery, phone numbers, calls, and messages.

Discord — Webhook API v10: execute, edit, delete messages with embed and component support.

SendGrid — Email send API v3, API key management, and suppression lists.

Home Assistant — Entity states, service calls, and token auth.

OAuth 2.0 — A mock OAuth provider that simulates authorization code flow, token refresh, and revocation for any plugin.

All of these work with their official SDKs. The only change is the base URL:

export GOOGLE_API_BASE_URL=http://localhost:9000

ISH also ships with an admin UI at /admin — a schema-driven web interface where you can browse all resources, manage test data, and inspect every request that hits the server.

If you set OPENAI_API_KEY, the ish seed command generates realistic emails, calendar events, contacts, and tasks using AI. Without it, you get sensible static data.

How it works

Each API is a plugin. Plugins implement a standard interface — routes, schema, seed data — and register themselves at startup. The admin UI reads plugin schemas and generates its UI automatically, so adding a new mock API doesn’t require touching core code.

Data lives in a single SQLite file (~/.local/share/ish/ish.db by default). Every request gets logged with plugin attribution, method, path, status, and timing. The auth layer accepts Bearer user:USERNAME tokens — no real credentials needed.

Requirements

  • Go 1.21+ (to build from source)
  • Optional: OPENAI_API_KEY for AI-powered test data generation
30 products · 11 skills · 15 tools · 3 platforms · 5 building · hugo 0.148.2 · 02a0377 · built Mar 18 22:35
2389 Radio
2389 RADIO Select a station