orakel
Docs navigation

Canonical

GET /api/licenses

Alcohol and tobacco licences from Helsedirektoratet (TBR). Cursor-paginated.

Updated 2026-04-21

Data source: Helsedirektoratet TBR. Norwegian coverage only.

Request

GET /api/licenses

Parameter Type Required Description
orgNumber string no Filter to one holder.
registerType string no Alkoholsbevilling (alcohol) or Tobakksbevilling (tobacco).
licenseTypeCode string no Examples: 01SKJE (skjenke / on-premise), 11ENGR (engros / wholesale), 18TBIM (tobacco import), 19TBEK (tobacco export).
municipalityNo string no 4-digit municipality number.
activeOnly boolean no When true, return only licences where validTo is in the future.
sort "validFrom" | "validTo" | "venueName" | "municipality" no Default validFrom.
order "asc" | "desc" no Default desc.
limit integer no 1–100. Tier-capped. Default 20.
cursor string no Pagination cursor.

Response

{
  "data": [
    {
      "id": "clx...",
      "orgNumber": "912345678",
      "venueName": "Restaurant Example",
      "registerType": "Alkoholsbevilling",
      "licenseTypeCode": "01SKJE",
      "municipality": "Oslo",
      "validFrom": "2024-01-01T00:00:00Z",
      "validTo": "2028-01-01T00:00:00Z"
    }
  ],
  "nextCursor": "clx...",
  "hasMore": true
}

Rows also carry licenseTypeDescription, municipality number, and the issuing authority. Full list in the source page.

Examples

curl

curl -H "Authorization: Bearer $ORAKEL_KEY" \
  "https://orakel.cloud/api/licenses?registerType=Alkoholsbevilling&activeOnly=true"

JavaScript

const res = await fetch(
  "https://orakel.cloud/api/licenses?registerType=Alkoholsbevilling&activeOnly=true",
  { headers: { Authorization: `Bearer ${process.env.ORAKEL_KEY}` } },
);
const { data, nextCursor, hasMore } = await res.json();

Error modes

Status Meaning Action
400 Invalid parameters Inspect details[]
401 Missing or invalid API key Check the Authorization header
429 Rate or quota exceeded Back off
500 Query failed Retry

Rate limits

Per-key RPM per tier. Cursor-depth guard applies.

Typical use cases

  • Hospitality prospecting: 01SKJE + activeOnly=true for on-premise alcohol venues.
  • Import/export leads: 18TBIM for tobacco importers.
  • Compliance tracking: monitor validTo to anticipate renewals.