▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Español
Català
Galego
Português
Français
Italiano
Latina
Română
Rumantsch
Gaeilge
Suomi
Magyar
Euskara
Esperanto
日本語
简体中文
繁體中文(台灣)
繁體中文(香港)
粵語
한국어
ไทย
Bahasa Indonesia
Bahasa Melayu
हिन्दी
Ελληνικά
Polski
Čeština
Українська
Русский
Türkçe
العربية
עברית
Kiswahili
ʻŌlelo Hawaiʻi
tlhIngan Hol
Mọi thứ mà các biểu mẫu trên trang này làm, dành cho script. Mọi phản hồi đều là JSON, kể cả lỗi, nên bạn không bao giờ phải đoán nội dung là kết quả hay lời giải thích.
POST đến endpoint bằng tham số biểu mẫu hoặc nội dung JSON. Cả hai tương đương; chọn cách nào công cụ của bạn làm dễ hơn. Tham số action chọn việc cần làm. Dùng --data-urlencode cho bất cứ thứ gì do người gõ — văn bản dán, URL, bản dịch — vì -d gửi giá trị thô và nó sẽ bị cắt ở & đầu tiên. -d thường dùng được cho giá trị cố định như chính action. wget hoàn toàn không có --data-urlencode, nên với wget hãy tự mã hóa phần trăm các giá trị đó hoặc gửi nội dung JSON, vốn không cần mã hóa.
curl -X POST https://0wx.es/api.cgi \
-d action=paste --data-urlencode 'content=hello & world'
curl -X POST https://0wx.es/api.cgi \
-H 'Content-Type: application/json' \
-d '{"action":"paste","content":"hello & world"}'
wget -qO- --header='Content-Type: application/json' \
--post-data '{"action":"paste","content":"hello & world"}' https://0wx.es/api.cgi
Trong nội dung biểu mẫu, & phân tách các tham số, và curl -d không mã hóa những gì bạn đưa. Do đó URL có chuỗi truy vấn bị cắt ở & đầu tiên, phần còn lại đến dưới dạng tham số riêng. Dùng --data-urlencode, hoặc gửi JSON. Tham số lạ bị từ chối thay vì bỏ qua, nên việc này thất bại rõ ràng thay vì lưu nửa liên kết.
# wrong -- the value is cut at the &
curl -X POST https://0wx.es/api.cgi \
-d action=tinyurl -d 'url=https://example.com/?a=1&b=2'
# right
curl -X POST https://0wx.es/api.cgi \
-d action=tinyurl --data-urlencode 'url=https://example.com/?a=1&b=2'
# also right -- JSON needs no escaping
curl -X POST https://0wx.es/api.cgi -H 'Content-Type: application/json' \
-d '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}'
# wget has no --data-urlencode, so percent-encode it yourself...
wget -qO- --post-data 'action=tinyurl&url=https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2' https://0wx.es/api.cgi
# ...or send JSON, which needs no encoding at all
wget -qO- --header='Content-Type: application/json' \
--post-data '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}' https://0wx.es/api.cgi
Tùy chọn. Không có khóa, yêu cầu là ẩn danh và hoạt động y hệt một khách ẩn danh — kết quả dù sao cũng công khai, khác biệt duy nhất là nó có nằm trong danh sách tệp của bạn hay không. Tạo khóa trên trang tài khoản và gửi nó dưới dạng bearer token; truyền nó bằng tham số apikey cũng được, nhưng khóa trong chuỗi truy vấn sẽ lọt vào nhật ký máy chủ và lịch sử trình duyệt.
curl -X POST https://0wx.es/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-d action=whoami
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=whoami' https://0wx.es/api.cgi
| action | Tham số | Mô tả |
|---|---|---|
whoami | — | Xác nhận khóa hoạt động và báo các giới hạn hiện tại. Không tốn gì cả; hãy gọi nó trước. |
ip | — | Báo địa chỉ của bạn, PTR của nó, quốc gia, tỉnh và thành phố mà nó định vị, tọa độ, và user agent bạn đã gửi. Không cần khóa và trả lời như nhau dù có khóa hay không. Cố ý hẹp hơn trang web: không WHOIS, không vùng DNS và không tra danh sách chặn, nên gọi nó chỉ tốn máy chủ một lần đọc cơ sở dữ liệu cục bộ. |
upload | file (có thể lặp), resize, lifetime, gallery hoặc g * | Tải lên một hoặc nhiều tệp. Phải là multipart/form-data. Đặt tên bộ sưu tập sẽ đưa chúng thẳng vào đó và trả về id của nó. |
tinyurl | url, lifetime | Rút gọn một URL. |
hugeurl | url, lifetime | Kéo dài một URL, một cách phi lý, có chủ ý. |
paste | content, lifetime | Lưu một khối văn bản và trả về liên kết đến nó. |
translate | content, to, from | Dịch văn bản. to và from là mã từ hành động langs — lưu ý chúng không phải lúc nào cũng là mã quốc gia: tiếng Đan Mạch là da, không phải dk. from có thể bỏ qua hoặc đặt là auto, yêu cầu backend tự nhận dạng ngôn ngữ; cung cấp nó cho kết quả tốt hơn với văn bản ngắn. |
langs | Liệt kê các ngôn ngữ mà translate chấp nhận, dưới dạng supported_langs: một đối tượng cho mỗi ngôn ngữ, mã đến tên, theo thứ tự trang cung cấp. Không cần khóa API. | |
dyndns | key, ip, format | Cập nhật tên DNS động. Hành động duy nhất không cần khóa API: nó được gọi bởi router, vốn chỉ có một trường cho URL và không có cách gửi header. key là khóa cập nhật riêng của từng tên hiển thị trong tài khoản của bạn, không phải khóa API. Bỏ qua ip thì địa chỉ bạn gọi từ đó sẽ được dùng. Phản hồi là từ chuẩn de facto dyndns2 — good, nochg, badauth, abuse hoặc dnserr — dạng văn bản thuần, vì đó là thứ router phân tích; thêm format=json để nhận JSON như thường. |
listfiles * | page, g | Liệt kê tệp của bạn với mọi thứ bảng Thông tin hiển thị, kèm ảnh thu nhỏ và liên kết trực tiếp. g giới hạn vào một bộ sưu tập, hoặc none cho tệp không thuộc bộ sưu tập nào. |
listpastes * | page | Liệt kê các bản dán của bạn, với bản xem trước 200 ký tự cho mỗi bản thay vì toàn bộ nội dung. |
listurls * | page | Liệt kê các URL ngắn và khổng lồ của bạn, cùng địa chỉ mà mỗi cái trỏ đến. |
otl * | share | Tạo liên kết dùng một lần đến một tệp của bạn. Mỗi lần gọi tạo một liên kết mới, nên đưa cùng một tệp cho hai người sẽ tạo hai liên kết. |
listotl * | page | Liệt kê các liên kết dùng một lần đang hoạt động, tệp mà mỗi cái trỏ đến, và tệp đó đã hết hạn chưa. |
listgalleries * | — | Liệt kê các bộ sưu tập của bạn với id, tên, số tệp và trạng thái công bố. |
gallery * | g, publish | Báo trạng thái công bố của bộ sưu tập, và thay đổi nó khi có publish. |
move * | share (có thể lặp), gallery hoặc g | Chuyển tệp vào bộ sưu tập, theo tên (tạo nếu mới) hoặc theo id. Bỏ qua cả hai sẽ chuyển chúng về danh sách chính. |
delete * | share (có thể lặp), g, otl, withfiles | Xóa tệp, bản dán, URL ngắn, bộ sưu tập, liên kết dùng một lần, hoặc bất kỳ tổ hợp nào. Một share được so khớp với tệp của bạn trước rồi đến bản dán và liên kết, nên người gọi không phải phân loại chúng. Liên kết dùng một lần đi riêng trong otl: gỡ liên kết không được nhầm với xóa tệp mà nó trỏ đến. |
* Các hành động này cần khóa API. Chúng đọc hoặc thay đổi dữ liệu của một tài khoản, nên không có dạng ẩn danh.
share và g chấp nhận trường lặp lại, mảng JSON, hoặc danh sách phân cách bằng dấu phẩy — cách nào công cụ của bạn làm dễ nhất. Trùng lặp bị bỏ qua.
curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=move -d share=Ab3xK9pQ -d share=Zz7yT2mN --data-urlencode 'gallery=Holiday 2026'
curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'
curl -X POST https://0wx.es/api.cgi -H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_KEY' \
-d '{"action":"move","share":["Ab3xK9pQ","Zz7yT2mN"],"g":7}'
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=delete&share=Ab3xK9pQ,Zz7yT2mN' https://0wx.es/api.cgi
Ở bất kỳ đâu bộ sưu tập được nêu tên — trong upload hay move — nó được cho theo cùng hai cách: g cho id đã có, hoặc gallery cho tên, sẽ được tạo nếu mới. Nếu gửi cả hai, g thắng. Phản hồi mang id bộ sưu tập. Lưu ý xóa bộ sưu tập chỉ gỡ bộ sưu tập, để lại các tệp trong danh sách chính — khác với biểu mẫu web, vốn xóa chúng sau khi hỏi. Truyền withfiles=true để xóa cả chúng: một script dọn dẹp nhóm của mình không nên vô tình làm mất tệp đã tải lên.
curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-F action=upload -F file=@photo.jpg --form-string 'gallery=Holiday 2026'
curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=gallery -d g=7 -d publish=true
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=gallery&g=7&publish=true' https://0wx.es/api.cgi
Tải lên không thể dùng nội dung JSON, vì tệp phải được gửi dạng multipart. Lặp lại phần file để gửi nhiều tệp cùng lúc. Mỗi tệp được báo cáo riêng: phản hồi mang danh sách files gồm các tệp được chấp nhận và danh sách rejected gồm các tệp bị từ chối, nên thành công một phần vẫn là thành công.
curl -X POST https://0wx.es/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-F action=upload \
-F file=@photo.jpg \
-F file=@notes.txt \
-F lifetime=7d
Không có dạng wget cho cái này. wget không thể tạo nội dung multipart/form-data — nó không có tương đương với -F của curl — và tải lên phải là multipart. Dùng curl, hoặc tự ghép nội dung và boundary rồi gửi bằng --post-file.
Tùy chọn với mọi hành động có lưu trữ. Chấp nhận số giây thuần, hoặc số theo sau bởi m, h hay d — cùng dạng như các biểu mẫu web. Bỏ qua hoặc truyền 0 để giữ mục vô thời hạn.
Mọi phản hồi là một đối tượng JSON có trường ok. Khi thành công nó mang kết quả; khi thất bại nó mang mã error ổn định và message dễ đọc. Rẽ nhánh theo mã, ghi nhật ký thông điệp.
{"ok":true,"type":"paste","share":"Ab3xK9pQ",
"url":"https://0wx.es/p/Ab3xK9pQ","bytes":11}
{"ok":false,"error":"url_too_long",
"message":"URL exceeds the maximum length."}
Khi tệp có chúng, listfiles thêm file_tags vào mục của tệp: nghệ sĩ, tiêu đề và album, đọc từ ID3, chú thích Vorbis hoặc atom MP4 khi tệp được tải lên. Khóa vắng mặt thay vì null khi không có gì để báo, tức là hầu hết các tệp, nên hãy kiểm tra trước khi đọc. Các trường riêng lẻ cũng có thể thiếu — một tệp có thể có tiêu đề mà không có album. Không có gì khác từ metadata của tệp được lộ ra: một bản mua từ iTunes ghi tên người mua và Apple ID, và những thứ đó cố ý không bao giờ được đọc.
{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
{"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
"bytes":8123456,"url":"https://0wx.es/i/Ab3xK9pQ",
"file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
{"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
"bytes":204800,"url":"https://0wx.es/i/Zz7yT2mN"}
]}
| error | HTTP | Mô tả |
|---|---|---|
unknown_action | 400 | Không có hành động như vậy. |
bad_json | 400 | Nội dung không phải JSON hợp lệ, hoặc một trường chứa cấu trúc lồng nhau. |
unexpected_parameter | 400 | Một tham số mà hành động này không nhận đã được gửi đến — thường là & chưa mã hóa trong một giá trị. Thông điệp nêu tên các tham số. |
bad_key | 401 | Khóa không được nhận dạng. Khóa sai bị từ chối thay vì âm thầm coi như ẩn danh. |
bad_url | 400 | URL sai định dạng, hoặc dùng scheme khác http(s), ftp hay gopher. |
bad_lifetime | 400 | Thời hạn không phải là số hoặc số theo sau bởi m, h hoặc d. |
no_content | 400 | Không có gì được gửi để lưu. |
url_too_long | 413 | URL dài hơn giới hạn. |
paste_too_long | 413 | Văn bản lớn hơn giới hạn dán. Giới hạn được đo bằng byte UTF-8, nên văn bản không phải Latinh tính nhiều hơn số ký tự của nó. |
too_many_files | 413 | Nhiều tệp hơn mức một lần gọi chấp nhận. |
no_usable_files | 415 | Mọi tệp đều bị từ chối. Xem danh sách rejected để biết lý do. |
backend_unavailable | 502 | Backend dịch không phản hồi. |
internal | 500 | Có gì đó thất bại bất ngờ. Lỗi đã được ghi lại. |
Gọi whoami để đọc giá trị hiện tại thay vì viết cứng — chúng do người vận hành máy chủ đặt và có thể thay đổi. Kích thước tính bằng byte UTF-8.
0wx.sh gói tất cả những gì ở trên. Nó là POSIX shell thuần và không cần gì ngoài curl, và đủ ngắn để đọc trước khi chạy — điều nên làm với một script sẽ giữ khóa API của bạn. Đặt khóa vào OWX_KEY thay vì truyền --key, và nó sẽ không lọt vào lịch sử shell của bạn.
wget https://0wx.es/clients/0wx.sh chmod +x 0wx.sh export OWX_KEY=YOUR_KEY ./0wx.sh help ./0wx.sh paste --content 'hello & world'
0wx.py làm giống client shell, nhưng phân tích phản hồi và in ra ý nghĩa của các trường thay vì đưa bạn JSON thô — thêm --json khi bạn muốn dạng thô. Chỉ dùng thư viện chuẩn: không requests, không phải cài gì. Nếu bạn tự viết client, các hàm send() và report() của nó là phần đáng đọc: chúng cho thấy cách tạo yêu cầu, cách lấy thông điệp từ yêu cầu thất bại, và phản hồi chứa gì.
wget https://0wx.es/clients/0wx.py chmod +x 0wx.py export OWX_KEY=YOUR_KEY ./0wx.py listfiles ./0wx.py listfiles --json | jq '.files[].url'
0wx.pl làm giống bản Python và in cùng kết quả. Chỉ dùng module lõi — HTTP::Tiny và JSON::PP đi kèm Perl từ 5.14, nên không phải cài gì. Đáng đọc cùng với client Python nếu bạn tự viết: hai ngôn ngữ thất bại khác nhau với yêu cầu hỏng, và cả hai script đều chỉ ra ở đâu.
wget https://0wx.es/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 là bản đối ứng của client Python cho Windows: cùng lệnh, cùng kết quả, và nó phân tích phản hồi thay vì đưa bạn JSON thô — thêm --json cho việc đó. Nó viết cho Windows PowerShell đã có sẵn trên máy, nên không phải cài gì, và chạy nguyên vẹn trên PowerShell 7. Bạn có thể cần Set-ExecutionPolicy -Scope Process Bypass trong cửa sổ chạy nó, đó là Windows hỏi bạn có thật sự muốn chạy script đã tải về không — một câu hỏi hợp lý, và tệp đủ ngắn để đọc trước.
$env:OWX_KEY = 'YOUR_KEY' .\0wx.ps1 listfiles .\0wx.ps1 paste --content 'hello & world' .\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
0wx.html là cùng bộ tab như client desktop, dưới dạng ba tệp — một trang, một stylesheet và một script — không cài đặt, không framework, và không tải gì từ đâu ngoài trang này. Ba thay vì một vì Content-Security-Policy của trang cấm script và style inline, điều đáng giữ. Có thể thả tệp vào nó. Nó phải được mở từ đây thay vì lưu và mở từ đĩa của bạn: API không gửi header cross-origin, nên bản sao cục bộ sẽ bị trình duyệt từ chối mọi yêu cầu trước khi gửi đi. Khóa được giữ trong bộ nhớ trừ khi bạn đánh dấu ô ghi nhớ.
https://0wx.es/clients/0wx.html
0wx-gui.ps1 là cùng bộ tab như client desktop, vẽ bằng WinForms — nghĩa là không phải cài gì cả, vì nó đã là một phần của Windows. Đặt nó cùng thư mục với 0wx.ps1: cửa sổ mượn phần xử lý yêu cầu của tệp đó thay vì mang bản sao thứ hai, nên cần cả hai. Windows sẽ hỏi trước khi chạy script không phải do nó viết, một câu hỏi hợp lý; cả hai tệp đều đủ ngắn để đọc trước khi trả lời.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl là một cửa sổ GTK nhỏ với các tab để tải lên, dán, rút gọn và duyệt tệp của bạn — dạng danh sách hoặc bộ sưu tập ảnh thu nhỏ, lọc theo bộ sưu tập. Nó là client duy nhất ở đây cần cài thêm — binding GTK3 của Perl — điều đáng biết khi so với cửa sổ Windows ở trên, vốn không cần gì cả. Mọi thứ khác nó dùng đều đi kèm Perl. Khóa chỉ được giữ trong bộ nhớ: đóng cửa sổ là quên, và đặt OWX_KEY sẽ điền sẵn khi khởi động. Dù nó hiển thị gì, phản hồi thô của máy chủ chỉ cách một cú nhấp dưới “Server reply”.
apt install libgtk3-perl # or: dnf install perl-Gtk3 wget https://0wx.es/clients/0wx-gtk.pl chmod +x 0wx-gtk.pl OWX_KEY=YOUR_KEY ./0wx-gtk.pl
0wx-android.apk làm những gì các client khác làm, từ điện thoại: tải lên, dán, rút gọn, dịch, và duyệt tệp của bạn dạng danh sách hoặc bộ sưu tập. Chia sẻ tệp đến nó từ ứng dụng khác sẽ tải tệp lên, chia sẻ văn bản sẽ lưu thành bản dán. Nó không có trên cửa hàng ứng dụng nào, nên thiết bị sẽ hỏi bạn cho phép cài đặt — một câu hỏi đáng xem xét nghiêm túc nói chung, và là lý do toàn bộ mã nguồn cũng có ở đây: mở trong Android Studio và tự build thay vì tin vào tệp. Build cần JDK 21; BUILDING.md bên trong giải thích tại sao.
https://0wx.es/clients/0wx-android.apk # install it https://0wx.es/clients/0wx-android.zip # build it yourself
Cố ý không có hành động lấy từ xa. Nó sẽ khiến máy chủ tải một URL do người gọi chọn, là một bề mặt tấn công giả mạo yêu cầu, và script có thể khai thác điều đó mạnh hơn nhiều so với biểu mẫu. Hãy tự tải tệp lên thay vào đó.