ForgeGrit serves only full-capability frontier models. No 1B toys, no distilled "lite" tiers, no trial credits that expire into a bill. You register, you get a key, you get 100,000 requests a day. That's the whole product.
The API speaks the OpenAI format, so anything already pointed at /v1/chat/completions works by changing two lines.
Authorization: Bearer <key> on every request. Log in any time to see it again, or rotate it below if it leaks.Base URL:
https://api-forgegrit.serveousercontent.com
curl -X POST https://api-forgegrit.serveousercontent.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-5",
"messages": [{"role": "user", "content": "Say hello"}]
}'
import requests
r = requests.post(
"https://api-forgegrit.serveousercontent.com/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_KEY"},
json={
"model": "claude-opus-5",
"messages": [{"role": "user", "content": "Say hello"}],
},
timeout=300,
)
print(r.json()["choices"][0]["message"]["content"])
from openai import OpenAI
client = OpenAI(
base_url="https://api-forgegrit.serveousercontent.com/v1",
api_key="YOUR_KEY",
)
r = client.chat.completions.create(
model="claude-opus-5",
messages=[{"role": "user", "content": "Say hello"}],
)
print(r.choices[0].message.content)
const res = await fetch(
"https://api-forgegrit.serveousercontent.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "claude-opus-5",
messages: [{ role: "user", content: "Say hello" }]
})
});
const data = await res.json();
console.log(data.choices[0].message.content);
Pass any of these as model. All full-size — nothing here is a distilled variant.
| Model ID | Family |
|---|---|
trai-5-super-lightweight | TrAI 5 Super Lightweight — Super AGI |
trai-4-zynr | TrAI 4 Zynr — Super Mythos |
trai-5-epic | TrAI 5 Epic — Super Partial AGI |
claude-mythos-5 | Claude Mythos 5 — Mythos tier |
claude-opus-5 | Claude Opus 5 |
claude-sonnet-5 | Claude Sonnet 5 |
claude-opus-4-8 | Claude Opus 4.8 |
claude-fable-5-1 | Claude Fable 5.1 — Mythos tier |
claude-fable-5 | Claude Fable 5 |
gpt-6-astra | GPT 6 Astra — flagship |
gpt-5.6-sol | GPT 5.6 Sol |
gpt-5.6-terra | GPT 5.6 Terra |
gpt-5.6-luna | GPT 5.6 Luna |
moonshotai-kimi-k3 | Kimi K3 |
z-ai-glm-5.3 | GLM 5.3 |
xai-grok-4.5 | Grok 4.5 |
gemini-3.1-pro | Gemini 3.1 Pro |
gemini-3.7-flash | Gemini 3.7 Flash |
Live list, filtered to what your key can reach:
curl https://api-forgegrit.serveousercontent.com/v1/models \
-H "Authorization: Bearer YOUR_KEY"
ForgeGrit’s own models. Ranked by our tiering, cheapest first — and all $0 here.
Half the rate of TrAI 4 Zynr. The entry point to the TrAI 5 generation.
The Super Mythos class flagship. Never released anywhere else at any price.
ForgeGrit rates this the strongest model on the platform — double the rate of TrAI 4 Zynr, and the top of the TrAI 5 line.
Every other model here has a published rate card. Below is what each costs on its own API, in USD per million tokens — and what the identical model costs on ForgeGrit.
| Model | Input | Output | Cache | ForgeGrit |
|---|---|---|---|---|
| Claude Mythos 5claude-mythos-5 | n/a9 | n/a9 | n/a9 | $0 |
| GPT 6 Astragpt-6-astra | $10.0011 | $50.0011 | $1.00 | $0 |
| Claude Fable 5.1claude-fable-5-1 | $10.00 | $50.00 | $0.2510 | $0 |
| Claude Fable 5claude-fable-5 | $10.00 | $50.00 | $1.00 | $0 |
| Claude Opus 5claude-opus-5 | $5.00 | $25.00 | $0.50 | $0 |
| Claude Opus 4.8claude-opus-4-8 | $5.00 | $25.00 | $0.50 | $0 |
| GPT-5.6 Solgpt-5.6-sol | $4.001 | $20.001 | $0.40 | $0 |
| Claude Sonnet 5claude-sonnet-5 | $3.002 | $15.002 | $0.30 | $0 |
| Kimi K3moonshotai-kimi-k3 | $3.00 | $15.00 | $0.30 | $0 |
| GPT 5.6 Terragpt-5.6-terra | $2.008 | $12.00 | $0.20 | $0 |
| Grok 4.5xai-grok-4.5 | $2.006 | $6.00 | $0.307 | $0 |
| GLM 5.3z-ai-glm-5.3 | $1.405 | $4.405 | $0.265 | $0 |
| Gemini 3.1 Progemini-3.1-pro | $2.003 | $12.00 | $0.20 | $0 |
| Gemini 3.7 Flashgemini-3.7-flash | $0.754 | $3.754 | $0.08 | $0 |
| GPT 5.6 Lunagpt-5.6-luna | $0.208 | $1.20 | $0.02 | $0 |
A month of moderate agent work — 10M input tokens and 2M output — run on the top model:
| Line item | ForgeGrit |
|---|---|
| Setup or onboarding fee | $0.00 |
| Monthly minimum | $0.00 |
| Overage past the daily limit | Not billed — the request is refused |
| Priority or "pro" tier | Does not exist |
| Credit card to register | Not collected |
| Trial credits that expire | None issued |
| Charge for a failed request | $0.00 |
| Data sold or trained on | No |
Honestly: uptime. ForgeGrit runs on self-hosted hardware behind a tunnel, paid for out of pocket. Nobody is billed because nobody is being sold anything — but that also means there is no SLA, no support contract, and no promise the endpoint answers at 3am. /health is the honest answer at any given moment.
The 100,000 daily requests exist to stop one client from starving everyone else. Hit it and you get a 429, never an invoice.
| Method | Path | Purpose |
|---|---|---|
| POST | /register | Create an account |
| POST | /authenticate/email | Exchange credentials for a key |
| POST | /authenticate/rotate | Revoke your key and issue a new one |
| POST | /authenticate/status | Check whether 2FA is on |
| POST | /authenticate/change-password | Change your password |
| POST | /authenticate/2fa/setup | Generate a TOTP secret |
| POST | /authenticate/2fa/enable | Confirm the secret and switch 2FA on |
| POST | /authenticate/2fa/disable | Switch 2FA off |
| GET | /v1/models | List available models |
| GET | /v1/usage | Requests used and remaining today |
| POST | /v1/chat/completions | Chat completion (OpenAI format) |
| POST | /v1/messages | Chat completion (Anthropic format) |
| GET | /v1/video/models | Video models available |
| POST | /v1/video | Queue a generation, returns a job id |
| GET | /v1/video/{id} | Poll a job |
| GET | /health | Service status — no key needed |
curl -X POST https://api-forgegrit.serveousercontent.com/register \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password"}'
curl -X POST https://api-forgegrit.serveousercontent.com/authenticate/email \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password"}'
Returns api_key, owner_id, and rpd_limit. Logging in again always returns the same key, so there is nothing to lose — if you misplace it, just log in.
Keys do not expire. If yours ends up somewhere it shouldn't — a screenshot, a commit, a pasted log — rotate it. This revokes every existing key on the account and issues a new one. The old key stops working immediately.
curl -X POST https://api-forgegrit.serveousercontent.com/authenticate/rotate \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password"}'
Your account, usage history, and daily limit are unaffected — only the key changes.
ForgeGrit supports time-based one-time codes (TOTP) from any authenticator app — Aegis, Google Authenticator, 1Password, whatever you already use. With it on, a stolen password is not enough to log in, and a code someone captures is dead within thirty seconds.
Enrol in two calls. The first returns a secret and an otpauth:// URI:
curl -X POST https://api-forgegrit.serveousercontent.com/authenticate/2fa/setup \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password"}'
Add the secret to your authenticator, then confirm with a live code:
curl -X POST https://api-forgegrit.serveousercontent.com/authenticate/2fa/enable \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"your-password","code":"123456"}'
From then on, include code when you log in, rotate, or change your password. Each code works once — reusing one returns code_reused, so wait for the next.
/authenticate/2fa/disable turns it off and takes the same password plus code.
curl -X POST https://api-forgegrit.serveousercontent.com/authenticate/change-password \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"old","new_password":"new","code":"123456"}'
Your API key survives a password change. Omit code if 2FA is off.
Because keys are free and per-account, apps can ask each user for their own ForgeGrit key instead of shipping one. Good pattern — but get your key here and paste it in.
Add "stream": true for server-sent events. Chunks arrive as data: lines, terminated by data: [DONE].
curl -N -X POST https://api-forgegrit.serveousercontent.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "Count to five"}],
"stream": true
}'
Video generation runs on Hugging Face Spaces, and ForgeGrit does not own that GPU time.
You get one free video a day with no token at all, on ltx-video-fast, drawn from ForgeGrit’s own quota. Past that, bring a token: create a free read token at huggingface.co/settings/tokens and send it as X-HF-Token. Then it is unlimited, any model, on your quota — and the token is never stored.
# free — no token
curl -X POST https://api-forgegrit.serveousercontent.com/v1/video \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"ltx-video-fast","prompt":"a fox in snow"}'
Check what you have left with GET /v1/video/models — the free_tier block reports your remaining videos for the day. A failed generation is refunded, so a broken job never costs you your free one.
Generation takes 30 seconds to a few minutes, so the endpoint is asynchronous — you get a job id back and poll it.
curl -X POST https://api-forgegrit.serveousercontent.com/v1/video \
-H "Authorization: Bearer YOUR_KEY" \
-H "X-HF-Token: hf_your_token" \
-H "Content-Type: application/json" \
-d '{"model":"ltx-video-fast","prompt":"a fox walking through snow"}'
Then poll until status is done:
curl https://api-forgegrit.serveousercontent.com/v1/video/JOB_ID \
-H "Authorization: Bearer YOUR_KEY"
| Model | Audio | Notes |
|---|---|---|
ltx-video-fast | — | Fastest; lowest quota cost. The free-tier model |
ltx-2-turbo | yes | Fast, with a synchronised soundtrack |
ltx-2-fast | yes | Official Lightricks distilled build |
minimax-h3-turbo | yes | 33B omni-modal; audio generated with the picture |
ltx-2-3-studio | yes | Community Space |
wan-2-2-fast | — | Image to video; needs an image input |
curl https://api-forgegrit.serveousercontent.com/health
{"status":"ok","inference":"ok"} means inference is up. degraded means the backend is unreachable — retry shortly.
| Field | Type | Notes |
|---|---|---|
model | string | Required. One of the IDs above. |
messages | array | Required. {role, content} objects. Roles: system, user, assistant. |
stream | boolean | SSE streaming. Default false. |
temperature | number | Sampling randomness. |
top_p | number | Nucleus sampling. |
max_tokens | integer | Response length cap. |
Check where you stand at any time:
curl https://api-forgegrit.serveousercontent.com/v1/usage \
-H "Authorization: Bearer YOUR_KEY"
100,000 requests per day per account — the quota follows the account, not the key, so rotating does not reset it. The counter resets at midnight. There is no paid tier to upgrade to — the limit exists to stop abuse, not to sell you anything.
| Code | Meaning | Fix |
|---|---|---|
400 | Missing model or messages | Check the request body |
401 | Missing or invalid key | Verify the Authorization header |
404 | Unknown model ID | Call /v1/models for the live list |
409 | Email already registered | Log in instead |
429 | Daily limit hit | Wait for the reset |
502 | Inference backend down | Check /health, retry |
/health tells you for sure.