← Về trang chủ

KilgoreAI — API

API chat/ảnh/video miễn phí. Không cần API key, không cần đăng nhập.

Base URL & identity

Gọi tất cả endpoint theo đường dẫn tương đối của site này (ví dụ /v1/models), hoặc tuyệt đối:

  • Không bắt buộc API key — server nhận diện bạn qua cookie uid, tự đặt ở yêu cầu đầu tiên. Với curl / SDK nên dùng Bearer API key ổn định (xem API keys).
  • Cookie/key này quyết định quyền truy cập các cuộc trò chuyện & tệp của bạn (người khác không đọc được).

API keys (khuyên dùng cho client)

POST Bearer key giúp script/SDK của bạn có định danh ổn định — không cần cookie. Tạo mà không cần tài khoản:

curl -s -c cookie.txt /v1/auth/api-keys \
  -H "content-type: application/json" \
  -d '{"name": "my-script"}'

Phản hồi — bạn có thể sao chép lại bất cứ lúc nào trong dashboard:

{
  "id": 3,
  "key": "sk-kilg-xJ2...",
  "prefix": "sk-kilg-xJ2",
  "expires": "2026-09-25T00:00:00Z"
}
EndpointMô tả
POST/v1/auth/api-keysTạo key. Body: {"name": "...", "ttl_days": 30} (tuỳ chọn). Key không bao giờ hết hạn trừ khi bạn truyền ttl_days (7 / 30 / 90 / 365).
GET/v1/auth/api-keysDanh sách key của bạn (kèm full key để sao chép lại).
DELETE/v1/auth/api-keys/{id}Thu hồi key — ngưng hoạt động ngay lập tức.

Dùng key

Gửi Authorization: Bearer <key> ở mọi endpoint /v1. Key thay thế hoàn toàn cookie uid:

curl /v1/chat/completions \
  -H "authorization: Bearer sk-kilg-..." \
  -H "content-type: application/json" \
  -d '{"model": "claude-sonnet-5", "messages": [{"role": "user", "content": "hi"}]}

# Python (openai SDK)
from openai import OpenAI
client = OpenAI(
    base_url="v1",
    api_key="sk-kilg-...",
)
r = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "hi"}],
)
print(r.choices[0].message.content)
Bảo vệ key của bạn. Hãy coi key như mật khẩu — ai có nó đều đọc được hội thoại và file của bạn. Không dùng nữa thì thu hồi ngay.

Mở dashboard API keys →

Models

GET/v1/models — danh sách chat + image models. GET /v1/images/models — chỉ image models.

curl -s /v1/models

Model được liệt kê theo thời gian chạy và tự cập nhật.

Chat completions

POST/v1/chat/completions — OpenAI-compatible, hỗ trợ stream: true (SSE).

curl -s /v1/chat/completions \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "stream": true,
    "messages": [
      {"role": "user", "content": "Giải thích SSH tunnel dễ hiểu"}
    ]
  }'

Tuỳ chọn

TrườngMô tả
systemSystem prompt (hoặc message đầu role: system).
web_searchtrue để bật tìm kiếm web (nguồn được nối vào câu trả lời).
image_generation{"imageGenerationModel": "flux-1.1-pro", "imageGenerationRatio": "1:1", "imageCount": 1} để sinh ảnh trong câu trả lời.
conversation_idKey conversation muốn nối tiếp (hoặc header X-Conversation-Id).
incognitotrue để bỏ hoàn toàn việc lưu trữ (xem Ẩn danh).
include_nametrue để model biết tên hiển thị của bạn (lấy từ hồ sơ; bỏ qua khi ẩn danh).
avatar_sharetrue để gửi kèm ảnh đại diện (chỉ loại ảnh) vào tin nhắn đầu cuộc hội thoại mới, chỉ để tham khảo - model được dặn không nhận xét trừ khi được hỏi. Bỏ qua khi ẩn danh.

File đính kèm: trong user message dùng {"type": "file", "url": "..."} hoặc {"type": "file_id", "file_id": "..."} (xem Files).

Messages (Anthropic)

POST/v1/messages — giống Messages API của Anthropic (content blocks, streaming SSE).

curl -s /v1/messages \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "max_tokens": 2048,
    "system": "Trả lời bằng tiếng Việt",
    "messages": [{"role": "user", "content": "Viết đoạn thơ ngắn về lập trình viên"}]
  }'

POST/v1/messages/count_tokens — ước lượng token.

Cũng hỗ trợ incognitoinclude_name như chat completions.

Files

POST/v1/files — upload (multipart file), max 25MB; chấp nhận ảnh, text, PDF, Office.

curl -s /v1/files -F "file=@anh.png"

Trả về id + url. Sau đó: GET /v1/files (danh sách, kèm media_type), GET /v1/files/{id} (chi tiết), DELETE /v1/files/{id} (xoá khỏi danh sách; bản remote vẫn còn). Tệp chỉ chủ sở hữu (uid cookie) xem được; upload kèm header X-Incognito: 1 sẽ không bao giờ xuất hiện trong danh sách.

EndpointMô tả
POST/v1/filesUpload một file (multipart file).
GET/v1/filesDanh sách file của bạn.
GET/v1/files/{id}Chi tiết file.
DELETE/v1/files/{id}Xoá file khỏi danh sách (bản remote vẫn còn).

Hồ sơ

GET/v1/profile — tên hiển thị + avatar của bạn (theo cookie uid). Mặc định: {"name": "", "avatar": {"kind": "none", "preset": "", "url": ""}}.

PUT/v1/profile — cập nhật. {"name": "Nyx"} (tối đa 40 ký tự, tự trim) hoặc {"avatar": {"kind": "preset", "preset": "#4c9eea"}} (một trong các màu preset) hoặc {"avatar": {"kind": "image", "file_id": "..."}} (file bạn đã upload qua /v1/files; phải là ảnh, tối đa 2MB). Gửi {"avatar": {"kind": "none"}} để xoá avatar.

Có tên hiển thị thì mới dùng được tuỳ chọn include_name (xem Chat completions).

Chat ẩn danh

Gửi incognito: true trong body để bỏ hoàn toàn việc lưu trữ — không ghi gì vào DB và không xuất hiện trong GET /v1/conversations. Client tự gửi toàn bộ lịch sử; mỗi lượt dùng chatId mới.

Hình ảnh

POST/v1/images/generations — sinh ảnh (OpenAI-compatible).

curl -s /v1/images/generations \
  -H "content-type: application/json" \
  -d '{"model": "flux-1.1-pro", "prompt": "mèo đang code, phong cách pixel art", "n": 1, "size": "1024x1024"}'

Kết quả: data[].b64_json hoặc data[].url. Model hay dùng: flux-1.1-pro, flux-schnell, gpt-image-1, dall-e-3, imagen-4, sdxl.

Đọc văn bản

GET/v1/tts/voices — 8 giọng phổ biến + giọng tốt nhất mỗi vùng: {"popular": [...], "all": [{"locale": ..., "voice": ..., "gender": ...}]}.

POST/v1/tts — đọc văn bản, trả về audio/mpeg (kèm header X-Edge-Voice). Body: {"text": "...", "voice": "vi-VN-HoaiMyNeural", "rate": 1.0, "pitch": 1.0}. Voice không bắt buộc — tự nhận diện theo ngôn ngữ văn bản (vi/en). Text tối đa 5000 ký tự.

curl -s /v1/tts \
  -H "content-type: application/json" \
  -d '{"text": "Xin chào KilgoreAI"}' \
  -o gioi-thieu.mp3

Conversations

Mọi chat tự lưu theo cookie uid + X-Conversation-Id. Nếu không gửi conversation id, server tự cấp key mới (trả trong X-Conversation-Id response).

EndpointMô tả
GET/v1/conversationsDanh sách cuộc trò chuyện của bạn (id, title, model, last_active).
GET/v1/conversations/{key}Chi tiết + toàn bộ tin nhắn.
PATCH/v1/conversations/{key}{"title": "..."} đổi tên · {"system": "..."} đặt system prompt · {"truncate": 3} cắt lịch sử còn 3 lượt.
DELETE/v1/conversations/{key}Xoá cuộc trò chuyện.
POST/v1/conversations/{key}/forkNhân bản cuộc trò chuyện tới một chỉ mục tin nhắn: {"up_to": 3} → conversation id mới.

Góp ý & đề xuất

EndpointMô tả
POST/v1/conversations/{key}/feedbackĐánh giá một tin nhắn like/dislike (kèm lời nhắn tuỳ chọn): {"idx": 3, "vote": "like"|"dislike"|null, "text": "..."}. idx là chỉ mục tin nhắn trong cuộc trò chuyện; chỉ tin nhắn của assistant mới đánh giá được.
POST/v1/suggestionsGửi góp ý hoặc đề xuất tính năng: {"type": "feedback"|"suggestion", "text": "..."} (text 1-2000 ký tự).
GET/v1/my-suggestionsDanh sách góp ý của bạn + phản hồi của admin.
POST/v1/my-feedback/readĐánh dấu đã đọc phản hồi của admin (xoá badge chuông).

Trạng thái

GET/v1/health — trạng thái dịch vụ: {"status": "ok", "models": [...], "image_models": [...], "memory": {"conversations": N}}.

Giới hạn

Sử dụng công bằng cho mỗi người dùng. Lỗi tạm thời được tự động thử lại — thường bạn không cần gửi lại gì.
Lịch sử context tối đa 24 lượt (giới hạn payload WS upstream); tin cũ bị cắt tự động. Trang này không có key bí mật — ai có cookie của bạn trong cùng trình duyệt mới truy cập được dữ liệu của bạn.
Lỗi trên /v1/* luôn dùng định dạng OpenAI: {"error": {"message", "type", "code"}}. Nếu máy chủ bật RATE_LIMIT_PER_MIN, các endpoint sinh nội dung trả 429 kèm header Retry-After khi vượt hạn mức mỗi phút.