<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Presendapp</title>
    <description>The latest articles on DEV Community by Presendapp (@presend).</description>
    <link>https://dev.to/presend</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4096008%2F532e1fbc-40d1-4c2b-a227-7d0493d98886.png</url>
      <title>DEV Community: Presendapp</title>
      <link>https://dev.to/presend</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/presend"/>
    <language>en</language>
    <item>
      <title>I built 18 free, no-signup APIs because I was tired of hunting for the same tools scattered across a dozen different services</title>
      <dc:creator>Presendapp</dc:creator>
      <pubDate>Wed, 26 Aug 2026 15:51:57 +0000</pubDate>
      <link>https://dev.to/presend/i-built-18-free-no-signup-apis-because-i-was-tired-of-hunting-for-the-same-tools-scattered-across-da8</link>
      <guid>https://dev.to/presend/i-built-18-free-no-signup-apis-because-i-was-tired-of-hunting-for-the-same-tools-scattered-across-da8</guid>
      <description>&lt;p&gt;Every project seems to need the same handful of utilities: hash a file, validate an email, generate a UUID, check if a password's been breached, strip tracking params from a URL. Individually these aren't hard to build, but collecting them means either writing the same boilerplate for the tenth time or signing up for five different services, each wanting an API key, a credit card on file "just in case," or a rate limit that resets on their schedule, not yours.&lt;/p&gt;

&lt;p&gt;So I built Presend — it started as a set of privacy-first browser tools (strip EXIF data, compress a PDF, clean a URL, all client-side, nothing uploaded), and I've spent the last few days turning the useful parts into a proper API layer sitting on top of it. No signup, no key, no dashboard to configure. You just call the endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's in it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;18 endpoints, roughly grouped like this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Security &amp;amp; crypto&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;POST /api/hash — SHA-256/1/512 of a file&lt;br&gt;
GET /api/password — generate a secure password with an entropy estimate&lt;br&gt;
GET /api/password-breach — check a password against Have I Been Pwned using k-anonymity (only 5 hash characters ever leave your server, the password itself never does)&lt;br&gt;
GET /api/jwt-decode — decode a JWT's header and payload (no signature verification, by design — no secret needed, no risk)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Validation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;GET /api/email-validate — syntax check and a real MX record lookup, so you know the domain can actually receive mail&lt;br&gt;
GET /api/email-disposable — flags throwaway addresses (Mailinator, Guerrilla Mail, etc.) against a list of 576+ known domains&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cybersecurity&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;GET /api/security-headers — audits a site's HTTP security headers (CSP, HSTS, X-Frame-Options...) and returns a letter grade, like securityheaders.com but as JSON you can drop into a CI pipeline&lt;br&gt;
GET /api/url-reputation — checks a URL against URLhaus's public malware/phishing database&lt;br&gt;
GET /api/subdomains — passive subdomain discovery via Certificate Transparency logs, for auditing your own attack surface&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Everyday dev utilities&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;GET /api/uuid, GET /api/base64, GET /api/timestamp, GET /api/color, GET /api/user-agent, GET/POST /api/csv-json, GET /api/favicon&lt;br&gt;
GET/POST /api/url-clean — strips 60+ tracking parameters, single URL or batch up to 100&lt;br&gt;
GET /api/ip — geolocation, currency, language, EU/VPN flags for the caller's IP&lt;/p&gt;

&lt;p&gt;Everything runs on Cloudflare's edge network, so latency is generally low no matter where you're calling from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A quick example&lt;/strong&gt;&lt;br&gt;
curl -X POST --data-binary &lt;a class="mentioned-user" href="https://dev.to/file"&gt;@file&lt;/a&gt;.pdf &lt;a href="https://presend.pages.dev/api/hash" rel="noopener noreferrer"&gt;https://presend.pages.dev/api/hash&lt;/a&gt; → returns SHA-256, SHA-1 and SHA-512 as JSON&lt;br&gt;
curl "&lt;a href="https://presend.pages.dev/api/email-validate?email=foo@example.com" rel="noopener noreferrer"&gt;https://presend.pages.dev/api/email-validate?email=foo@example.com&lt;/a&gt;" → checks syntax and does a real MX record lookup&lt;br&gt;
curl "&lt;a href="https://presend.pages.dev/api/security-headers?url=https://example.com" rel="noopener noreferrer"&gt;https://presend.pages.dev/api/security-headers?url=https://example.com&lt;/a&gt;" → returns a letter grade and a per-header breakdown&lt;/p&gt;

&lt;p&gt;There's also a zero-dependency npm client (npm install presend-api) if you'd rather not hand-roll the fetch calls. It currently wraps 15 of the 18 endpoints — the three newest cybersecurity ones aren't wrapped yet, so you'd hit those with plain fetch() for now. I'll catch the package up soon.&lt;/p&gt;

&lt;p&gt;Full docs (with runnable curl examples for every endpoint) and an OpenAPI spec are at presend.pages.dev/api.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest limitations&lt;/strong&gt;&lt;br&gt;
No SLA. This is a free, fair-use service running on Cloudflare's free tier. Endpoints are rate-limited (typically 20-60 req/min per IP) and I make no uptime promises. If you need guaranteed availability for something critical, this isn't that.&lt;br&gt;
/api/subdomains depends on crt.sh, a third-party Certificate Transparency search service that's known to have occasional downtime outside of my control. When it's down, that one endpoint returns an error — the rest are unaffected.&lt;br&gt;
/api/csv-json doesn't flatten nested objects. If your JSON has objects nested inside objects, they get stringified rather than split into columns. Flat JSON converts cleanly.&lt;/p&gt;

&lt;p&gt;I'd rather list what doesn't work than have you find out the hard way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why free, no catch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The site's original purpose (client-side file tools) doesn't cost me anything to run at scale — the browser does the work. The API layer is a natural extension: most of these endpoints are cheap to serve, and I'd rather have people actually using and linking to the thing than gate it behind a signup form that kills 90% of casual visitors before they ever try it.&lt;/p&gt;

&lt;p&gt;If you build something with it, or find a bug, I'm around in the comments. And if there's a specific free-but-annoying-to-integrate service you keep needing in projects, tell me — that's basically how the last five endpoints got added.&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;p&gt;Site &amp;amp; docs: &lt;a href="https://presend.pages.dev/api" rel="noopener noreferrer"&gt;https://presend.pages.dev/api&lt;/a&gt;&lt;br&gt;
npm: &lt;a href="https://www.npmjs.com/package/presend-api" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/presend-api&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://github.com/presendapp/presend" rel="noopener noreferrer"&gt;https://github.com/presendapp/presend&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
