Nordisk AI Developer Docs
Embed live verification, submit applications, stream real-time events, and drop the Trust Badge onto any site — every code block is copy-runnable. Base URL: https://app.nordisk-ai.com/api
Introduction
The Nordisk AI API lets partners verify recruiters, submit pilot applications, and embed the Trust Badge on any surface where AI-generated recruitment communications appear. Every endpoint returns JSON, uses conventional HTTP status codes, and — where auth is required — reads from the same session cookie the workspace uses.
Authentication
Public endpoints (marked Public below) require no authentication. Anything else — admin endpoints, workspace endpoints, the SSE stream — reads the nordisk_session cookie set after a magic-link consume.
To get a session cookie:
# 1. Request a magic link (email arrives from Resend)
curl -X POST https://app.nordisk-ai.com/api/auth/request-link \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com"}'
# 2. Click the link in your inbox. The callback sets a HttpOnly cookie
# named nordisk_session in your browser.
# 3. For programmatic use, extract the cookie value and pass it to curl:
curl https://app.nordisk-ai.com/api/auth/me \
-H 'Cookie: nordisk_session=<value-from-your-browser>'audit_events. There are no long-lived API keys during the pilot./api/health PublicHealth check
Returns service status, model, and timestamp. Use it to monitor uptime.
curl https://app.nordisk-ai.com/api/health
{
"status": "ok",
"service": "Nordisk AI",
"model": "gpt-5.2",
"timestamp": "2026-08-04T00:00:00.000Z"
}/api/verify/{code} PublicGet a Trust Certificate
Fetch the public certificate data for a recruiter — the same JSON that powers the /verify/<code> page candidates open. Ideal for embedding a live "verified" widget on partner sites.
curl https://app.nordisk-ai.com/api/verify/AB12-CD34
{
"code": "AB12-CD34",
"recruiter": {
"name": "Elin Andersson",
"photoUrl": "https://nordisk-ai.com/media/…",
"linkedin": "https://linkedin.com/in/…"
},
"agency": {
"name": "Nordic Recruitment AB",
"slug": "nordic-recruitment",
"logoUrl": "https://nordisk-ai.com/media/…"
},
"verifiedSince": "2026-06-14T08:15:00.000Z",
"trustScore": 92,
"status": "active"
}/api/verify/{code}/report PublicReport impersonation
A candidate flag against a specific certificate. Rate-limited to prevent abuse. The report lands in the agency workspace and (for serious cases) the super-admin dashboard.
curl -X POST https://app.nordisk-ai.com/api/verify/AB12-CD34/report \
-H 'Content-Type: application/json' \
-d '{
"candidateEmail": "candidate@example.com",
"message": "This email looked suspicious...",
"channel": "linkedin"
}'{
"ok": true,
"reportId": "b1a5f8c3-…"
}/api/apply PublicSubmit an agency application
Kick off the pilot verification flow. The Nordisk AI team will review — approved agencies get a magic onboarding link within 24 hours.
curl -X POST https://app.nordisk-ai.com/api/apply \
-H 'Content-Type: application/json' \
-d '{
"agencyName": "Nordic Recruitment AB",
"website": "https://nordicrec.se",
"email": "owner@nordicrec.se",
"contactName": "Elin Andersson",
"country": "Sweden",
"specialties": ["Recruitment", "Staffing"],
"volume": "medium",
"motivation": "We want to protect our brand from AI impersonation."
}'{
"success": true,
"id": "080cde3b-27f2-4…",
"message": "Application received. The team will get back to you within 2 business days."
}/api/discovery-call PublicBook a discovery call
Marketing site "book a call" form. Rate-limited (3 per IP per hour).
curl -X POST https://app.nordisk-ai.com/api/discovery-call \
-H 'Content-Type: application/json' \
-d '{
"name": "Elin Andersson",
"email": "elin@nordicrec.se",
"company": "Nordic Recruitment AB",
"message": "Interested in the pilot."
}'{
"ok": true,
"id": "cf1c…"
}/api/events/stream Super-admin sessionLive event stream (SSE)
Server-Sent Events stream of every platform event: applications, approvals, bookings, notes, and impersonation reports. Auto-reconnects with `Last-Event-ID` replay.
curl --no-buffer -N https://app.nordisk-ai.com/api/events/stream \ -H 'Cookie: nordisk_session=<your-session-cookie>'
retry: 5000
event: hello
data: {"ok":true,"subscribed":true,"ts":"2026-08-04T00:00:00Z"}
event: application.new
id: 1722816000000-abc123
data: {"type":"application.new","payload":{"agencyName":"…","email":"…"},"timestamp":"…"}Trust Badge embeds
Three snippets — pick the one that fits your surface. All three link to the recruiter's live certificate page and inherit the charcoal + gold aesthetic.
Drop-in for email signatures, footers, and static sites. Zero JavaScript.
<a href="https://nordisk-ai.com/verify/AB12-CD34"
target="_blank" rel="noopener"
style="display:inline-flex;align-items:center;gap:6px;padding:5px 10px;
border-radius:999px;background:#0e0e11;border:1px solid #D4AF37;
color:#D4AF37;font-family:Inter,Arial,sans-serif;font-size:12px;
font-weight:600;text-decoration:none">
✓ Verified by Nordisk AI
</a>Same badge, rendered server-side as SVG. Great for LinkedIn banners and PDFs.
<a href="https://nordisk-ai.com/verify/AB12-CD34" target="_blank" rel="noopener">
<img src="https://nordisk-ai.com/badge/AB12-CD34.svg"
alt="Verified by Nordisk AI" width="180" height="36" />
</a>Auto-updates as the recruiter's trust score changes; shows a subtle animation on hover.
<div id="nordisk-badge" data-code="AB12-CD34"></div> <script async src="https://nordisk-ai.com/badge.js"></script>
Errors & rate limits
Errors follow standard HTTP codes and always include an error string in the JSON body.
// 400 — bad request body
{ "error": "Invalid status" }
// 401 — session expired / unauthenticated
{ "error": "Not authorized" }
// 404 — resource not found
{ "error": "Application not found" }
// 429 — rate limited
{ "error": "Digest already sent recently. Try again in a minute." }
// 500 — server error (report to founder@nordisk-ai.com)
{ "error": "Internal server error" }Need an endpoint that isn't here yet? Say the word.