▼
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
日本語
简体中文
繁體中文(台灣)
繁體中文(香港)
粵語
한국어
Tiếng Việt
ไทย
Bahasa Melayu
हिन्दी
Ελληνικά
Polski
Čeština
Українська
Русский
Türkçe
العربية
עברית
Kiswahili
ʻŌlelo Hawaiʻi
tlhIngan Hol
Quenya
Semua yang dilakukan formulir di situs ini, untuk skrip. Setiap balasan berupa JSON, termasuk kesalahan, jadi Anda tidak pernah harus menebak apakah isinya hasil atau penjelasan.
POST ke endpoint dengan parameter formulir atau isi JSON. Keduanya setara; pilih yang paling mudah untuk perkakas Anda. Parameter action memilih apa yang dilakukan. Gunakan --data-urlencode untuk apa pun yang diketik orang — teks paste, URL, terjemahan — karena -d mengirim nilai mentah dan akan terpotong di & pertama. -d biasa cukup untuk nilai tetap seperti action itu sendiri. wget sama sekali tidak punya --data-urlencode, jadi dengan wget Anda harus mengodekan nilai seperti itu dengan persen sendiri atau mengirim isi JSON, yang tidak perlu pengodean.
curl -X POST https://0wx.cat/api.cgi \
-d action=paste --data-urlencode 'content=hello & world'
curl -X POST https://0wx.cat/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.cat/api.cgi
Dalam isi formulir, & memisahkan parameter, dan curl -d tidak mengodekan apa yang Anda berikan. URL dengan query string karenanya terpotong di & pertamanya, dan sisanya tiba sebagai parameter terpisah. Gunakan --data-urlencode, atau kirim JSON. Parameter nyasar ditolak, bukan diabaikan, jadi ini gagal dengan jelas alih-alih menyimpan setengah link.
# wrong -- the value is cut at the &
curl -X POST https://0wx.cat/api.cgi \
-d action=tinyurl -d 'url=https://example.com/?a=1&b=2'
# right
curl -X POST https://0wx.cat/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.cat/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.cat/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.cat/api.cgi
Opsional. Tanpa kunci, permintaan bersifat anonim dan berperilaku persis seperti pengunjung anonim — hasilnya publik bagaimanapun juga, satu-satunya perbedaan adalah apakah ia masuk ke daftar file Anda. Buat kunci di halaman akun Anda dan kirimkan sebagai token bearer; memberikannya sebagai parameter apikey juga bisa, tetapi kunci di query string berakhir di log server dan riwayat browser.
curl -X POST https://0wx.cat/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-d action=whoami
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=whoami' https://0wx.cat/api.cgi
| action | Parameter | Deskripsi |
|---|---|---|
whoami | — | Mengonfirmasi bahwa kunci berfungsi dan melaporkan batas yang berlaku. Tidak ada biayanya; panggil ini lebih dulu. |
ip | — | Melaporkan alamat Anda, PTR-nya, negara, wilayah, dan kota tempat ia dilokasikan secara geografis, koordinatnya, dan user agent yang Anda kirim. Tidak perlu kunci dan menjawab sama dengan atau tanpa kunci. Sengaja lebih sempit daripada halaman web: tanpa WHOIS, tanpa zona DNS, dan tanpa pencarian daftar blokir, jadi memanggilnya hanya membebani server satu pembacaan basis data lokal. |
upload | file (bisa diulang), resize, lifetime, gallery atau g * | Mengunggah satu file atau lebih. Harus multipart/form-data. Menyebut nama galeri langsung memasukkannya ke sana dan mengembalikan id-nya. |
tinyurl | url, lifetime | Memendekkan URL. |
hugeurl | url, lifetime | Memanjangkan URL, secara absurd, dengan sengaja. |
paste | content, lifetime | Menyimpan sebuah blok teks dan mengembalikan link ke sana. |
translate | content, to, from | Menerjemahkan teks. to dan from adalah kode dari aksi langs — perhatikan bahwa ini tidak selalu kode negara: bahasa Denmark adalah da, bukan dk. from boleh dihilangkan atau diisi auto, yang meminta backend mendeteksi bahasanya; mengisinya memberi hasil lebih baik untuk teks pendek. |
langs | Mendaftar bahasa yang diterima translate, sebagai supported_langs: satu objek per bahasa, kode ke nama, dalam urutan yang ditawarkan situs. Tidak butuh kunci API. | |
dyndns | key, ip, format | Memperbarui nama DNS dinamis. Satu-satunya aksi yang tidak butuh kunci API: ia dipanggil oleh perute, yang punya satu field untuk URL dan tidak bisa mengirim header. key adalah kunci pembaruan per nama yang ditampilkan di akun Anda, bukan kunci API Anda. Hilangkan ip maka alamat tempat Anda memanggil yang dipakai. Balasannya adalah kata dyndns2 de facto — good, nochg, badauth, abuse, atau dnserr — sebagai teks polos, karena itulah yang diurai perute; tambahkan format=json untuk JSON seperti biasa. |
listfiles * | page, g | Mendaftar file Anda dengan semua yang ditampilkan panel Info, ditambah thumbnail dan link langsung. g membatasinya ke satu galeri, atau none untuk file yang tidak ada di galeri mana pun. |
listpastes * | page | Mendaftar teks Anda, dengan pratinjau 200 karakter dari masing-masing alih-alih seluruh isinya. |
listurls * | page | Mendaftar URL pendek dan raksasa Anda, dengan alamat yang ditunjuk masing-masing. |
otl * | share | Membuat link sekali pakai ke salah satu file Anda. Setiap panggilan mencetak link baru, jadi memberikan file yang sama kepada dua orang menghasilkan dua link. |
listotl * | page | Mendaftar link sekali pakai Anda yang aktif, file yang ditunjuk masing-masing, dan apakah file itu sudah kedaluwarsa sejak itu. |
listgalleries * | — | Mendaftar galeri Anda dengan id, nama, jumlah file, dan status publikasinya. |
gallery * | g, publish | Melaporkan status publikasi galeri, dan mengubahnya bila publish diberikan. |
move * | share (bisa diulang), gallery atau g | Memindahkan file ke galeri, berdasarkan nama (dibuat jika baru) atau id. Jika keduanya dihilangkan, file dipindahkan kembali ke daftar utama. |
delete * | share (bisa diulang), g, otl, withfiles | Menghapus file, teks, URL pendek, galeri, link sekali pakai, atau campuran apa pun. Sebuah share dicocokkan dulu dengan file Anda, lalu dengan teks dan link Anda, jadi pemanggil tidak perlu memilahnya menurut jenis. Link sekali pakai masuk ke otl, terpisah: menghapus link tidak boleh tertukar dengan menghapus file yang ditunjuknya. |
* Aksi-aksi ini memerlukan kunci API. Mereka membaca atau mengubah data milik satu akun, jadi tidak ada bentuk anonimnya.
share dan g menerima field berulang, array JSON, atau daftar yang dipisah koma — mana pun yang paling mudah untuk perkakas Anda. Duplikat diabaikan.
curl -X POST https://0wx.cat/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.cat/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'
curl -X POST https://0wx.cat/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.cat/api.cgi
Di mana pun galeri disebut — pada upload atau pada move — ia diberikan dengan dua cara yang sama: g untuk id yang sudah ada, atau gallery untuk nama, yang dibuat jika baru. Jika keduanya dikirim, g menang. Balasan membawa id galeri. Perhatikan bahwa menghapus galeri hanya menghapus galerinya, dan membiarkan file-nya di daftar utama — berbeda dengan formulir web, yang menghapusnya setelah bertanya. Berikan withfiles=true untuk menghapus file-nya juga: skrip yang merapikan pengelompokannya tidak semestinya kehilangan unggahan secara tak sengaja.
curl -X POST https://0wx.cat/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-F action=upload -F file=@photo.jpg --form-string 'gallery=Holiday 2026'
curl -X POST https://0wx.cat/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.cat/api.cgi
Unggahan tidak bisa memakai isi JSON, karena file harus dikirim sebagai multipart. Ulangi bagian file untuk mengirim beberapa sekaligus. Setiap file dilaporkan terpisah: balasan membawa daftar files yang diterima dan daftar rejected yang ditolak, jadi keberhasilan sebagian tetap keberhasilan.
curl -X POST https://0wx.cat/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-F action=upload \
-F file=@photo.jpg \
-F file=@notes.txt \
-F lifetime=7d
Tidak ada bentuk wget untuk yang ini. wget tidak bisa membangun isi multipart/form-data — ia tidak punya padanan -F milik curl — dan unggahan harus multipart. Gunakan curl, atau rakit sendiri isi dan boundary-nya lalu kirim dengan --post-file.
Opsional pada setiap aksi yang menyimpan sesuatu. Menerima detik polos, atau angka yang diikuti m, h, atau d — bentuk yang sama dengan formulir web. Hilangkan atau berikan 0 untuk menyimpan item tanpa batas waktu.
Setiap balasan adalah objek JSON dengan field ok. Saat berhasil ia membawa hasil; saat gagal ia membawa kode error yang stabil dan message yang terbaca manusia. Bercabanglah berdasarkan kode, catat pesannya.
{"ok":true,"type":"paste","share":"Ab3xK9pQ",
"url":"https://0wx.cat/p/Ab3xK9pQ","bytes":11}
{"ok":false,"error":"url_too_long",
"message":"URL exceeds the maximum length."}
Jika file membawanya, listfiles menambahkan file_tags ke entrinya: artis, judul, dan album, dibaca dari ID3, komentar Vorbis, atau atom MP4 saat file diunggah. Kuncinya tidak ada, bukan null, jika tidak ada yang dilaporkan, yang berlaku pada kebanyakan file, jadi uji keberadaannya sebelum membacanya. Field tunggal juga bisa hilang — sebuah file bisa punya judul tanpa album. Tidak ada lagi dari metadata file yang diungkap: pembelian iTunes merekam nama dan Apple ID pembeli, dan itu sengaja tidak pernah dibaca.
{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
{"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
"bytes":8123456,"url":"https://0wx.cat/i/Ab3xK9pQ",
"file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
{"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
"bytes":204800,"url":"https://0wx.cat/i/Zz7yT2mN"}
]}
| error | HTTP | Deskripsi |
|---|---|---|
unknown_action | 400 | Tidak ada aksi seperti itu. |
bad_json | 400 | Isi bukan JSON yang valid, atau sebuah field berisi struktur bersarang. |
unexpected_parameter | 400 | Tiba sebuah parameter yang tidak diterima aksi ini — biasanya & yang tidak dikodekan dalam sebuah nilai. Pesannya menyebutkan parameter tersebut. |
bad_key | 401 | Kunci tidak dikenali. Kunci yang salah ditolak, bukan diam-diam diperlakukan sebagai anonim. |
bad_url | 400 | URL cacat, atau memakai skema selain http(s), ftp, atau gopher. |
bad_lifetime | 400 | Masa hidup bukan angka atau angka yang diikuti m, h, atau d. |
no_content | 400 | Tidak ada yang dikirim untuk disimpan. |
url_too_long | 413 | URL lebih panjang dari batas. |
paste_too_long | 413 | Teks lebih besar dari batas paste. Batas diukur dalam byte UTF-8, jadi teks non-Latin dihitung lebih banyak daripada jumlah karakternya. |
too_many_files | 413 | Lebih banyak file daripada yang diterima satu panggilan. |
no_usable_files | 415 | Semua file ditolak. Lihat daftar rejected untuk alasannya. |
backend_unavailable | 502 | Backend terjemahan tidak menjawab. |
internal | 500 | Ada yang gagal secara tak terduga. Sudah dicatat di log. |
Panggil whoami untuk membaca nilai yang berlaku alih-alih menuliskannya secara tetap — nilai itu diatur oleh operator server dan bisa berubah. Ukuran dalam byte UTF-8.
0wx.sh membungkus semua yang di atas. Ini shell POSIX murni dan tidak butuh apa pun selain curl, dan cukup pendek untuk dibaca sebelum Anda menjalankannya — yang memang seharusnya dilakukan pada skrip yang akan memegang kunci API Anda. Taruh kunci di OWX_KEY alih-alih memberikan --key, dan kunci tetap di luar riwayat shell Anda.
wget https://0wx.cat/clients/0wx.sh chmod +x 0wx.sh export OWX_KEY=YOUR_KEY ./0wx.sh help ./0wx.sh paste --content 'hello & world'
0wx.py melakukan hal yang sama dengan klien shell, tetapi mengurai balasan dan mencetak arti field-nya alih-alih menyodorkan JSON mentah — tambahkan --json jika Anda ingin bentuk mentahnya. Hanya pustaka standar: tanpa requests, tidak ada yang perlu dipasang. Jika Anda menulis klien sendiri, fungsi send() dan report()-nya adalah bagian yang layak dibaca: keduanya menunjukkan cara membangun permintaan, cara mengambil pesan dari permintaan yang gagal, dan apa isi balasannya.
wget https://0wx.cat/clients/0wx.py chmod +x 0wx.py export OWX_KEY=YOUR_KEY ./0wx.py listfiles ./0wx.py listfiles --json | jq '.files[].url'
0wx.pl melakukan hal yang sama dengan yang Python dan mencetak keluaran yang sama. Hanya modul inti — HTTP::Tiny dan JSON::PP sudah disertakan bersama Perl sejak 5.14, jadi tidak ada yang perlu dipasang. Layak dibaca berdampingan dengan klien Python jika Anda menulis klien sendiri: kedua bahasa gagal dengan cara berbeda pada permintaan yang rusak, dan kedua skrip menunjukkan di mana.
wget https://0wx.cat/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 adalah padanan klien Python untuk Windows: perintah yang sama, keluaran yang sama, dan mengurai balasan alih-alih menyodorkan JSON mentah — tambahkan --json untuk itu. Ditulis untuk Windows PowerShell yang sudah ada di mesin, jadi tidak ada yang perlu dipasang, dan berjalan tanpa perubahan di PowerShell 7. Anda mungkin perlu Set-ExecutionPolicy -Scope Process Bypass di jendela tempat Anda menjalankannya, yaitu Windows bertanya apakah Anda memang ingin menjalankan skrip yang Anda unduh — pertanyaan yang wajar, dan filenya cukup pendek untuk dibaca lebih dulu.
$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 adalah kumpulan tab yang sama dengan klien desktop, sebagai tiga file — halaman, stylesheet, dan skrip — tanpa pemasangan, tanpa framework, dan tanpa memuat apa pun dari mana pun selain situs ini. Tiga bukan satu karena Content-Security-Policy situs melarang skrip dan style inline, yang layak dipertahankan. File bisa dijatuhkan ke sana. Harus dibuka dari sini, bukan disimpan lalu dibuka dari disk Anda: API tidak mengirim header cross-origin, jadi salinan lokal akan membuat setiap permintaan ditolak browser Anda sebelum sempat keluar. Kunci dipegang di memori kecuali Anda mencentang kotak untuk mengingatnya.
https://0wx.cat/clients/0wx.html
0wx-gui.ps1 adalah kumpulan tab yang sama dengan klien desktop, digambar dengan WinForms — yang berarti tidak ada apa pun yang perlu dipasang, karena itu sudah bagian dari Windows. Taruh di folder yang sama dengan 0wx.ps1: jendela meminjam penanganan permintaan dari file itu alih-alih membawa salinan kedua, jadi keduanya diperlukan. Windows akan bertanya sebelum menjalankan skrip yang bukan buatannya, yang wajar; kedua file cukup pendek untuk dibaca sebelum Anda menjawab.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl adalah jendela GTK kecil dengan tab untuk mengunggah, menempel, memendekkan, dan menjelajahi file Anda — sebagai daftar atau galeri thumbnail, disaring per galeri. Ini satu-satunya klien di sini yang butuh sesuatu dipasang — binding GTK3 milik Perl — yang layak diketahui di samping jendela Windows di atas, karena yang itu tidak butuh apa pun. Semua lainnya yang dipakainya disertakan bersama Perl. Kunci hanya dipegang di memori: menutup jendela melupakannya, dan mengatur OWX_KEY mengisinya saat mulai. Apa pun yang ditampilkannya, balasan mentah server hanya satu klik jauhnya di bawah “Server reply”.
apt install libgtk3-perl # or: dnf install perl-Gtk3 wget https://0wx.cat/clients/0wx-gtk.pl chmod +x 0wx-gtk.pl OWX_KEY=YOUR_KEY ./0wx-gtk.pl
0wx-android.apk melakukan yang dilakukan klien lain, dari ponsel: mengunggah, menempel, memendekkan, menerjemahkan, dan menjelajahi file Anda sebagai daftar atau galeri. Membagikan file kepadanya dari aplikasi lain mana pun akan mengunggahnya, dan membagikan teks menyimpannya sebagai teks. Ia tidak ada di toko aplikasi mana pun, jadi perangkat Anda akan meminta izin memasangnya — pertanyaan yang secara umum layak dianggap serius, dan alasan seluruh sumbernya juga ada di sini: buka di Android Studio dan bangun sendiri alih-alih memercayai filenya. Membangunnya butuh JDK 21; BUILDING.md di dalamnya menjelaskan alasannya.
https://0wx.cat/clients/0wx-android.apk # install it https://0wx.cat/clients/0wx-android.zip # build it yourself
Sengaja tidak ada aksi ambil-jarak-jauh. Aksi itu akan membuat server mengambil URL pilihan pemanggil, yang merupakan celah pemalsuan permintaan, dan skrip bisa memacunya jauh lebih keras daripada formulir. Unggah saja filenya sendiri.