Chaque outil disponible est un endpoint JSON sous https://api.ferrlens.com. Envoyez un POST avec un corps JSON, recevez du JSON. Pas d'authentification : les requêtes anonymes partagent un budget par IP, voir Limites de débit.

curl -X POST https://api.ferrlens.com/v1/dns/lookup \
  -H 'content-type: application/json' \
  -d '{"domain":"example.com"}'

Erreurs

Une requête en échec renvoie un statut non 2xx et un corps avec un code stable :

{ "code": "INVALID_STRATEGY", "message": "strategy must be 'mobile' or 'desktop'" }

Raisonnez sur code, pas sur message. Un 429 porte RATE_LIMITED et un en-tête Retry-After.

Les URL soumises doivent être publiques. Les adresses qui résolvent vers des plages privées ou internes sont refusées.

DNS

Endpoint Requête Réponse
POST /v1/dns/lookup domain domain, records (kind, records[]), total
POST /v1/dns/propagation domain, kind (A par défaut) domain, kind, distinct_answers, hits[]
POST /v1/dns/reverse ip ip, hostnames[]

kind pour la propagation vaut A, AAAA, MX, TXT, NS, CNAME ou SOA. Chaque entrée de hits correspond à un résolveur public : resolver, resolver_label, resolver_ip, timings_ms, records, error. Quand distinct_answers n'a qu'une entrée, tous les résolveurs sont d'accord.

Email

Endpoint Requête Réponse
POST /v1/email/spf-dmarc domain spf, dmarc, dkim_selectors[], score, notes[]
POST /v1/email/blacklist target (domaine ou IP) target, resolved_ip, checked, listed, errored, entries[]
POST /v1/email/verify email syntax_valid, local_part, domain, disposable, role_based, mx[], has_mx

SEO et web

Endpoint Requête Réponse
POST /v1/seo/check url, strategy (mobile par défaut, ou desktop) url, fetched_at, scores, core_web_vitals, notes[], findings[]
POST /v1/seo/check/stream identique server-sent events
POST /v1/seo/robots domain, user_agent, test_path url, status, raw, groups[], sitemaps[], matched_agent, test_result
POST /v1/seo/sitemap url url, status, is_index, url_count, sample[], children[], warnings[]
POST /v1/web/meta url url, final_url, title, entries[], counts
POST /v1/web/og-preview url url, final_url, card, warnings[]
POST /v1/web/mixed-content url url, final_url, is_https, mixed[], total
POST /v1/web/cors url, origin, method (GET par défaut) preflight, actual, checks[]
POST /v1/web/ct-search domain domain, total, unique_sans, certificates[]
POST /v1/http/headers url url, final_url, status, headers, timings_ms, redirects[]
POST /v1/http/sec-headers url url, final_url, status, total_score, grade, checks[]

scores contient performance, seo, accessibility et best_practices, chacun un nombre ou null. Les résultats SEO sont mis en cache 24 heures par URL et par stratégie.

La variante stream envoie d'abord accepted, puis vitals, scores et notes au fil de leur disponibilité, et se termine par done ou error. Un résultat en cache arrive en un seul événement cached suivi de done.

Vérification de liens

POST /v1/link-check parcourt un site depuis url et rapporte le statut de chaque lien trouvé.

Champ Défaut Limites
url requis
max_depth 2 borné entre 1 et 3
max_pages 200 borné entre 10 et 500

Le parcours respecte robots.txt, patiente entre les requêtes et s'arrête après 60 secondes. La réponse liste les pages parcourues et un summary avec total, broken, redirects, ok, external, blocked_by_robots, blocked et unreachable.

Partages

POST /v1/shares, GET /v1/shares/{id} et DELETE /v1/shares/{id} sont décrits dans Liens de partage.