Webhooks
Skapa webhook
Kräver webhooks:manage och en plan med webhooks. Adressen måste vara https på port 443 och får inte peka på interna nät. Hemligheten (whsec_…) visas bara en gång.
curl -X POST "https://bolagsinsikt.se/api/public/v1/webhooks" \
-H "Authorization: Bearer bi_test_DIN_NYCKEL" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.se/hooks/bolagsinsikt", "events": [ "company.updated", "financials.published" ], "filters": { "county": [ "Västernorrlands län" ] } }'Händelsetyper
| Typ | Beskrivning |
|---|---|
company.created | Nytt företag. |
company.updated | Publik uppgift ändrad. |
company.status_changed | Statusändring. |
financials.published | Nytt bokslut. |
export.completed | Export klar att ladda ner. |
export.failed | Export misslyckades. |
Payload
Varje leverans är en POST med JSON och headers Bolagsinsikt-Event-Id, Bolagsinsikt-Event-Type, Bolagsinsikt-Signature och User-Agent: Bolagsinsikt-Webhooks/1.0. Svara med 2xx inom 10 sekunder. Använd event-id för att hoppa över dubbletter.
{
"id": "evt_4b1c9e0f2a7d3e5c6b8a",
"type": "company.updated",
"created_at": "2026-09-29T06:12:44Z",
"data": {
"company_id": "co_8f3k2m",
"org_nr": "5566778899",
"changed_fields": [
"website",
"website_status"
]
}
}Verifiera signaturen
Headern ser ut så här: t=1759126364,v1=5f2b…. Beräkna HMAC-SHA256 av <t>.<rå body> med din hemlighet och jämför i konstant tid. Under 24 timmar efter att du bytt hemlighet skickas två v1 – godkänn om någon matchar. Använd alltid den råa bodyn, innan JSON-tolkning.
import crypto from "node:crypto";
export function verify(rawBody, header, secret, toleranceSec = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const signatures = header.split(",").filter((p) => p.startsWith("v1=")).map((p) => p.slice(3));
const t = Number(parts.t);
if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
// Jämför i konstant tid. Flera v1 kan finnas under rotation.
return signatures.some((sig) => sig.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)));
}Omförsök
Misslyckade leveranser görs om efter 1 min, 5 min, 30 min, 2 h, 6 h, 12 h och 24 h. Efter 7 misslyckanden i rad markeras webhooken som felande, och efter 3 dygn stängs den av. Testa med POST /webhooks/{id}/test.
curl -X POST "https://bolagsinsikt.se/api/public/v1/webhooks/wh_12ab/test" \
-H "Authorization: Bearer bi_test_DIN_NYCKEL"Var sidan till hjälp?
Senast uppdaterad 29 september 2026