One key. Same pool.

Call VX from your apps with a single secret. Chat, Agent, and this API all burn the same Mini / Normal / Pro / Pro Max tokens.

Your API key

Loading…

Auth

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.

Endpoints

MethodPathWhat it does
GET/api/vx/v1/mePlan, tokens left, 843B access
GET/api/vx/v1/modelsvx and vx-843b
POST/api/vx/v1/chatSend a message (counts against your pool)
GET/api/vx/v1/conversationsList your threads
GET/api/vx/v1/conversations/{id}Read one thread

POST /api/vx/v1/chat

{
  "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

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\"}"

Python

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

Usage

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.