API de Presend para desarrolladores

Endpoints de servidor gratuitos para tareas comunes, además de herramientas integrables del lado del cliente. Sin clave API. Sin registro.

Endpoints de servidor

Se ejecutan en la red edge de Cloudflare y devuelven JSON. Solo uso razonable — sin SLA oficial, el tráfico intenso o automatizado puede ser limitado sin aviso.

Usuarios de Python: las solicitudes enviadas con el User-Agent predeterminado de urllib (Python-urllib/3.x) son rechazadas por Cloudflare con HTTP 403 y el cuerpo error code: 1010. Defina cualquier User-Agent explícito. requests, curl y Node envían uno que se acepta.

import json, urllib.request
req = urllib.request.Request("https://presend.pages.dev/api/uuid", headers={"User-Agent": "my-app/1.0"})
print(json.load(urllib.request.urlopen(req)))

POST /api/hash

Devuelve SHA-256, SHA-1 y SHA-512 de cualquier archivo de hasta 20 MB.

curl -X POST --data-binary @file.pdf \
  https://presend.pages.dev/api/hash

# {"size_bytes":17,"hashes":{"sha256":"...","sha1":"...","sha512":"..."}}

POST /api/file-type

Detecta el tipo real de un archivo a partir de su firma binaria y señala si no coincide con el Content-Type declarado: detecta archivos disfrazados (p. ej., un ejecutable renombrado como foto) que pasan los filtros de subida ingenuos.

curl -X POST --data-binary @suspicious.jpg -H "Content-Type: image/jpeg" https://presend.pages.dev/api/file-type

POST /api/malware-check

Calcula el hash (SHA-256) de un archivo subido y lo comprueba en MalwareBazaar (abuse.ch), una base de datos gratuita de muestras de malware conocidas: hash y comprobación en una sola llamada.

curl -X POST --data-binary @file.exe https://presend.pages.dev/api/malware-check

GET /api/url-clean

Elimina más de 60 parámetros de seguimiento (utm_*, fbclid, gclid...) de una URL.

curl "https://presend.pages.dev/api/url-clean?url=https://example.com/?utm_source=x"

# {"clean":"https://example.com/","removed":1,"valid":true}

POST /api/url-clean

Lo mismo, por lotes: hasta 100 URL por solicitud.

curl -X POST -H "Content-Type: application/json" \
  -d '{"urls":["https://a.com?fbclid=x","https://b.com?gclid=y"]}' \
  https://presend.pages.dev/api/url-clean

GET /api/ip

Devuelve la IP de quien llama con geolocalización, moneda, idioma e indicadores de UE y VPN.

curl https://presend.pages.dev/api/ip

GET /api/uuid

Genera UUID aleatorios (v4), hasta 100 por solicitud.

curl "https://presend.pages.dev/api/uuid?count=5"

GET /api/base64

Codifica o decodifica texto en Base64.

curl "https://presend.pages.dev/api/base64?action=encode&text=hello"

GET /api/jwt-decode

Decodifica la cabecera y la carga útil de un JWT (sin verificar la firma; para ello, use jwt-verify).

curl "https://presend.pages.dev/api/jwt-decode?token=eyJhbGci..."

POST /api/jwt-verify

Verifica realmente la firma criptográfica de un JWT (HS256/384/512, RS/PS256/384/512, ES256/384/512) mediante la API Web Crypto nativa de Workers, además de comprobar los claims exp/nbf. Proporcione un «secret» para HMAC, o un «jwk»/«jwks_url» para algoritmos asimétricos.

curl -X POST -H "Content-Type: application/json" -d '{"token":"...","secret":"..."}' https://presend.pages.dev/api/jwt-verify

GET /api/timestamp

Hora actual, o conversión entre marca de tiempo Unix y fecha ISO.

curl "https://presend.pages.dev/api/timestamp?unix=1700000000"

GET /api/color

Convierte entre los formatos de color hex, RGB y HSL.

curl "https://presend.pages.dev/api/color?hex=ff5733"

GET /api/user-agent

Analiza una cadena User-Agent para obtener navegador, sistema operativo y tipo de dispositivo.

curl "https://presend.pages.dev/api/user-agent"

GET /api/password

Genera una contraseña criptográficamente segura con estimación de entropía.

curl "https://presend.pages.dev/api/password?length=20&symbols=1"

GET /api/email-validate

Valida la sintaxis del correo y comprueba que el dominio tiene un registro MX. No sondea el buzón, por lo que no puede confirmar que la dirección exista; use email-verify para detectar también dominios desechables y cuentas de rol.

curl "https://presend.pages.dev/api/email-validate?email=foo@example.com"

GET /api/favicon

Obtiene la URL del favicon de cualquier dominio.

curl "https://presend.pages.dev/api/favicon?domain=github.com"

GET/POST /api/csv-json

Convierte entre JSON y CSV. Los objetos anidados se convierten en cadenas, no se aplanan.

curl -X POST -H "Content-Type: application/json" \
  -d '{"direction":"json-to-csv","data":"[{\"a\":1}]"}' \
  https://presend.pages.dev/api/csv-json

GET /api/password-breach

Comprueba si una contraseña aparece en filtraciones de datos conocidas (Have I Been Pwned). Solo se envían a HIBP los 5 primeros caracteres de su hash SHA-1 (k-anonimato), y Presend no la registra. Pero es una solicitud GET, así que la contraseña viaja en la URL, donde navegadores, proxies o registros de servidor pueden guardarla: para contraseñas reales, use POST /api/password-check.

curl "https://presend.pages.dev/api/password-breach?password=..."

POST /api/password-check

Combina la puntuación de fortaleza/entropía con una verificación opcional de filtración en una sola llamada — la contraseña viaja en el cuerpo de la solicitud POST, nunca en una URL. Misma garantía de k-anonimato que password-breach.

curl -X POST -H "Content-Type: application/json" -d '{"password":"..."}' https://presend.pages.dev/api/password-check

GET /api/email-disposable

Detecta proveedores de correo desechable a partir de una lista de más de 576 dominios conocidos.

curl "https://presend.pages.dev/api/email-disposable?email=foo@mailinator.com"

GET /api/email-verify

Combina verificación de sintaxis, búsqueda MX, detección de dominio desechable y detección de cuenta genérica (info@, admin@...) en una sola llamada .

curl "https://presend.pages.dev/api/email-verify?email=foo@example.com"

GET /api/phone-verify

Valida y formatea un número de teléfono (E.164, internacional, nacional) mediante libphonenumber-js. Si no se indica un país para un número sin prefijo «+», se usa automáticamente el país inferido de la IP del solicitante.

curl "https://presend.pages.dev/api/phone-verify?number=%2B14155552671"

GET /api/email-security

Comprueba la configuración antisuplantación del correo de un dominio: solidez de SPF, política DMARC y una búsqueda DKIM de mejor esfuerzo con selectores habituales.

curl "https://presend.pages.dev/api/email-security?domain=example.com"

GET /api/security-scan

Combina security-headers, url-reputation y subdomains en un único informe con puntuación global y veredicto: una llamada en lugar de tres.

curl "https://presend.pages.dev/api/security-scan?url=https://example.com"

POST /api/qr-scan

Decodifica un código QR de una imagen subida y, si enlaza a una URL, la comprueba en URLhaus en busca de indicios de malware o phishing: decodificación y comprobación de reputación en una sola llamada. El phishing con códigos QR («quishing») es uno de los vectores de phishing que más crecen.

curl -X POST -F "file=@qrcode.png" https://presend.pages.dev/api/qr-scan

GET /api/security-headers

Audita las cabeceras de seguridad HTTP (CSP, HSTS, X-Frame-Options...) y asigna una calificación con letra.

curl "https://presend.pages.dev/api/security-headers?url=https://example.com"

GET /api/url-reputation

Comprueba una URL en URLhaus, una base de datos pública de malware y phishing.

curl "https://presend.pages.dev/api/url-reputation?url=https://example.com"

GET /api/subdomains

Descubrimiento pasivo de subdominios mediante los registros de Certificate Transparency (crt.sh), para auditar su propia superficie de ataque. Nota: depende de crt.sh, que a veces sufre caídas ajenas a nuestro control.

curl "https://presend.pages.dev/api/subdomains?domain=example.com"

GET /api/ai-crawler-check

Obtiene robots.txt e indica qué rastreadores de IA conocidos (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, etc.) están permitidos o bloqueados. Gratis, sin registro.

curl "https://presend.pages.dev/api/ai-crawler-check?domain=example.com"

GET /api/ip-reputation

Comprueba una dirección IPv4 o IPv6 en una lista curada de bloques de red que se sabe que han sido secuestrados o están controlados por operaciones de spam o ciberdelincuencia. Una lista concreta, no una puntuación de reputación completa. La copia se actualiza como máximo una vez al día; la respuesta incluye la fecha de la lista, la atribución y un indicador stale si la fuente ha estado inaccesible el tiempo suficiente para que la copia tenga más de 48 horas. Para comprobar cada solicitud en su propio middleware, cargar la lista localmente suele ser el mejor diseño.

curl "https://presend.pages.dev/api/ip-reputation?ip=1.2.3.4"

GET /api/dns-lookup

Registros A, AAAA, CNAME, MX, TXT y NS en una sola llamada mediante el resolvedor DNS sobre HTTPS de Cloudflare, o un solo tipo con type=.

curl "https://presend.pages.dev/api/dns-lookup?domain=example.com"

GET /api/whois-lookup

Registrador, fechas de creación y caducidad, antigüedad del dominio y servidores de nombres mediante RDAP, el sucesor basado en HTTPS del WHOIS tradicional.

curl "https://presend.pages.dev/api/whois-lookup?domain=example.com"

GET /api/redirect-trace

Sigue la cadena completa de redirecciones de una URL (hasta 15 saltos) y registra el código de estado y el destino de cada salto, no solo la URL final.

curl "https://presend.pages.dev/api/redirect-trace?url=http://github.com"

Seguridad de la cadena de suministro

Comprobaciones de riesgo de dependencias. typosquat-check y maintainer-change-check son heurísticas: señales para priorizar, no veredictos.

GET /api/typosquat-check

Señala nombres de paquetes muy parecidos a los de una lista curada de paquetes npm y PyPI conocidos (1 edición para nombres de 4 a 7 caracteres, 2 a partir de 8; los nombres de 3 caracteres o menos no se comparan de forma aproximada). Los nombres de PyPI se normalizan (PEP 503); los parecidos legítimos revisados se marcan con known_legitimate.

curl "https://presend.pages.dev/api/typosquat-check?ecosystem=npm&package=lodahs"

POST /api/typosquat-check

Modo por lotes: hasta 100 nombres por solicitud, contados como una sola solicitud para el límite de uso. Una entrada no válida devuelve un error para esa entrada sin hacer fallar el lote.

curl -X POST -H "Content-Type: application/json" -d '{"ecosystem":"npm","packages":["lodahs","expres","react"]}' https://presend.pages.dev/api/typosquat-check

GET /api/maintainer-change-check

npm y PyPI. En npm, señala cuando un publicador humano nunca visto antes toma el control de un paquete tras más de 180 días de inactividad, en los últimos 365 días: el patrón del compromiso de event-stream (2018). Los traspasos a un publicador que ya mantiene otro paquete con más de 100 000 descargas semanales, y el paso a la publicación de confianza de npm (trusted publishing), se informan aparte sin activar la alerta. No detecta una cuenta de mantenedor existente secuestrada ni una versión maliciosa del mantenedor original, ya que la identidad del publicador no cambia. En PyPI, solo indica existencia y antigüedad: PyPI no expone quién publicó cada versión, por lo que el análisis de publicadores devuelve maintainer_analysis: "npm_only". En ambos registros, first_published y package_age_days dan la antigüedad del paquete, y new_package es true para un paquete publicado por primera vez hace menos de 30 días. En PyPI, la antigüedad es la del archivo más antiguo que sigue en PyPI: las versiones eliminadas hacen que un proyecto parezca más reciente.

curl "https://presend.pages.dev/api/maintainer-change-check?ecosystem=npm&package=lodash"

POST /api/maintainer-change-check

Modo por lotes: hasta 20 paquetes de un mismo registro (npm o PyPI) por solicitud, contados como una sola solicitud para el límite de uso. Un paquete inexistente o un fallo del registro se informa por entrada sin hacer fallar el lote.

curl -X POST -H "Content-Type: application/json" -d '{"ecosystem":"npm","packages":["lodash","express"]}' https://presend.pages.dev/api/maintainer-change-check

GET /api/vulnerability-check

Comprueba una versión de paquete en OSV.dev: npm, PyPI, Go, crates.io, Maven, RubyGems, Packagist, NuGet. Para buscar directamente un identificador CVE o GHSA, use cve-lookup. Sin versión, se cuentan los avisos que afectan a cualquier versión (scope). En npm y PyPI, un nombre que no existe devuelve found: false y vulnerable: null, nunca un resultado limpio.

curl "https://presend.pages.dev/api/vulnerability-check?ecosystem=npm&package=lodash&version=4.17.15"

GET /api/repo-health-check

Estrellas, forks, issues abiertos, licencia, estado de archivo y días desde el último push de un repositorio de GitHub, mediante la API REST de GitHub.

curl "https://presend.pages.dev/api/repo-health-check?repo=lodash/lodash"

GET /api/supply-chain-check

Combina maintainer-change-check (análisis de publicadores, solo npm), vulnerability-check, typosquat-check y repo-health-check (repositorio obtenido de los metadatos del registro cuando es posible) en una sola llamada con un veredicto global. Un paquete publicado por primera vez hace menos de 30 días se marca como new_package, y el veredicto es entonces al menos review_recommended. Las vulnerabilidades se comprueban para el parámetro opcional version o, si no, para la última versión publicada (version_checked, version_source).

curl "https://presend.pages.dev/api/supply-chain-check?ecosystem=npm&package=lodash"

Blockchain

Herramientas gratuitas para los ecosistemas Cosmos y EVM. Sin registro, sin clave de API.

GET /api/address-risk

Comprueba una dirección cripto en todas las listas de direcciones de monedas digitales de la lista SDN (Specially Designated Nationals) de la OFAC. Las direcciones EVM (0x...) y Bitcoin (bc1..., 1..., 3...) están totalmente cubiertas; las de otras cadenas se señalan si figuran en la lista. Las direcciones Cosmos SDK (bech32) devuelven sanctioned: null si no figuran, ya que la OFAC no ha publicado ninguna entrada para cadenas Cosmos SDK.

curl "https://presend.pages.dev/api/address-risk?address=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"

GET /api/tx-decode

Decodifica una transacción Cosmos SDK firmada y en bruto (bytes TxRaw de protobuf, en base64) a JSON legible -- mensajes, comisión, gas, información del firmante, firmas. Sin dependencias externas; decodifica los tipos de mensaje habituales de bank/staking/gov/authz, incluido MsgExec anidado.

curl "https://presend.pages.dev/api/tx-decode?tx=CpwBCpEBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEnEK..."

GET /api/rpc-check

Audita un endpoint RPC público de CometBFT de una cadena Cosmos SDK: estado del nodo, salud, conectividad con pares y si parecen estar expuestos métodos administrativos inseguros (dial_seeds, dial_peers, unsafe_flush_mempool). Solo lectura -- nunca invoca ningún método inseguro.

curl "https://presend.pages.dev/api/rpc-check?url=https://cosmos-rpc.publicnode.com"

Utilidades

Herramientas pequeñas y específicas, sin dependencias externas siempre que es posible.

GET /api/iban-validate

Valida un IBAN mediante la suma de control ISO 7064 mod-97, con comprobación de longitud por país. Algoritmo puro -- sin fuente de datos externa.

curl "https://presend.pages.dev/api/iban-validate?iban=DE89370400440532013000"

GET /api/vat-validate

Valida un número de IVA de la UE en tiempo real mediante el servicio oficial VIES de la Comisión Europea -- devuelve el nombre y la dirección registrados de la empresa si es válido.

curl "https://presend.pages.dev/api/vat-validate?country=IE&vat=6388047V"

Extrae metadatos Open Graph, Twitter Card y básicos de <head> de una URL -- los mismos datos que usan las apps de chat para mostrar una vista previa del enlace. También devuelve el favicon y, tras seguir las redirecciones (cada una verificada), la URL final.

curl "https://presend.pages.dev/api/link-metadata?url=https://github.com/presendapp/presend-source"

GET /api/cve-lookup

Búsqueda directa de CVE/GHSA por identificador mediante OSV.dev. Complementa a vulnerability-check (que necesita paquete, ecosistema y versión) cuando ya tiene un identificador de un informe de escáner.

curl "https://presend.pages.dev/api/cve-lookup?id=CVE-2021-44228"

Flujos encadenados

Estos dos endpoints encadenan múltiples operaciones en el servidor en una sola llamada . El procesamiento es sin estado: nada se escribe en disco, nada se registra, el archivo se descarta en cuanto se envía la respuesta.

POST /api/merge-and-compress-pdf

Combina 2 o más archivos PDF en un solo documento, luego comprime el resultado y elimina los metadatos (título, autor, productor) — en una sola solicitud en lugar de dos.

curl -X POST -F "files=@a.pdf" -F "files=@b.pdf" https://presend.pages.dev/api/merge-and-compress-pdf -o merged.pdf

POST /api/clean-image

Elimina EXIF/GPS de JPEG y metadatos de texto de PNG mediante análisis binario directo — los píxeles nunca se recodifican, por lo que no hay pérdida de calidad (a diferencia de los enfoques basados en canvas, que siempre recomprimen).

curl -X POST --data-binary @photo.jpg -H "Content-Type: image/jpeg" https://presend.pages.dev/api/clean-image -o clean.jpg

POST /api/image-similarity

Hash perceptual (dHash) para 1 o 2 imágenes JPEG/PNG. A diferencia de un hash criptográfico, resiste la recompresión y pequeñas ediciones: envíe 2 imágenes para compararlas directamente con una puntuación de similitud y un veredicto.

curl -X POST -F "files=@a.jpg" -F "files=@b.png" https://presend.pages.dev/api/image-similarity

POST /api/text-similarity

SimHash para 1 o 2 textos: el equivalente para texto de image-similarity. Detecta contenido casi duplicado, parafraseado o ligeramente editado, a diferencia de un hash criptográfico. Dos textos sin relación suelen obtener ~50 % por azar, no 0 %.

curl -X POST -H "Content-Type: application/json" -d '{"texts":["text a","text b"]}' https://presend.pages.dev/api/text-similarity

Herramientas del lado del cliente (embed)

La mayoría de las herramientas de procesamiento de archivos (eliminar EXIF, comprimir PDF, etc.) también funcionan completamente en el navegador como widgets independientes: no se sube nada. Úsalas en lugar de la API anterior si quieres una interfaz lista para usar en vez de una llamada al servidor. Intégralas directamente:

<iframe 
  src="https://presend.pages.dev/tools/exif-remover?embed=1" 
  width="100%" 
  height="600" 
  frameborder="0"
></iframe>

Herramientas disponibles

File Hash Checker

SHA-256 / SHA-1 / SHA-512 — API de servidor disponible

Docs →

URL Cleaner

Elimina parámetros de seguimiento — API de servidor disponible

Docs →

IP Geolocation

IP, ubicación, moneda — API de servidor disponible

Docs →

UUID Generator

UUID aleatorios — API de servidor disponible

Docs →

Base64 Encoder/Decoder

Codifica/decodifica texto — API de servidor disponible

Docs →

JWT Decoder

Decodifica tokens JWT — API de servidor disponible

Docs →

Timestamp Converter

Conversión de fechas Unix/ISO — API de servidor

Docs →

Color Converter

Hex/RGB/HSL — API de servidor

Docs →

User-Agent Parser

Detección de navegador/SO — API de servidor

Docs →

Password Generator API

Contraseñas seguras con entropía — API de servidor

Docs →

Email Validator

Sintaxis + registro MX — API de servidor

Docs →

Favicon Fetcher

Favicon de cualquier sitio — API de servidor

Docs →

CSV/JSON Converter

Bidireccional — API de servidor

Docs →

Password Breach Check

Basado en HIBP — API de servidor

Docs →

Disposable Email Detector

Más de 576 dominios conocidos — API de servidor

Docs →

Security Headers Analyzer

Calificación CSP, HSTS — API de servidor

Docs →

URL Reputation Check

Búsqueda de malware/phishing — API de servidor

Docs →

Attack Surface Discovery

Enumeración pasiva de subdominios — API de servidor

Docs →

Address Risk Check

Comprobación de sanciones OFAC (EVM, Bitcoin) — API de servidor

Docs →

Cosmos Tx Decoder

Decodifica transacciones Cosmos SDK en bruto — API de servidor

Docs →

RPC Check

Audita un endpoint RPC de CometBFT — API de servidor

Docs →

EXIF Remover

Elimina el GPS y los metadatos de las fotos (en el cliente)

Docs →

PDF Compress

Reduce el tamaño de archivos PDF (en el cliente)

Docs →

Password Generator

Contraseñas criptográficamente seguras (en el cliente)

Docs →

Paquete npm

Un cliente JS sin dependencias que envuelve todos los endpoints anteriores.

npm install presend-api
const presend = require('presend-api');
const { uuids } = await presend.generateUuid(3);

Ver en npm

Widget integrable

Añade una herramienta funcional directamente en tu sitio — sin iframe, impulsada por nuestra API. Compatible con: url-cleaner, uuid, color.

<div data-presend-tool="url-cleaner"></div>
<script src="https://presend.pages.dev/widget.js" async></script>

Añade data-badge="false" para ocultar el enlace de crédito "Powered by Presend".

Especificación OpenAPI

Especificación legible por máquina para todos los endpoints de servidor: openapi.json

RapidAPI

También disponible en RapidAPI, en fichas separadas por área si solo necesita una parte del catálogo:

Estado

Disponibilidad en tiempo real, supervisada de forma independiente desde 4 regiones (UE, EE. UU., Asia, Australia), comprobada cada 3 minutos.

presend.betteruptime.com

Colección de Postman

Colección lista para importar que cubre los 48 endpoints, generada a partir de la especificación OpenAPI anterior.

Run in Postman

O descargue el archivo en bruto: postman_collection.json.

Código abierto

Todas las herramientas son de código abierto. Contribuye en GitHub o haz un fork para tus propios proyectos. github.com/presendapp/presend-source