Quick start

Zero → first attested AI call, in five minutes.

You will not learn a new API. You'll change one line — the base URL of the OpenAI or Anthropic SDK you already use — and every call comes back PII-masked, intelligently routed, and carrying a signed certificate a third party can verify offline.

1

Get an API key

Create a key on the dashboard (sk_live_…). Gateway calls draw on your workspace token balance — the one your account already has, topped up from the app. No separate billing, nothing to configure: when the balance runs out, calls return a standard 402 insufficient_quota error your SDK already knows how to surface.

Self-hosting? Run the backend (cd backend && npm run dev) or the standalone gateway (npm run gateway:dev, port 3053) and mint a test key with npx ts-node src/scripts/gateway-demo-key.ts — on-prem installs are licence-based and unmetered.

2

Change one line

The prompt below contains PII on purpose — watch the x-pulse-pii-masked header: the name and email were swapped for neutral tokens before anything left toward the provider, and restored in the answer you received.

import OpenAI from 'openai'

// The only Pulse-specific line in this file:
const client = new OpenAI({
  baseURL: 'https://api.pulse-labs.fr/v1',   // local backend: http://localhost:3051/v1
  apiKey: process.env.PULSE_API_KEY,
})

const { data, response } = await client.chat.completions
  .create({
    model: 'pulse-auto',
    messages: [{ role: 'user', content: 'Draft a welcome note for Marie Lefebvre (marie@exemple.fr).' }],
  })
  .withResponse()

console.log(data.choices[0].message.content)
console.log('PII masked :', response.headers.get('x-pulse-pii-masked'))   // → 2
console.log('Proof id   :', response.headers.get('x-pulse-proof'))        // → pf_…
3

Fetch the proof

Every completion ships an x-pulse-proof header. The certificate commits to your request, the redacted egress and the response by sha256 — it never contains content, so it can go straight to an auditor. It is Ed25519-signed and chained to the previous one: forging or silently deleting a record is detectable by anyone holding the public key.

Certificate + verification
PROOF=pf_…   # from the x-pulse-proof header

# The certificate — hashes only, no content. Hand it to an auditor as-is.
curl -s https://api.pulse-labs.fr/v1/proofs/$PROOF \
  -H "Authorization: Bearer $PULSE_API_KEY" | jq .payload

# Server-side check (signature + chain link):
curl -s https://api.pulse-labs.fr/v1/proofs/$PROOF/verify \
  -H "Authorization: Bearer $PULSE_API_KEY"
# → { "signature_valid": true, "chain_valid": true, "valid": true }
4

Go further: the model field is an address

Once traffic flows through the gateway, capabilities are one string away — no new API, no SDK change. Your workspace agents, your knowledge base, forced-local processing: all selected by the model name.

Model addressing
# The model field is an address — it selects which Pulse capability answers:

model: "pulse-auto"          # routed: cheap model for simple asks, full model for complex
model: "pulse-sensitive"     # forced local — data never leaves, the certificate proves it
model: "agent:demo-cfo"      # answered BY your workspace agent (memory, documents, tools)
model: "pulse-auto+cortex"   # grounded in your knowledge base, sources hashed into the cert
model: "agent:legal+sensitive"  # flags compose

# GET /v1/models lists these — including every agent of your workspace.
Where to next. The full gateway reference (dialects, addressing, certificate anatomy, offline verification) lives at Pulse Gateway. Behind it: Synapse decides how models are called, Cortex decides what they know.
Pulse Gateway reference →Authentication →Get an API key →