77th Junction is OpenAI-compatible. Anything that works with the OpenAI API works here after you change the base URL and the key.
https://77thjunction.app/v1curl https://77thjunction.app/v1/chat/completions \
-H "Authorization: Bearer sk-77j-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "junction-forge",
"messages": [
{"role": "user", "content": "Write a haiku about midnight code"}
]
}'Send your key in the Authorization header. Create and revoke keys in the dashboard. Keep keys secret: anyone with a key can spend your balance.
Authorization: Bearer sk-77j-…
GET https://77thjunction.app/v1/models lists the models your key can use.
| Model ID | Context | Input / 1M | Output / 1M |
|---|---|---|---|
junction-swiftFast · reads images · 262K context | 256K | $1.50 | $4.50 |
junction-forgeCoding & agent · 1M context | 1M | $4.50 | $7.50 |
junction-titanNewest large model · 1M context | 1M | $4.50 | $7.50 |
POST https://77thjunction.app/v1/chat/completions, the same body as OpenAI: model, messages, stream, tools, temperature, max_tokens, response_format.
With stream: true you get server-sent events. Add "stream_options": {"include_usage": true} to receive the token counts in the last chunk.
Some models think before answering; that thinking streams as delta.reasoning and is billed as output.
Each request is charged after it finishes, for the exact tokens the model reports. Cached input tokens cost less. Failed requests are not charged. Requests are refused with 402 once the balance drops below one cent. You can set a spend limit on each key.
Errors use the OpenAI shape: {"error": {"message", "type", "code"}}.
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | Missing, wrong or revoked key. |
| 402 | insufficient_quota | Balance is empty. Top up in Billing. |
| 402 | key_limit_reached | This key hit the spend limit you set on it. |
| 403 | account_suspended | The account was suspended. |
| 404 | model_not_found | No enabled model with that name. |
| 429 | rate_limit_exceeded | More than 120 requests a minute on one key. |
| 502 | upstream_error | The model failed. Nothing was charged. |