Tạo ảnh với ThAPI API
Tạo ảnh từ mô tả hoặc chỉnh sửa theo ảnh tham chiếu qua hai endpoint JSON. Bắt đầu bằng một yêu cầu đơn giản, sau đó bổ sung tham số theo model.
Quay lại tài liệuKết nối API
Gửi yêu cầu đến URL API của site với Content-Type: application/json và Authorization: Bearer YOUR_API_KEY. Bạn cũng có thể dùng x-api-key.
Giữ API key ở phía máy chủ. Các ví dụ dùng biến môi trường và chưa gửi yêu cầu thay bạn.
Base URLhttps://thapi.cloud/v1
AuthorizationBearer $STALI_API_KEY
read -r -s -p "STALI_API_KEY: " STALI_API_KEY
export STALI_API_KEY
printf '\n'
curl -fsS https://thapi.cloud/v1/models -H "Authorization: Bearer ${STALI_API_KEY:?STALI_API_KEY}"Chọn model tạo ảnh
Dùng req/gpt-image-2 hoặc req/gemini-3.0-pro-image. Nếu bỏ model hoặc gửi giá trị trống, hai endpoint ảnh mặc định dùng req/gpt-image-2.
| Model | Giá mỗi request |
|---|---|
req/gpt-image-2GPT Image 2 | 1.000đ |
req/gemini-3.0-pro-imageGemini 3.0 Pro Image | 1.000đ |
Gọi GET /v1/models để xem model và pricing.per_request hiện tại. API key cần được cấp quyền sử dụng model đã chọn.
Xem bảng giá hiện hànhTạo ảnh từ mô tả
/v1/images/generationsapplication/jsonGửi POST /v1/images/generations với model và prompt mô tả ảnh. Ví dụ bắt đầu với n: 1 và size: 1024x1024. Endpoint trả JSON sau khi xử lý xong. stream bị đặt thành false; endpoint này không trả luồng SSE.
Ví dụ cURL dùng Bash trên macOS, Linux hoặc WSL. Với Python, cài thư viện bằng pip install requests. Với Node.js, dùng phiên bản 18 trở lên, lưu mã thành tệp .mjs và dùng fetch có sẵn.
curl --fail-with-body --dump-header image-response-headers.txt "https://thapi.cloud/v1/images/generations" \
-H "Authorization: Bearer ${STALI_API_KEY:?STALI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "req/gpt-image-2",
"prompt": "A small botanical robot tending a seedling, studio product photography, soft natural light, clean ivory background, no text",
"n": 1,
"size": "1024x1024"
}'Chỉnh sửa theo ảnh tham chiếu
/v1/images/editsapplication/jsonGửi POST /v1/images/edits bằng JSON, gồm prompt không rỗng và image. Ảnh có thể là data URL, chuỗi base64 hoặc URL http(s) công khai. Với cURL, thay https://example.com/reference.png bằng URL ảnh công khai thực tế của bạn. Với Python hoặc Node.js, đặt reference.png cùng thư mục chạy ví dụ.
Ngoài image, có thể dùng image_url, reference_image, ref_image hoặc refImage. Giá trị có thể là chuỗi hoặc đối tượng {url: ...}; nên gửi một trường ảnh duy nhất. Endpoint chỉnh sửa nhận JSON, không nhận multipart/form-data. URL ảnh phải truy cập công khai và không chứa thông tin đăng nhập; địa chỉ nội bộ bị chặn. Ảnh tham chiếu hỗ trợ PNG, JPEG, WebP và GIF. Không dùng trực tiếp images.edit của SDK nếu SDK gửi multipart/form-data. Endpoint này yêu cầu JSON; các ví dụ Python requests và Node.js fetch minh họa đúng định dạng.
curl --fail-with-body --dump-header image-response-headers.txt "https://thapi.cloud/v1/images/edits" \
-H "Authorization: Bearer ${STALI_API_KEY:?STALI_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "req/gpt-image-2",
"prompt": "Keep the subject and composition, change the background to a warm ivory studio",
"image": "https://example.com/reference.png",
"n": 1,
"size": "1024x1024"
}'Tham số và giới hạn
Toàn bộ JSON yêu cầu tối đa 20 MiB, gồm dữ liệu ảnh đã mã hóa. Base64 làm tăng kích thước dữ liệu. Giới hạn của Playground là riêng biệt.
| Tham số | Bắt buộc | Ý nghĩa |
|---|---|---|
model | Tùy chọn | model: ID model tạo ảnh. Mặc định req/gpt-image-2. |
prompt | Bắt buộc | prompt: mô tả ảnh hoặc hướng dẫn chỉnh sửa. Endpoint chỉnh sửa yêu cầu chuỗi không rỗng. |
image | Bắt buộc với edits | Gửi POST /v1/images/edits bằng JSON, gồm prompt không rỗng và image. Ảnh có thể là data URL, chuỗi base64 hoặc URL http(s) công khai. Ảnh tham chiếu hỗ trợ PNG, JPEG, WebP và GIF. |
size | Tùy chọn | size: ví dụ dùng 1024x1024. Kích thước được hỗ trợ phụ thuộc model và nhà cung cấp. |
n | Tùy chọn | n: ví dụ dùng 1 ảnh. Giá trị được chuyển đến nhà cung cấp; số lượng được hỗ trợ phụ thuộc model. |
quality / response_format / output_format | Tùy chọn | quality, response_format và các tham số bổ sung được chuyển tiếp. Chỉ gửi những tham số model hỗ trợ; gateway không bảo đảm mọi lựa chọn đều có hiệu lực. |
Đọc và lưu ảnh trả về
Đọc mảng data trong phản hồi JSON. Tùy nhà cung cấp, ảnh nằm ở b64_json, b64Json hoặc url. Các trường bổ sung có thể khác nhau giữa các model.
{
"data": [
{
"b64_json": "<base64 image bytes>"
}
]
}Nếu nhận base64, giải mã thành tệp ảnh hoặc tạo data URL với MIME type phù hợp định dạng thực tế. Không mặc định mọi kết quả đều là PNG. Nếu nhận URL, dùng URL để tải hoặc hiển thị ảnh. Thời gian tồn tại và quyền truy cập URL phụ thuộc nhà cung cấp.
Lưu x-thapi-request-id để tra cứu; xem x-thapi-model, x-thapi-price-vnd-per-request và x-thapi-cost-vnd trong header phản hồi thành công.
Chi phí theo lượt gọi
Model ảnh được tính theo request. Kiểm tra pricing.per_request trong GET /v1/models trước khi chạy; số dư hoặc hạn mức của API key có thể chặn yêu cầu. Token trong phản hồi hoặc header không phải cơ sở để tự tính lại giá model ảnh. Yêu cầu mới có thể phát sinh lượt tính phí mới.
Không tự động gửi lại khi timeout hoặc mất kết nối: yêu cầu trước có thể đã được xử lý. Kiểm tra lịch sử Usage và lưu request ID để đối chiếu hoặc cung cấp khi cần hỗ trợ trước khi quyết định gọi lại.
Cách tính phíXử lý lỗi có kiểm soát
Lỗi gateway có dạng {type: "error", error: {type, message, ...}}. Đọc HTTP status và error.message, đồng thời lưu request ID nếu có.
| HTTP | Lỗi | Cách xử lý |
|---|---|---|
| 400 | invalid_request_error | kiểm tra JSON, model, endpoint, prompt và ảnh tham chiếu. |
| 401 | authentication_error | kiểm tra API key. |
| 402 | insufficient_balance / api_key_monthly_limit / outstanding_undercharge | kiểm tra số dư, hạn mức tháng hoặc khoản còn phải thanh toán. |
| 403 | model_not_allowed | kiểm tra quyền dùng model. |
| 413 | request_too_large | Giảm kích thước toàn bộ yêu cầu, gồm dữ liệu base64. Nhà cung cấp hoặc model có thể áp dụng giới hạn thấp hơn giới hạn JSON của gateway. |
| 429 | rate_limit_error | giảm tần suất và tuân theo Retry-After hoặc retry_after_ms nếu có. |
| 502 / 503 | api_error / service_unavailable | nhà cung cấp hoặc dịch vụ có thể đang gián đoạn. |
Trước khi gửi yêu cầu
Kiểm tra API key, quyền model và giá hiện tại. Gửi JSON đúng endpoint, giữ yêu cầu nhỏ và dùng một ảnh cho ví dụ đầu tiên. Chuẩn bị xử lý cả base64 lẫn URL, lưu request ID và kiểm tra kết quả trước khi gọi lại.
- Kiểm tra API key và quyền model.
- Đối chiếu model và giá trong /v1/models.
- Kiểm tra JSON, prompt và dữ liệu ảnh.
- Xử lý cả base64 và URL.
- Kiểm tra lịch sử Usage; lưu request ID để đối chiếu hoặc liên hệ hỗ trợ.