Skip to Content
Webhooks

Webhooks

En webhook er en adresse hos et annet system som får beskjed når noe skjer, for eksempel når en ordre er klar. Hver beskjed er en POST med hele objektet slik det var da.

Verkstedet legger inn adressen

Verkstedet legger inn en adresse (https) og velger hva den skal få beskjed om. Du gir verkstedet adressen, og verkstedet gir deg hemmeligheten.

Legg til adresse

Under Innstillinger › Koblinger (API) › Webhooks trykker verkstedet «Legg til adresse». Adressen må begynne med https://, bruke port 443 eller 8443, og ha et navn (eksempel.no), ikke et IP-nummer. Brukernavn og passord hører ikke hjemme i adressen.

Velg hva adressen skal få beskjed om

Valgene står i vanlige ord. «Velg selv» gir hver hendelse for seg.

  • «Når en ordre er klar»order.ready
    Virker
  • «Alle endringer på ordre»order.*
    Virker
  • «Fakturaer»invoice.*
    Virker
  • «Avtaler»agreement.*
    Virker
  • «Kunderegisteret»customer.*
    Virker
  • «Bøyeark»bending_sheet.*
    Virker

Bare for en kunde, test eller ekte

Med «Bare for en kunde» får adressen bare beskjed om denne kundens ordre. En testadresse får bare beskjed om testordre, en ekte adresse om ekte ordre.

Ta vare på hemmeligheten

Hemmeligheten vises bare en gang. Mottakeren bruker den til å sjekke at beskjeden kommer fra vbeslag.

Send testhendelse

«Send testhendelse» sender en ping til adressen. Under «Siste leveranser» ser verkstedet de siste 20 beskjedene med svaret, og kan trykke «Send på nytt».

Et verksted kan ha 10 adresser i bruk. Alle hendelsene står i katalogen over hendelser.

Beskjeden

Hver beskjed er en POST med JSON, og disse overskriftene:

Overskriftene
POST /din-adresse HTTP/1.1 Content-Type: application/json User-Agent: vbeslag-webhooks/1 Vbeslag-Event-Id: evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4 Vbeslag-Event-Type: order.ready Vbeslag-Delivery-Attempt: 1 Vbeslag-Signature: t=1797590527,v1=5f2b…c9e1
Innholdet
{ "id": "evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4", "type": "order.ready", "apiVersion": "v1", "createdAt": "2026-12-14T10:42:07Z", "livemode": true, "data": { "order": { "number": 4711, "numberDisplay": "004711", "status": "klar", "version": 5, … }, "change": { "from": "i_arbeid", "to": "klar" } } }
  • data har hele objektet slik det var da hendelsen ble sendt, for eksempel order, agreement, invoice eller customer. change er med når en ordre har flyttet status.
  • livemode er false for testordre og testadresser.
  • En beskjed er under 256 KB.

Rekkefølgen er ikke garantert. Objektet har version, så du ser om du allerede har noe nyere. Har du en høyere version for samme ordre, kan du se bort fra beskjeden. Bruk Vbeslag-Event-Id til å kjenne igjen en beskjed du har fått før.

Sjekk signaturen

Vbeslag-Signature er t=<unix-tid>,v1=<hex HMAC-SHA256 av "t.rå-body" med hemmeligheten>. Avvis beskjeder som er eldre enn 5 minutter. Når verkstedet bytter hemmelighet, kommer to v1 i 24 timer: godta den som stemmer.

Sjekk signaturen mot den rå teksten, før du gjør den om til JSON: en omformatert body gir en annen signatur.

verifyVbeslag.js
import crypto from 'node:crypto' export function verifyVbeslag(rawBody, header, secret, toleranceSec = 300) { const parts = header.split(',').map((p) => p.trim().split('=')) const t = Number(parts.find(([k]) => k === 't')?.[1]) if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex') return parts.some(([k, v]) => k === 'v1' && v.length === expected.length && crypto.timingSafeEqual(Buffer.from(v), Buffer.from(expected))) }

Stemmer ikke signaturen, eller er beskjeden for gammel, gjør du ingenting med den.

Svar, nye forsøk og avslåtte adresser

Svar med en 2xx innen 10 sekunder. Ellers prøver vi igjen i omtrent 45 timer, med lengre pauser for hver gang. Vbeslag-Delivery-Attempt sier hvilket forsøk det er.

  • 410 Gone slår adressen av med en gang.
  • 50 feil på rad gjør det samme, og verkstedet får beskjed.
  • Vi følger aldri en omdirigering, og vi sender bare til offentlige adresser.

Svar raskt med 2xx, og gjør det tunge arbeidet etterpå. Da rekker du alltid fristen.

En adresse som er slått av, slår verkstedet på igjen med «Slå på igjen» under Koblinger (API).

Gikk du glipp av noe?

GET /events gir de samme beskjedene 30 dager tilbake, eldste først etter den siste id-en du har.

GET /events
curl "https://vbeslag.com/api/v1/events?after=evt_01JEX4Q7R2M9T5V8W0Y3Z6A1B4&types=order.ready" \ -H "Authorization: Bearer $VBESLAG_KEY"

Ta vare på id-en til den siste beskjeden du har behandlet, og send den som after.

Videre