Base URLhttps://www.tryingopen.com/v1

Quickstart

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 as z-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’s model says 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/models lists 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_tokens are set aside. Afterwards you’re charged what it actually used and the rest comes back.
  • If you’re short, max_tokens is lowered to fit and the reply may end with finish_reason: "length". The response then carries X-Tryingopen-Max-Tokens-Trimmed. Below 256 tokens the request is refused with daily_credits_exceeded.
  • Every successful response carries X-Tryingopen-Credits-Remaining, and the usage block includes credits.
  • 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.

StatusCodeMeaning
400invalid_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_largeSomething in the request body. The message says what.
401missing_api_key, invalid_api_keyNo name sent, or no such name.
403model_not_allowedThe name isn't allowed that model. Change it under Keys → Settings.
429rate_limit_exceededToo many requests from your IP address this hour. Wait for Retry-After.
429daily_credits_exceededNot enough of today's credits left for this request. Credits reset at midnight UTC.
429global_daily_limit, upstream_busyThe whole API is busy or at its daily limit. Try later.
502upstream_invalidThe model's provider failed. Try again, or send a fallback with models.
503not_configured, api_paused, store_unavailableThe 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.