Är du privatperson? Mina sidor

Webhooks

Ta emot notifikationer när en kreditupplysning är redo att hämtas.

Översikt

Webhooks skickas som HTTP POST-anrop till din angivna URL när kreditupplysningen är klar. Alla webhooks signeras med HMAC-SHA256.

Händelsetyper

Händelse Beskrivning
credit.completed Kreditupplysningen är klar och finns tillgänglig via API.

Övriga slutliga statusvärden (Rejected, Expired, Failed) skickar inte webhook i denna version — hämta status via GET /api/v1/check/{guid}.

Konfigurera webhook

Ange webhookUrl antingen per anrop (som en del av kreditupplysningsförfrågan) eller globalt för hela kontot i kontrollpanelen. Per-anrop-värdet har företräde om båda är satta.

{
  "personalNumber": "YYYYMMDDNNNN",
  "mobilePhoneNumber": "+46XXXXXXXXX",
  "webhookUrl": "https://your-app.com/webhook/credit"
}

Webhook-payload

Payloaden är avsiktligt minimal — den innehåller inga personuppgifter eller andra uppgifter i kreditupplysningen. Webhooken fungerar som en notifiering: hämta den fullständiga kreditupplysningen via GET /api/v1/check/{guid}.

POST {your webhookUrl}

Body Fields

Fält Typ Beskrivning
event string Alltid credit.completed (idag).
timestamp string Unix-tidsstämpel (sekunder) när webhooken genererades. Används för signaturverifiering.
data.creditCheckId guid Unikt ID — används som nyckel för att hämta kreditupplysningen.
data.status string Alltid Completed.
data.completedAt string ISO 8601 UTC-tidpunkt när kreditupplysningen färdigställdes.

Payload

Content-Type: application/json
{
  "event": "credit.completed",
  "timestamp": "1713614550",
  "data": {
    "creditCheckId": "550e8400-e29b-41d4-a716-446655440000",
    "status": "Completed",
    "completedAt": "2026-04-15T12:02:30Z"
  }
}

Signaturverifiering

Varje webhook innehåller en X-TIC-Signature-header med en HMAC-SHA256-signatur. Verifiera alltid signaturen för att säkerställa att den kommer från TIC.

Headers

Header Värde
X-TIC-Signature t={timestamp},v1={hex-sha256} — Stripe-stil. v1 är hex-kodad HMAC-SHA256 av {timestamp}.{raw-body}.
Content-Type application/json

Verifieringsexempel

using System.Security.Cryptography;
using System.Text;

public bool VerifyWebhook(string rawBody, string sigHeader, string webhookSecret)
{
    // Parse header: "t=1713614550,v1=abc123..."
    var parts = sigHeader.Split(',')
        .Select(s => s.Split('=', 2))
        .ToDictionary(kv => kv[0], kv => kv[1]);

    var timestamp = parts["t"];
    var providedSig = parts["v1"];

    // Reject stale webhooks (>5 minutes)
    var ts = DateTimeOffset.FromUnixTimeSeconds(long.Parse(timestamp));
    if (DateTimeOffset.UtcNow - ts > TimeSpan.FromMinutes(5)) return false;

    // Recompute and compare
    var message = $"{timestamp}.{rawBody}";
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(webhookSecret));
    var expected = Convert.ToHexString(hmac.ComputeHash(Encoding.UTF8.GetBytes(message))).ToLowerInvariant();

    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(providedSig),
        Encoding.UTF8.GetBytes(expected));
}
Använd request-body
Signaturen beräknas över den "bodyn". Om du först deserialiserar JSON och sedan re-serialiserar kan whitespace och fältordning skilja sig — signaturen matchar då inte. Läs bodyn som en sträng för att säkerställa att du kan kontrollera signaturen korrekt.

Retry-policy

Om din endpoint inte svarar med 2xx inom 30 sekunder gör vi upp till 3 nya försök via vår webhook-kö. Permanenta fel (DNS, TLS, 4xx) kan avbryta retries tidigare.

Best practices

  • Verifiera signaturen — aldrig lita på payloaden utan HMAC-kontroll.
  • Kontrollera tidsstämpeln — avvisa webhooks äldre än 5 minuter för att förhindra replay.
  • Svara snabbt — returnera 200 OK och bearbeta asynkront. Timeout är 30 sekunder.
  • Idempotens — samma creditCheckId kan levereras flera gånger vid retries. Dedupera.
  • HTTPS — använd alltid HTTPS för din webhook-endpoint.
Webhook-hemlighet
Din webhook-hemlighet finns i välkomstmailet du fick vid registrering samt under Inställningar → API i kontrollpanelen. Du kan rotera den där om den läckt.