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"
GET /api/link-metadata
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
URL Cleaner
Elimina parámetros de seguimiento — API de servidor disponible
IP Geolocation
IP, ubicación, moneda — API de servidor disponible
UUID Generator
UUID aleatorios — API de servidor disponible
Base64 Encoder/Decoder
Codifica/decodifica texto — API de servidor disponible
JWT Decoder
Decodifica tokens JWT — API de servidor disponible
Timestamp Converter
Conversión de fechas Unix/ISO — API de servidor
Color Converter
Hex/RGB/HSL — API de servidor
User-Agent Parser
Detección de navegador/SO — API de servidor
Password Generator API
Contraseñas seguras con entropía — API de servidor
Email Validator
Sintaxis + registro MX — API de servidor
Favicon Fetcher
Favicon de cualquier sitio — API de servidor
CSV/JSON Converter
Bidireccional — API de servidor
Password Breach Check
Basado en HIBP — API de servidor
Disposable Email Detector
Más de 576 dominios conocidos — API de servidor
Security Headers Analyzer
Calificación CSP, HSTS — API de servidor
URL Reputation Check
Búsqueda de malware/phishing — API de servidor
Attack Surface Discovery
Enumeración pasiva de subdominios — API de servidor
Address Risk Check
Comprobación de sanciones OFAC (EVM, Bitcoin) — API de servidor
Cosmos Tx Decoder
Decodifica transacciones Cosmos SDK en bruto — API de servidor
RPC Check
Audita un endpoint RPC de CometBFT — API de servidor
EXIF Remover
Elimina el GPS y los metadatos de las fotos (en el cliente)
PDF Compress
Reduce el tamaño de archivos PDF (en el cliente)
Password Generator
Contraseñas criptográficamente seguras (en el cliente)
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);
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:
- Presend API -- el catálogo completo (Cybersecurity)
- Presend Blockchain & Crypto Compliance API -- comprobaciones OFAC, decodificación de transacciones Cosmos SDK, auditoría RPC (Finance)
- Presend Email & Phone Verification API -- verificación de correos electrónicos y teléfonos (Email)
- Presend Developer Tools API -- UUID, Base64, marcas de tiempo, geolocalización IP, herramientas PDF e imagen (Tools)
Estado
Disponibilidad en tiempo real, supervisada de forma independiente desde 4 regiones (UE, EE. UU., Asia, Australia), comprobada cada 3 minutos.
Colección de Postman
Colección lista para importar que cubre los 48 endpoints, generada a partir de la especificación OpenAPI anterior.
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