Docs

Change the base URL.Keep your code.

Venym speaks the OpenAI wire format, so the SDK you already use just works. Three lines change: the base URL, the key and the model id. Pick one and press run.

base_urlhttps://venym.io/v1
app.py
3 lines changed
client = OpenAI(added:     base_url="https://venym.io/v1",removed:     api_key=os.environ["OPENAI_API_KEY"],added:     api_key=os.environ["VENYM_API_KEY"],) r = client.chat.completions.create(removed:     model="gpt-4o",added:     model="venym/qwen-27b",    messages=[{"role": "user", "content": "Say hello."}],)
ready·response is a recorded example
response · recorded example

usage ~7 → 17 tokenscost $0.000023 at live ratesvenym/qwen-27b

Everything it does.One page each.

Every card below is a real piece of the API, running. Click one for the full reference: parameters, responses and the sharp edges.

POST/v1/chat/completions
200
systemYou are terse. No disclaimers.
userWrite the opening line of a heist.
assistant
temperature 0.8max_tokens 256stream false
venym/qwen-27busage 16 in · 0 out

Chat completions

POST /v1/chat/completions. Messages in, a reply and a usage block out.

POSTstream: true
open
The vault door was already open
data:{"choices":[{"delta":{"role":"assistant"}}]}
data:{"choices":[{"delta":{"content":"The"}}]}
data:{"choices":[{"delta":{"content":" vault"}}]}
data:{"choices":[{"delta":{"content":" door"}}]}
data:{"choices":[{"delta":{"content":" was"}}]}
data:{"choices":[{"delta":{"content":" already"}}]}
data:{"choices":[{"delta":{"content":" open"}}]}
7 / 10 eventstext/event-stream

Streaming

Server-sent events, a final usage chunk, a sources event.

venym/qwen-27b:online
web_search
userWhat changed in the latest PostgreSQL release?
answerA new major version ships every year, and the release notes group every change by area. Moving between majors uses pg_upgrade, or a dump and restore.
POSTtools: [get_weather]
1 / 4
assistantfinish: tool_calls
{ "role": "assistant", "content": null,
"tool_calls": [{ "id": "call_1", "type": "function",
"function": { "name": "get_weather",
"arguments": "{\"city\":\"Oslo\"}" } }] }
messages[] so far2 items
0userWhat is the weather in Oslo?
1assistanttool_calls: get_weather({"city":"Oslo"})
2toolnot yet
3assistantnot yet

Tools

Function calling: the model asks, your code answers.

POST/v1/search
$0.0020 / search
example results · 3 of max_results$0.0020 billed

Search API

POST /v1/search. Titles, urls and snippets, billed per search.

POST/v1/scrape
$0.0010 / page
docs.example/guide/tides
text0 chars

# Tides

Tides are the regular rise and fall of the sea. They follow the Moon and the Sun, and most coasts see two highs a day.

## Spring and neap

The largest tides happen when the bodies line up: see spring tides. Look up a harbor in the tide tables before you sail.

## Reading the water

High water and low water are listed with their height. A rising tide is called the flood, a falling tide the ebb.

links0
Moon/moon
Sun/sun
spring tides/spring-neap
tide tables/tide-tables

Scrape API

POST /v1/scrape. Any page as clean text, plus its links.

POSTerror shape
402
{ "error": {
"message": "Out of credits. Top up at /dashboard/billing.",
"type": "insufficient_quota",
"code": "insufficient_credits"
} }
Top up, then send it again.retry: after a top-up

Errors

The OpenAI error shape, so SDK exception handling just works.

GET/v1/balance
metered
balance
$4.9911
prepaid · per token6 req
model
output tokens900
one request
$0.0012
per 1,000
$1.20
$0.30 in · $1.20 out / 1M · 400 in
requestscost
glm-flash400 → 260$0.0001
qwen-27b400 → 1480$0.0019
glm-flash400 → 880$0.0004
qwen-27b400 → 3100$0.0038
glm-flash400 → 540$0.0003
qwen-27b400 → 1860$0.0024
key spend cap $0.0422%

Billing

Prepaid credits, metered per token, rounded up to the micro-dollar. Send a request and watch the balance move.

The one rule
The acceptable use policy still bans CSAM, sexual content about real people without consent, and using the API to attack systems. That is the whole list. See the terms.