API Documentation

Unified access to world-class AI models. OpenAI-compatible API — one key for all models.

API Base URL

https://tokenhub.store/api/v1

All API requests use this base URL. Fully compatible with OpenAI SDKs.

Quick Start

Get Started in Minutes

  1. Create an account and log in to your Dashboard
  2. Go to API Keys and create a new API key
  3. Visit Billing to add credits to your account
  4. Start making API calls with any supported model

Supported Models

Click on a provider to view available models and code examples.

OpenAI

10 models

Leading AI research company, creators of the GPT series. Known for state-of-the-art language models with exceptional reasoning and coding capabilities.

Anthropic

8 models

AI safety company known for Claude models. Excel at nuanced conversations, code, and complex reasoning with strong safety features.

Google

9 models

Google's Gemini family offers cutting-edge multimodal capabilities with industry-leading context windows up to 2M tokens.

xAI

3 models

Elon Musk's AI company. Grok models are known for real-time knowledge, witty responses, and excellent coding assistance.

Alibaba (Qwen)

3 models

Alibaba's Qwen series offers powerful multilingual models with strong performance in both English and Chinese tasks.

Zhipu AI (GLM)

3 models

Zhipu AI's GLM series. Advanced Chinese-English bilingual models with up to 200K context window.

MiniMax

2 models

MiniMax's M2 series. Ultra-long 205K context with strong multilingual capabilities.

Xiaomi (MiMo)

2 models

Xiaomi's MiMo V2 models. Large context windows up to 1M tokens.

Alibaba (Qwen3)

3 models

Alibaba's Qwen3 series. Massive MoE models with vision-language and coding specializations.

Moonshot AI (Kimi)

2 models

Moonshot AI's Kimi K2 series. Strong reasoning with extended context windows.

DeepSeek

6 models

DeepSeek's latest models. Highly cost-effective with strong reasoning and coding capabilities.

ByteDance (Seedance)

2 models

ByteDance's Seedance video generation models. Cinema-quality text-to-video, image-to-video, and multi-modal video editing with audio support.

ByteDance (Seedream)

2 models

ByteDance's Seedream image generation models. High-quality text-to-image with photorealistic and artistic styles.

Kwaivgi (Kling)

2 models

Kwaivgi's Kling video generation models. High-quality text-to-video and image-to-video with std/pro modes. Durations 3–15s. std: $0.168/s, pro: $0.224/s (no audio).

Gemini API

Gemini 3.5–3.8 Flash and Gemini 4 Argon use /chat/completions. For Argon, use model ID google/gemini-4-argon. GET /models lists published models. For an unlisted model configured by your account administrator, use the exact model ID they provide with the same endpoint.

curl "https://tokenhub.store/api/v1/chat/completions" \
  -H "Authorization: Bearer th-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.8-flash",
    "messages": [{"role": "user", "content": "Hello"}],
    "reasoning_effort": "low",
    "max_tokens": 1024,
    "stream": true
  }'

Supports streaming, system instructions, function calling, and base64 image data URLs. reasoning_effort accepts low, medium, or high; max_tokens includes thinking tokens.

For multi-turn tools, keep the complete assistant message, including tool_calls.extra_content or content_blocks, so thought signatures are preserved. Native Gemini endpoints are not exposed by TokenHub.

Gemini Flash and Argon output usage includes thinking tokens. Cached input is counted at the configured cache-read rate when available. See the model catalog for current prices; confirm rates for unlisted models with your account administrator.

Responses API streaming and billing

For POST /v1/responses, response.completed marks a completed response. Closing the client connection after this event does not change it to a cancellation.

Reported upstream token counts, including zero, take precedence over estimates. Missing counts may be estimated; requests cancelled before completion may still incur charges for processed tokens.

API Endpoints

POST /chat/completions

Create a chat completion with streaming support

Headers

headers
Authorization: Bearer th-your-api-key
Content-Type: application/json

Request Body

json
{
  "model": "openai/gpt-4.1",
  "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Hello!"}
  ],
  "temperature": 0.7,
  "max_tokens": 1000,
  "stream": false
}

POST /responses

Forward a native OpenAI Responses request with JSON and SSE passthrough

Headers

headers
Authorization: Bearer th-your-api-key
Content-Type: application/json

Request Body

json
{
  "model": "openai/gpt-5.6-terra",
  "input": "Explain why the sky is blue in one sentence.",
  "reasoning": { "effort": "medium" },
  "max_output_tokens": 256,
  "stream": false
}

POST /videos/generations

Generate a video from text or image prompt (Seedance & Wan 2.2 models)

Headers

headers
Authorization: Bearer th-your-api-key
Content-Type: application/json

Request Body

json
{
  "model": "bytedance/doubao-seedance-2.0",
  "prompt": "A golden retriever running on a sunny beach",
  "duration": 5,
  "resolution": "720p",
  "aspect_ratio": "16:9"
}

Request Body (content array — first_frame & last_frame)

json
{
  "model": "bytedance/doubao-seedance-2.0",
  "prompt": "Hand picks a fresh apple from the tree, the scene smoothly transitions to a hand holding an apple smoothie drink, cinematic lighting in an orchard",
  "content": [
    {
      "type": "image_url",
      "image_url": { "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg" },
      "role": "first_frame"
    },
    {
      "type": "image_url",
      "image_url": { "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg" },
      "role": "last_frame"
    }
  ],
  "duration": 5,
  "resolution": "720p"
}

Parameters

content (optional): Array of media assets. Each item has:

  • type: "image_url"
  • image_url.url: URL of the image
  • role: <firstFrame/> (max 1), <lastFrame/> (max 1), <refImage/>, <refVideo/>, <refAudio/>

GET /videos/generations/{id}

Poll the status of a video generation task

Headers

headers
Authorization: Bearer th-your-api-key

Response

json
{
  "id": "tsk-xxx",
  "object": "video.generation.task",
  "model": "bytedance/doubao-seedance-2.0",
  "status": "succeeded",  // "queued" | "running" | "succeeded" | "failed"
  "data": [
    {
      "video_url": "https://..."
    }
  ]
}

POST /images/generations

Generate images from text prompts (Seedream models)

Headers

headers
Authorization: Bearer th-your-api-key
Content-Type: application/json

Request Body

json
{
  "model": "bytedance/doubao-seedream-5.0",
  "prompt": "A serene mountain landscape at sunset",
  "n": 1,
  "size": "2048x2048"
}

GET /models

List all available models

See Models and Pricing for the current published catalog and rates. These pages update automatically.

Account management API

Generate an access token in Settings → Account information. Send Authorization: Bearer YOUR_ACCESS_TOKEN and TokenHub-User: YOUR_USER_ID. New-Api-User is also accepted; if both user headers are supplied, they must match. Open settings

Access tokens manage your account. Continue using th- API keys for model requests.

HTTPEndpointDescription
GET/api/balanceAccount credit balance (1 credit = 1 USD)
GET / POST/api/keysList keys or create a key
GET / PATCH / DELETE/api/keys/{id}Get a key, edit its name/status/budget, or delete it
GET/api/keys/{id}/discountsRead the effective discounts for your key
GET / PATCH/api/user/profileRead account details or update your name
GET/api/usageRequest details and usage totals, filterable by key, model, and time
GET/api/v1/billing/usageRequest details and usage totals, filterable by key, model, and time
GET/api/v1/billing/spendingAccount spending trends
GET/api/v1/billing/invoicesList invoices
GET / POST/api/v1/billing/budgetRead or configure account budgets
export TOKENHUB_ACCESS_TOKEN="YOUR_ACCESS_TOKEN"
export TOKENHUB_USER_ID="YOUR_USER_ID"

curl "https://tokenhub.store/api/balance" \
  -H "Authorization: Bearer $TOKENHUB_ACCESS_TOKEN" \
  -H "TokenHub-User: $TOKENHUB_USER_ID"

curl "https://tokenhub.store/api/keys" \
  -H "Authorization: Bearer $TOKENHUB_ACCESS_TOKEN" \
  -H "TokenHub-User: $TOKENHUB_USER_ID" \
  -H "Content-Type: application/json" \
  -d '{"name":"My application","spendLimit":10}'

curl --get "https://tokenhub.store/api/v1/billing/usage" \
  -H "Authorization: Bearer $TOKENHUB_ACCESS_TOKEN" \
  -H "TokenHub-User: $TOKENHUB_USER_ID" \
  --data-urlencode "apiKeyId=YOUR_API_KEY_ID" \
  --data-urlencode "model=alibaba/qwen-turbo" \
  --data-urlencode "startDate=2026-09-07T00:00:00Z" \
  --data-urlencode "endDate=2026-09-08T00:00:00Z" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Usage filters: apiKeyId is the ID returned by /api/keys, not the th- secret. model matches the full model ID exactly. Send startDate and endDate together as ISO timestamps with a timezone (inclusive boundaries). page defaults to 1; limit defaults to 20, maximum 100. Summary covers all matching records. Omit apiKeyId to query the account. An unknown key or a key owned by another account returns 404. API keys retain their existing account-wide billing access. /api/usage also accepts start_date/end_date, one-sided ranges, limit (default 100, maximum 1000), and offset (default 0).

Create: name=My application, spendLimit=10; omit spendLimit for the shared wallet. PATCH accepts name, isActive, and action (set_limit, add_budget, clear_limit, reset_spent); set_limit/add_budget also need a non-negative value. set_limit resets spent; add_budget preserves spent for an existing cap. GET /api/keys/:id returns the full model key. Deleting a key removes its UsageLog association; use isActive:false to retain usage filtering by key.

Search API keys by name or prefix and browse 20 keys per page. New keys appear on the first page. Refresh the list to see keys created in another window or through the API. API Keys

One active access token per account. It remains valid until regenerated or revoked; the database stores only its hash. Token lifecycle endpoints GET/POST/DELETE /api/user/access-token require a browser login. Tokens cannot manage their own lifecycle or authorize admin, password, account-deletion, or model-generation endpoints. Invalid tokens or mismatched user IDs return 401. Existing browser-session authentication continues to work.

Code Examples

cURL

bash
curl https://tokenhub.store/api/v1/chat/completions \
  -H "Authorization: Bearer th-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4.1",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

Python (OpenAI SDK)

python
from openai import OpenAI

client = OpenAI(
    api_key="th-your-api-key",
    base_url="https://tokenhub.store/api/v1"
)

# Use any supported model
response = client.chat.completions.create(
    model="openai/gpt-5.4",  # Or any other model
    messages=[{"role": "user", "content": "Hello!"}]
)

print(response.choices[0].message.content)

JavaScript / TypeScript

typescript
import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'th-your-api-key',
  baseURL: 'https://tokenhub.store/api/v1',
});

// Use any supported model
const response = await client.chat.completions.create({
  model: 'anthropic/claude-sonnet-4-6',
  messages: [{ role: 'user', content: 'Hello!' }],
});

console.log(response.choices[0].message.content);

Streaming Example (Python)

python
from openai import OpenAI

client = OpenAI(
    api_key="th-your-api-key",
    base_url="https://tokenhub.store/api/v1"
)

stream = client.chat.completions.create(
    model="google/gemini-2.5-pro",
    messages=[{"role": "user", "content": "Write a short story."}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Need Help?