Canonical
GET /api/licenses
Alcohol and tobacco licences from Helsedirektoratet (TBR). Cursor-paginated.
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=truefor on-premise alcohol venues. - Import/export leads:
18TBIMfor tobacco importers. - Compliance tracking: monitor
validToto anticipate renewals.