Quickstart · three commands, no account

Running gateway in 3 commands. Signed receipts on every call you route through it.

Run the SynOI Gateway locally, then govern any action, an API call, a payment, a device, an integration, or an LLM call, with one gate() call from @synoi/sdk. Already routing LLM traffic? Skip the SDK and just repoint your Anthropic or OpenAI client at the gateway. Either way you get cache, audit, governance, and signed Decision Receipts. Free, local, no signup required. When you're ready for multi-device or cloud sync, add a license key; same gateway, same code.

The Gateway is GAP conformant (L1-L4) against the open conformance suite. Every receipt this quickstart produces is a valid GAP object.

STEP 01

Bootstrap · npx @synoi/start init

Drops a docker-compose.yml + .env (with a fresh admin key, mode 0600) into ./synoi/. Requires Docker. No account, no payment, no terminal jiu-jitsu.

npx @synoi/start init
cd synoi
docker compose up
# Gateway live on http://localhost:3000
# Dashboard:    http://localhost:3000/dashboard
# Admin key:    in synoi/.env

STEP 02

Govern any action you wrap: gate() from @synoi/sdk

Set SYNOI_GATEWAY_URL and wrap any action, an API call, a payment, a device, an integration, or an LLM call, with one function. Every call gets a policy decision and a signed receipt. This is the general path.

export SYNOI_GATEWAY_URL=http://localhost:3000

import { gate } from '@synoi/sdk'
const result = await gate(
  { tool_name: 'payments.charge', tool_input: { amount: 4200 } },
  () => charge(),
)

STEP 02b

If you're governing LLM calls: zero-code alternative

Already routing traffic through an Anthropic or OpenAI-shaped client? Skip the SDK and just repoint your base URL. Your LLM provider key passes through per-request, never persisted.

# Claude Code (Anthropic-protocol)
export ANTHROPIC_BASE_URL=http://localhost:3000/anthropic

# Cursor / Aider / OpenAI SDK (OpenAI-protocol)
export OPENAI_API_BASE=http://localhost:3000/v1

STEP 03

Make a call · receive a signed receipt

Every gateway response includes an X-SynOI-Receipt-Id header. Verify it cryptographically with one command; the receipt-ID form fetches the receipt and key from the gateway (internally consistent). Check an exported bundle to send nothing to us.

# Smoke-test the gateway
curl http://localhost:3000/anthropic/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-opus-4-7","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'

# Response header: X-SynOI-Receipt-Id: rcpt_abc_123
# Verify it (third party; fetches receipt + key from the gateway):
npx @synoi/verify rcpt_abc_123

STEP 04

Upgrade (optional) · hosted + multi-device + cloud sync

When you want to skip the docker compose step or share a license across devices, subscribe at app.synoi.systems. Hosted gateway at gateway.synoi.systems: same code, no install, $19/mo Personal.

# Hosted (zero install - paid plan)
export ANTHROPIC_BASE_URL=https://gateway.synoi.systems/anthropic
export SYNOI_LICENSE_KEY=<from your activation email>

# OR local + license (cloud sync features unlock)
echo "SYNOI_LICENSE_KEY=<your key>" >> synoi/.env
docker compose restart

What you have, after five minutes

Signed Decision Receipts on every call

Hybrid-signed (Ed25519 + ML-DSA-65), publicly verifiable, exportable as CI artifact.

Semantic cache hits

Average hit rates vary by workload; P99 latency overhead under 2 ms on cached paths (measured internally).

Tier-aware routing

Trivial queries route to free Groq tier. Hard ones go to your premium model.

Per-tenant risk policy

Allow / deny / require-approval. Evaluated in ~1 ms (measured internally).

HITL surface

Slack, SMS, desktop, mobile (coming). Approval round-trip signed.

BYO keys, never persisted

Your provider key forwarded once, never written to any database. Asserted in CI.