Testnøgler og sandbox (dawa_test_)

Brug dawa_test_-nøgler til udvikling og CI uden at bruge af kvoten, og hold test og produktion adskilt.

4 min Niveau: Begynder ✓ Kode testet

En testnøgle starter med dawa_test_ og er beregnet til udvikling, automatiske tests og demoer. Den giver de samme adressedata som en live-nøgle, men den bliver aldrig faktureret og bruger ikke af din kontos månedskvote. Til gengæld har den nogle begrænsninger, som denne guide gennemgår.

Opret en testnøgle

Gå til Nøgler, klik Opret nøgle, og vælg test. Nøglen vises én gang. Gem den i din password manager eller i den .env-fil, du bruger lokalt.

Testnøgler tæller ikke med i loftet over antal nøgler. Grænsen på 2 nøgler på Hobby-planen gælder kun live-nøgler, så du kan have en testnøgle pr. udvikler eller pr. CI-pipeline.

Forskelle mellem test og live

Live (dawa_live_…)Test (dawa_test_…)
DataAlle endpointsKun adresse-endpoints (se nedenfor)
MålingPr. konto (Hobby) eller pr. nøgle (betalte planer)Pr. klient-IP, med Hobby-planens grænser
MinutgrænseDin plans grænse360 kald i minuttet pr. IP
FaktureringEfter din planAldrig
LækkontrolJa, markeres ved brug fra mange IP'erNej
Domænelås (browsernøgle)Ja, hvis du sætter domænerJa, hvis du sætter domæner

Målingen pr. IP betyder, at to udviklere bag hver sin internetforbindelse ikke deler grænse, mens to CI-jobs bag samme NAT-adresse gør. Headerne X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Minute-Remaining viser IP'ens tal, ikke kontoens. Læs mere i Grænser, kvoter og 429.

Hvad en testnøgle må kalde

Testnøgler dækker adresseopslag: alle DAWA-kompatible stier som /autocomplete, /adresser, /adgangsadresser, /datavask/adresser, /postnumre, /kommuner og /replikering/….

Tre grupper under /api/v1 henter data live fra offentlige registre med en delt nøgle og er derfor lukket for testnøgler:

  • /api/v1/enrich/… (BBR, DAGI, ejendom, klima og de andre berigelser)
  • /api/v1/datavask/parse
  • /api/v1/stats/national

Kalder du dem med en testnøgle, får du status 403:

JSON#sandbox-scope-body
{
  "detail": {
    "error": {
      "code": "sandbox_scope",
      "message": "The sandbox/demo key is limited to basic address lookups. Use your own API key for enrich/datavask/stats."
    }
  },
  "error": {
    "code": "sandbox_scope",
    "message": "The sandbox/demo key is limited to basic address lookups. Use your own API key for enrich/datavask/stats."
  }
}

Løsningen er at bruge din egen live-nøgle til de kald. Berigelserne virker på vores egne demosider, fordi siderne sender et kortlivet token, der kun gælder fra dem. Det token kan du ikke bruge fra din egen kode. Den offentlige demonøgle på /widget er også en testnøgle og har de samme grænser.

Har du brug for at teste berigelser i CI, så brug en separat live-nøgle med lavt forbrug, og hold øje med den under Forbrug.

Hvornår du skal bruge hvilken

OpgaveNøgle
Lokal udvikling af adressefelt eller importTest
Enhedstests og integrationstests i CITest
Demo-side eller prototypeTest, låst til domænet
Produktion (webshop, CRM, backend)Live
Kald til /api/v1/enrich/…, /api/v1/datavask/parse, /api/v1/stats/nationalLive
Load-testIngen af delene uden aftale. Skriv til os via support

Brug aldrig en testnøgle til produktionstrafik. Alle dine brugere deler serverens IP, så de deler også én IP-grænse på gratisniveau, og minutgrænsen rammer hurtigt.

Hold miljøerne adskilt

Den simpleste regel: produktion får en live-nøgle fra produktionsmiljøets hemmeligheder, alle andre miljøer får en testnøgle. Lad koden tjekke det ved opstart, så en forkert nøgle bliver opdaget med det samme i stedet for i en kundes checkout.

Det her script viser, hvilken slags nøgle du har sat, og laver ét kald:

Python#key-mode-check
import os
import requests

key = os.environ["DANADRESSE_API_KEY"].strip()
if key.startswith("dawa_test_"):
    print("Testnøgle: målt pr. IP, aldrig faktureret")
elif key.startswith("dawa_live_"):
    print("Live-nøgle: målt på kontoen")
else:
    raise SystemExit("Ukendt nøgleformat. Den skal starte med dawa_test_ eller dawa_live_")

r = requests.get(
    "https://api.danadresse.dk/postnumre/2900",
    headers={"X-Api-Key": key},
    timeout=10,
)
r.raise_for_status()
print(r.json()["nr"], r.json()["navn"])
print("Tilbage denne måned:", r.headers.get("X-RateLimit-Remaining"))

En vagt ved opstart i Python, der nægter at starte produktion med en testnøgle og omvendt:

Python#startup-guard-python
import os
import sys

ENV = os.environ.get("APP_ENV", "development")
KEY = os.environ.get("DANADRESSE_API_KEY", "").strip()

if not KEY:
    sys.exit("DANADRESSE_API_KEY er ikke sat")
if ENV == "production" and not KEY.startswith("dawa_live_"):
    sys.exit("Produktion skal bruge en dawa_live_-nøgle")
if ENV != "production" and KEY.startswith("dawa_live_"):
    sys.exit(f"{ENV} må ikke bruge produktionsnøglen. Brug en dawa_test_-nøgle")

Samme vagt i Node:

JavaScript#startup-guard-node
const env = process.env.NODE_ENV ?? "development";
const key = (process.env.DANADRESSE_API_KEY ?? "").trim();

if (!key) throw new Error("DANADRESSE_API_KEY er ikke sat");
if (env === "production" && !key.startsWith("dawa_live_")) {
  throw new Error("Produktion skal bruge en dawa_live_-nøgle");
}
if (env !== "production" && key.startsWith("dawa_live_")) {
  throw new Error(`${env} må ikke bruge produktionsnøglen. Brug en dawa_test_-nøgle`);
}
export const DANADRESSE_API_KEY = key;

I CI lægger du testnøglen som en hemmelighed og sender den videre som miljøvariabel. Eksempel for GitHub Actions:

YAML#github-actions
jobs:
  test:
    runs-on: ubuntu-latest
    env:
      APP_ENV: test
      DANADRESSE_API_KEY: ${{ secrets.DANADRESSE_TEST_KEY }}
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt
      - run: pytest

Testnøgle i en browser

En testnøgle kan bruges i frontend-kode på en demo-side. Sæt Tilladte domæner på nøglen under Nøgler, ligesom med en live-nøgle. Så afvises kald fra andre sider med 403 origin_not_allowed. Se Browsernøgler og tilladte domæner.

Næste skridt

Relaterede guides

Markdown-kilde Fejl i guiden? Skriv til os API-reference (Swagger)

Prøv det med en gratis nøgle

2 000 kald/måned på gratisplanen. Intet kreditkort.

Opret konto →