FastPaste API

FastPaste REST API v1

Inicio

La API de FastPaste le permite crear, obtener y eliminar pastes mediante programación.

Se requiere una clave API para usar la API. Contacte al administrador.

Autenticación

Todas las solicitudes de API requieren el encabezado X-API-Key:

X-API-Key: lq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Base URL

https://fastpaste.xyz/api/v1

Formato de respuesta

Todas las respuestas están en formato JSON:

{ "error": false, "message": "...", "data": { ... } }

POST /api/v1/paste

Crea un nuevo paste.

Paste de texto (JSON)

ParámetroTipoObligatorioDescripción
contentstringContenido del paste (mín. 3, máx. 4.00 MB)
titlestringNoTítulo del paste
descriptionstringNoDescripción (máx. 500 caracteres)
expirystringNoDuración: 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (predeterminado: 1d)
passwordstringNoProtección por contraseña
burnbooleanNoVer una vez y eliminar. Si es true, el paste se elimina automáticamente tras la primera visualización (predeterminado: false).
encryptbooleanNoCifrado de extremo a extremo. Si es true, el contenido debe ser una cadena "fpe1:..." cifrada en el cliente (ver la sección E2E). Predeterminado: false.
keystringNoClave de descifrado base64url. Opcional; se usa solo para añadir #clave al enlace devuelto y nunca se almacena en el servidor. Déjala vacía para mantener la clave totalmente en el cliente.
downloadablebooleanNoHace descargable un paste cifrado E2E (predeterminado: false). Debe usarse con encrypt=true; en pastes sin cifrar no tiene efecto y la respuesta incluye una advertencia (los pastes sin cifrar siempre son descargables de todos modos).
languagestringNoLenguaje de resaltado de sintaxis (p. ej. python, javascript). Se detecta automáticamente si se omite; en E2E se guarda para resaltar tras el descifrado.
publicbooleanNoSi es true, el paste se lista en el archivo público y en el sitemap. Por defecto es false. Se ignora si se usa contraseña, autodestrucción o cifrado.
slugstringNoDirección corta personalizada (p. ej. «mis-notas» → /view/mis-notas). Si está ocupada, se asigna una similar.
Ejemplo de solicitud (cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "content": "print(\"Hello, World!\")", "title": "Test Paste", "expiry": "1d", "burn": true }'
Respuesta (201 Created)
{ "error": false, "message": "Paste created successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "sha256": "abc123...", "burn_after_read": true, "encrypted": false, "downloadable": false } }

Subida de archivo (multipart/form-data)

ParámetroTipoObligatorioDescripción
filefileArchivo a subir (máx. 10.00 MB)
descriptionstringNoDescripción del archivo
expirystringNoDuración
passwordstringNoProtección por contraseña
burnbooleanNoVer una vez y eliminar. Si es true, el paste se elimina automáticamente tras la primera visualización (predeterminado: false).
encryptbooleanNoCifrado de extremo a extremo. Si es true, el contenido debe ser una cadena "fpe1:..." cifrada en el cliente (ver la sección E2E). Predeterminado: false.
keystringNoClave de descifrado base64url. Opcional; se usa solo para añadir #clave al enlace devuelto y nunca se almacena en el servidor. Déjala vacía para mantener la clave totalmente en el cliente.
downloadablebooleanNoHace descargable un paste cifrado E2E (predeterminado: false). Debe usarse con encrypt=true; en pastes sin cifrar no tiene efecto y la respuesta incluye una advertencia (los pastes sin cifrar siempre son descargables de todos modos).
Ejemplo (archivo con cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "X-API-Key: lq_your_api_key_here" \ -F "[email protected]" \ -F "expiry=1w"

Cifrado de extremo a extremo (E2E)

Cifra el contenido en tu lado con AES-GCM (256 bits) y luego envía el texto cifrado como content. El servidor solo almacena los datos cifrados y nunca ve el texto plano. Se usa el mismo formato que la interfaz web.

Formato del texto cifrado: fpe1:<base64(iv)>:<base64(texto cifrado)> — donde iv es un valor aleatorio de 12 bytes y el texto cifrado incluye la etiqueta GCM.

La clave de descifrado nunca se almacena en el servidor. Si envías el parámetro opcional key, la url devuelta la incluye como #clave y el enlace es directamente utilizable; la clave solo se usa para construir el enlace, no se almacena. Para un E2E más estricto, omite key y añade tú mismo la parte #clave al enlace.
Descarga: los pastes E2E NO son descargables por defecto (/download devuelve 403 y download_url es null en la respuesta). Si se crean con downloadable=true, /download entrega el contenido cifrado "fpe1:..." (descífralo tú mismo con tu clave); el botón Descargar de la página de visualización descifra el contenido en el navegador con la #clave y lo descarga como texto plano.
Si se envía downloadable=true con un paste sin cifrar (encrypt=false), la solicitud se acepta igualmente, pero la respuesta incluye un campo "warning".
Ejemplo de solicitud (cURL)
curl -X POST https://fastpaste.xyz/api/v1/paste \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "content": "fpe1:<base64-iv>:<base64-ciphertext>", "encrypt": true, "key": "<base64url-key>", "downloadable": true, "expiry": "1d" }'
Respuesta (201 Created)
{ "error": false, "message": "Paste created successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g#<base64url-key>", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "sha256": "abc123...", "burn_after_read": false, "encrypted": true, "downloadable": true } }

GET /api/v1/paste/{id}

Obtiene los detalles y el contenido de un paste.

Los pastes protegidos por contraseña no pueden obtenerse mediante la API.
Los pastes de un solo uso se eliminan de forma permanente justo después de la primera obtención exitosa, ya sea mediante este endpoint o /raw.
Ejemplo de solicitud (cURL)
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Respuesta (200 OK)
{ "error": false, "data": { "paste_id": "aB3cD4eF5g", "title": "Test Paste", "description": null, "content": "print(\"Hello, World!\")", "content_type": "text", "original_filename": null, "language": "python", "file_size": 22, "sha256": "abc123...", "created_at": "2025-01-01 15:30:00", "expires_at": "2025-01-02 15:30:00", "view_count": 5, "burn_after_read": false, "burned": false, "encrypted": false, "downloadable": false } }

PUT /api/v1/paste/{id}

Actualiza un paste existente (solo los de esta clave API). Envía solo los campos a cambiar: content (solo texto), title, description, expiry, burn, password, language, downloadable. Si el contenido es "fpe1:...", incluye encrypt y key.

Ejemplo de solicitud (cURL)
curl -X PUT https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "Content-Type: application/json" \ -H "X-API-Key: lq_your_api_key_here" \ -d '{ "title": "Updated title", "content": "new content", "expiry": "1w" }'
Respuesta (200 OK)
{ "error": false, "message": "Paste updated successfully.", "data": { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "encrypted": false } }

GET /api/v1/pastes

Lista los pastes creados con esta clave API (más recientes primero). Paginación: page y limit (1–100).

Ejemplo de solicitud (cURL)
curl "https://fastpaste.xyz/api/v1/pastes?page=1&limit=20" \ -H "X-API-Key: lq_your_api_key_here"
Respuesta (200 OK)
{ "error": false, "data": [ { "paste_id": "aB3cD4eF5g", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "title": "Test Paste", "content_type": "text", "language": "python", "file_size": 22, "created_at": "2025-01-01 15:30:00", "expires_at": "2025-01-02 15:30:00", "view_count": 5, "encrypted": false, "downloadable": false } ], "pagination": { "page": 1, "limit": 20, "total": 1, "total_pages": 1 } }

GET /api/v1/paste/{id}/raw

Devuelve el contenido del paste como texto plano. Adecuado para scripts y automatización.

Ejemplo
curl https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g/raw \ -H "X-API-Key: lq_your_api_key_here"

Respuesta: Content-Type: text/plain

DELETE /api/v1/paste/{id}

Elimina un paste. Solo los pastes creados con la misma clave API pueden eliminarse.

Ejemplo
curl -X DELETE https://fastpaste.xyz/api/v1/paste/aB3cD4eF5g \ -H "X-API-Key: lq_your_api_key_here"
Respuesta (200 OK)
{"error": false, "message": "Paste deleted."}

POST /api/v1/cli

Cree pastes rápidamente desde la línea de comandos (curl). Envíe el contenido como cuerpo sin procesar desde stdin o como campo de formulario (content/paste/f:1). La respuesta predeterminada es una URL en texto plano.

La clave API es opcional: funciona de forma anónima sin clave (límite por IP + análisis de contenido). Con clave, el uso se atribuye a ella. El acceso anónimo puede desactivarse en el panel de administración.

Parámetro

ParámetroTipoObligatorioDescripción
(gövde)raw / formContenido del paste. Para cuerpo sin procesar, se recomienda text/plain (para conservar = y &).
expirystringNoDuración: 10m, 30m, 1h, 3h, 6h, 12h, 1d, 2d, 3d, 1w, 2w, 1m, never (predeterminado: 1d)
titlestringNoTítulo del paste
langstringNoLenguaje de resaltado de sintaxis (p. ej. python, javascript). Se detecta automáticamente si se omite; en E2E se guarda para resaltar tras el descifrado.
burnbooleanNoVer una vez y eliminar. Si es true, el paste se elimina automáticamente tras la primera visualización (predeterminado: false).
Ejemplo de solicitud (cURL)
# stdin → URL (text/plain önerilir) echo "merhaba" | curl -H "Content-Type: text/plain" --data-binary @- https://fastpaste.xyz/api/v1/cli # dosya yükle curl -H "Content-Type: text/plain" --data-binary @app.log https://fastpaste.xyz/api/v1/cli # sprunge/ix.io tarzı echo "merhaba" | curl -F 'f:1=<-' https://fastpaste.xyz/api/v1/cli # seçeneklerle cat x.py | curl -H "Content-Type: text/plain" --data-binary @- 'https://fastpaste.xyz/api/v1/cli?expiry=1w&lang=python' # API anahtarı ile (kota anahtara işlenir) cat x | curl -H "X-API-Key: lq_xxx" -H "Content-Type: text/plain" --data-binary @- https://fastpaste.xyz/api/v1/cli
Respuesta
https://fastpaste.xyz/view/aB3cD4eF5g

Accept: application/json veya ?json=1 ile JSON döner. GET /api/v1/cli kullanım örneklerini gösterir.

Extensiones de archivo permitidas

.txt .log .json .xml .yaml .yml .ini .cfg .conf .md .csv .sql .js .ts .html .htm .css .py .java .go .rs .c .cpp .h .hpp .lua .rb .jsx .tsx .vue .svelte .scss .sass .less .toml .gitignore .dockerfile .makefile .bat .ps1 .r .swift .kt .kts .scala .pl .pm .tcl .awk .sed .diff .patch .tf .hcl .proto .graphql .tex .bib .rst .adoc .org .wiki .properties .gradle .cmake .mak

Los archivos se comprueban por extensión y tipo MIME. Solo se aceptan archivos de texto/código.

Límites de velocidad

Se pueden definir límites de velocidad separados para cada clave API:

Tipo de límiteDescripción
Límite por horaSolicitudes máximas por hora (0 = ilimitado)
Límite diarioSolicitudes máximas por día
Límite mensualSolicitudes máximas por mes

Si se supera el límite, se devuelve 429 Too Many Requests.

Códigos de error

CódigoSignificado
400Solicitud incorrecta (parámetro faltante o inválido)
401Clave API faltante
403Clave API inválida/inactiva o acceso denegado
404Paste no encontrado o expirado
405Método HTTP no permitido
413Tamaño de archivo demasiado grande
429Límite de velocidad superado
500Error del servidor
503API deshabilitada

Notificaciones Webhook

Se puede configurar una URL webhook separada por clave API. Se envía una solicitud POST cuando se crea un nuevo paste:

{ "event": "paste_created", "paste_id": "aB3cD4eF5g", "type": "text", "source": "api", "api_key_name": "My App", "url": "https://fastpaste.xyz/view/aB3cD4eF5g", "raw_url": "https://fastpaste.xyz/raw/aB3cD4eF5g", "download_url": "https://fastpaste.xyz/download/aB3cD4eF5g", "expires_at": "2025-01-02 15:30:00", "created_at": "2025-01-01 15:30:00", "ip": "1.2.3.4" }

Obtener una clave API

Contacte al administrador para obtener una clave API o aumentar su límite.

Contactar al administrador