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ườngKiểuBắt buộcMô tả
uploadsfilemột trong ba trường nàyFile 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.
urlstringMộ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_idstringFile đã được gửi theo từng phần tới POST /api/chunk trước đó, tối đa 200MB.
filenamestringkhôngDùng với upload_id: tên file gốc.
expires_inintegerkhôngTự độ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_duplicatebooleankhôngLư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_originalbooleankhôngGiữ 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.
visibilitystringkhôngunlisted (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.
titlestringkhôngTối đa 90 ký tự, hiển thị trên trang của file tải lên.
descriptionstringkhôngTố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ườngMô tả
idMã định danh duy nhất của file.
typeimage hoặc video.
pathURL 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.
srcURL 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.
directTrang 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, heightKí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õ.
sizeDung lượng file tính bằng byte như đã lưu.
lockedtrue nếu file tải lên được bảo vệ bằng mật khẩu.
visibilityprivate, unlisted hoặc public (xem trường request ở trên).
title, descriptionNhư đã đặt, hoặc null. Văn bản được kiểm duyệt giống như trên website.
delete_urlChỉ 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_atMố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.
duplicatetrue 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:

  1. Chọn một upload id: 32 ký tự hex ngẫu nhiên.
  2. Với mỗi phần, POST /api/chunk (multipart/form-data) kèm upload_id, index (bắt đầu từ 0), total (số phần) và dữ liệu byte trong chunk. Phản hồi là {"type": "success", "chunk_size": 5242880}.
  3. POST /api với upload_id và filename thay cho uploads, 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ộcMô tả
pagequerykhôngSố 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 gianGiới hạn mặc địnhPhạm vi
Mỗi phút20 requestmỗi API key
Mỗi ngày500 requestmỗi API key đầy đủ
Mỗi ngày2,000 requestmỗi key chỉ tải lên (plugin chuyển cả thư viện phương tiện)
Mỗi ngày2,000 requestmỗi địa chỉ IP
Mỗi phút300 phầnmỗ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
401Thiếu API key hoặc key không hợp lệ.
403Tài khoản hoặc IP hiện tại của bạn đã bị cấm tải lên.
404Khô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).
413Request 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).
422Dữ 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).
429Vượt giới hạn tốc độ - xem Giới hạn tốc độ ở trên.
500Má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.

Tải YourImageShare.sxcu

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.

Tải yis-flameshot-upload.sh

# 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ì.

Tải yis-greenshot-upload.ps1

# 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.

Tải cho phpBB

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.

Tải cho SMF

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.

Tải cho MyBB

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:

Hướng dẫn FluxBB Hướng dẫn PunBB Hướng dẫn ZetaBoards

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.

Nút tải lên cho mọi website

Thêm nút "Tải lên" cho khách truy cập trên bất kỳ site nào - form bình luận, trang hỗ trợ, diễn đàn mà chúng tôi chưa có plugin, hay một site tĩnh. Dán hai dòng; không cần tài khoản và không cần code phía máy chủ.

<a class="yis-upload" href="https://yourimageshare.com/" data-target="#message" data-format="bbcode">Image and video hosting by YourImageShare</a>
<script src="https://yourimageshare.com/w.js" async></script>

Cả hai thuộc tính đều là tùy chọn: nếu không có, nút sẽ hiển thị các link kèm nút Sao chép. Hộp tải lên được dựng quanh link này.

  • Việc tải lên diễn ra ngay trên trang của bạn: bấm nút, kéo thả file vào, hoặc dán ảnh chụp màn hình vào - nhiều file cùng lúc, có thanh tiến trình và ảnh thu nhỏ
  • Ảnh dán hoặc kéo thả thẳng vào trường được nêu trong data-target (mọi textarea, input hoặc ô có thể chỉnh sửa) cũng được tải lên, và các link được thêm vào trường đó; nếu không có target, link hiện bên dưới nút kèm nút Sao chép
  • data-format: url (link file trực tiếp, là mặc định), page, bbcode, html hoặc markdown; data-label đổi chữ trên nút
  • data-key (tùy chọn): key chỉ tải lên của bạn (Tài khoản của tôi > API). Khi đó file được tải vào tài khoản của bạn và theo giới hạn của bạn. Không có key, file tải lên ở chế độ ẩn danh và unlisted, với giới hạn theo từng khách truy cập và từng site mỗi ngày
  • Lập trình viên có thể lắng nghe sự kiện yis:upload trên hộp tải lên: event.detail.item chứa {id, type, page, url, thumb}
  • File lên đến 95 MB qua nút này (file lớn hơn hãy tải trên website). Việc kiểm duyệt và điều khoản của chúng tôi vẫn áp dụng như thường lệ; mỗi khách truy cập nhận link xóa riêng của mình

Nút được vẽ trong một hộp riêng biệt, nên CSS của site bạn không làm hỏng được nó. Link nhỏ "Image and video hosting by YourImageShare" luôn hiển thị bên trong hộp tải lên.

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):

  1. 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.
  2. Thêm Get Contents of URL: URL https://yourimageshare.com/api/widget, phương thức POST, nội dung request là Form với hai trường: uploads (File) = Shortcut Input, và client (Text) = ios-shortcut.
  3. Thêm Get Dictionary Value cho data, rồi thêm một cái nữa cho src - đó là link trực tiếp.
  4. 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

Tải plugin PicGo

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 /link vào một ảnh hoặc video và bot sẽ đăng link của nó cho mọi người
  • /autodelete khiế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.

Mở @YourImageShare_bot trong Telegram

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.

  • /upload kè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

Thêm YourImageShare vào Discord

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 (toHaveScreenshot củ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 }}

Hướng dẫn cài đặt trên GitHub

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

    Mã nguồn trên GitHub · Trang trên FlatBB Marketplace

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

Sẵn sàng dùng thử?

Lấy API key của bạn →