<?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: Deepstamp</title>
    <description>The latest articles on DEV Community by Deepstamp (@deepstamp).</description>
    <link>https://dev.to/deepstamp</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3906837%2F8e52ccb3-81ee-4404-b737-292713b35776.png</url>
      <title>DEV Community: Deepstamp</title>
      <link>https://dev.to/deepstamp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deepstamp"/>
    <language>en</language>
    <item>
      <title>Building document authenticity verification as a SaaS API - lessons learned</title>
      <dc:creator>Deepstamp</dc:creator>
      <pubDate>Fri, 01 May 2026 16:48:45 +0000</pubDate>
      <link>https://dev.to/deepstamp/building-document-authenticity-verification-as-a-saas-api-lessons-learned-3nnd</link>
      <guid>https://dev.to/deepstamp/building-document-authenticity-verification-as-a-saas-api-lessons-learned-3nnd</guid>
      <description>&lt;p&gt;At Deepstamp, we're building what we call "the HTTPS for documents" — an API that certifies the integrity of PDF files at emission, so recipients can verify authenticity independently.&lt;/p&gt;

&lt;p&gt;Here's what we learned building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core architecture
&lt;/h2&gt;

&lt;p&gt;Two endpoints. Stateless. Fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;POST /certify&lt;/strong&gt;&lt;br&gt;
Takes a PDF file. Returns a certificate ID and a cryptographic fingerprint (SHA-256 of the file content + timestamp + issuer metadata). Under 2 seconds p95.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;POST /verify&lt;/strong&gt;&lt;br&gt;
Takes a PDF file and a certificate ID. Returns whether the file matches the certificate — meaning it hasn't been modified since certification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No file storage.&lt;/strong&gt; We never store the document itself — only the fingerprint and metadata. This was a hard requirement from day one. GDPR, but also trust: your documents never leave your infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hard part — designing for longevity
&lt;/h2&gt;

&lt;p&gt;The obvious trap: if verification depends on your infrastructure being up, your certificates are only as reliable as your uptime.&lt;/p&gt;

&lt;p&gt;We designed verification to be as infrastructure-independent as possible. The goal: a document certified today should still be verifiable in 10 years, regardless of what happens to Deepstamp.&lt;/p&gt;

&lt;p&gt;This shapes everything — the cryptographic primitives we chose, how we structure the certificate metadata, what we embed in the document footer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration in practice
&lt;/h2&gt;

&lt;p&gt;The integration pattern for a SaaS emitting invoices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User triggers invoice generation&lt;/li&gt;
&lt;li&gt;Your backend generates the PDF&lt;/li&gt;
&lt;li&gt;POST to /certify with the PDF buffer&lt;/li&gt;
&lt;li&gt;Receive certificate_id back (&amp;lt; 2s)&lt;/li&gt;
&lt;li&gt;Embed certificate_id in the invoice footer ("Verify on deepstamp.fr/verify")&lt;/li&gt;
&lt;li&gt;Send the invoice to your customer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your customer can now drag-and-drop the PDF on deepstamp.fr/verify and get instant confirmation that the file is authentic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What surprised us
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Recipients actually use it.&lt;/strong&gt; We expected verification to be a rarely-used edge case. It turns out that when you give people an easy way to verify a document, they do — especially accountants and legal teams.&lt;/p&gt;

&lt;p&gt;The trust infrastructure for documents is being built now. If you're working on something similar or want to integrate: deepstamp.fr/developers&lt;/p&gt;

</description>
      <category>security</category>
      <category>api</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
