<?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: Martijn Mik</title>
    <description>The latest articles on DEV Community by Martijn Mik (@martijn_mik_917c2ea0241de).</description>
    <link>https://dev.to/martijn_mik_917c2ea0241de</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%2F3901974%2F29d60e39-92d6-49b7-a004-4871186a26e3.jpg</url>
      <title>DEV Community: Martijn Mik</title>
      <link>https://dev.to/martijn_mik_917c2ea0241de</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/martijn_mik_917c2ea0241de"/>
    <language>en</language>
    <item>
      <title>Your SOC2 Auditor Just Asked for an API Inventory. Does Your Code Have the Receipts?</title>
      <dc:creator>Martijn Mik</dc:creator>
      <pubDate>Wed, 29 Apr 2026 07:25:11 +0000</pubDate>
      <link>https://dev.to/martijn_mik_917c2ea0241de/your-soc2-auditor-just-asked-for-an-api-inventory-does-your-code-have-the-receipts-82e</link>
      <guid>https://dev.to/martijn_mik_917c2ea0241de/your-soc2-auditor-just-asked-for-an-api-inventory-does-your-code-have-the-receipts-82e</guid>
      <description>&lt;p&gt;It’s the email every Lead Dev dreads. &lt;/p&gt;

&lt;p&gt;The compliance team just pinged you: &lt;strong&gt;"SOC2 Type II audit starts Monday. We need a full, verified inventory of all production endpoints and their associated authorization rules."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the pre-AI era, this was a boring afternoon of exporting a Swagger file. But in 2026, it’s a nightmare. Over the last quarter, your team has been using AI to scaffold services at 10x speed. You’ve pushed hundreds of PRs. &lt;/p&gt;

&lt;p&gt;You look at your &lt;code&gt;swagger.json&lt;/code&gt; and then you look at your actual controllers. You realize there are "Zombie APIs" everywhere debug routes, perhaps even AI-hallucinated endpoints, and "temporary" data migrations that were never deleted. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So here you go, before just a simple list, but now you’re frantically tying together loose strings of code to build a coherent overview for the auditor. All while knowing it won't end there because, every 'Zombie API' you find represents a security flaw that needs an immediate fix&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The "Audit-Velocity Gap"
&lt;/h2&gt;

&lt;p&gt;AI in development can help a lot and speed up the shipping but it can also deliver a &lt;strong&gt;governance gap&lt;/strong&gt;. Just because AI allows us to create infrastructure faster than we can document it. &lt;/p&gt;

&lt;p&gt;See also this article on dev.to about &lt;a href="https://dev.to/jonoherrington/ai-is-becoming-infrastructure-47pd"&gt;AI is infrastructure&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;When you tell an auditor, &lt;em&gt;"We have an API Gateway,"&lt;/em&gt; they’ll ask, &lt;em&gt;"How do you know the Gateway covers every endpoint actually living in your source code?"&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;If you can’t answer that, you don't have a security model. You have a "hope-based" compliance strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why "Zombie APIs" are Compliance Killers
&lt;/h3&gt;

&lt;p&gt;In a SOC2 or ISO 27001 audit, you are tested on &lt;strong&gt;Access Control&lt;/strong&gt; and &lt;strong&gt;Change Management&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The "Zombie" Route:&lt;/strong&gt; Copilot suggests a &lt;code&gt;/test-sync&lt;/code&gt; route to help you debug a PII issue. It gets merged. It’s not in the Gateway config, but it’s live in the container. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Auth-less" Peer:&lt;/strong&gt; You have a microservice that is supposed to be internal-only, so the AI skips the auth decorator. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an auditor finds even one of these, it’s a &lt;strong&gt;Non-Conformity&lt;/strong&gt;. You aren't just "unorganized"—you're "non-compliant."&lt;/p&gt;




&lt;h2&gt;
  
  
  Shifting from "Manual Lists" to "Verified Evidence"
&lt;/h2&gt;

&lt;p&gt;To survive an audit in the AI age, you have to stop treating your API inventory as a manual document. You need &lt;strong&gt;Static Analysis (SAST)&lt;/strong&gt; to act as your "Automated Auditor."&lt;/p&gt;

&lt;p&gt;We’ve all used the heavy hitters for this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Snyk&lt;/strong&gt; is fantastic for finding that one vulnerable npm package in your deep dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkmarx&lt;/strong&gt; is a beast at scanning for SQL injection and cross-site scripting in enterprise-scale codebases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools are essential for &lt;strong&gt;vulnerability management&lt;/strong&gt;. But when the auditor asks, &lt;em&gt;"Show me the authorization posture of every endpoint committed to the repo last month,"&lt;/em&gt; general-purpose SAST can feel like using a sledgehammer to perform eye surgery. They find the "holes," but they don't always map the "house."&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rise of Architectural SAST
&lt;/h3&gt;

&lt;p&gt;This is where the workflow has to evolve. To bridge the gap, we needed something that didn't just look for "bugs," but looked for &lt;strong&gt;intent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why we started leaning into &lt;a href="https://www.apiposture.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;ApiPosture.com&lt;/strong&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Instead of waiting for a security researcher to find a shadow API, we use it as a "Governance Linter." It’s a CLI tool that scans the AST (Abstract Syntax Tree) of our code and generates a live map of every endpoint and its auth status in seconds. &lt;/p&gt;

&lt;p&gt;It does the one thing Snyk and Checkmarx aren't specifically tuned for: &lt;strong&gt;It verifies that your code matches your claims.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The "Always-Audit-Ready" Workflow
&lt;/h2&gt;

&lt;p&gt;We stopped "preparing" for audits. Instead, we made the audit part of the CI/CD pipeline. Here is the 2026 blueprint:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The PR Scan:&lt;/strong&gt; Every time a dev hits "Merge," a SAST scan (like ApiPosture) runs. If a new endpoint is detected that isn't in the "Allowed" inventory, the build flags it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth Verification:&lt;/strong&gt; We don't just check if the code runs; we check if the &lt;code&gt;[Authorize]&lt;/code&gt; or &lt;code&gt;is_authenticated&lt;/code&gt; decorators are missing on new AI-generated routes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Evidence Export:&lt;/strong&gt; When the auditor asks for a list, we don't manually edit a spreadsheet. We run a CLI command and export a JSON/CSV of every endpoint found in the source code. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;That is "Verifiable Evidence."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought: Don't Let AI Make You a Liability
&lt;/h2&gt;

&lt;p&gt;AI is the fasted developer we've ever hired, but to be frank it’s the worst documentation lead we’ve ever had. &lt;/p&gt;

&lt;p&gt;If you’re still relying on manual Swagger updates to pass your SOC2, you’re playing a dangerous game. The complexity of modern stacks means you will miss something. A "Zombie API" isn't just a technical debt—it's a compliance landmine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is your team handling API inventory for audits? Are you still manually updating docs, or have you moved the "Inventory Gate" into your PRs? Let us now in the comments.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>programming</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Why AI Is Breaking Your API Security Model (And Nobody on Your Team Notices)</title>
      <dc:creator>Martijn Mik</dc:creator>
      <pubDate>Tue, 28 Apr 2026 12:10:32 +0000</pubDate>
      <link>https://dev.to/martijn_mik_917c2ea0241de/why-ai-is-breaking-your-api-security-model-and-nobody-on-your-team-notices-5aoo</link>
      <guid>https://dev.to/martijn_mik_917c2ea0241de/why-ai-is-breaking-your-api-security-model-and-nobody-on-your-team-notices-5aoo</guid>
      <description>&lt;p&gt;Your API gateway is lying to you. &lt;/p&gt;

&lt;p&gt;While you’ve been perfecting your OAuth flow and rate-limiting on the front door, AI has been busy building back doors. Over the last year, our "official" API documentation has become a work of fiction. For every documented endpoint, there are now three more living in the shadows, scaffolded by AI, pushed in a hurry, and completely invisible to our security stack.&lt;/p&gt;

&lt;p&gt;At first, it felt like a superpower. Need a CRUD wrapper? Copilot it. Need a specialized data transformation endpoint? AI scaffold. We were moving at a velocity that made our previous sprints look like they were stuck in molasses.&lt;/p&gt;

&lt;p&gt;But it also showed that velocity has a price. A few weeks ago, during a routine infrastructure audit, we asked one simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Can we list every unique endpoint currently routing traffic in production?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The silence from the DevOps team was deafening. We realized that AI hadn’t just helped us write code; it had created a "Dark Matter" API layer that no one was tracking.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 4 Horsemen of AI-Driven API Sprawl
&lt;/h2&gt;

&lt;p&gt;We realized our actual attack surface had bloated far beyond our Swagger docs. We started seeing the same four patterns over and over:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The "Just for Now" Endpoint:&lt;/strong&gt; AI generates a "temporary" health check or migration route. It gets merged, deployed, and forgotten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol Drift:&lt;/strong&gt; One service uses strictly enforced mTLS, while a newer AI-scaffolded peer defaults to standard HTTP because the prompt was too vague.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow Logic:&lt;/strong&gt; Endpoints that bypass centralized auth middleware because the AI suggested a "quick" local validation logic that was subtly flawed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-Sharing (PII Leakage):&lt;/strong&gt; AI-generated schemas that default to &lt;code&gt;SELECT *&lt;/code&gt; patterns, exposing internal metadata that should never leave the VPC.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The scariest part? &lt;strong&gt;The metrics looked perfect.&lt;/strong&gt; No 5xx errors. No latency spikes. Just a growing cloud of endpoints we no longer controlled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the "Fortress" Mentality is Failing
&lt;/h2&gt;

&lt;p&gt;Most of us were taught the &lt;strong&gt;"Fortress" model&lt;/strong&gt;: you define the walls (OpenAPI/Swagger), you gate the entrance (API Gateway), and you monitor the traffic.&lt;/p&gt;

&lt;p&gt;But AI has turned every developer into a high-speed architect who can build new doors in seconds. When your creation rate exceeds your documentation rate, the "Fortress" becomes a sieve. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Gateways Can’t See Intent.&lt;/strong&gt; A Gateway only sees traffic once it’s already live. It doesn't know that &lt;code&gt;/debug/user-sync&lt;/code&gt; was a hallucination that bypasses your PII masking. It just sees an authorized request and lets it through. &lt;/p&gt;

&lt;p&gt;To fix this, we tried to do it manually. I spent hours clicking into every single endpoint in Swagger, one by one, trying to remember: &lt;em&gt;"Did I protect this route? Is this one supposed to be public?"&lt;/em&gt; It was a nightmare. The documentation said one thing, but the code said another. I realized that if you want to secure an AI-driven environment, &lt;strong&gt;you have to stop looking at the traffic and start looking at the DNA—the source code.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Changed: From Gatekeepers to Automated Guardrails
&lt;/h2&gt;

&lt;p&gt;This is why I built &lt;strong&gt;ApiPosture&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I needed a way to visualize every endpoint and its security posture instantly, directly from the source code, before it ever hit the Gateway. I didn't want to click through 50 Swagger tabs; I wanted a single source of truth that couldn't lie because it was derived directly from the logic.&lt;/p&gt;

&lt;p&gt;By moving from manual spot-checks to &lt;strong&gt;Automated API Security Testing (SAST)&lt;/strong&gt;, we stopped playing "Whack-a-Mole" with shadow APIs. We now scan the code for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hidden Routes:&lt;/strong&gt; Detecting endpoints in the source that aren't in the official specs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth Deviations:&lt;/strong&gt; Identifying when AI logic bypasses our global middleware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Exposure:&lt;/strong&gt; Flagging unreviewed endpoints that dump sensitive metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We stopped treating API security as a network problem and started treating it as a code-level requirement. We now ensure that AI-generated endpoints are audited against our security standards before the first byte of traffic ever hits it." &lt;/p&gt;




&lt;h2&gt;
  
  
  The "Sobering" Standup Challenge
&lt;/h2&gt;

&lt;p&gt;Try this at your next sync. Don't ask for the "approved" list. Ask your Lead Dev:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"If I look at our raw ingress logs right now, how many endpoints will I find that aren't in our Postman collection?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer involves a shrug, you don't have a security problem. You have a &lt;strong&gt;visibility crisis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I made &lt;strong&gt;ApiPosture&lt;/strong&gt; open-source because this isn't just my problem. It’s the inevitable result of building at the speed of AI. If we’re going to let AI write our code, we need a "Security Architect" that can read it just as fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are you guys seeing this "Shadow API" creep? How are you tracking auth rules across hundreds of endpoints without losing your mind? Let's chat in the comments.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apiposture.com" rel="noopener noreferrer"&gt;https://apiposture.com&lt;/a&gt; &amp;gt; free community edition available&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>api</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
