GOPURAM

Quickstart

Your first Gopuram request in under a minute.

Gopuram is an OpenAI-compatible gateway: point any OpenAI SDK at our base URL and every model in the catalog works — streaming, tools, vision and reasoning included.

Base URL   https://api.gopuram.net/v1
Auth       Authorization: Bearer sk-gpm-...

1. Get a key

Keys look like sk-gpm-… and are shown once at creation. While we're pre-launch, keys are issued to early partners — registration opens soon.

2. Make a request

curl -N https://api.gopuram.net/v1/chat/completions \
  -H "Authorization: Bearer $GOPURAM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-oss-120b",
    "stream": true,
    "messages": [{ "role": "user", "content": "Say hello in three languages." }]
  }'

Or with the OpenAI SDK — only the baseURL changes:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.gopuram.net/v1',
  apiKey: process.env.GOPURAM_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'openai/gpt-oss-120b',
  stream: true,
  messages: [{ role: 'user', content: 'Say hello in three languages.' }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}

The same works from Python:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.gopuram.net/v1",
    api_key=os.environ["GOPURAM_API_KEY"],
)

stream = client.chat.completions.create(
    model="openai/gpt-oss-120b",
    stream=True,
    messages=[{"role": "user", "content": "Say hello in three languages."}],
)

for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

3. Read your cost in-band

The final stream chunk carries full usage including the actual USD cost — no second request needed:

{
  "usage": {
    "prompt_tokens": 87,
    "completion_tokens": 24,
    "total_tokens": 111,
    "prompt_tokens_details": { "cached_tokens": 64, "cache_write_tokens": 0 },
    "completion_tokens_details": { "reasoning_tokens": 14 },
    "cost": 0.000021735
  }
}

Non-streaming responses carry the same usage.cost field.

4. Discover models

GET /v1/models is public and lists every model with live pricing, context length, capabilities and a free_tier flag:

curl -s https://api.gopuram.net/v1/models | jq '.data[] | {id, free_tier, pricing}'

Free-tier accounts can use any model marked free_tier: true; a paid balance unlocks the whole catalog.

Next

  • Streaming — the wire format, chunk by chunk
  • Reasoning — thinking models and the reasoning object
  • Errors — every code you can receive, and which ones to retry