I’ve got a website. It’s connected to Clerk for authentication.

One day, my website tells Clerk:

"Hey Clerk, if you ever create a new user, send me a messenger and tell me about it."

Clerk’s like:

"Sure thing. Just give me the address to your office (your deployed site’s URL), and I’ll send the messenger there."

But my website is still in development, running on localhost:

“Hmm... Can you just send the guy to my house instead (localhost)?”

Clerk responds:

“Nah... I can’t reach houses. I only send messengers to real offices on the internet.”

So my website’s like:

“No worries. I’ll call a taxi (ngrok/localtunnel), and they’ll bring your messenger from your office to my house, and return them back.”

Now, things are cool… until the paranoia hits.

My website suddenly realizes:

“Wait a minute... What if some random guy pretends to be from Clerk? What if he tells me something like ‘You owe $1 billion in fake user debt?’ 😨”

So my website goes:

“Hey Clerk, how do I know it’s really your guy you’re sending me?”

Clerk smiles:

“Great question. I actually tattoo a signature on his head (cryptographic signature). You can call Svix, and they’ll tell you how to check that signature.”

My website’s like:

“Okay perfect. I’ll tell my taxi driver to snap a pic of the guy’s head and I’ll compare the tattoo to what Svix expects. If it matches, I’ll let him in. If not — kicked out.”

Then Clerk is like:

“You’re damn brilliant. We could even give the guy a T-shirt with a QR code instead of a tattoo, if that helps.”

And my website’s like:

“Yeah that works too. Fashion and security, baby. Let’s go.”

Image description

🔐 What Just Happened Technically

Clerk Webhooks: Tell you when users are created, updated, etc.

Your Localhost: Can’t receive messages directly, so you use ngrok to tunnel requests.

Svix: Validates that the message really came from Clerk.

Signature: Clerk signs the request (tattoo on the guy’s head).

You (your code): Use Svix’s library to verify the signature before trusting the message.

If you ever forgot how webhooks work — just remember the story of the guy, the taxi, the tattoo, and the QR code.

You’ll never look at API security the same again 😎