TokenAPIAPI 문서
API 레퍼런스

두 줄이면 연동 완료: base URL과 API 키.

TokenAPI는 OpenAI Chat Completions·Responses 형식과 Anthropic Messages 형식을 지원합니다. 공식 SDK를 그대로 쓰고 모델 목록에서 모델 ID를 고르세요.

빠른 시작

Base URL

https://tokenapi.biz/v1

전체 엔드포인트:

GET/v1/models

모델 목록

공개 모델 ID와 기능, 컨텍스트 길이, 요금.

GET/v1/models/{id}

모델 조회

단일 모델 객체.

POST/v1/chat/completions

Chat Completions

OpenAI Chat Completions 형식, 스트리밍·비스트리밍.

POST/v1/responses

Responses

OpenAI Responses 형식(무상태), 스트리밍·비스트리밍.

POST/v1/messages

Messages

Anthropic Messages 형식, Anthropic SDK용.

curl
curl https://tokenapi.biz/v1/chat/completions \
  -H "Authorization: Bearer $TOKENAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tokenapi-pro",
    "messages": [{ "role": "user", "content": "Hello!" }]
  }'
Node.js · openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://tokenapi.biz/v1",
  apiKey: process.env.TOKENAPI_KEY,
});

const res = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Hello!" }],
});
console.log(res.choices[0].message.content);
Python · openai
import os
from openai import OpenAI

client = OpenAI(base_url="https://tokenapi.biz/v1", api_key=os.environ["TOKENAPI_KEY"])

res = client.chat.completions.create(
    model="tokenapi-pro",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(res.choices[0].message.content)
인증

키를 Bearer 토큰으로 보내세요.

Authorization: Bearer sk-tk-…

Anthropic 방식의 x-api-key 헤더도 사용할 수 있습니다. 키는 sk-tk-로 시작하고 생성 시 한 번만 표시되며, 키마다 한도(분당 요청 수, 지출 한도, 허용 모델, 만료일)를 설정할 수 있습니다. 키는 서버에만 보관하고 브라우저나 모바일 코드에 넣지 마세요. 키 신청은 hello@tokenapi.biz로 메일을 보내 주세요.

모델

안정적인 모델 ID

GET /v1/models가 반환하는 id를 model 파라미터로 사용하세요. 모델 ID는 안정적인 제품입니다. 품질과 가용성을 위해 백엔드를 업그레이드하거나 변경할 수 있지만 고객 측 변경은 필요 없습니다. 응답에는 항상 호출한 모델 ID가 표시됩니다.

GET /v1/models
{
  "object": "list",
  "data": [
    {
      "id": "tokenapi-pro",
      "object": "model",
      "owned_by": "tokenapi",
      "display_name": "TokenAPI Pro",
      "capabilities": ["streaming", "tools", "json_output"],
      "context_length": 131072,
      "pricing": {
        "currency": "USD",
        "prompt": "0.0000015",
        "completion": "0.000006",
        "input_per_million": 1.5,
        "output_per_million": 6
      }
    }
  ]
}

pricing.prompt / pricing.completion은 토큰당 미국 달러(문자열), input_per_million / output_per_million은 100만 토큰당 미국 달러입니다.

POST /v1/chat/completions

Chat Completions

요청과 응답은 OpenAI 형식을 따릅니다: 텍스트와 이미지를 포함한 messages, tools / tool_choice, response_format, temperature, top_p, stop, max_tokens 또는 max_completion_tokens. 모든 응답에는 x-request-id 헤더가 있으니 지원 문의 시 알려 주세요.

max_tokens를 생략하면 모델의 최대 출력 길이가 적용됩니다.

스트리밍

Server-Sent Events

stream: true를 설정하세요. 청크는 data: 줄로 전달되며 data: [DONE]으로 끝납니다. stream_options.include_usage를 추가하면 마지막 청크에서 토큰 사용량을 받을 수 있습니다.

Node.js
const stream = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Write a haiku." }],
  stream: true,
  stream_options: { include_usage: true }, // final chunk carries usage
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
POST /v1/responses

Responses API

문자열 또는 배열 input, instructions, 함수 도구, text.format(JSON 스키마), 전체 스트리밍 이벤트 시퀀스(response.output_text.delta, response.completed 등)를 지원합니다.

Node.js
const res = await client.responses.create({
  model: "tokenapi-pro",
  instructions: "Answer in one sentence.",
  input: "What is a token?",
});
console.log(res.output_text);
POST /v1/messages

Anthropic Messages

Anthropic SDK로 작성된 코드를 위한 엔드포인트입니다. system, 텍스트·이미지 블록, tool_use / tool_result가 포함된 tools, 스트리밍 이벤트를 지원합니다. 오류는 Anthropic 형식으로 반환됩니다.

Node.js · @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  baseURL: "https://tokenapi.biz",   // SDK appends /v1/messages
  apiKey: process.env.TOKENAPI_KEY,
});

const msg = await anthropic.messages.create({
  model: "tokenapi-pro",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello!" }],
});
오류

OpenAI 형식의 오류 객체

예시
{
  "error": {
    "message": "The model 'nope' does not exist or is disabled.",
    "type": "invalid_request_error",
    "code": "model_not_found",
    "param": null
  }
}
400invalid_request_error

잘못된 JSON, model/messages 누락 또는 지원하지 않는 파라미터.

401invalid_api_key

API 키가 없거나 잘못되었거나 비활성화 또는 만료되었습니다.

402insufficient_quota

잔액이 이 요청의 최대 비용에 못 미치거나 키의 지출 한도에 도달했습니다. 충전하거나 max_tokens를 낮추세요.

403model_not_allowed

이 키는 다른 모델로만 제한되어 있습니다.

404model_not_found

알 수 없거나 비활성화된 모델 ID입니다. GET /v1/models로 유효한 ID를 확인하세요.

429rate_limit_exceeded

키별 분당 요청 수 한도를 초과했습니다. Retry-After 헤더의 시간 후 다시 시도하세요.

502upstream_unavailable

이 모델의 모든 백엔드 경로가 실패했습니다. 안전하게 재시도할 수 있습니다.

업스트림 실패는 오류를 반환하기 전에 다른 경로로 자동 재시도됩니다. 502는 모든 경로가 실패했다는 뜻이며 과금되지 않습니다.

과금과 한도

선불, 토큰 과금, 잔액 초과 없음.

  • 요금은 모델별로 입력·출력 100만 토큰당 미국 달러로 책정됩니다(모델 참고).
  • 요청 실행 전, 최대 비용(프롬프트 + max_tokens)을 잔액에서 확보합니다. 잔액이 부족하면 402를 반환하며 업스트림으로 보내지 않습니다.
  • 요청이 끝나면 실제 토큰만큼 청구하고 남은 확보분은 즉시 반환합니다.
  • 모델이 응답을 시작하기 전에 실패한 요청(4xx/5xx 오류 응답)은 과금되지 않습니다. 스트림이 중간에 취소되거나 끊기면 이미 생성된 토큰만 과금됩니다.
  • 속도 제한은 API 키별 분당 요청 수 기준이며, 초과하면 Retry-After와 함께 429를 반환합니다.
호환성 안내

아직 지원하지 않는 기능

  • /v1/responses: previous_response_id(대신 전체 대화를 보내세요), web_search 같은 내장 도구, file_id 입력.
  • /v1/messages: 확장 사고 thinking과 cache_control은 무시됩니다.
  • Chat Completions의 n > 1.
문의하기