Call VX from your apps with a single secret. Chat, Agent, and this API all burn the same Mini / Normal / Pro / Pro Max tokens.
Loading…
Send the key on every request. Base URL is https://rawandios.dev.
Authorization: Bearer vxsk_…your_key… # or X-VX-Key: vxsk_…your_key…
You get one key. Creating again replaces the old one. VX stores a hash only — copy the secret when it is shown.
| Method | Path | What it does |
|---|---|---|
| GET | /api/vx/v1/me | Plan, tokens left, 843B access |
| GET | /api/vx/v1/models | vx and vx-843b |
| POST | /api/vx/v1/chat | Send a message (counts against your pool) |
| GET | /api/vx/v1/conversations | List your threads |
| GET | /api/vx/v1/conversations/{id} | Read one thread |
{
"message": "Hello from my app",
"model": "vx",
"thinking": false,
"stream": false,
"conversation_id": null
}
model is vx (320B) or vx-843b (Pro / Pro Max). thinking only works on 843B. Set stream true for SSE (delta events, same as the website).
curl -s https://rawandios.dev/api/vx/v1/chat \
-H "Authorization: Bearer vxsk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d "{\"message\":\"Say hi in one sentence\",\"model\":\"vx\"}"
import requests
r = requests.post(
"https://rawandios.dev/api/vx/v1/chat",
headers={"Authorization": "Bearer vxsk_YOUR_KEY"},
json={"message": "Say hi in one sentence", "model": "vx"},
timeout=120,
)
print(r.json()["message"]["content"])
print(r.json()["pool"]) # unitsLeft from your subscription
Paid plans share one token pool with the VX website. Free accounts still get the same single preview question. 402 means the pool is empty or the free turn is used — buy or renew a plan on /vx.
Agent, Geo, and /web stay in the web app for now. They still use this same pool when you run them in chat.