https://www.tryingopen.com/v1Quickstart
The API speaks OpenAI’s Chat Completions format, so any OpenAI SDK works by changing two things: the base URL, and the API key, which is a name you claim under Keys. Send it as Authorization: Bearer your-name.
curl https://www.tryingopen.com/v1/chat/completions \
-H "Authorization: Bearer your-name" \
-H "Content-Type: application/json" \
-d '{"model":"z-ai/glm-5.3-flash","max_tokens":1000,"messages":[{"role":"user","content":"Hello!"}]}'from openai import OpenAI
client = OpenAI(base_url="https://www.tryingopen.com/v1", api_key="your-name")
reply = client.chat.completions.create(
model="z-ai/glm-5.3-flash",
max_tokens=1000,
messages=[{"role": "user", "content": "Hello!"}],
)
print(reply.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://www.tryingopen.com/v1", apiKey: "your-name" });
const reply = await client.chat.completions.create({
model: "z-ai/glm-5.3-flash",
max_tokens: 1000,
messages: [{ role: "user", content: "Hello!" }],
});
console.log(reply.choices[0].message.content);Names are public, like usernames: anyone who has one can call the API as it. Keep it in an environment variable anyway. Each account can hold 2 names. Streaming works with stream: true.
Choosing models
model: any id from the Models tab, such asz-ai/glm-5.3-flash. Leave it out to use the name’s default model.models: up to 3 ids to try in order. The next is tried only if one fails before sending any text, and the reply’smodelsays which answered.provider: a provider slug such as"coreweave", or OpenRouter’s object{ order, only, ignore, sort, allow_fallbacks }. Each model’s page lists the slugs it can use. Any provider preference routes through OpenRouter with zero retention.GET /v1/modelslists the models, with context lengths, prices in credits and provider slugs. Send your name to see only the models it may use.
Also supported: temperature, top_p, stop, seed, presence_penalty, frequency_penalty, response_format, reasoning_effort, and function tools with tool_choice. Other fields are ignored.
Credits
Each account gets 25 credits a day, shared by its names, and they reset at midnight UTC. A request is priced at the most expensive provider’s rate for its model, whoever answers, so what you’re charged is a ceiling. Each model’s price, in credits per million input and output tokens, is on the Models tab.
- Before a request runs, enough credits for its input and its full
max_tokensare set aside. Afterwards you’re charged what it actually used and the rest comes back. - If you’re short,
max_tokensis lowered to fit and the reply may end withfinish_reason: "length". The response then carriesX-Tryingopen-Max-Tokens-Trimmed. Below 256 tokens the request is refused withdaily_credits_exceeded. - Every successful response carries
X-Tryingopen-Credits-Remaining, and the usage block includescredits. - Some models think before answering. Leave room (1,000 tokens or more), or the visible answer can come back empty.
Limits
- Replies: up to 8,192 output tokens, or less where a model’s own limit is lower.
- Input: up to 100 messages and about 200,000 characters per request. Text only: images and files are refused.
- An hourly request allowance per IP address, on top of your credits.
- Which models a name may use, and its default, are set under Keys → Settings.
Errors
Errors use OpenAI’s shape: {"error": {"message", "type", "code"}}. A 429 carries Retry-After in seconds.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_json, invalid_messages, invalid_model, model_not_found, too_many_models, invalid_provider, invalid_tools, invalid_max_tokens, invalid_reasoning_effort, images_not_supported, context_too_large | Something in the request body. The message says what. |
| 401 | missing_api_key, invalid_api_key | No name sent, or no such name. |
| 403 | model_not_allowed | The name isn't allowed that model. Change it under Keys → Settings. |
| 429 | rate_limit_exceeded | Too many requests from your IP address this hour. Wait for Retry-After. |
| 429 | daily_credits_exceeded | Not enough of today's credits left for this request. Credits reset at midnight UTC. |
| 429 | global_daily_limit, upstream_busy | The whole API is busy or at its daily limit. Try later. |
| 502 | upstream_invalid | The model's provider failed. Try again, or send a fallback with models. |
| 503 | not_configured, api_paused, store_unavailable | The API is off or briefly unavailable on this deployment. |
What's stored
Messages and replies are passed to the model and never stored. For your Activity tab we keep each request’s time, model, provider, status, token counts and credits. Models marked “Provider may log” go to a provider that may keep what you send. Where a model’s page lists zero-retention providers, pin one to avoid that.