SLASHED is a unified OpenAI-compatible gateway across Anthropic, Google, and OpenAI. Same SDKs. Same response shape. One endpoint. Half the direct-list per-token rate. This page is the shortest path from "never heard of it" to "first call complete".
# 1. point any OpenAI client at SLASHED export OPENAI_BASE_URL="https://api.slashed.pro/v1" export OPENAI_API_KEY="sl-..." # generate at dashboard.slashed.pro # 2. first call — identical to the OpenAI API curl $OPENAI_BASE_URL/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5.4", "messages": [{"role":"user","content":"ping"}] }'
The full list is public, machine-readable, and unchanged between the dashboard, the SDK, and your billing.
Every model on the catalogue is published-rate × 0.5, with the upstream provider's official rate in line-through next to it.
Swap OPENAI_BASE_URL, swap the key prefix, ship. Same SDK, same response shape, half the rate.
Every step below is the actual flow — no marketing detour, no SSO mandate, no calendar invite. If you already have an OpenAI client somewhere in your stack, you're 90 % of the way there.
sl- keyEmail-only sign-up at dashboard.slashed.pro. No card, no SSO mandate. You receive a key prefixed sl- plus a 1 M-token migration credit on first issue. The key is scoped per-seat — you can mint sub-keys with their own per-month cost ceilings before you write a single line.
OPENAI_BASE_URL at SLASHEDThree OpenAI-compatible clients, three near-identical patches. The only thing that changes is the base URL and the key prefix; the model name, message shape, and response shape stay where they were.
from openai import OpenAI client = OpenAI( base_url="https://api.slashed.pro/v1", api_key="sl-...", ) resp = client.chat.completions.create( model="gpt-5.4", messages=[{"role": "user", "content": "ping"}], ) print(resp.choices[0].message.content)
from langchain_openai import ChatOpenAI llm = ChatOpenAI( base_url="https://api.slashed.pro/v1", api_key="sl-...", model="claude-opus-4-7", ) print(llm.invoke("ping").content)
// app/ai.ts import { createOpenAI } from "@ai-sdk/openai"; import { generateText } from "ai"; const slashed = createOpenAI({ baseURL: "https://api.slashed.pro/v1", apiKey: process.env.SLASHED_API_KEY, // sl-... }); const { text } = await generateText({ model: slashed("gemini-3.5-flash"), prompt: "ping", });
Copy-paste this. If it returns a non-null content string, you are integrated. The response shape is the OpenAI chat.completions object verbatim — every existing parser keeps working.
curl $OPENAI_BASE_URL/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-opus-4-7", "messages": [{"role":"user","content":"In one word: ping."}] }'
{
"id": "chatcmpl-...",
"object": "chat.completion",
"model": "claude-opus-4-7",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "pong" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 8, "completion_tokens": 1, "total_tokens": 9 }
}
The eleven public IDs at api.slashed.pro/v1/models, grouped by what they're best at. Prices below are per 1 M output tokens; line-through is the direct provider list, bold-accent is the SLASHED rate.
Use when a long-context coding agent has to read a real repo and emit unified diffs without losing the thread.
Use when the task is a long-context plan, a board-ready synthesis, or a multi-step research run.
Use when a long document needs to come back as a 12-line summary — fast, cheap, JSON-shaped.
Use when the cost per call dominates the project — embeddings backfills, batch classification, eval grading.
Eleven IDs total — gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex, gpt-5.2, claude-opus-4-7, claude-sonnet-4-6, gemini-3.1-pro-preview, gemini-3.5-flash, gemini-3-flash-preview, gemini-2.5-pro. Full per-token table, input and output, at slashed.pro/pricing.
Every claim below traces to a specific contract in the public OpenAPI spec.
Hidden token taxes
SLASHED forwards exactly what your client sent, byte-for-byte, and bills exactly what the upstream reports. No router-authored preamble, no silent system prompt, no platform context on the invoice. See OpenAPI spec →
Silent empty completions
If the upstream returns an error, SLASHED surfaces the error code. We do not return a 200 with an empty completion and silently bill the prompt tokens. See error contract →
Pseudo-model duplicates
Each model has one public ID and one public price. Capability controls are parameters, not duplicate SKUs with separate billing treatment. Verify the list →
If you got through Step 03 above and it worked, you're done — close the tab. Everything below is reference for the rest of the team.
Streaming, tool-use, JSON-mode, embeddings, structured outputs, error catalogue, per-model parameter notes.
docs.slashed.pro → — MIGRATIONStep-by-step swap for any OpenAI-compatible gateway. base_url swap, key prefix, response shape — line-by-line.
Data retention, log handling, sub-processors, SOC 2 trajectory, BYO-cloud edition for the self-hosted path.
/security →