▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Català
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
Todo lo que hacen los formularios de este sitio, para scripts. Cada respuesta es JSON, incluidos los errores, así que nunca tienes que adivinar si un cuerpo es un resultado o una explicación.
Haz POST al endpoint con parámetros de formulario o con un cuerpo JSON. Son equivalentes; elige lo que te resulte más cómodo con tus herramientas. El parámetro action selecciona qué hacer. Usa --data-urlencode para todo lo que haya tecleado una persona — texto de un pegado, una URL, una traducción — porque -d envía el valor en bruto y se cortará en el primer &. Un -d normal basta para valores fijos como el propio action. wget no tiene --data-urlencode en absoluto, así que con wget codifica tú mismo esos valores con porcentajes o envía un cuerpo JSON, que no necesita 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
En un cuerpo de formulario & separa parámetros, y curl -d no codifica lo que le das. Una URL con cadena de consulta se corta por tanto en su primer &, y el resto llega como parámetros sueltos. Usa --data-urlencode o envía JSON. Los parámetros extraviados se rechazan en lugar de ignorarse, así que esto falla de forma visible en lugar de guardar medio enlace.
# 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. Sin clave, la petición es anónima y se comporta exactamente como un visitante anónimo — el resultado es público en cualquier caso, la única diferencia es si acaba en tu lista de archivos. Genera una clave en la página de tu cuenta y envíala como token bearer; pasarla como parámetro apikey también funciona, pero una clave en la cadena de consulta acaba en los registros del servidor y en el historial del 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 | Descripción |
|---|---|---|
whoami | — | Confirma que una clave funciona e informa de los límites actuales. No cuesta nada; llámala primero. |
ip | — | Informa de tu dirección, su PTR, el país, la región y la ciudad en que se geolocaliza, las coordenadas y el user agent que enviaste. No necesita clave y responde igual con o sin ella. Deliberadamente más limitado que la página web: sin WHOIS, sin zona DNS y sin consultas a listas de bloqueo, así que llamarlo solo le cuesta al servidor una lectura de base de datos local. |
upload | file (repetible), resize, lifetime, gallery o g * | Sube uno o más archivos. Debe ser multipart/form-data. Nombrar una galería los coloca directamente en ella y devuelve su id. |
tinyurl | url, lifetime | Acorta una URL. |
hugeurl | url, lifetime | Alarga una URL, de forma absurda, a propósito. |
paste | content, lifetime | Guarda un bloque de texto y devuelve un enlace a él. |
translate | content, to, from | Traduce texto. to y from son códigos de la acción langs — ten en cuenta que no siempre son códigos de país: el danés es da, no dk. from puede omitirse o darse como auto, que pide al backend que detecte el idioma; indicarlo da mejor resultado con textos cortos. |
langs | Lista los idiomas que acepta translate, como supported_langs: un objeto por idioma, código a nombre, en el orden en que los ofrece el sitio. No necesita clave de API. | |
dyndns | key, ip, format | Actualiza un nombre de DNS dinámico. La única acción que no necesita clave de API: la llama un router, que tiene un campo para una URL y ninguna forma de enviar una cabecera. key es la clave de actualización de cada nombre que se muestra en tu cuenta, no tu clave de API. Omite ip y se usará la dirección desde la que llamas. La respuesta es la palabra dyndns2 de facto — good, nochg, badauth, abuse o dnserr — como texto plano, porque es lo que los routers analizan; añade format=json para el JSON habitual. |
listfiles * | page, g | Lista tus archivos con todo lo que muestra el panel de información, más la miniatura y el enlace directo. g lo limita a una galería, o none a los archivos sin galería. |
listpastes * | page | Lista tus pegados, con una vista previa de 200 caracteres de cada uno en lugar del cuerpo completo. |
listurls * | page | Lista tus URL cortas y enormes, con la dirección a la que apunta cada una. |
otl * | share | Crea un enlace de un solo uso a uno de tus archivos. Cada llamada genera uno nuevo, así que dar el mismo archivo a dos personas produce dos enlaces. |
listotl * | page | Lista tus enlaces de un solo uso activos, el archivo al que apunta cada uno y si ese archivo ha caducado desde entonces. |
listgalleries * | — | Lista tus galerías con sus id, nombres, número de archivos y estado de publicación. |
gallery * | g, publish | Informa del estado de publicación de una galería y lo cambia cuando se indica publish. |
move * | share (repetible), gallery o g | Mueve archivos a una galería, por nombre (se crea si es nueva) o por id. Si se omiten ambos, vuelven a la lista principal. |
delete * | share (repetible), g, otl, withfiles | Borra archivos, pegados, URL cortas, galerías, enlaces de un solo uso o cualquier mezcla. Un share se compara primero con tus archivos y luego con tus pegados y enlaces, así que quien llama no tiene que clasificarlos por tipo. Los enlaces de un solo uso van aparte en otl: quitar un enlace no debe confundirse con borrar el archivo al que apunta. |
* Estas acciones necesitan una clave de API. Leen o cambian los datos de una cuenta, así que no tienen forma anónima.
share y g aceptan un campo repetido, un array JSON o una lista separada por comas — lo que te resulte más fácil con tus herramientas. Los duplicados se ignoran.
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
Dondequiera que se nombre una galería — en upload o en move — se indica de las mismas dos maneras: g para un id existente, o gallery para un nombre, que se crea si es nuevo. Si se envían ambos, gana g. La respuesta lleva el id de la galería. Ten en cuenta que borrar una galería solo elimina la galería y deja sus archivos en la lista principal — a diferencia del formulario web, que los borra tras preguntar. Pasa withfiles=true para borrarlos también: un script que ordena sus agrupaciones no debería perder las 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
Las subidas no pueden usar el cuerpo JSON, porque un archivo tiene que enviarse como multipart. Repite la parte file para enviar varios a la vez. Cada archivo se informa por separado: la respuesta lleva una lista files con los aceptados y una lista rejected con los que no, así que un éxito parcial sigue siendo 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
No hay forma con wget para esto. wget no puede construir un cuerpo multipart/form-data — no tiene equivalente al -F de curl — y las subidas deben ser multipart. Usa curl, o monta tú mismo el cuerpo y el boundary y envíalo con --post-file.
Opcional en toda acción que guarde algo. Acepta segundos a secas, o un número seguido de m, h o d — las mismas formas que admiten los formularios web. Omítelo o pasa 0 para conservar el elemento indefinidamente.
Cada respuesta es un objeto JSON con un campo ok. Si tiene éxito lleva el resultado; si falla lleva un código error estable y un message legible. Ramifica por el código, registra el mensaje.
{"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."}
Cuando un archivo las lleva, listfiles añade file_tags a su entrada: artista, título y álbum, leídos de ID3, comentarios Vorbis o átomos MP4 al subir el archivo. La clave está ausente en lugar de ser null cuando no hay nada que informar, que es la mayoría de los archivos, así que compruébala antes de leerla. También pueden faltar campos individuales — un archivo puede tener título y no álbum. No se expone nada más de los metadatos del archivo: una compra de iTunes registra el nombre y el Apple ID del comprador, y esos nunca se leen, 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 | Descripción |
|---|---|---|
unknown_action | 400 | No existe esa acción. |
bad_json | 400 | El cuerpo no era JSON válido, o un campo contenía una estructura anidada. |
unexpected_parameter | 400 | Llegó un parámetro que esta acción no admite — normalmente un & sin codificar en un valor. El mensaje nombra los parámetros. |
bad_key | 401 | No se reconoció la clave. Una clave incorrecta se rechaza en lugar de tratarse silenciosamente como anónima. |
bad_url | 400 | La URL está mal formada o usa un esquema distinto de http(s), ftp o gopher. |
bad_lifetime | 400 | La duración no era un número ni un número seguido de m, h o d. |
no_content | 400 | No se envió nada que guardar. |
url_too_long | 413 | La URL supera el límite de longitud. |
paste_too_long | 413 | El texto supera el límite de pegado. Los límites se miden en bytes UTF-8, así que el texto no latino cuenta más de lo que sugiere su número de caracteres. |
too_many_files | 413 | Más archivos de los que acepta una sola llamada. |
no_usable_files | 415 | Se rechazaron todos los archivos. Consulta la lista rejected para saber por qué. |
backend_unavailable | 502 | El backend de traducción no respondió. |
internal | 500 | Algo falló inesperadamente. Se ha registrado. |
Llama a whoami para leer los valores actuales en lugar de fijarlos en el código — los establece el operador del servidor y pueden cambiar. Los tamaños son bytes UTF-8.
0wx.sh envuelve todo lo anterior. Es shell POSIX puro, no necesita nada más que curl y es lo bastante corto como para leerlo antes de ejecutarlo — que es lo correcto con un script que va a guardar tu clave de API. Pon la clave en OWX_KEY en lugar de pasar --key, y quedará fuera del historial de tu 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 hace lo mismo que el cliente de shell, pero analiza la respuesta e imprime lo que significan los campos en lugar de darte JSON en bruto — añade --json cuando quieras la forma en bruto. Solo biblioteca estándar: sin requests, nada que instalar. Si escribes tu propio cliente, sus funciones send() y report() son las partes que merece la pena leer: entre ambas muestran cómo construir la petición, cómo sacar el mensaje de una fallida y qué contienen las respuestas.
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 hace lo mismo que el de Python e imprime la misma salida. Solo módulos del núcleo — HTTP::Tiny y JSON::PP vienen con Perl desde 5.14, así que no hay nada que instalar. Merece la pena leerlo junto al cliente de Python si escribes el tuyo: los dos lenguajes fallan de forma distinta ante una petición rota, y ambos scripts dicen dónde.
wget https://0wx.org/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1 es el equivalente del cliente de Python para Windows: los mismos comandos, la misma salida, y analiza la respuesta en lugar de darte JSON en bruto — añade --json para eso. Está escrito para la Windows PowerShell que ya viene en la máquina, así que no hay nada que instalar, y funciona sin cambios en PowerShell 7. Puede que necesites Set-ExecutionPolicy -Scope Process Bypass en la ventana desde la que lo ejecutes, que es Windows preguntando si de verdad quieres ejecutar un script descargado — una pregunta razonable, y el archivo es lo bastante corto como para leerlo 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 es el mismo conjunto de pestañas que el cliente de escritorio, en tres archivos — una página, una hoja de estilos y un script — sin instalación, sin framework y sin cargar nada de ningún sitio que no sea este. Tres en lugar de uno porque la Content-Security-Policy del sitio prohíbe script y estilo en línea, lo que conviene mantener. Se pueden soltar archivos sobre él. Hay que abrirlo desde aquí y no guardarlo y abrirlo desde tu disco: la API no envía cabeceras cross-origin, así que a una copia local tu navegador le rechazaría cada petición antes de salir. La clave se guarda en memoria a menos que marques la casilla para recordarla.
https://0wx.org/clients/0wx.html
0wx-gui.ps1 es el mismo conjunto de pestañas que el cliente de escritorio, dibujado con WinForms — lo que significa que no hay nada que instalar, porque ya forma parte de Windows. Ponlo en la misma carpeta que 0wx.ps1: la ventana toma prestado el manejo de peticiones de ese archivo en lugar de llevar una segunda copia, así que hacen falta los dos. Windows preguntará antes de ejecutar un script que no ha escrito él, lo cual es razonable; ambos archivos son lo bastante cortos como para leerlos antes de responder.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl es una pequeña ventana GTK con pestañas para subir, pegar, acortar y explorar tus archivos — como lista o como galería de miniaturas, filtrada por galería. Es el único cliente de aquí que necesita instalar algo — los enlaces GTK3 de Perl — lo que conviene saber junto a la ventana de Windows de arriba, que no necesita nada en absoluto. Todo lo demás que usa viene con Perl. La clave solo se guarda en memoria: cerrar la ventana la olvida, y definir OWX_KEY la rellena al arrancar. Muestre lo que muestre, la respuesta en bruto del servidor está a un clic bajo “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 hace lo que hacen los demás clientes, desde el móvil: subir, pegar, acortar, traducir y explorar tus archivos como lista o galería. Compartir un archivo con ella desde cualquier otra app lo sube, y compartir texto lo guarda como pegado. No está en ninguna tienda de aplicaciones, así que tu dispositivo te pedirá permiso para instalarla — una pregunta que conviene tomarse en serio en general, y la razón por la que todo el código fuente está también aquí: ábrelo en Android Studio y compílalo tú mismo en lugar de fiarte del archivo. Compilar requiere JDK 21; el BUILDING.md incluido explica por qué.
https://0wx.org/clients/0wx-android.apk # install it https://0wx.org/clients/0wx-android.zip # build it yourself
Deliberadamente no hay acción de descarga remota. Haría que el servidor recuperase una URL elegida por quien llama, lo que es una superficie de falsificación de peticiones, y un script puede explotarlo mucho más que un formulario. Sube el archivo tú mismo.