VerxlAPI
Inference API / v1

Inference
that clears.

One OpenAI-compatible endpoint. Three models. The provider keeps 99.5%; the protocol takes 50 bps. Inspect the models and schema without a key, then authenticate for inference.

50 bps protocol99.5% providerUSDC ArbitrumNo key for docs
POST /v1/chat/completionsBearer auth
curl https://api.verxl.com/v1/chat/completions \
  -H "Authorization: Bearer $VERXL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-4b-uncensored-64k",
    "messages": [{"role":"user","content":"Explain the 50 bps fee in one sentence."}],
    "max_tokens": 128
  }'
◇
No key to investigate the API. GET /v1/models, GET /openapi.json, GET /llms.txt and GET /api/health are public. Every completion requires a funded vrxl_live_... key; there is no free compute tier.

01 / Quickstart

First request in one line.

No SDK is required. The API accepts standard OpenAI Chat Completions JSON. Both hosts serve the same paths. Every completion requires an API key; the public model list does not.

Dedicated APIhttps://api.verxl.com
Apex fallbackhttps://verxl.com
curl · Authorization required
curl https://api.verxl.com/v1/chat/completions \
  -H "Authorization: Bearer $VERXL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-4b-uncensored-64k",
    "messages": [{"role":"user","content":"Hello."}],
    "max_tokens": 128
  }'

The response is an OpenAI-shaped object. usage reports tokens; the provider is paid from the compute charge, not from the user's deposit.

200 · application/json
{
  "id": "chatcmpl_01JVERXL",
  "object": "chat.completion",
  "created": 1762000000,
  "model": "qwen3.5-4b-uncensored-64k",
  "choices": [{
    "index": 0,
    "message": {"role": "assistant", "content": "..."},
    "finish_reason": "stop"
  }],
  "usage": {"prompt_tokens": 24, "completion_tokens": 23, "total_tokens": 47}
}

02 / Authentication

Public by default. Pay only for frontier.

Documentation and model discovery are public. Inference is never anonymous: every model, including Qwen 3.5 4B, requires a funded key.

TierModelKeyLimit
Standardqwen3.5-4b-uncensored-64kvrxl_live_...funded account balance
Standarddeepseek-v4.1-flashvrxl_live_...funded account balance
Standardmimo-v2.6-flashvrxl_live_...funded account balance

Send a key only when you use a paid model:

Authorization header
Authorization: Bearer vrxl_live_...

Create and fund keys at verxl.com/console. An invalid key never silently falls back to an unauthenticated route; it returns 401.

03 / Models

Three routes. Published prices.

GET /v1/models is public and returns this list with prices and documentation links. Prices are per 1M tokens before the 50 bps protocol fee.

ModelContextPromptCompletionAccess
qwen3.5-4b-uncensored-64k65,536$0.05$0.10Key + balance
deepseek-v4.1-flash1,000,000$0.30$1.20Key + balance
mimo-v2.6-flash1,000,000$0.14$0.28Key + balance

For OpenAI-compatible clients, the same context limit is returned as context_window, context_length and max_model_len, so generic model-list discovery does not fall back to 128K. DeepSeek off-peak is 50% off outside 01:00–04:00 and 06:00–10:00 UTC Monday–Friday, and all weekend. The 50 bps fee is charged on the compute amount and shown separately from the model price.

Qwen output floor. Qwen 3.5 4B uses an internal thinking pass. Requests with max_tokens below 256 are raised to 256 before dispatch so callers do not receive an empty content string with finish_reason: "length". The effective value is returned in verxl_clearing.effective_max_tokens and X-Verxl-Effective-Max-Tokens.

04 / Chat completions

One request shape. OpenAI compatible.

POST /v1/chat/completions accepts model, messages, temperature, max_tokens and stream. messages is required and must not be empty. Send Authorization: Bearer vrxl_live_... on every call.

FieldTypeNotes
modelstringExact id from /v1/models. Unknown ids fall back to the default route.
messagesarraysystem, user, assistant; at least one.
temperaturenumber0–2, default 0.7.
max_tokensintegerDefault 8192; capped at 32768. Qwen is floored at 256 output tokens and served with `reasoning_effort: "none"` on this host so its thinking pass cannot starve content.
streambooleanSSE chunks when true.

Python

OpenAI SDK · Authorization required
import os
from openai import OpenAI
c = OpenAI(base_url="https://api.verxl.com/v1", api_key=os.environ["VERXL_API_KEY"])
r = c.chat.completions.create(
    model="qwen3.5-4b-uncensored-64k",
    messages=[{"role": "user", "content": "Hello."}],
    max_tokens=128,
)
print(r.choices[0].message.content)

Create a key at verxl.com/console. The key is required even for Qwen 3.5 4B; there is no unauthenticated generation tier.

05 / Streaming

Server-sent events, end to end.

Set stream: true and read OpenAI-style data: lines. The stream ends with data: [DONE].

SSE
data: {"choices":[{"delta":{"content":"The fee is "}}]}

data: {"choices":[{"delta":{"content":"50 bps."}}]}

data: [DONE]

06 / Errors

Failures are structured.

Every non-2xx response uses the same envelope:

error envelope
{"error":{"message":"...","type":"invalid_request_error","code":"bad_json"}}
StatusCodeMeaning
400bad_jsonBody is not valid JSON.
400messages_requiredmessages is missing or empty.
401unauthorizedA malformed or unknown Authorization header was sent.
402insufficient_balanceKey has no funded balance for the selected model.
429rate_limitedRequest rate exceeded; inspect X-RateLimit-* headers.
500upstream_errorProvider or routing failure; safe to retry idempotently.

07 / Settlement

50 bps, not a subscription.

Verxl is non-custodial. The protocol fee is 50 bps of the compute charge (0.5%). The provider receives 99.5% in USDC on Arbitrum. There is no monthly platform fee and no minimum deposit.

Protocol fee50 bps · 0.5%
Provider share99.5% · USDC / Arbitrum

Sepolia is a test deployment. Mainnet production is out of scope for this build.

08 / MCP

Agent-native setup.

Verxl exposes a remote MCP server at https://verxl.com/mcp. It is designed for an AI agent to discover the API, explain the paid setup to its user, and then call inference once the user supplies a funded key.

ToolKeyWhat it does
verxl_get_startednoneReturns the exact three-step setup, public URLs and the no-free-compute policy.
verxl_list_modelsnoneReturns the public model list and prices.
verxl_get_api_keynoneReturns the console URL and user steps; the user approves the wallet deposit.
verxl_payment_instructionsnoneReturns the treasury, chain, token and minimum for a user-signed deposit.
verxl_chatvrxl_live_...Runs one completion. The key is passed as a tool argument; there is no free tier.

The MCP server never holds funds, private keys or API keys. It cannot sign a deposit or mint a funded key; it gets the agent to the exact console step and then the user approves. An inference call without a key returns 401 with a machine-readable help object pointing back to the console, docs and MCP.

MCP endpoint
https://verxl.com/mcp
transport: streamable-http
auth: none for setup/discovery; vrxl_live_... for verxl_chat

09 / For agents

Read the spec, not the SPA.

Agent-facing resources are static, public and do not need a browser:

ResourceURLAuth
OpenAPI 3.1/openapi.jsonnone
LLM index/llms.txtnone
Models/v1/modelsnone
Health/api/healthnone
MCP/mcpnone for setup; key for chat
ChatPOST /v1/chat/completionsBearer key required

The API returns CORS * and supports browser clients. Public reads need no key; inference always does. Do not send a placeholder key unless your SDK requires a non-empty value.