Tài liệu API
API của YourImageShare cho phép bạn tải lên, liệt kê và xóa file bằng code. Đây là một API JSON/REST nhỏ gọn - không cần SDK, chỉ cần một HTTP client và một API key - ngoài ra còn có các thư viện JavaScript, Python và MCP chính thức.
Tất cả thư viện client và công cụ bên dưới đều là mã nguồn mở. Bạn có thể xem code, báo lỗi hoặc đóng góp trên kho GitHub chính thức của chúng tôi tại github.com/yourimageshare/yourimageshare.
Base URL: https://yourimageshare.com/api · Định dạng: JSON cho cả đầu vào và đầu ra, trừ phần tải lên dùng multipart/form-data · Xác thực: một API key trong mọi request. · Đặc tả cho máy đọc: /openapi.json (OpenAPI 3.1), dành cho agent và công cụ sinh code không muốn phân tích trang này.
Lấy API key
Đăng nhập, vào Tài khoản của tôi và mở tab API. Key của bạn hiển thị ở đó, cùng với nút Tạo lại. Tạo lại key sẽ vô hiệu hóa key cũ ngay lập tức, nên hãy cập nhật mọi nơi đang dùng key trước khi bấm.
Tab đó còn có một key chỉ tải lên riêng biệt - xem mẹo bên dưới và Plugin diễn đàn để biết khi nào nên dùng key này.
Xác thực
Hãy gửi key trong header - cách nên dùng, vì chuỗi truy vấn thường bị ghi vào log truy cập, log proxy và header Referer:
X-API-Key: YOUR_API_KEY Tham số truy vấn ?key= cũng dùng được, được giữ lại để tương thích với các tích hợp cũ và những lệnh curl chạy nhanh một lần. Nếu có cả hai, header được ưu tiên.
?key=YOUR_API_KEY Mẹo: Hãy coi key như mật khẩu - ai có key đều có thể tải lên, liệt kê, chỉnh sửa và xóa trên tài khoản của bạn. Mọi request thành công đều được ghi lại và hiển thị dưới dạng biểu đồ trong tab API của trang tài khoản, chia theo ngày và theo loại request. Nếu key phải nằm ở nơi người khác nhìn thấy được - như plugin diễn đàn hay file cấu hình công khai - hãy dùng key chỉ tải lên trong cùng tab: key này chỉ tải lên được - liệt kê, tra cứu, chỉnh sửa và xóa đều bị từ chối với lỗi 401.
Endpoint
Tải lên, liệt kê và xóa dùng chung cách xác thực và giới hạn tốc độ; file lớn có thể được gửi theo từng phần trước.
POST /api - Tải lên một file
Tải lên một file cho tài khoản đã xác thực.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
uploads | file | một trong ba trường này | File cần tải lên, tối đa 100MB (giới hạn cho một request qua mạng của chúng tôi). Mỗi request một file - endpoint này không tải lên hàng loạt nhiều file. |
url | string | Một link http(s) công khai tới ảnh hoặc video. Chúng tôi tự tải về, nên file lên đến 200MB đều dùng được. | |
upload_id | string | File đã được gửi theo từng phần tới POST /api/chunk trước đó, tối đa 200MB. | |
filename | string | không | Dùng với upload_id: tên file gốc. |
expires_in | integer | không | Tự động xóa file tải lên này sau chừng đó giây (từ 60 đến 31,536,000, tức 1 phút đến 1 năm). Bỏ qua để tải lên bình thường, vĩnh viễn. |
allow_duplicate | boolean | không | Lưu một bản sao mới ngay cả khi tài khoản của bạn đã tải lên đúng file đó (xem duplicate bên dưới). |
keep_original | boolean | không | Giữ nguyên ảnh như khi tải lên. Nếu không có, file JPG/PNG trên 1 MB sẽ được tối ưu sang WebP. Metadata như GPS đều bị xóa trong cả hai trường hợp. |
visibility | string | không | unlisted (mặc định): file và trang của nó dùng được với bất kỳ ai có link, nhưng không được liệt kê ở đâu. private: chỉ có file - link trang sẽ chuyển mọi người trừ bạn thẳng tới file (không có bình luận, cảm xúc hay quảng cáo). public: được liệt kê trên site và có thể được lập chỉ mục. |
title | string | không | Tối đa 90 ký tự, hiển thị trên trang của file tải lên. |
description | string | không | Tối đa 500 ký tự. |
Định dạng được chấp nhận: ảnh JPG, PNG, GIF, WEBP, AVIF, BMP, TIFF, HEIC hoặc HEIF; video MP4, WEBM, AVI, MOV, MKV, MPEG, WMV, FLV hoặc 3GP (danh sách chính xác có thể mở rộng theo thời gian). HEIC/HEIF và TIFF được lưu thành WebP, video không phải MP4/WebM được chuyển sang MP4, và ảnh JPEG/PNG lớn hơn được chuyển sang WebP ngay sau khi tải lên khi việc đó làm file nhẹ đi đáng kể. Dung lượng tối đa: 200MB; file quá lớn hoặc không đọc được sẽ bị từ chối với lỗi 422.
Phản hồi - 200 OK:
{
"type": "success",
"msg": "success",
"data": {
"id": "aB3xY9qRz1",
"type": "image",
"path": "https://i.yourimageshare.com/aB3xY9qRz1.png",
"src": "https://yourimageshare.com/ib/aB3xY9qRz1.png",
"direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
"thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
"width": 1920,
"height": 1080,
"size": 482113,
"locked": false,
"visibility": "unlisted",
"title": null,
"description": null,
"expires_at": null,
"duplicate": false,
"delete_url": "https://yourimageshare.com/delete#iV3x...k9"
}
} | Trường | Mô tả |
|---|---|
id | Mã định danh duy nhất của file. |
type | image hoặc video. |
path | URL lưu trữ của file như khi tải lên. URL này có thể thay đổi ngay sau đó khi file được chuyển đổi (WebP/MP4), nên hãy lưu src, đừng lưu path. |
src | URL file trực tiếp vĩnh viễn - luôn mở file hiện tại, phù hợp cho src của <img>/<video> và để lưu lại. |
direct | Trang của file trên YourImageShare (tiêu đề, mô tả, bình luận, tùy chọn chia sẻ). |
thumb | Ảnh thu nhỏ WebP rộng 280px (với video là khung hình đầu tiên), hoặc null. |
width, height | Kích thước hiển thị tính bằng pixel (theo chiều đứng đúng; với video là kích thước khung hình), hoặc null nếu không rõ. |
size | Dung lượng file tính bằng byte như đã lưu. |
locked | true nếu file tải lên được bảo vệ bằng mật khẩu. |
visibility | private, unlisted hoặc public (xem trường request ở trên). |
title, description | Như đã đặt, hoặc null. Văn bản được kiểm duyệt giống như trên website. |
delete_url | Chỉ với file mới tải lên: một link riêng để xóa file này mà không cần API key. Chỉ hiển thị một lần (chỉ lưu bản băm) - hãy giữ lại nếu bạn cần. |
expires_at | Mốc thời gian ISO 8601 mà file tải lên này sẽ tự động bị xóa, hoặc null nếu không hết hạn. |
duplicate | true nếu tài khoản của bạn đã tải lên đúng file đó: file đã có được trả về và không lưu thêm gì mới. Không áp dụng cho file có hạn hoặc khi dùng allow_duplicate=1. |
File tải lên có thời hạn: khi expires_at đã qua, file bị xóa khỏi nơi lưu trữ và trang của file bắt đầu trả về 410 Gone trong khoảng 5 phút. Việc này không thể hoàn tác hoặc gia hạn sau đó - hãy xóa sớm bằng endpoint DELETE nếu cần gỡ sớm hơn, hoặc tải lên lại với expires_in mới nếu cần giữ lâu hơn.
POST /api/chunk - File lớn
Một request chỉ chứa được tối đa 100MB. Với file lớn hơn (lên đến 200MB), hoặc để mỗi request nhỏ gọn trên đường truyền chậm, hãy gửi file theo từng phần tối đa 5MB, rồi kết thúc bằng POST /api:
- Chọn một upload id: 32 ký tự hex ngẫu nhiên.
- Với mỗi phần,
POST /api/chunk(multipart/form-data) kèmupload_id,index(bắt đầu từ 0),total(số phần) và dữ liệu byte trongchunk. Phản hồi là{"type": "success", "chunk_size": 5242880}. POST /apivớiupload_idvàfilenamethay chouploads, cùng các trường tải lên khác nếu có. Phản hồi là phản hồi tải lên thông thường.
Các phần của một file tải lên chưa hoàn tất sẽ bị xóa sau 2 giờ. Chỉ POST /api cuối cùng mới được tính vào giới hạn tải lên.
GET /api/{id} và PATCH /api/{id} - Một file tải lên
GET trả về một file bạn đã tải lên với các trường giống như danh sách bên dưới. PATCH thay đổi visibility, title hoặc description của file (trường form hoặc JSON; tiêu đề hoặc mô tả để trống sẽ xóa nó) và trả về file đã cập nhật. Cả hai đều cần API key đầy đủ; trả về 404 nếu tài khoản của bạn không có file đó.
curl -X PATCH https://yourimageshare.com/api/aB3xY9qRz1 \
-H "X-API-Key: YOUR_API_KEY" -d visibility=public -d title="Sunset" POST /api/{id}/replace - Thay file
Thay file đứng sau một file bạn đã tải lên và giữ nguyên id, trang và mọi link. Mọi định dạng được phép đều dùng được, kể cả định dạng khác (ảnh có thể thành video). Gửi file mới trong uploads (hoặc upload_id của một file đã gửi theo từng phần bằng POST /api/chunk); keep_original hoạt động như khi tải lên. File mới được kiểm tra và chuyển đổi giống như file tải lên mới, và phiên bản trước sẽ bị xóa. Cần API key đầy đủ; 404 nếu tài khoản của bạn không có file đó, 409 nếu file được bảo vệ bằng mật khẩu hoặc bị giới hạn lượt xem.
curl -X POST https://yourimageshare.com/api/aB3xY9qRz1/replace \
-H "X-API-Key: YOUR_API_KEY" -F uploads=@new-version.png GET /api - Liệt kê các file đã tải lên
Trả về danh sách phân trang các file tải lên của tài khoản đã xác thực (từ mọi nguồn - API, website hoặc trình chỉnh sửa), mới nhất trước, 50 file mỗi trang.
| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
page | query | không | Số trang, mặc định là 1. |
Phản hồi - 200 OK:
{
"type": "success",
"data": [
{
"id": "aB3xY9qRz1",
"type": "image",
"title": null,
"path": "https://i.yourimageshare.com/aB3xY9qRz1.webp",
"src": "https://yourimageshare.com/ib/aB3xY9qRz1.webp",
"direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
"thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
"width": 1920,
"height": 1080,
"size": 482113,
"locked": false,
"visibility": "unlisted",
"description": null,
"expires_at": null,
"created_at": "2026-07-23T15:43:28+01:00"
}
],
"meta": { "current_page": 1, "last_page": 1, "total": 1 }
} Các trường ở đây có ý nghĩa giống như trong phản hồi tải lên ở trên (với file được bảo vệ bằng mật khẩu, path và thumb là các link có chữ ký, chỉ có hiệu lực ngắn). Để tra cứu một file theo id, hãy dùng GET /api/{id}.
DELETE /api/{id} - Xóa một file tải lên
Xóa vĩnh viễn một file tải lên của tài khoản đã xác thực. Không thể hoàn tác từ API. {id} là giá trị được trả về trong id bởi các endpoint tải lên hoặc liệt kê.
Phản hồi - 200 OK:
{ "type": "success", "msg": "Deleted." } 404 nếu tài khoản của bạn không có file nào với id đó (hoặc chưa từng là của bạn, hoặc đã bị xóa rồi).
POST /api/compare - Thanh trượt trước/sau
Tạo bản so sánh trước/sau từ hai ảnh bạn đã tải lên: một trang có thanh trượt tại /c/{id} và cũng có thể nhúng vào bất kỳ website nào. Key chỉ tải lên cũng dùng được. Gửi before và after (id file tải lên, bắt buộc), và tùy chọn title, label_before và label_after (mặc định là "Before" và "After").
Phản hồi - 201 Created:
{
"type": "success",
"id": "P7uAYy04VA",
"url": "https://yourimageshare.com/c/P7uAYy04VA",
"embed_url": "https://yourimageshare.com/embed/c/P7uAYy04VA",
"embed": { "script": "<blockquote class=\"YISEmbed\" ...", "iframe": "<iframe ..." }
} 422 nếu một trong hai id không phải là ảnh bạn đã tải lên (video và ảnh được bảo vệ bằng mật khẩu không dùng được).
Giới hạn tốc độ
Mỗi API key có hạn mức riêng theo phút và theo ngày, cùng một mức trần theo ngày cho mỗi IP rộng hơn, để phòng trường hợp một IP dùng luân phiên nhiều key. Tải lên, liệt kê và xóa dùng chung các giới hạn này.
| Khoảng thời gian | Giới hạn mặc định | Phạm vi |
|---|---|---|
| Mỗi phút | 20 request | mỗi API key |
| Mỗi ngày | 500 request | mỗi API key đầy đủ |
| Mỗi ngày | 2,000 request | mỗi key chỉ tải lên (plugin chuyển cả thư viện phương tiện) |
| Mỗi ngày | 2,000 request | mỗi địa chỉ IP |
| Mỗi phút | 300 phần | mỗi API key, chỉ với POST /api/chunk |
Các giới hạn này có thể thay đổi. Mọi phản hồi đều có các header giới hạn tốc độ chuẩn:
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 14 Khi vượt giới hạn sẽ trả về 429, kèm header Retry-After cho biết cần chờ bao nhiêu giây.
Lỗi
Mọi phản hồi lỗi đều có cùng một cấu trúc, bất kể endpoint hay nguyên nhân:
{ "type": "error", "errors": "A human-readable description of what went wrong." } | Trạng thái | Ý nghĩa |
|---|---|
| 401 | Thiếu API key hoặc key không hợp lệ. |
| 403 | Tài khoản hoặc IP hiện tại của bạn đã bị cấm tải lên. |
| 404 | Không tìm thấy file tải lên nào khớp với id đó trên tài khoản này (lấy, chỉnh sửa, xóa). |
| 413 | Request vượt quá 100MB. Hãy gửi file theo từng phần (POST /api/chunk) hoặc gửi link của file trong url (tối đa 200MB). |
| 422 | Dữ liệu không hợp lệ - không có file hoặc link, định dạng file không được hỗ trợ, dữ liệu ảnh không đọc được, kích thước vượt giới hạn 30000x30000px, file trên 200MB, upload_id chưa hoàn tất hoặc đã hết hạn, hoặc url không tải được (thông báo sẽ nêu lý do). |
| 429 | Vượt giới hạn tốc độ - xem Giới hạn tốc độ ở trên. |
| 500 | Máy chủ gặp lỗi bất ngờ. Có thể thử lại an toàn. |
Thư viện client
Các SDK chính thức bao bọc những endpoint ở trên, trả về kết quả có kiểu dữ liệu và báo lỗi khi API lỗi, thay vì phải tự xử lý HTTP thô.
JavaScript / TypeScript
Không phụ thuộc thư viện nào, chạy được trên Node.js và trình duyệt. Cũng có trên JSR với tên @yourimageshare/yourimageshare - npx jsr add @yourimageshare/yourimageshare - cùng mã nguồn, được xuất bản trực tiếp dưới dạng TypeScript.
npm install yourimageshare Python
Một thư viện phụ thuộc (requests), Python 3.8+.
pip install yourimageshare PHP
Không phụ thuộc Composer nào (dùng extension curl có sẵn của PHP), PHP 7.4+. Mã nguồn trên GitHub.
composer require yourimageshare/yourimageshare-php Go
Không phụ thuộc thư viện nào (chỉ dùng thư viện chuẩn), Go 1.18+. Xem pkg.go.dev để đọc tài liệu tham khảo đầy đủ.
go get github.com/yourimageshare/yourimageshare/go Rust
Hai thư viện phụ thuộc (ureq cho HTTP chặn - không kéo theo async runtime - cùng serde), Rust 1.70+. Mã nguồn trên GitHub.
cargo add yourimageshare Ruby
Không phụ thuộc gem nào (stdlib Net::HTTP + json), Ruby 2.7+. Mã nguồn trên GitHub.
gem install yourimageshare .NET
Một thư viện phụ thuộc (System.Text.Json của chính Microsoft), nhắm tới netstandard2.0 nên chạy được trên cả .NET Framework và .NET hiện đại. Mã nguồn trên GitHub. Đã được xây dựng và kiểm chứng với API thật này; sắp xuất bản lên NuGet.
dotnet add package YourImageShare Dart / Flutter
Một thư viện phụ thuộc (http, gói của chính đội Dart), Dart 2.17+. Mã nguồn trên GitHub. Đã được xây dựng và kiểm chứng với API thật này; sắp xuất bản lên pub.dev.
dart pub add yourimageshare Elixir
Một thư viện phụ thuộc (Req), Elixir 1.14+. Trả về các tuple có gắn thẻ {:ok, result}| {:error, reason} - tương đương trực tiếp với cách xử lý lỗi của API này trong mọi SDK khác - cùng các biến thể bang sẽ báo lỗi. Mã nguồn trên GitHub, tài liệu trên HexDocs.
{:yourimageshare, "~> 1.1"} MCP Server
Dành cho các AI coding agent (Claude Code, Cursor và các công cụ khác tương thích MCP) - đưa ảnh chụp màn hình vào báo cáo lỗi, mô tả PR hoặc cuộc trao đổi hỗ trợ dưới dạng một link thật thay vì chuỗi base64 hay bước tải lên thủ công. Hoạt động tương tự với Claude Desktop và mọi MCP client khác.
Có sẵn máy chủ, không cần cài đặt: thêm nó như một MCP server từ xa (trong Claude: Settings › Connectors › Add custom connector; cũng dùng được với ChatGPT, Cursor, VS Code và các client khác nhận URL máy chủ) kèm API key của bạn trong URL:
https://yourimageshare.com/mcp?key=YOUR_API_KEY Các client cho phép đặt header có thể dùng https://yourimageshare.com/mcp với Authorization: Bearer YOUR_API_KEY thay thế. URL có key của bạn hoạt động như mật khẩu: hãy giữ kín, và lấy key mới trong Tài khoản của tôi nếu bị lộ. Trên máy chủ này, upload_image nhận một link công khai (tối đa 200MB) hoặc nội dung base64 trực tiếp (tối đa 15MB). Không có key, https://yourimageshare.com/mcp vẫn tải lên ẩn danh, giống như website: chỉ unlisted hoặc private, giới hạn thấp hơn, và file tải lên bị xóa bằng delete_url mà nó trả về. Các công cụ khác cần có key.
Chạy cục bộ: chạy trực tiếp bằng npx, không cần bước cài đặt (nó cũng đọc được file từ ổ đĩa của bạn):
npx yourimageshare-mcp Công cụ: upload_image (file cục bộ, nội dung trực tiếp hoặc một link, tối đa 200MB, kèm tùy chọn chế độ hiển thị, tiêu đề và tự động xóa), list_uploads, get_upload, update_upload và delete_upload.
Cũng có trong MCP Registry chính thức (với tên io.github.yourimageshare/yourimageshare) và được liệt kê trên Smithery và Glama, nếu MCP client của bạn cài từ một trong các nơi đó.
Mới làm quen với MCP? Xem cách kết nối Claude và ChatGPT với API này qua MCP để có hướng dẫn thiết lập đầy đủ.
Cả mười thư viện đều theo giấy phép MIT. Chưa có thư viện chính thức cho ngôn ngữ của bạn? Các ví dụ code bên dưới hướng dẫn cách gọi API trực tiếp.
Ví dụ code
curl
# Upload a file
curl "https://yourimageshare.com/api" \
-H "X-API-Key: YOUR_API_KEY" \
-F "uploads=@/path/to/photo.jpg"
# Upload from a link (files up to 200MB; one direct upload request stops at 100MB -
# bigger files go in pieces, see Large Files above)
curl "https://yourimageshare.com/api" \
-H "X-API-Key: YOUR_API_KEY" \
-F "url=https://example.com/video.mp4"
# Upload a file that auto-deletes after 1 hour
curl "https://yourimageshare.com/api" \
-H "X-API-Key: YOUR_API_KEY" \
-F "uploads=@/path/to/photo.jpg" \
-F "expires_in=3600"
# List uploads
curl "https://yourimageshare.com/api" -H "X-API-Key: YOUR_API_KEY"
# Upload a file without a page of its own (file only) and give it a title
curl "https://yourimageshare.com/api" \
-H "X-API-Key: YOUR_API_KEY" \
-F "uploads=@/path/to/photo.jpg" \
-F "visibility=private" \
-F "title=Sunset"
# Look up one upload, then make it public
curl "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY"
curl -X PATCH "https://yourimageshare.com/api/aB3xY9qRz1" \
-H "X-API-Key: YOUR_API_KEY" -d "visibility=public"
# Delete an upload
curl -X DELETE "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY" JavaScript (fetch)
const API_KEY = 'YOUR_API_KEY';
const BASE = 'https://yourimageshare.com/api';
async function uploadFile(file) {
const form = new FormData();
form.append('uploads', file);
const res = await fetch(BASE, {
method: 'POST',
headers: { 'X-API-Key': API_KEY },
body: form,
});
const json = await res.json();
if (json.type !== 'success') throw new Error(json.errors);
return json.data;
}
async function listUploads(page = 1) {
const res = await fetch(`${BASE}?page=${page}`, {
headers: { 'X-API-Key': API_KEY },
});
return res.json();
}
async function deleteUpload(id) {
const res = await fetch(`${BASE}/${id}`, {
method: 'DELETE',
headers: { 'X-API-Key': API_KEY },
});
return res.json();
} Python (requests)
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://yourimageshare.com/api"
HEADERS = {"X-API-Key": API_KEY}
# Upload a file
with open("/path/to/photo.jpg", "rb") as f:
res = requests.post(BASE, headers=HEADERS, files={"uploads": f})
res.raise_for_status()
upload = res.json()["data"]
# List uploads
res = requests.get(BASE, headers=HEADERS, params={"page": 1})
uploads = res.json()
# Delete an upload
res = requests.delete(f"{BASE}/{upload['id']}", headers=HEADERS) PHP (curl)
<?php
$apiKey = 'YOUR_API_KEY';
$base = 'https://yourimageshare.com/api';
// Upload a file
$curl = curl_init($base);
curl_setopt_array($curl, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["X-API-Key: $apiKey"],
CURLOPT_POSTFIELDS => ['uploads' => new CURLFile('/path/to/photo.jpg')],
CURLOPT_RETURNTRANSFER => true,
]);
$upload = json_decode(curl_exec($curl), true)['data'];
curl_close($curl);
// List uploads
$curl = curl_init("$base?page=1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$uploads = json_decode(curl_exec($curl), true);
curl_close($curl); Go (net/http)
SDK Go chính thức ở trên đã bao bọc sẵn việc này cho bạn - phiên bản thuần này dành cho ai không muốn thêm thư viện phụ thuộc.
package main
import (
"bytes"
"encoding/json"
"io"
"mime/multipart"
"net/http"
"os"
)
const apiKey = "YOUR_API_KEY"
const base = "https://yourimageshare.com/api"
func uploadFile(path string) (map[string]any, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("uploads", path)
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", base, body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", apiKey)
res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
var result map[string]any
json.NewDecoder(res.Body).Decode(&result)
return result, nil
} Công cụ chụp màn hình
Một tiện ích trình duyệt cùng các cấu hình và script có sẵn để gửi ảnh chụp màn hình thẳng lên YourImageShare, không cần tải lên thủ công. Mỗi công cụ đều tải lên qua cùng endpoint /api được mô tả ở trên.
Tiện ích trình duyệt (Chrome & Firefox)
Tiện ích YourImageShare Capture cho Chrome và Firefox không cần script hay file cấu hình. Nó chụp vùng đang hiển thị, một vùng bạn kéo chọn, hoặc cả trang cuộn dài, mở trình chỉnh sửa tích hợp với mũi tên, văn bản, làm mờ/che thông tin và các chú thích khác, rồi tải kết quả xuống, sao chép vào clipboard, hoặc đăng thẳng lên YourImageShare chỉ với một cú nhấp. Việc đăng dùng cùng endpoint /api được mô tả ở trên - chỉ cần thêm API key một lần trong phần Cài đặt của tiện ích và mọi lần đăng sau đó đều trả về link chia sẻ ngay lập tức. Hoạt động trên Chrome máy tính (và các trình duyệt Chromium khác), Firefox máy tính và Firefox cho Android.
Tải YourImageShare Capture cho Firefox Tải YourImageShare Capture cho Chrome
ShareX
Tải trình tải lên tùy chỉnh bên dưới, rồi trong ShareX vào Destinations > Custom uploader settings > Import > from file, mở file .sxcu vừa tải, và thay YOUR_API_KEY trong trường Headers bằng key thật của bạn. Đặt nó làm nơi đến cho ảnh/file và các ảnh chụp sẽ được tải lên tự động.
Xóa file: link "Delete" của ShareX cho mỗi file tải lên sẽ mở trang xóa của chúng tôi trong trình duyệt (delete_url dùng một lần của file đó), nên bạn có thể xóa một ảnh chụp ngay từ lịch sử của ShareX. Bạn cũng có thể xóa file từ Tài khoản của tôi. Đã tải cấu hình trước tháng 10/2026? Hãy tải lại để có tính năng này.
Flameshot (Linux)
Một shell script nhỏ chạy flameshot gui, tải ảnh chụp lên và sao chép link vào clipboard. Gán nó vào một phím tắt trong môi trường desktop của bạn thay cho phím tắt mặc định của Flameshot.
# One-time setup
chmod +x yis-flameshot-upload.sh
export YIS_API_KEY="YOUR_API_KEY" # or add to ~/.config/yourimageshare/api_key
# Then bind this to a hotkey instead of calling flameshot directly:
/path/to/yis-flameshot-upload.sh Greenshot (Windows)
Một script PowerShell cho nơi đến External command có sẵn của Greenshot. Tương thích với Windows PowerShell 5.1 đi kèm Windows, không cần cài thêm gì.
# One-time setup
setx YIS_API_KEY "YOUR_API_KEY"
# In Greenshot: Preferences > Destinations > External command > Settings
# Command: powershell.exe
# Arguments: -ExecutionPolicy Bypass -File "C:\path\to\yis-greenshot-upload.ps1" "%1" Plugin diễn đàn
Thêm nút "Tải ảnh lên" thật sự bên cạnh trình soạn bài của diễn đàn. Mỗi plugin tải lên qua cùng endpoint /api được mô tả ở trên và chèn BBCode tại vị trí con trỏ - không cần mở tab riêng, không phải sao chép dán thủ công.
Hãy dùng key chỉ tải lên, không dùng API key đầy đủ, cho các plugin bên dưới. Mỗi plugin hiển thị key trong mã nguồn trang của mọi khách truy cập, và key chỉ tải lên (Tài khoản của tôi > tab API) chỉ có thể tải lên - nó không thể liệt kê hay xóa file của bạn dù có ai sao chép nó ra khỏi trang.
File tải lên từ diễn đàn mặc định là private: ảnh hiển thị được trong bài viết, nhưng YourImageShare không tạo trang riêng cho nó (không có bình luận, cảm xúc hay quảng cáo). Mỗi plugin có một tùy chọn để chuyển sang unlisted nếu bạn muốn có thêm một trang cho bất kỳ ai có link.
phpBB
Một extension phpBB 3.2/3.3 thật sự. Giải nén vào ext/, bật nó trong Customise > Manage extensions, rồi thay YOUR_UPLOAD_ONLY_KEY trong file sự kiện template của extension bằng key chỉ tải lên thật của bạn.
SMF (Simple Machines Forum)
Một gói SMF thật sự - cài qua Admin > Package Manager, rồi thay YOUR_UPLOAD_ONLY_KEY trong Sources/yis_forumupload.php bằng key chỉ tải lên thật của bạn.
MyBB
Một plugin MyBB 1.8 thật sự. Sao chép vào inc/plugins/, kích hoạt trong Configuration > Plugins, rồi thay YOUR_UPLOAD_ONLY_KEY trong file plugin bằng key chỉ tải lên thật của bạn.
FluxBB, PunBB & ZetaBoards
Các diễn đàn này không có hệ thống plugin chính thức, nên đây là một đoạn mã nhỏ dán thẳng vào template (FluxBB/PunBB) hoặc Admin CP (ZetaBoards) - hướng dẫn sao chép dán đầy đủ cho từng loại:
Plugin WordPress
Chuyển Thư viện phương tiện của bạn sang YourImageShare thay vì ổ đĩa cục bộ. Ảnh/video mới tải lên sẽ tự động đi qua cùng endpoint /api được mô tả ở trên, file cục bộ (và mọi kích thước ảnh thu nhỏ được tạo ra) sẽ bị xóa khi việc tải lên đã được xác nhận, và mọi URL tệp đính kèm của WordPress - trình soạn thảo khối, ảnh đại diện, thư viện ảnh, REST API - đều trỏ tới file được lưu trữ trên YourImageShare. Không cần shortcode, không đổi quy trình làm việc.
- Chuyển hàng loạt Thư viện phương tiện sẵn có ở chế độ nền (hoặc bằng
wp yis offload --all), không chỉ các file mới tải lên - Ảnh và video đã chèn trong bài viết vẫn hiển thị bình thường sau khi file cục bộ bị xóa
- Ảnh thu nhỏ và srcset dùng ảnh thu nhỏ 280px của chúng tôi, nên các vị trí ảnh nhỏ không phải tải file kích thước đầy đủ
- File lên đến 200MB, được gửi theo từng phần nên video lớn không làm nặng host dùng chung
- Khôi phục bất kỳ file đã chuyển về lưu trữ cục bộ vào bất cứ lúc nào
- Một cột trong Thư viện phương tiện cho biết file nào đã chuyển và file nào vẫn ở cục bộ
- File đã chuyển được lưu ở chế độ private: hiển thị ở mọi nơi site của bạn dùng chúng, nhưng không có trang riêng trên YourImageShare
Dùng key chỉ tải lên, không dùng API key đầy đủ. API key đầy đủ (tùy chọn) chỉ cần nếu bạn muốn file đã chuyển bị xóa khỏi YourImageShare khi bạn xóa chúng trong WordPress.
Tải trên WordPress.org Tải file ZIP
Trong WordPress: Plugins > Add New, tìm YourImageShare Media Offload, rồi Install và Activate.
Phím tắt cho iPhone & iPad
Tải lên từ bảng chia sẻ của bất kỳ ứng dụng nào - Ảnh, Tệp, Safari, ảnh chụp màn hình - và nhận link trong clipboard. Không cần cài ứng dụng và không cần tài khoản.
Để tự tạo trong ứng dụng Phím tắt (khoảng hai phút):
- Tạo phím tắt mới, đặt tên "Upload to YourImageShare". Trong phần chi tiết, bật Show in Share Sheet và chấp nhận ảnh và phương tiện.
- Thêm Get Contents of URL: URL
https://yourimageshare.com/api/widget, phương thứcPOST, nội dung request là Form với hai trường:uploads(File) = Shortcut Input, vàclient(Text) =ios-shortcut. - Thêm Get Dictionary Value cho
data, rồi thêm một cái nữa chosrc- đó là link trực tiếp. - Thêm Copy to Clipboard và Show Notification ("Link copied").
Không có key, file tải lên ở chế độ ẩn danh và unlisted, với giới hạn hằng ngày. Thêm header X-API-Key với key chỉ tải lên của bạn (Tài khoản của tôi > API) để tải vào tài khoản của bạn. Phản hồi cũng có delete_url nếu bạn muốn giữ lại link xóa.
PicGo & PicList
PicGo và PicList tải lên ảnh được dán hoặc kéo thả cho các trình soạn thảo Markdown - Typora, VS Code, Obsidian, Joplin - và đặt link vào văn bản của bạn. Plugin của chúng tôi biến YourImageShare thành một nơi lưu trữ ảnh của chúng.
- Trong PicGo hoặc PicList: Plugins, tìm
yourimageshare, cài đặt, rồi chọn YourImageShare làm nơi tải lên. Dòng lệnh:picgo install yourimageshare - Hoặc tải plugin về và nhập như một plugin cục bộ (giải nén trước)
- Cài đặt: key chỉ tải lên (tùy chọn - để trống = tải lên ẩn danh, unlisted), chế độ hiển thị, và trả về link ảnh trực tiếp (cho Markdown) hay link trang
- Link nó trả về vẫn dùng được khi ảnh lớn sau đó được tối ưu sang WebP
Telegram Bot
Lấy link cho ảnh, video hoặc GIF mà không cần rời Telegram. Gửi nó cho @YourImageShare_bot và link được trả về ngay - không cần tài khoản và không cần API key. Bot tải lên qua cùng endpoint /api được mô tả ở trên.
- Gửi ảnh, video, GIF hoặc một file ảnh hay video; một album tối đa 10 file được trả về trong một tin nhắn
- Trong nhóm, trả lời
/linkvào một ảnh hoặc video và bot sẽ đăng link của nó cho mọi người /autodeletekhiến các file bạn tải lên tiếp theo tự xóa sau 1 giờ, 1 ngày, 1 tuần hoặc 30 ngày- Mỗi kết quả đều có nút Xóa, chỉ hoạt động với người đã tải file lên
- Link ở chế độ unlisted: chỉ những người có link mới xem được file
- Bot trả lời bằng ngôn ngữ Telegram của bạn khi site có hỗ trợ ngôn ngữ đó
Giữ nguyên chất lượng: Telegram nén ảnh gửi theo cách thông thường. Hãy gửi ảnh dưới dạng file (📎 → File) và ảnh gốc sẽ được tải lên. Telegram cho phép bot lấy file tối đa 20 MB, nên file lớn hơn hãy tải lên trên website.
Discord Bot
Biến mọi ảnh, GIF hoặc video trong Discord thành link vĩnh viễn. Link đính kèm của chính Discord sẽ ngừng hoạt động sau một thời gian; link YourImageShare thì không. Không cần tài khoản và không cần API key. Bot tải lên qua cùng endpoint /api được mô tả ở trên.
/uploadkèm file: tùy chọn tự xóa sau 1, 7 hoặc 30 ngày, và only_me để chỉ hiển thị link cho riêng bạn- Nhấp chuột phải vào một tin nhắn → Apps → Rehost on YourImageShare để lưu lại tối đa 6 ảnh hoặc video từ tin nhắn đó trong một phản hồi
- Thêm nó vào máy chủ, hoặc vào tài khoản của riêng bạn để dùng trong mọi cuộc trò chuyện hoặc tin nhắn riêng
- Mỗi kết quả đều có nút Xóa, chỉ hoạt động với người đã tải file lên
- Link ở chế độ unlisted: chỉ những người có link mới xem được file
GitHub Action cho Playwright & Cypress
Khi các bài kiểm thử end-to-end lỗi trong một pull request, bạn thấy ngay lý do mà không phải tải các file zip artifact. Action tải lên ảnh chụp màn hình lỗi và ảnh so sánh khác biệt rồi hiển thị chúng dưới dạng hình ảnh trong một bình luận pull request, được cập nhật sau mỗi lần chạy.
- Hoạt động với Playwright và Cypress, và tự nhận biết dự án đang dùng cái nào
- Các phép so sánh hình ảnh thất bại hiển thị dưới dạng Expected, Actual và Diff, kèm link tới thanh trượt trước/sau (
toHaveScreenshotcủa Playwright; với Cypress là các plugin cypress-image-diff-js và cypress-visual-regression) - Bình luận chuyển thành "all tests passed" khi các bài kiểm thử được sửa; cùng báo cáo đó cũng được gửi vào phần tóm tắt job
- Ảnh chụp màn hình ở chế độ private (chỉ file ảnh, không có trang) và mặc định bị xóa sau 30 ngày
- Cần key chỉ tải lên của bạn làm secret của kho là
YOURIMAGESHARE_API_KEY; nó không bao giờ làm hỏng bản build của bạn
- uses: yourimageshare/playwright-pr-screenshots@v1
if: always()
with:
api-key: ${{ secrets.YOURIMAGESHARE_API_KEY }} Dự án cộng đồng
Một số tích hợp YourImageShare hay nhất do chính những người dùng nó xây dựng. Các dự án này do thành viên cộng đồng tạo ra bằng API công khai được mô tả ở trên. Chúng do tác giả duy trì, nên nếu có câu hỏi hoặc báo lỗi, hãy liên hệ tác giả qua trang của dự án.
- YourImageShare Uploads for FlatBB - một plugin cho diễn đàn FlatBB của madromas (MadWay Inc.).
- Thêm nút tải lên vào trình soạn bài của FlatBB: chọn một hoặc nhiều ảnh hoặc video và Markdown được chèn tại vị trí con trỏ
- Chèn mỗi file tải lên dưới dạng ảnh thu nhỏ có thể nhấp, ảnh kích thước đầy đủ hoặc một link thông thường (video dưới dạng link)
- File tải lên đi qua máy chủ diễn đàn của bạn bằng key API chỉ tải lên, nên key không bao giờ đến trình duyệt của khách truy cập
- File được lưu trữ trên YourImageShare, không nằm trên ổ đĩa của diễn đàn, với chế độ hiển thị mặc định do bạn chọn (private, unlisted hoặc public)
- Hoạt động song song với trình tải lên riêng của FlatBB, với giới hạn dung lượng file riêng
Xin cảm ơn
Xin chân thành cảm ơn tất cả những ai xây dựng cùng YourImageShare và chia sẻ sản phẩm của mình với mọi người. Các dự án cộng đồng đưa YourImageShare đến những nơi mà chúng tôi không thể tự đến được. Bạn đã xây dựng điều gì đó với API? Hãy cho chúng tôi biết và chúng tôi sẽ rất vui được thêm nó vào đây.
Từ blog
Hướng dẫn và bài viết chi tiết dành cho lập trình viên
- Tải ảnh chụp màn hình lên tức thì bằng ShareX, Flameshot hoặc Greenshot
- Thêm nút tải ảnh lên thật sự cho diễn đàn phpBB, SMF hoặc MyBB của bạn
- Cách dùng MCP: kết nối Claude, ChatGPT và AI agent với YourImageShare
- YourImageShare Capture: tiện ích chụp màn hình cho Chrome và Firefox
- Chuyển Thư viện phương tiện WordPress sang lưu trữ ảnh miễn phí
- YourImageShare Telegram Bot: lấy link cho mọi ảnh hoặc video
Sẵn sàng dùng thử?
Lấy API key của bạn →