▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Español
Català
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
Todo o que fan os formularios deste sitio, para scripts. Cada resposta é JSON, erros incluídos, así que nunca tes que adiviñar se un corpo é un resultado ou unha explicación.
Fai POST ao endpoint con parámetros de formulario ou cun corpo JSON. Son equivalentes; escolle o que che resulte máis cómodo coas túas ferramentas. O parámetro action selecciona que facer. Usa --data-urlencode para todo o que teclease unha persoa — texto dun pegado, unha URL, unha tradución — porque -d envía o valor en bruto e cortarase no primeiro &. Un -d normal abonda para valores fixos como o propio action. wget non ten --data-urlencode en absoluto, así que con wget codifica ti mesmo eses valores con porcentaxes ou envía un corpo JSON, que non precisa codificación.
curl -X POST https://0wx.org/api.cgi \
-d action=paste --data-urlencode 'content=hello & world'
curl -X POST https://0wx.org/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.org/api.cgi
Nun corpo de formulario & separa parámetros, e curl -d non codifica o que lle dás. Unha URL con cadea de consulta córtase polo tanto no seu primeiro &, e o resto chega como parámetros soltos. Usa --data-urlencode ou envía JSON. Os parámetros extraviados rexéitanse en lugar de ignorarse, así que isto falla de xeito visible en lugar de gardar media ligazón.
# wrong -- the value is cut at the &
curl -X POST https://0wx.org/api.cgi \
-d action=tinyurl -d 'url=https://example.com/?a=1&b=2'
# right
curl -X POST https://0wx.org/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.org/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.org/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.org/api.cgi
Opcional. Sen chave, a petición é anónima e compórtase exactamente coma un visitante anónimo — o resultado é público en calquera caso, a única diferenza é se remata na túa lista de ficheiros. Xera unha chave na páxina da túa conta e envíaa como token bearer; pasala como parámetro apikey tamén funciona, pero unha chave na cadea de consulta remata nos rexistros do servidor e no historial do navegador.
curl -X POST https://0wx.org/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-d action=whoami
wget -qO- --header='Authorization: Bearer YOUR_KEY' \
--post-data 'action=whoami' https://0wx.org/api.cgi
| action | Parámetros | Descrición |
|---|---|---|
whoami | — | Confirma que unha chave funciona e informa dos límites actuais. Non custa nada; chámaa primeiro. |
ip | — | Informa do teu enderezo, o seu PTR, o país, a rexión e a cidade en que se xeolocaliza, as coordenadas e o user agent que enviaches. Non precisa chave e responde igual con ela ou sen ela. Deliberadamente máis limitado ca a páxina web: sen WHOIS, sen zona DNS e sen consultas a listas de bloqueo, así que chamalo só lle custa ao servidor unha lectura de base de datos local. |
upload | file (repetible), resize, lifetime, gallery ou g * | Sobe un ou máis ficheiros. Debe ser multipart/form-data. Nomear unha galería colócaos directamente nela e devolve o seu id. |
tinyurl | url, lifetime | Acurta unha URL. |
hugeurl | url, lifetime | Alonga unha URL, de xeito absurdo, a propósito. |
paste | content, lifetime | Garda un bloque de texto e devolve unha ligazón a el. |
translate | content, to, from | Traduce texto. to e from son códigos da acción langs — ten en conta que non sempre son códigos de país: o dinamarqués é da, non dk. from pode omitirse ou darse como auto, que lle pide ao backend que detecte o idioma; indicalo dá mellor resultado con textos curtos. |
langs | Lista os idiomas que acepta translate, como supported_langs: un obxecto por idioma, código a nome, na orde en que os ofrece o sitio. Non precisa chave de API. | |
dyndns | key, ip, format | Actualiza un nome de DNS dinámico. A única acción que non precisa chave de API: chámaa un router, que ten un campo para unha URL e ningunha forma de enviar unha cabeceira. key é a chave de actualización de cada nome que se amosa na túa conta, non a túa chave de API. Omite ip e usarase o enderezo desde o que chamas. A resposta é a palabra dyndns2 de facto — good, nochg, badauth, abuse ou dnserr — como texto plano, porque é o que os routers analizan; engade format=json para o JSON habitual. |
listfiles * | page, g | Lista os teus ficheiros con todo o que amosa o panel de información, máis a miniatura e a ligazón directa. g limítao a unha galería, ou none aos ficheiros sen galería. |
listpastes * | page | Lista os teus pegados, cunha vista previa de 200 caracteres de cada un en lugar do corpo completo. |
listurls * | page | Lista as túas URL curtas e enormes, co enderezo ao que apunta cada unha. |
otl * | share | Crea unha ligazón dun só uso a un dos teus ficheiros. Cada chamada xera unha nova, así que dar o mesmo ficheiro a dúas persoas produce dúas ligazóns. |
listotl * | page | Lista as túas ligazóns dun só uso activas, o ficheiro ao que apunta cada unha e se ese ficheiro caducou desde entón. |
listgalleries * | — | Lista as túas galerías cos seus id, nomes, número de ficheiros e estado de publicación. |
gallery * | g, publish | Informa do estado de publicación dunha galería e cámbiao cando se indica publish. |
move * | share (repetible), gallery ou g | Move ficheiros a unha galería, por nome (créase se é nova) ou por id. Se se omiten ambos, volven á lista principal. |
delete * | share (repetible), g, otl, withfiles | Borra ficheiros, pegados, URL curtas, galerías, ligazóns dun só uso ou calquera mestura. Un share compárase primeiro cos teus ficheiros e despois cos teus pegados e ligazóns, así que quen chama non ten que clasificalos por tipo. As ligazóns dun só uso van á parte en otl: quitar unha ligazón non debe confundirse con borrar o ficheiro ao que apunta. |
* Estas accións precisan unha chave de API. Len ou cambian os datos dunha conta, así que non teñen forma anónima.
share e g aceptan un campo repetido, un array JSON ou unha lista separada por comas — o que che resulte máis doado coas túas ferramentas. Os duplicados ignóranse.
curl -X POST https://0wx.org/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.org/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'
curl -X POST https://0wx.org/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.org/api.cgi
Onde queira que se nomee unha galería — en upload ou en move — indícase das mesmas dúas maneiras: g para un id existente, ou gallery para un nome, que se crea se é novo. Se se envían ambos, gaña g. A resposta leva o id da galería. Ten en conta que borrar unha galería só elimina a galería e deixa os seus ficheiros na lista principal — a diferenza do formulario web, que os borra tras preguntar. Pasa withfiles=true para borralos tamén: un script que ordena os seus agrupamentos non debería perder as subidas por accidente.
curl -X POST https://0wx.org/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
-F action=upload -F file=@photo.jpg --form-string 'gallery=Holiday 2026'
curl -X POST https://0wx.org/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.org/api.cgi
As subidas non poden usar o corpo JSON, porque un ficheiro ten que enviarse como multipart. Repite a parte file para enviar varios á vez. Cada ficheiro infórmase por separado: a resposta leva unha lista files cos aceptados e unha lista rejected cos que non, así que un éxito parcial segue sendo un éxito.
curl -X POST https://0wx.org/api.cgi \
-H 'Authorization: Bearer YOUR_KEY' \
-F action=upload \
-F file=@photo.jpg \
-F file=@notes.txt \
-F lifetime=7d
Non hai forma con wget para isto. wget non pode construír un corpo multipart/form-data — non ten equivalente ao -F de curl — e as subidas deben ser multipart. Usa curl, ou monta ti mesmo o corpo e o boundary e envíao con --post-file.
Opcional en toda acción que garde algo. Acepta segundos a secas, ou un número seguido de m, h ou d — as mesmas formas que admiten os formularios web. Omíteo ou pasa 0 para conservar o elemento indefinidamente.
Cada resposta é un obxecto JSON cun campo ok. Se ten éxito leva o resultado; se falla leva un código error estable e unha message lexible. Ramifica polo código, rexistra a mensaxe.
{"ok":true,"type":"paste","share":"Ab3xK9pQ",
"url":"https://0wx.org/p/Ab3xK9pQ","bytes":11}
{"ok":false,"error":"url_too_long",
"message":"URL exceeds the maximum length."}
Cando un ficheiro as leva, listfiles engade file_tags á súa entrada: artista, título e álbum, lidos de ID3, comentarios Vorbis ou átomos MP4 ao subir o ficheiro. A chave está ausente en lugar de ser null cando non hai nada que informar, que é a maioría dos ficheiros, así que compróbaa antes de lela. Tamén poden faltar campos individuais — un ficheiro pode ter título e non álbum. Non se expón nada máis dos metadatos do ficheiro: unha compra de iTunes rexistra o nome e o Apple ID do comprador, e eses nunca se len, a propósito.
{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
{"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
"bytes":8123456,"url":"https://0wx.org/i/Ab3xK9pQ",
"file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
{"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
"bytes":204800,"url":"https://0wx.org/i/Zz7yT2mN"}
]}
| error | HTTP | Descrición |
|---|---|---|
unknown_action | 400 | Non existe esa acción. |
bad_json | 400 | O corpo non era JSON válido, ou un campo contiña unha estrutura aniñada. |
unexpected_parameter | 400 | Chegou un parámetro que esta acción non admite — normalmente un & sen codificar nun valor. A mensaxe nomea os parámetros. |
bad_key | 401 | Non se recoñeceu a chave. Unha chave incorrecta rexéitase en lugar de tratarse silenciosamente como anónima. |
bad_url | 400 | A URL está mal formada ou usa un esquema distinto de http(s), ftp ou gopher. |
bad_lifetime | 400 | A duración non era un número nin un número seguido de m, h ou d. |
no_content | 400 | Non se enviou nada que gardar. |
url_too_long | 413 | A URL supera o límite de lonxitude. |
paste_too_long | 413 | O texto supera o límite de pegado. Os límites mídense en bytes UTF-8, así que o texto non latino conta máis do que suxire o seu número de caracteres. |
too_many_files | 413 | Máis ficheiros dos que acepta unha soa chamada. |
no_usable_files | 415 | Rexeitáronse todos os ficheiros. Consulta a lista rejected para saber por que. |
backend_unavailable | 502 | O backend de tradución non respondeu. |
internal | 500 | Algo fallou inesperadamente. Rexistrouse. |
Chama a whoami para ler os valores actuais en lugar de fixalos no código — estabeléceos o operador do servidor e poden cambiar. Os tamaños son bytes UTF-8.
0wx.sh envolve todo o anterior. É shell POSIX puro, non precisa nada máis ca curl e é abondo curto como para lelo antes de executalo — que é o correcto cun script que vai gardar a túa chave de API. Pon a chave en OWX_KEY en lugar de pasar --key, e quedará fóra do historial do teu shell.
wget https://0wx.org/clients/0wx.sh chmod +x 0wx.sh export OWX_KEY=YOUR_KEY ./0wx.sh help ./0wx.sh paste --content 'hello & world'
0wx.py fai o mesmo ca o cliente de shell, pero analiza a resposta e imprime o que significan os campos en lugar de darche JSON en bruto — engade --json cando queiras a forma en bruto. Só biblioteca estándar: sen requests, nada que instalar. Se escribes o teu propio cliente, as súas funcións send() e report() son as partes que paga a pena ler: entre ambas amosan como construír a petición, como sacar a mensaxe dunha fallida e que conteñen as respostas.
wget https://0wx.org/clients/0wx.py chmod +x 0wx.py export OWX_KEY=YOUR_KEY ./0wx.py listfiles ./0wx.py listfiles --json | jq '.files[].url'
0wx.pl fai o mesmo ca o de Python e imprime a mesma saída. Só módulos do núcleo — HTTP::Tiny e JSON::PP veñen con Perl desde 5.14, así que non hai nada que instalar. Paga a pena lelo xunto ao cliente de Python se escribes o teu: as dúas linguaxes fallan de xeito distinto ante unha petición rota, e ambos scripts din onde.
wget https://0wx.org/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 é o equivalente do cliente de Python para Windows: os mesmos comandos, a mesma saída, e analiza a resposta en lugar de darche JSON en bruto — engade --json para iso. Está escrito para a Windows PowerShell que xa vén na máquina, así que non hai nada que instalar, e funciona sen cambios en PowerShell 7. Pode que precises Set-ExecutionPolicy -Scope Process Bypass na xanela desde a que o executes, que é Windows preguntando se de verdade queres executar un script descargado — unha pregunta razoable, e o ficheiro é abondo curto como para lelo antes.
$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 é o mesmo conxunto de lapelas ca o cliente de escritorio, en tres ficheiros — unha páxina, unha folla de estilos e un script — sen instalación, sen framework e sen cargar nada de ningún sitio que non sexa este. Tres en lugar dun porque a Content-Security-Policy do sitio prohibe script e estilo en liña, o que convén manter. Pódense soltar ficheiros sobre el. Hai que abrilo desde aquí e non gardalo e abrilo desde o teu disco: a API non envía cabeceiras cross-origin, así que a unha copia local o teu navegador rexeitaríalle cada petición antes de saír. A chave gárdase en memoria a non ser que marques a caixa para lembrala.
https://0wx.org/clients/0wx.html
0wx-gui.ps1 é o mesmo conxunto de lapelas ca o cliente de escritorio, debuxado con WinForms — o que significa que non hai nada que instalar, porque xa forma parte de Windows. Pono no mesmo cartafol ca 0wx.ps1: a xanela toma prestado o manexo de peticións dese ficheiro en lugar de levar unha segunda copia, así que fan falta os dous. Windows preguntará antes de executar un script que non escribiu el, o cal é razoable; ambos ficheiros son abondo curtos como para lelos antes de responder.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl é unha pequena xanela GTK con lapelas para subir, pegar, acurtar e explorar os teus ficheiros — como lista ou como galería de miniaturas, filtrada por galería. É o único cliente de aquí que precisa instalar algo — as ligazóns GTK3 de Perl — o que convén saber xunto á xanela de Windows de arriba, que non precisa nada en absoluto. Todo o demais que usa vén con Perl. A chave só se garda en memoria: pechar a xanela esquécea, e definir OWX_KEY énchea ao arrancar. Amose o que amose, a resposta en bruto do servidor está a un clic baixo “Server reply”.
apt install libgtk3-perl # or: dnf install perl-Gtk3 wget https://0wx.org/clients/0wx-gtk.pl chmod +x 0wx-gtk.pl OWX_KEY=YOUR_KEY ./0wx-gtk.pl
0wx-android.apk fai o que fan os demais clientes, desde o móbil: subir, pegar, acurtar, traducir e explorar os teus ficheiros como lista ou galería. Compartir un ficheiro con ela desde calquera outra app sóbeo, e compartir texto gárdao como pegado. Non está en ningunha tenda de aplicacións, así que o teu dispositivo pedirache permiso para instalala — unha pregunta que convén tomar en serio en xeral, e a razón pola que todo o código fonte está tamén aquí: ábreo en Android Studio e compílao ti mesmo en lugar de fiarte do ficheiro. Compilar require JDK 21; o BUILDING.md incluído explica por que.
https://0wx.org/clients/0wx-android.apk # install it https://0wx.org/clients/0wx-android.zip # build it yourself
Deliberadamente non hai acción de descarga remota. Faría que o servidor recuperase unha URL escollida por quen chama, o que é unha superficie de falsificación de peticións, e un script pode explotalo moito máis ca un formulario. Sobe o ficheiro ti mesmo.