Intry

Auth flow

Clerk sessions and how the portal talks to Intry Core.

Overview

The portal delegates identity to Clerk. After sign-in, the portal exchanges the Clerk session for a Core JWT via POST /api/v1/auth/clerk-session (match resident by email).

Deep runbook: docs/AUTH_ARCHITECTURE.md.

Flow

  1. Resident signs in with Clerk (sign-in / sign-up).
  2. Portal server calls Core with Clerk session token.
  3. Core returns JWT if matching User row exists.
  4. Portal uses JWT for all subsequent /api/v1/* calls.

Components

PieceResponsibility
Clerk middlewareProtects routes, refreshes sessions
Next.js Route HandlersExchange Clerk → JWT; proxy Core calls server-side
Core UserMust contain matching email (and optionally clerkUserId)

Environment variables

VariablePurpose
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYClient-side Clerk
CLERK_SECRET_KEYServer-side Clerk + Core webhook
Core base URLAPI host for BFF routes

Never expose Core Unkey keys to the browser.

Testing

Use Clerk test users and separate Clerk instances per environment. Rotate webhook signing secrets when enabling Clerk webhooks for user sync.


Last verified: 2026-06-21 (commit 293c4a7)

On this page