▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Español
Galego
Português
Français
Italiano
Latina
Română
Rumantsch
Gaeilge
Suomi
Magyar
Euskara
Esperanto
日本語
简体中文
繁體中文(台灣)
繁體中文(香港)
粵語
한국어
Tiếng Việt
ไทย
Bahasa Indonesia
Bahasa Melayu
हिन्दी
Ελληνικά
Polski
Čeština
Українська
Русский
Türkçe
العربية
עברית
Kiswahili
ʻŌlelo Hawaiʻi
tlhIngan Hol
Quenya
Tot el que fan els formularis d'aquest lloc, per a scripts. Cada resposta és JSON, errors inclosos, així que mai no has d'endevinar si un cos és un resultat o una explicació.
Fes POST a l'endpoint amb paràmetres de formulari o amb un cos JSON. Són equivalents; tria el que et sigui més còmode amb les teves eines. El paràmetre action selecciona què fer. Usa --data-urlencode per a tot el que hagi teclejat una persona — text d'un paste, una URL, una traducció — perquè -d envia el valor en brut i es tallarà al primer &. Un -d normal n'hi ha prou per a valors fixos com el mateix action. wget no té --data-urlencode en absolut, així que amb wget codifica tu mateix aquests valors amb percentatges o envia un cos JSON, que no necessita codificació.
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
En un cos de formulari & separa paràmetres, i curl -d no codifica el que li dones. Una URL amb cadena de consulta es talla per tant al seu primer &, i la resta arriba com a paràmetres separats. Usa --data-urlencode o envia JSON. Els paràmetres extraviats es rebutgen en lloc d'ignorar-se, així que això falla de manera visible en lloc de desar mig enllaç.
# 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
Opcional. Sense clau, la petició és anònima i es comporta exactament com un visitant anònim — el resultat és públic de totes maneres, l'única diferència és si acaba a la teva llista de fitxers. Genera una clau a la pàgina del teu compte i envia-la com a testimoni bearer; passar-la com a paràmetre apikey també funciona, però una clau a la cadena de consulta acaba als registres del servidor i a l'historial del navegador.
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 | Paràmetres | Descripció |
|---|---|---|
whoami | — | Confirma que una clau funciona i informa dels límits actuals. No costa res; crida-la primer. |
ip | — | Informa de la teva adreça, el seu PTR, el país, la regió i la ciutat on es geolocalitza, les coordenades i l'user agent que has enviat. No necessita clau i respon igual amb clau o sense. Deliberadament més limitat que la pàgina web: sense WHOIS, sense zona DNS i sense consultes a llistes de bloqueig, així que cridar-lo només costa al servidor una lectura de base de dades local. |
upload | file (repetible), resize, lifetime, gallery o g * | Puja un o més fitxers. Ha de ser multipart/form-data. Anomenar una galeria els posa directament dins seu i en retorna l'id. |
tinyurl | url, lifetime | Escurça una URL. |
hugeurl | url, lifetime | Allarga una URL, de manera absurda, a propòsit. |
paste | content, lifetime | Desa un bloc de text i retorna un enllaç cap a ell. |
translate | content, to, from | Tradueix text. to i from són codis de l'acció langs — tingues en compte que no sempre són codis de país: el danès és da, no dk. from es pot ometre o donar com a auto, que demana al backend que detecti la llengua; indicar-lo dona millor resultat amb textos curts. |
langs | Llista les llengües que accepta translate, com a supported_langs: un objecte per llengua, codi a nom, en l'ordre en què les ofereix el lloc. No necessita clau d'API. | |
dyndns | key, ip, format | Actualitza un nom de DNS dinàmic. L'única acció que no necessita clau d'API: la crida un encaminador, que té un camp per a una URL i cap manera d'enviar una capçalera. key és la clau d'actualització de cada nom que es mostra al teu compte, no la teva clau d'API. Omet ip i s'usarà l'adreça des de la qual crides. La resposta és la paraula dyndns2 de facto — good, nochg, badauth, abuse o dnserr — com a text pla, perquè és el que analitzen els encaminadors; afegeix format=json per al JSON habitual. |
listfiles * | page, g | Llista els teus fitxers amb tot el que mostra el panell d'informació, més la miniatura i l'enllaç directe. g ho limita a una galeria, o none als fitxers sense galeria. |
listpastes * | page | Llista els teus pastes, amb una previsualització de 200 caràcters de cadascun en lloc del cos sencer. |
listurls * | page | Llista les teves URL curtes i enormes, amb l'adreça a la qual apunta cadascuna. |
otl * | share | Crea un enllaç d'un sol ús a un dels teus fitxers. Cada crida en genera un de nou, així que donar el mateix fitxer a dues persones produeix dos enllaços. |
listotl * | page | Llista els teus enllaços d'un sol ús actius, el fitxer al qual apunta cadascun i si aquest fitxer ha caducat des de llavors. |
listgalleries * | — | Llista les teves galeries amb els seus id, noms, nombre de fitxers i estat de publicació. |
gallery * | g, publish | Informa de l'estat de publicació d'una galeria i el canvia quan s'indica publish. |
move * | share (repetible), gallery o g | Mou fitxers a una galeria, per nom (es crea si és nova) o per id. Si s'ometen tots dos, tornen a la llista principal. |
delete * | share (repetible), g, otl, withfiles | Esborra fitxers, pastes, URL curtes, galeries, enllaços d'un sol ús o qualsevol combinació. Un share es compara primer amb els teus fitxers i després amb els teus pastes i enllaços, així que qui crida no els ha de classificar per tipus. Els enllaços d'un sol ús van a part a otl: treure un enllaç no s'ha de poder confondre amb esborrar el fitxer al qual apunta. |
* Aquestes accions necessiten una clau d'API. Llegeixen o canvien les dades d'un compte, així que no tenen forma anònima.
share i g accepten un camp repetit, una matriu JSON o una llista separada per comes — el que et sigui més fàcil amb les teves eines. Els duplicats s'ignoren.
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
Allà on s'anomeni una galeria — a upload o a move — s'indica de les mateixes dues maneres: g per a un id existent, o gallery per a un nom, que es crea si és nou. Si s'envien tots dos, guanya g. La resposta porta l'id de la galeria. Tingues en compte que esborrar una galeria només elimina la galeria i deixa els seus fitxers a la llista principal — a diferència del formulari web, que els esborra després de preguntar. Passa withfiles=true per esborrar-los també: un script que endreça les seves agrupacions no hauria de perdre les pujades per accident.
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
Les pujades no poden usar el cos JSON, perquè un fitxer s'ha d'enviar com a multipart. Repeteix la part file per enviar-ne diversos alhora. Cada fitxer s'informa per separat: la resposta porta una llista files amb els acceptats i una llista rejected amb els que no, així que un èxit parcial continua sent un èxit.
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
No hi ha forma amb wget per a això. wget no pot construir un cos multipart/form-data — no té equivalent al -F de curl — i les pujades han de ser multipart. Usa curl, o munta tu mateix el cos i el boundary i envia'l amb --post-file.
Opcional a tota acció que desi alguna cosa. Accepta segons a seques, o un nombre seguit de m, h o d — les mateixes formes que admeten els formularis web. Omet-lo o passa 0 per conservar l'element indefinidament.
Cada resposta és un objecte JSON amb un camp ok. Si té èxit porta el resultat; si falla porta un codi error estable i un message llegible. Ramifica pel codi, registra el missatge.
{"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."}
Quan un fitxer en porta, listfiles afegeix file_tags a la seva entrada: artista, títol i àlbum, llegits d'ID3, comentaris Vorbis o àtoms MP4 en pujar el fitxer. La clau és absent en lloc de ser null quan no hi ha res a informar, que és la majoria dels fitxers, així que comprova-la abans de llegir-la. També poden faltar camps individuals — un fitxer pot tenir títol i no àlbum. No s'exposa res més de les metadades del fitxer: una compra d'iTunes registra el nom i l'Apple ID del comprador, i aquests no es llegeixen mai, a propòsit.
{"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 | Descripció |
|---|---|---|
unknown_action | 400 | No existeix aquesta acció. |
bad_json | 400 | El cos no era JSON vàlid, o un camp contenia una estructura imbricada. |
unexpected_parameter | 400 | Ha arribat un paràmetre que aquesta acció no admet — normalment un & sense codificar en un valor. El missatge anomena els paràmetres. |
bad_key | 401 | No s'ha reconegut la clau. Una clau incorrecta es rebutja en lloc de tractar-se silenciosament com a anònima. |
bad_url | 400 | La URL està mal formada o usa un esquema diferent de http(s), ftp o gopher. |
bad_lifetime | 400 | La durada no era un nombre ni un nombre seguit de m, h o d. |
no_content | 400 | No s'ha enviat res per desar. |
url_too_long | 413 | La URL supera el límit de longitud. |
paste_too_long | 413 | El text supera el límit dels pastes. Els límits es mesuren en bytes UTF-8, així que el text no llatí compta més del que suggereix el seu nombre de caràcters. |
too_many_files | 413 | Més fitxers dels que accepta una sola crida. |
no_usable_files | 415 | S'han rebutjat tots els fitxers. Consulta la llista rejected per saber-ne el motiu. |
backend_unavailable | 502 | El backend de traducció no ha respost. |
internal | 500 | Alguna cosa ha fallat inesperadament. S'ha registrat. |
Crida whoami per llegir els valors actuals en lloc de fixar-los al codi — els estableix l'operador del servidor i poden canviar. Les mides són bytes UTF-8.
0wx.sh embolcalla tot l'anterior. És shell POSIX pur, no necessita res més que curl i és prou curt per llegir-lo abans d'executar-lo — que és el correcte amb un script que guardarà la teva clau d'API. Posa la clau a OWX_KEY en lloc de passar --key, i quedarà fora de l'historial del teu shell.
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 fa el mateix que el client de shell, però analitza la resposta i imprimeix què signifiquen els camps en lloc de donar-te JSON en brut — afegeix --json quan vulguis la forma en brut. Només biblioteca estàndard: sense requests, res a instal·lar. Si escrius el teu propi client, les seves funcions send() i report() són les parts que val la pena llegir: entre totes dues mostren com construir la petició, com treure el missatge d'una de fallida i què contenen les respostes.
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 fa el mateix que el de Python i imprimeix la mateixa sortida. Només mòduls del nucli — HTTP::Tiny i JSON::PP vénen amb Perl des de la 5.14, així que no hi ha res a instal·lar. Val la pena llegir-lo al costat del client de Python si escrius el teu: els dos llenguatges fallen de manera diferent davant d'una petició trencada, i tots dos scripts diuen on.
wget https://0wx.cat/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 és l'equivalent del client de Python per a Windows: les mateixes ordres, la mateixa sortida, i analitza la resposta en lloc de donar-te JSON en brut — afegeix --json per a això. Està escrit per a la Windows PowerShell que ja ve a la màquina, així que no hi ha res a instal·lar, i funciona sense canvis a PowerShell 7. Potser necessitaràs Set-ExecutionPolicy -Scope Process Bypass a la finestra des d'on l'executis, que és Windows preguntant si de debò vols executar un script descarregat — una pregunta raonable, i el fitxer és prou curt per llegir-lo abans.
$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 és el mateix conjunt de pestanyes que el client d'escriptori, en tres fitxers — una pàgina, un full d'estils i un script — sense instal·lació, sense framework i sense carregar res d'enlloc que no sigui aquest lloc. Tres en lloc d'un perquè la Content-Security-Policy del lloc prohibeix script i estil en línia, cosa que convé mantenir. S'hi poden deixar anar fitxers. S'ha d'obrir des d'aquí i no desar-lo i obrir-lo des del teu disc: l'API no envia capçaleres cross-origin, així que a una còpia local el teu navegador li rebutjaria cada petició abans de sortir. La clau es guarda en memòria tret que marquis la casella per recordar-la.
https://0wx.cat/clients/0wx.html
0wx-gui.ps1 és el mateix conjunt de pestanyes que el client d'escriptori, dibuixat amb WinForms — cosa que vol dir que no hi ha res a instal·lar, perquè ja forma part de Windows. Posa'l a la mateixa carpeta que 0wx.ps1: la finestra manlleva la gestió de peticions d'aquell fitxer en lloc de portar-ne una segona còpia, així que calen tots dos. Windows preguntarà abans d'executar un script que no ha escrit ell, cosa raonable; tots dos fitxers són prou curts per llegir-los abans de respondre.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl és una petita finestra GTK amb pestanyes per pujar, enganxar, escurçar i explorar els teus fitxers — com a llista o com a galeria de miniatures, filtrada per galeria. És l'únic client d'aquí que necessita instal·lar alguna cosa — les vinculacions GTK3 de Perl — cosa que convé saber al costat de la finestra de Windows de dalt, que no necessita res en absolut. Tota la resta que usa ve amb Perl. La clau només es guarda en memòria: tancar la finestra l'oblida, i definir OWX_KEY l'omple en arrencar. Mostri el que mostri, la resposta en brut del servidor és a un clic sota “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 fa el que fan els altres clients, des del mòbil: pujar, enganxar, escurçar, traduir i explorar els teus fitxers com a llista o galeria. Compartir-hi un fitxer des de qualsevol altra app el puja, i compartir text el desa com a paste. No és a cap botiga d'aplicacions, així que el teu dispositiu et demanarà permís per instal·lar-la — una pregunta que convé prendre's seriosament en general, i la raó per la qual tot el codi font també és aquí: obre'l a Android Studio i compila'l tu mateix en lloc de refiar-te del fitxer. Compilar requereix JDK 21; el BUILDING.md inclòs explica per què.
https://0wx.cat/clients/0wx-android.apk # install it https://0wx.cat/clients/0wx-android.zip # build it yourself
Deliberadament no hi ha acció de recuperació remota. Faria que el servidor recuperés una URL triada per qui crida, cosa que és una superfície de falsificació de peticions, i un script ho pot explotar molt més que un formulari. Puja el fitxer tu mateix.