API Presend pour développeurs

Points de terminaison serveur gratuits pour des tâches courantes, plus des outils intégrables côté client. Aucune clé API requise. Aucune inscription.

Points de terminaison serveur

Hébergés sur le réseau edge de Cloudflare, ils renvoient du JSON. Usage raisonnable uniquement — aucun SLA officiel, un trafic intensif ou automatisé peut être limité sans préavis.

Utilisateurs Python : les requêtes envoyées avec le User-Agent par défaut d'urllib (Python-urllib/3.x) sont refusées par Cloudflare avec une erreur HTTP 403 et le corps error code: 1010. Définissez n'importe quel User-Agent explicite. requests, curl et Node en envoient un qui est accepté.

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

Renvoie les empreintes SHA-256, SHA-1 et SHA-512 de n'importe quel fichier jusqu'à 20 Mo.

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

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

POST /api/file-type

Détecte le vrai type d'un fichier à partir de sa signature binaire et signale un écart avec le Content-Type annoncé : repère les fichiers déguisés (par exemple un exécutable renommé en photo) qui échappent aux filtres d'upload naïfs.

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

POST /api/malware-check

Calcule l'empreinte SHA-256 d'un fichier envoyé et la compare à MalwareBazaar (abuse.ch), une base gratuite d'échantillons de malwares connus : empreinte et vérification en un seul appel.

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

GET /api/url-clean

Supprime plus de 60 paramètres de suivi (utm_*, fbclid, gclid...) d'une 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

Idem, en lot : jusqu'à 100 URL par requête.

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

Renvoie l'IP de l'appelant avec sa géolocalisation, sa devise, sa langue et des indicateurs UE/VPN.

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

GET /api/uuid

Génère des UUID aléatoires (v4), jusqu'à 100 par requête.

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

GET /api/base64

Encode ou décode du texte en Base64.

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

GET /api/jwt-decode

Décode l'en-tête et la charge utile d'un JWT (sans vérifier la signature ; pour cela, utilisez jwt-verify).

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

POST /api/jwt-verify

Vérifie réellement la signature cryptographique d'un JWT (HS256/384/512, RS/PS256/384/512, ES256/384/512) via l'API Web Crypto native des Workers, avec contrôle des claims exp/nbf. Fournir un « secret » pour HMAC, ou un « jwk »/« jwks_url » pour les algorithmes asymétriques.

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

GET /api/timestamp

Heure actuelle, ou conversion entre timestamp Unix et date ISO.

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

GET /api/color

Conversion entre les formats de couleur hex, RGB et HSL.

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

GET /api/user-agent

Analyse une chaîne User-Agent : navigateur, système d'exploitation et type d'appareil.

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

GET /api/password

Génère un mot de passe cryptographiquement sûr, avec une estimation de son entropie.

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

GET /api/email-validate

Valide la syntaxe d'un e-mail et vérifie que le domaine possède un enregistrement MX. Ne sonde pas la boîte aux lettres : cela ne prouve donc pas que l'adresse existe. Pour détecter aussi les domaines jetables et les comptes génériques, utilisez email-verify.

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

GET /api/favicon

Renvoie l'URL du favicon déclaré par un site ; si aucune icône n'est déclarée, une URL par défaut est renvoyée et signalée comme telle.

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

GET/POST /api/csv-json

Convertit entre JSON et CSV. Les objets imbriqués sont sérialisés en chaîne, pas aplatis.

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

Vérifie si un mot de passe figure dans des fuites de données connues (Have I Been Pwned). Seuls les 5 premiers caractères de son empreinte SHA-1 sont envoyés à HIBP (k-anonymat), et Presend ne l'enregistre pas. Mais c'est une requête GET : le mot de passe circule dans l'URL, que navigateurs, proxys ou journaux serveur peuvent conserver. Pour de vrais mots de passe, utilisez POST /api/password-check.

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

POST /api/password-check

Combine l'estimation de force/entropie avec une vérification optionnelle de fuite en un seul appel — le mot de passe transite dans le corps de la requête POST, jamais dans une URL. Même garantie de k-anonymat que password-breach.

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

GET /api/email-disposable

Détecte les fournisseurs d'e-mails jetables à partir d'une liste de 576 domaines connus.

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

GET /api/email-verify

Combine la vérification de syntaxe, la recherche MX, la détection de domaine jetable et la détection de compte générique (info@, admin@...) en un seul appel, gratuit et sans clé. Ne sonde pas la boîte aux lettres.

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

GET /api/phone-verify

Valide et formate un numéro de téléphone (E.164, international, national) via libphonenumber-js. Si aucun pays n'est fourni pour un numéro sans préfixe « + », le pays déduit de l'IP de l'appelant est utilisé automatiquement.

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

GET /api/email-security

Vérifie la configuration anti-usurpation e-mail d'un domaine : robustesse SPF, politique DMARC et recherche DKIM au mieux sur des sélecteurs courants.

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

GET /api/security-scan

Combine security-headers, url-reputation et subdomains en un seul rapport avec un score global et un verdict : un appel au lieu de trois.

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

POST /api/qr-scan

Décode un QR code depuis une image envoyée et, s'il pointe vers une URL, la vérifie auprès d'URLhaus (indicateurs de malware ou de phishing) : décodage et vérification de réputation en un seul appel. Le phishing par QR code (« quishing ») est l'un des vecteurs de phishing en plus forte croissance.

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

GET /api/security-headers

Audite les en-têtes de sécurité HTTP (CSP, HSTS, X-Frame-Options...) et attribue une note sous forme de lettre.

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

GET /api/url-reputation

Vérifie une URL auprès d'URLhaus, une base publique de malwares et de phishing.

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

GET /api/subdomains

Découverte passive de sous-domaines via les journaux Certificate Transparency (crt.sh), pour auditer votre propre surface d'attaque. Dépend de crt.sh, qui connaît parfois des interruptions indépendantes de notre volonté.

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

GET /api/ai-crawler-check

Récupère le robots.txt et indique quels robots d'IA connus (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, etc.) sont autorisés ou bloqués. Gratuit, sans inscription.

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

GET /api/ip-reputation

Vérifie une adresse IPv4 ou IPv6 contre une liste de blocs réseau connus pour être détournés ou contrôlés par des opérations de spam ou de cybercriminalité. Une liste précise, pas un score de réputation complet. La copie est rafraîchie au plus une fois par jour ; la réponse indique la date de la liste, l'attribution, et un indicateur stale si la source est injoignable au point que la copie a plus de 48 heures. Pour un contrôle à chaque requête dans votre propre middleware, charger la liste en local est généralement la meilleure conception.

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

GET /api/dns-lookup

Enregistrements A, AAAA, CNAME, MX, TXT et NS en un seul appel via le résolveur DNS-over-HTTPS de Cloudflare, ou un seul type avec type=.

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

GET /api/whois-lookup

Registraire, dates de création et d'expiration, âge du domaine et serveurs de noms via RDAP, le successeur HTTPS du WHOIS historique.

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

GET /api/redirect-trace

Suit toute la chaîne de redirections d'une URL (jusqu'à 15 sauts) et enregistre le code de statut et la destination de chaque saut, pas seulement l'URL finale.

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

Sécurité de la chaîne d'approvisionnement

Contrôles de risque sur les dépendances. typosquat-check et maintainer-change-check sont des heuristiques : des signaux de tri, pas des verdicts.

GET /api/typosquat-check

Signale les noms de paquets très proches d'une liste de paquets npm et PyPI connus (1 modification pour les noms de 4 à 7 caractères, 2 à partir de 8 ; les noms de 3 caractères ou moins ne sont pas comparés de façon approchée). Les noms PyPI sont normalisés (PEP 503) ; les voisins légitimes revus sont marqués known_legitimate.

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

POST /api/typosquat-check

Mode lot : jusqu'à 100 noms par requête, comptés comme une seule requête pour la limite de débit. Une entrée invalide renvoie une erreur pour cette entrée sans faire échouer le lot.

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 et PyPI. Sur npm, signale la reprise d'un paquet par un publieur humain jamais vu auparavant, après au moins 180 jours d'inactivité, au cours des 365 derniers jours : le schéma de la compromission event-stream (2018). Les passations vers un publieur qui maintient déjà un autre paquet à plus de 100 000 téléchargements hebdomadaires, et les passages au trusted publishing npm, sont signalés à part sans lever l'alerte. Il ne détecte pas un compte de mainteneur existant piraté ni une version malveillante publiée par le mainteneur d'origine, puisque l'identité du publieur ne change pas. Sur PyPI, il indique seulement l'existence et l'âge : PyPI ne publie pas qui a déposé chaque version, donc l'analyse des publieurs renvoie maintainer_analysis: "npm_only". Sur les deux registres, first_published et package_age_days donnent l'âge du paquet, et new_package vaut true pour un paquet publié pour la première fois il y a moins de 30 jours. Sur PyPI, l'âge est celui du plus ancien fichier encore présent : des versions supprimées rajeunissent un projet.

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

POST /api/maintainer-change-check

Mode lot : jusqu'à 20 paquets d'un même registre (npm ou PyPI) par requête, comptés comme une seule requête pour la limite de débit. Un paquet introuvable ou une panne du registre est signalé entrée par entrée, sans faire échouer le lot.

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

Vérifie la version d'un paquet auprès d'OSV.dev : npm, PyPI, Go, crates.io, Maven, RubyGems, Packagist, NuGet. Pour rechercher directement un identifiant CVE ou GHSA, utilisez cve-lookup. Sans version, les avis concernant n'importe quelle version sont comptés (scope). Pour npm et PyPI, un nom qui n'existe pas renvoie found: false et vulnerable: null, jamais un résultat « propre ».

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

GET /api/repo-health-check

Étoiles, forks, issues ouvertes, licence, statut d'archivage et jours depuis le dernier push d'un dépôt GitHub, via l'API REST de GitHub.

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

GET /api/supply-chain-check

Combine maintainer-change-check (analyse des publieurs, npm uniquement), vulnerability-check, typosquat-check et repo-health-check (dépôt déduit des métadonnées du registre quand c'est possible) en un seul appel, avec un verdict global. Un paquet publié pour la première fois il y a moins de 30 jours est signalé new_package, et le verdict est alors au moins review_recommended. Les vulnérabilités sont vérifiées pour le paramètre facultatif version, sinon pour la dernière version publiée (version_checked, version_source).

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

Blockchain

Outils pour les chaînes Cosmos SDK et EVM : filtrage des sanctions, décodage de transactions et audit de nœuds RPC.

GET /api/address-risk

Vérifie une adresse crypto contre toutes les listes d'adresses de monnaies numériques de la liste SDN de l'OFAC. Les adresses EVM (0x...) et Bitcoin (bc1..., 1..., 3...) sont entièrement couvertes ; celles des autres chaînes sont signalées si elles figurent sur une liste. Les adresses Cosmos SDK (bech32) renvoient sanctioned: null lorsqu'elles ne sont pas listées, l'OFAC n'ayant publié aucune entrée pour les chaînes Cosmos SDK.

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

GET /api/tx-decode

Décode une transaction Cosmos SDK brute et signée (octets protobuf TxRaw, en base64) en JSON lisible : messages, frais, gas, informations du signataire, signatures. Sans dépendance externe ; décode les types de messages bank/staking/gov/authz courants, y compris les MsgExec imbriqués.

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

GET /api/rpc-check

Audite un endpoint RPC CometBFT public d'une chaîne Cosmos SDK : état du nœud, santé, connectivité aux pairs, et exposition éventuelle de méthodes d'administration non sûres (dial_seeds, dial_peers, unsafe_flush_mempool). En lecture seule : n'invoque jamais lui-même de méthode non sûre.

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

Utilitaires

Petits outils ciblés, sans dépendance externe autant que possible.

GET /api/iban-validate

Valide un IBAN via la somme de contrôle ISO 7064 mod-97, avec vérification de la longueur propre à chaque pays. Pur algorithme, sans source de données externe.

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

GET /api/vat-validate

Valide un numéro de TVA intracommunautaire en temps réel via le service officiel VIES de la Commission européenne ; renvoie le nom et l'adresse de l'entreprise enregistrée lorsqu'il est valide.

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

Extrait les métadonnées Open Graph, Twitter Card et <head> de base d'une URL : les données utilisées pour afficher l'aperçu d'un lien dans une messagerie. Renvoie aussi le favicon et, après les redirections (chacune vérifiée), l'URL finale.

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

GET /api/cve-lookup

Recherche directe d'une CVE ou d'un GHSA par identifiant via OSV.dev. Complète vulnerability-check (qui demande paquet, écosystème et version) lorsque vous disposez déjà d'un identifiant tiré d'un rapport de scanner.

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

Workflows enchaînés

Ces points de terminaison traitent des fichiers ou du texte côté serveur en un seul appel. Le traitement est sans état : rien n'est écrit sur disque, rien n'est journalisé, et les données envoyées sont supprimées dès l'envoi de la réponse.

POST /api/merge-and-compress-pdf

Fusionne 2 fichiers PDF ou plus en un seul document, puis compresse le résultat et supprime les métadonnées (titre, auteur, producteur) — en une seule requête plutôt que deux.

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

Supprime les EXIF/GPS d'un JPEG et les métadonnées textuelles d'un PNG par analyse binaire directe — les pixels ne sont jamais réencodés, donc aucune perte de qualité (contrairement aux approches par canvas, qui recompressent toujours).

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

Empreinte perceptuelle (dHash) pour 1 ou 2 images JPEG/PNG. Contrairement à une empreinte cryptographique, elle résiste à la recompression et aux retouches mineures ; envoyez 2 images pour les comparer directement, avec un score de similarité et un verdict.

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

POST /api/text-similarity

SimHash pour 1 ou 2 textes, l'équivalent textuel d'image-similarity. Détecte les contenus quasi identiques, paraphrasés ou légèrement retouchés, contrairement à une empreinte cryptographique. Deux textes sans rapport obtiennent en général un score d'environ 50 % par hasard, et non 0 %.

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

Outils côté client (à intégrer)

La plupart des outils de traitement de fichiers (suppression EXIF, compression PDF, etc.) existent aussi en version navigateur, sous forme de widgets autonomes : rien n'est envoyé. Préférez-les à l'API ci-dessus si vous voulez une interface prête à l'emploi plutôt qu'un appel serveur. Intégrez-les directement :

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

Outils disponibles

Vérificateur d'empreintes

SHA-256 / SHA-1 / SHA-512 — API serveur disponible

Docs →

Nettoyeur d'URL

Supprime les paramètres de suivi — API serveur disponible

Docs →

Géolocalisation IP

IP, localisation, devise — API serveur disponible

Docs →

Générateur d'UUID

UUID aléatoires — API serveur disponible

Docs →

Encodeur/décodeur Base64

Encoder/décoder du texte — API serveur disponible

Docs →

Décodeur JWT

Décoder des jetons JWT — API serveur disponible

Docs →

Convertisseur de timestamps

Conversion de dates Unix/ISO — API serveur

Docs →

Convertisseur de couleurs

Hex/RGB/HSL — API serveur

Docs →

Analyseur de User-Agent

Détection navigateur/OS — API serveur

Docs →

API de génération de mots de passe

Mots de passe sûrs avec entropie — API serveur

Docs →

Validateur d'e-mails

Vérification syntaxe + MX — API serveur

Docs →

Récupérateur de favicon

Favicon de n'importe quel site — API serveur

Docs →

Convertisseur CSV/JSON

Dans les deux sens — API serveur

Docs →

Vérification de fuite de mot de passe

Basé sur HIBP — API serveur

Docs →

Détecteur d'e-mails jetables

576 domaines connus — API serveur

Docs →

Analyseur d'en-têtes de sécurité

Note CSP, HSTS — API serveur

Docs →

Réputation d'URL

Recherche malware/phishing — API serveur

Docs →

Découverte de la surface d'attaque

Énumération passive de sous-domaines — API serveur

Docs →

Risque d'adresse (OFAC)

Vérification des sanctions OFAC (EVM, Bitcoin) — API serveur

Docs →

Décodeur de transactions Cosmos

Décode les transactions brutes Cosmos SDK — API serveur

Docs →

Vérification RPC

Audit d'un point de terminaison RPC CometBFT — API serveur

Docs →

Suppression EXIF

Supprime GPS et métadonnées des photos (côté client)

Docs →

Compression PDF

Réduit la taille des PDF (côté client)

Docs →

Générateur de mots de passe

Mots de passe cryptographiquement sûrs (côté client)

Docs →

Paquet npm

Un client JS sans dépendance qui encapsule tous les points de terminaison ci-dessus.

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

Voir sur npm

Widget intégrable

Ajoutez un outil fonctionnel directement sur votre site — sans iframe, propulsé par notre API. Compatible avec : url-cleaner, uuid, color.

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

Ajoutez data-badge="false" pour masquer le lien de crédit « Powered by Presend ».

Spécification OpenAPI

Spécification lisible par machine pour tous les points de terminaison serveur : openapi.json

RapidAPI

Également disponible sur RapidAPI, en fiches séparées par domaine si vous n'avez besoin que d'une partie du catalogue :

Statut

Disponibilité en direct, surveillée de façon indépendante depuis 4 régions (UE, États-Unis, Asie, Australie), vérifiée toutes les 3 minutes.

presend.betteruptime.com

Collection Postman

Collection prête à importer couvrant les 48 points de terminaison, générée à partir de la spécification OpenAPI ci-dessus.

Run in Postman

Ou téléchargez le fichier brut : postman_collection.json.

Open Source

Tous les outils sont open source. Contribuez sur GitHub ou forkez pour vos propres projets. github.com/presendapp/presend-source