API og webhooks
jah.dk kører på jajob.dk-platformen, så API og webhooks er de samme. Den fulde API-beskrivelse findes i jajob.dk's udviklerdokumentation.
Grundlæggende
- Basis-URL:
https://jajob.dk/api/v1 - Godkendelse:
Authorization: Bearer <token>. Få et token medPOST /api/v1/auth/login. - Fejl:
{"error": {"code", "message", "details"}}.
Partner-API-nøgler (jjk_…) oprettes af en virksomhedsejer med POST /api/v1/apikeys; nøglen vises én gang. Adgang til det eksterne partner-API åbnes efter aftale. Skriv til info@jajob.dk.
Webhooks
Registrér et HTTPS-endpoint med POST /api/v1/webhooks/endpoints, og modtag signerede hændelser:
| Hændelse | Hvornår |
|---|---|
application.created |
En ny ansøgning kommer ind |
application.status_changed |
En kandidat rykker til en anden fase |
vacancy.expired |
Et job når sin frist |
candidate.matched |
Der findes en matchende kandidat til et job |
Hver levering har headerne X-Jajob-Event, X-Jajob-Delivery og X-Jajob-Signature. Mislykkede leveringer forsøges igen; private og loopback-værter blokeres.
Verificér signaturen
Signaturen er HMAC-SHA256 af den kanoniske JSON-body (sorterede nøgler, ingen mellemrum) med jeres endpoint-hemmelighed.
import hashlib, hmac, json
def verify(secret: str, body: bytes, signature: str) -> bool:
canonical = json.dumps(json.loads(body), sort_keys=True, separators=(",", ":")).encode()
expected = hmac.new(secret.encode(), canonical, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
import crypto from "node:crypto";
function canonical(v) {
if (Array.isArray(v)) return "[" + v.map(canonical).join(",") + "]";
if (v && typeof v === "object")
return "{" + Object.keys(v).sort().map(k => JSON.stringify(k) + ":" + canonical(v[k])).join(",") + "}";
return JSON.stringify(v);
}
export function verify(secret, rawBody, signature) {
const expected = crypto.createHmac("sha256", secret).update(canonical(JSON.parse(rawBody))).digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}
Svar hurtigt med en 2xx-status, og lav arbejdet bagefter.
Er noget uklart eller mangler? Skriv til info@jajob.dk.