Dùng API của zyo.lol để tải lên, liệt kê và xoá file Image Host cùng paste từ script, bot và ứng dụng của riêng bạn. Mọi response đều là JSON có type là success hoặc error và một message.
/meLấy thông tin tài khoản
GET/filesLiệt kê file
POST/filesTải lên một file
POST/uploadsBắt đầu tải lên trực tiếp
POST/uploads/completeHoàn tất tải lên trực tiếp
GET/fileLấy một file
POST/fileXoá một file
GET/pastesLiệt kê paste
POST/pastesTạo paste
GET/pasteLấy một paste
POST/pasteCập nhật hoặc xoá paste
Base URL
Mọi endpoint đều nằm dưới URL này. API chạy trên trang chính, không chạy trên link rút gọn.
https://zyo.lol/php/images/api
Xác thực
Bạn cần có Image Host Image Host để dùng API.
- Tạo key. Mở cài đặt Image Host và vào Image Host › Cài đặt › API key · ShareX, rồi bấm Tạo key.
- Sao chép ngay. Key bắt đầu bằng
zyo_và chỉ hiện một lần. Bạn cũng có thể tải file cấu hình ShareX có sẵn ở đó. - Gửi key trong mọi request qua header
Authorization. DạngBearer zyo_…cũng được.
Authorization: zyo_your_key
Body của POST có thể là JSON hoặc form data. Riêng upload phải dùng multipart form data.
Ai có key đều có thể tải lên và xoá file của bạn. Nếu bị lộ, hãy thu hồi key ở cùng chỗ đó và tạo key mới.
Giới hạn
| Giới hạn | Giá trị |
|---|---|
| Request API | 120 mỗi phút cho mỗi tài khoản |
| Tải lên | 60 file mỗi 10 phút |
| Thay đổi paste | 120 lần tạo, cập nhật hoặc xoá mỗi 10 phút |
| Kích thước file | 100 MB, hoặc 250 MB với Premium |
| Tải lên một request | 95 MB mỗi file với POST /files hoặc ShareX. File lớn hơn hãy dùng tải lên trực tiếp. |
| Dung lượng | 30 GB, hoặc 50 GB với Premium |
| Paste | 500 mỗi tài khoản, mỗi paste 1 MB |
File và paste tải lên sẽ được quét nội dung không an toàn và có thể bị ẩn cho đến khi admin xem xét.
Tải lên file lớn
Có hai cách tải lên một file:
- Một request với Tải lên một file, cho file tối đa 95 MB.
- Tải lên trực tiếp qua ba bước, cho mọi file trong giới hạn gói của bạn. File đi thẳng vào kho lưu trữ nên nhanh hơn và tải được file lớn.
- Bắt đầu. Gửi tên file và kích thước chính xác tới
POST /uploads. Bạn nhận đượcupload_url, cácheaderscần gửi và mộtkey. - Tải lên.
PUTnguyên file lênupload_urlvới đúng các header đó. Không thêm header Authorization ở bước này. Link hết hạn sau 10 phút kể từ bước 1, nên hãy PUT ngay. - Hoàn tất. Gửi
keytớiPOST /uploads/complete. Bạn nhận được đối tượng file giống như khi tải lên bình thường.
curl -X PUT "UPLOAD_URL_TU_BUOC_1" \
-H "Content-Type: application/octet-stream" \
--upload-file video.mp4
Nếu PUT trả về 403, link đã hết hạn hoặc kích thước, header không khớp: hãy bắt đầu lại. File không được hoàn tất sẽ bị xoá sau khoảng 15 phút.
Lỗi
Lỗi dùng mã trạng thái HTTP, và hầu hết có kèm một code ngắn để bạn kiểm tra trong ứng dụng.
{ "code": "not_found", "type": "error", "message": "File not found." }
| Trạng thái | Code | Ý nghĩa |
|---|---|---|
| 400 | invalid | Thiếu một trường hoặc trường không hợp lệ. message cho biết trường nào. |
| 400 | action | Thiếu trường action hoặc giá trị không hợp lệ. |
| 401 | unauthorized | Thiếu API key hoặc key không hợp lệ. |
| 403 | access | Tài khoản của bạn chưa có Image Host. |
| 404 | not_found | File hoặc paste không tồn tại hoặc không phải của bạn. |
| 405 | method | Endpoint không hỗ trợ HTTP method này. |
| 413 | use_direct_upload | File vượt 95 MB cho một request. Hãy dùng tải lên trực tiếp. |
| 429 | rate_limited | Quá nhiều request. Đợi một chút rồi thử lại. |
| 500 | delete_failed | Xoá thất bại phía máy chủ. Hãy thử lại sau. |
Lỗi upload như file quá lớn, định dạng không hỗ trợ hoặc hết dung lượng sẽ trả về trạng thái 400 kèm message cho biết lỗi gì. Một request lớn hơn khoảng 100 MB sẽ bị Cloudflare chặn với trạng thái 413 và một trang HTML trước khi tới zyo.lol, vì vậy file lớn hãy luôn dùng tải lên trực tiếp.
Bị chuyển về trang này với trạng thái 307
Nếu request API trả về trạng thái 307 và chuyển bạn tới trang này, API đang bị giới hạn tạm thời vì zyo.lol nhận lưu lượng bất thường. Request của bạn chưa tới zyo.lol, nên không có gì được tải lên, thay đổi hay xoá.
- Đợi một chút rồi thử lại. Giới hạn thường được gỡ trong khoảng 10 phút.
- Tạo key mới nếu vẫn bị như vậy. Mở cài đặt Image Host, bấm Tạo key rồi cập nhật ứng dụng hoặc ShareX của bạn.
- Tải lên từ panel zyo.lol vẫn hoạt động trong lúc API bị giới hạn.
Tài khoản
Xem key thuộc tài khoản nào và còn bao nhiêu dung lượng.
Lấy thông tin tài khoản
/php/images/api/meTrả về username, dung lượng đã dùng và giới hạn của bạn. Kích thước tính bằng byte.
Yêu cầu
curl https://zyo.lol/php/images/api/me \
-H "Authorization: zyo_your_key"
Phản hồi
{
"user": { "id": 1, "username": "wowie" },
"usage": { "count": 42, "bytes": 9639060 },
"limits": {
"premium": true,
"quota_bytes": 53687091200,
"max_file_bytes": 262144000
},
"type": "success",
"message": "OK"
}
File
Tải lên, liệt kê, tra cứu và xoá ảnh, video trên Image Host của bạn.
Liệt kê file
/php/images/api/filesTrả về các file của bạn, mới nhất trước. Khi more là true, hãy lấy trang tiếp theo.
| Trường | Mô tả |
|---|---|
page Tuỳ chọn | Số trang, bắt đầu từ 1. |
per_page Tuỳ chọn | Số file mỗi trang, từ 1 đến 100. Mặc định 50. |
type Tuỳ chọn | image, gif hoặc video. |
sort Tuỳ chọn | newest, oldest, largest, smallest, views hoặc favorites. |
q Tuỳ chọn | Tìm theo tên file hoặc mã. |
folder Tuỳ chọn | all, fav, none hoặc id thư mục. |
Yêu cầu
curl "https://zyo.lol/php/images/api/files?per_page=10&type=image" \
-H "Authorization: zyo_your_key"
Phản hồi
{
"files": [
{
"id": 1042,
"code": "aB3xK9q",
"url": "https://i.zyo.lol/aB3xK9q.png",
"raw": "https://r2.zyo.lol/img/.../aB3xK9q.png",
"filename": "screenshot.png",
"size": "180 KB",
"resolution": "1920×1080",
"video": false,
"kind": "image",
"bytes": 184320,
"embed": "",
"favorite": false,
"anonymous": false,
"folder_id": null,
"views": 12,
"time": 1793023024,
"ago": "3d ago",
"expires": "",
"review": false
}
],
"page": 1,
"more": false,
"type": "success",
"message": "OK"
}
Tải lên một file
/php/images/api/filesTải lên một file dạng multipart form data trong một request, tối đa 95 MB. Hỗ trợ PNG, JPG, GIF, WEBP, MP4, WEBM và MOV. File lớn hơn hãy dùng Bắt đầu tải lên trực tiếp. Trường image là một đối tượng file giống trong Liệt kê file.
| Trường | Mô tả |
|---|---|
file Bắt buộc | File cần tải lên. |
embed Tuỳ chọn | large, image, stats, default hoặc một embed đã lưu. |
folder_id Tuỳ chọn | Đưa file vào một thư mục của bạn. |
anonymous Tuỳ chọn | 1 để ẩn tên bạn trên trang file, 0 để hiện. Bỏ trống để dùng cài đặt mặc định. |
Yêu cầu
curl https://zyo.lol/php/images/api/files \
-H "Authorization: zyo_your_key" \
-F "file=@screenshot.png"
Phản hồi
{
"image": {
"code": "aB3xK9q",
"url": "https://i.zyo.lol/aB3xK9q.png",
"raw": "https://r2.zyo.lol/img/.../aB3xK9q.png",
"filename": "screenshot.png"
},
"type": "success",
"message": "Uploaded."
}
Bắt đầu tải lên trực tiếp
/php/images/api/uploadsBước 1 của tải lên trực tiếp, cho file mọi kích thước trong giới hạn gói của bạn (100 MB, hoặc 250 MB với Premium). Trả về một link tải lên dùng một lần, hết hạn sau 10 phút. Sau đó PUT file lên upload_url với đúng các header trong response, rồi gọi Hoàn tất tải lên trực tiếp.
| Trường | Mô tả |
|---|---|
name Bắt buộc | Tên file kèm đuôi, ví dụ video.mp4. |
size Bắt buộc | Kích thước file chính xác, tính bằng byte. |
mime Tuỳ chọn | Kiểu MIME, dùng khi tên file không có đuôi được hỗ trợ. |
Yêu cầu
curl https://zyo.lol/php/images/api/uploads \
-H "Authorization: zyo_your_key" \
-H "Content-Type: application/json" \
-d '{"name": "video.mp4", "size": 157286400}'
Phản hồi
{
"upload_url": "https://….r2.cloudflarestorage.com/zyo/pending/1/image_….mp4?X-Amz-…",
"method": "PUT",
"headers": {
"Content-Type": "application/octet-stream",
"Content-Length": "157286400"
},
"key": "pending/1/image_7c1f….mp4",
"expires_in": 600,
"type": "success",
"message": "Upload prepared."
}
Hoàn tất tải lên trực tiếp
/php/images/api/uploads/completeBước 3 của tải lên trực tiếp. Gọi ngay sau khi PUT xong. File được kiểm tra, lưu lại và trả về với mã trạng thái 201, giống Tải lên một file. Mỗi key chỉ dùng được một lần và chỉ cho tài khoản đã tạo nó.
| Trường | Mô tả |
|---|---|
key Bắt buộc | Key nhận được từ Bắt đầu tải lên trực tiếp. |
name Tuỳ chọn | Tên file hiển thị. |
embed Tuỳ chọn | Giống trong Tải lên một file. |
folder_id Tuỳ chọn | Đưa file vào một thư mục của bạn. |
anonymous Tuỳ chọn | 1 để ẩn tên bạn, 0 để hiện. |
Yêu cầu
curl https://zyo.lol/php/images/api/uploads/complete \
-H "Authorization: zyo_your_key" \
-H "Content-Type: application/json" \
-d '{"key": "pending/1/image_7c1f….mp4", "name": "video.mp4"}'
Phản hồi
{
"image": {
"code": "aB3xK9q",
"url": "https://i.zyo.lol/aB3xK9q.mp4",
"raw": "https://r2.zyo.lol/img/.../aB3xK9q.mp4",
"filename": "video.mp4"
},
"type": "success",
"message": "Uploaded."
}
Lấy một file
/php/images/api/fileTrả về một file của bạn theo mã.
| Trường | Mô tả |
|---|---|
code Bắt buộc | Mã file, ví dụ aB3xK9q. |
Yêu cầu
curl "https://zyo.lol/php/images/api/file?code=aB3xK9q" \
-H "Authorization: zyo_your_key"
Phản hồi
{
"file": { "code": "aB3xK9q", "url": "https://i.zyo.lol/aB3xK9q.png", "views": 12 },
"type": "success",
"message": "OK"
}
Xoá một file
/php/images/api/fileXoá một file của bạn. Không thể hoàn tác.
| Trường | Mô tả |
|---|---|
code Bắt buộc | Mã file. |
action Bắt buộc | delete |
Yêu cầu
curl https://zyo.lol/php/images/api/file \
-H "Authorization: zyo_your_key" \
-H "Content-Type: application/json" \
-d '{"code": "aB3xK9q", "action": "delete"}'
Phản hồi
{
"type": "success",
"message": "File deleted"
}
Paste
Tạo và quản lý ghi chú, đoạn code trên Paste Bin.
Liệt kê paste
/php/images/api/pastesTrả về các paste của bạn, mới cập nhật trước. Không kèm nội dung, hãy dùng Lấy một paste để xem nội dung.
Yêu cầu
curl https://zyo.lol/php/images/api/pastes \
-H "Authorization: zyo_your_key"
Phản hồi
{
"pastes": [
{
"slug": "NbtD5TtH",
"url": "https://i.zyo.lol/NbtD5TtH",
"title": "Notes",
"mode": "markdown",
"locked": false,
"burn": false,
"views": 3,
"expires_at": null
}
],
"type": "success",
"message": "OK"
}
Tạo paste
/php/images/api/pastesTạo một paste và trả về với mã trạng thái 201. Paste mới sẽ được quét nội dung không an toàn ngay sau khi lưu.
| Trường | Mô tả |
|---|---|
content Bắt buộc | Nội dung, tối đa 1 MB. |
title Tuỳ chọn | Tối đa 120 ký tự. |
mode Tuỳ chọn | markdown, text hoặc code. Mặc định markdown. |
language Tuỳ chọn | Ngôn ngữ code khi mode là code. |
slug Tuỳ chọn | Link tuỳ chỉnh, 3 đến 32 ký tự gồm chữ, số, - hoặc _. |
expires Tuỳ chọn | Số giờ đến khi hết hạn: 12, 24, 72, 168 hoặc 720. 0 hoặc bỏ trống là không bao giờ hết hạn. |
password Tuỳ chọn | Yêu cầu mật khẩu trước khi hiện paste. |
burn Tuỳ chọn | 1 để tự xoá sau lần xem đầu tiên. |
anonymous Tuỳ chọn | 1 để ẩn tên bạn. |
Yêu cầu
curl https://zyo.lol/php/images/api/pastes \
-H "Authorization: zyo_your_key" \
-H "Content-Type: application/json" \
-d '{"title": "Notes", "content": "# Hello"}'
Phản hồi
{
"paste": { "slug": "NbtD5TtH", "url": "https://i.zyo.lol/NbtD5TtH", "title": "Notes" },
"type": "success",
"message": "Paste created."
}
Lấy một paste
/php/images/api/pasteTrả về một paste của bạn kèm nội dung.
| Trường | Mô tả |
|---|---|
slug Bắt buộc | Slug của paste. |
Yêu cầu
curl "https://zyo.lol/php/images/api/paste?slug=NbtD5TtH" \
-H "Authorization: zyo_your_key"
Phản hồi
{
"paste": { "slug": "NbtD5TtH", "title": "Notes", "content": "# Hello" },
"type": "success",
"message": "OK"
}
Cập nhật hoặc xoá paste
/php/images/api/pasteChỉ cập nhật các trường bạn gửi và giữ nguyên phần còn lại, hoặc xoá paste.
| Trường | Mô tả |
|---|---|
slug Bắt buộc | Slug của paste. |
action Bắt buộc | update hoặc delete |
clear_password Tuỳ chọn | 1 để gỡ mật khẩu. |
các trường khác Tuỳ chọn | Bất kỳ trường nào của Tạo paste. slug chỉ dùng để tìm paste, không đổi tên được ở đây. |
Yêu cầu
curl https://zyo.lol/php/images/api/paste \
-H "Authorization: zyo_your_key" \
-H "Content-Type: application/json" \
-d '{"slug": "NbtD5TtH", "action": "update", "title": "New title"}'
Phản hồi
{
"paste": { "slug": "NbtD5TtH", "title": "New title" },
"type": "success",
"message": "Paste saved."
}