Skip to main content
Velobase is a model-agnostic, OpenAI-compatible AI gateway. Point your OpenAI SDK at it and call any available model (Claude, DeepSeek, and more) by its id, changing two things: the base URL and one header that says which end-customer to bill. Every call is metered against that customer’s wallet, and the per-call cost comes back on the response headers.
Base URL: https://api.velobase.io/v1, the OpenAI SDK expects the /v1 suffix. Auth: Authorization: Bearer <project-key> (a vb_live_… key). A project key bills the customer named in the header. You can also issue a customer-scoped vb_customer_… key that carries its own customer, so no header is needed. Who to bill: the X-Velobase-Customer: <your-user-id> header.

Available models

Call any of these by its model id through the OpenAI-compatible endpoint. Prices are what your customer’s wallet is charged, per million tokens.
modelStreamingInput ($/1M)Output ($/1M)
deepseek/deepseek-v4-proYes$0.49$0.96
anthropic/claude-haiku-4.5No$1.10$5.50
anthropic/claude-sonnet-4.6No$3.30$16.50
anthropic/claude-opus-4.5No$5.50$27.50
anthropic/claude-opus-4.6No$5.50$27.50
anthropic/claude-opus-4.7No$5.50$27.50
anthropic/claude-opus-4.8No$5.50$27.50
Call GET /v1/models for the live list your project can route. More models open up as upstreams are connected. Claude models route through Bedrock and are non-streaming for now, so pick a DeepSeek model when you need streaming.

Copy for AI

Paste this into your AI coding assistant (Cursor, Claude Code, etc.) and it can wire up the integration in one shot:

Make a call

Per-call billing headers

Every non-streaming response carries the billing result on its headers, so you can show cost and balance without a second request:
HeaderMeaning
x-velobase-cost-centsCost of this call, in cents
x-velobase-cost-creditsSame cost, in credits (1 USD = 100 cents = 1,000,000 credits)
x-velobase-balance-creditsThe customer wallet’s remaining balance after this call, in credits
x-velobase-transaction-idTies this call to a usage row and ledger entry
These headers are CORS-exposed, so a browser frontend can read them too.

Streaming

Streaming is supported for OpenAI-protocol models (for example deepseek/deepseek-v4-pro). The billing result arrives as a velobase object on the final stream frame, before [DONE]. Request it with stream_options: { include_usage: true }.
Claude models are routed through Amazon Bedrock, which does not support streaming yet. A streaming request for a Claude model returns 400 streaming is not yet supported on this model's current route. Use stream: false for Claude, or choose a DeepSeek model when you need streaming.

Fund the customer first

A model call needs a funded customer wallet, otherwise it returns 402 insufficient_funds. Top one up before (or right after) you create the user:
See Depositing Credits for the amount units and idempotency rules.

Two wallets

Official (Velobase-routed) models debit two ledgers on each call:
  1. The customer wallet, your own pricing units, what you charge your end-user.
  2. The project wallet, real money you prepaid Velobase via Stripe.
A call succeeds only when both have funds. If the project wallet runs out, calls return 402 project_balance_insufficient regardless of the customer wallet. Customer deposits are virtual record-keeping and never move real money.

Reconcile usage

GET /v1/usage returns one row per call with cost_cents, upstream_cost_cents, token counts, model, customer_id, and transaction_id. Join it to the x-velobase-transaction-id from each response to reconcile spend per customer.

Next steps

JavaScript SDK

Deposits, balances and billing primitives from Node/TypeScript.

Python SDK

The same control-plane operations from Python.