API

Alt som kan gjøres i panelet kan gjøres via API-et. Oppslagssiden i panelet bruker de samme endepunktene. API-nøkler lages under API i panelet og krever Medium-pakken eller større.

Autentisering

Send nøkkelen som Bearer-token. Kall går mot virksomhetens egen adresse, eller mot hvilken som helst adresse under declarely.app; nøkkelen avgjør hvilken virksomhet det gjelder.

curl "https://<slug>.declarely.app/api/v1/lookup?phone=%2B4791234567" \
  -H "Authorization: Bearer dk_live_…"

Nøkler har rettighetene read og/eller write. Alle svar er JSON. Feil returnerer { error, message, details? } med passende HTTP-status.

Endepunkter

GET/api/v1/lookup?phone=+4791234567scope: read

Sjekk om et telefonnummer har en gyldig erklæring. Nummeret kan skrives med eller uten landskode; norske numre er standard.

Svar

{
  "phone": "+4791234567",
  "found": true,
  "declaration": {
    "id": "…", "fullName": "Kari Nordmann", "firstName": "Kari",
    "birthDate": "1988-03-14", "phone": "+4791234567", "email": "kari@example.com",
    "signedAt": "2026-09-05T10:12:00Z", "expiresAt": "2027-09-05T10:12:00Z",
    "locale": "nb", "source": "kiosk",
    "children": [{ "id": "…", "fullName": "Ola Nordmann", "birthDate": "2016-05-01", "signedAt": "…" }]
  }
}
GET/api/v1/declarations?query=&page=1&page_size=25&include_expired=false&since=scope: read

Liste over erklæringer, nyeste først. query matcher telefon, navn eller e-post. since er et ISO-tidspunkt.

Svar

{ "items": [ … ], "total": 128, "page": 1, "pageSize": 25 }
GET/api/v1/declarations/{id}scope: read

Én erklæring med barn, IP-adresse og nettleser.

POST/api/v1/declarationsscope: write

Registrer en erklæring på vegne av en gjest. Samme felter som skjemaet. termsVersionId må være gjeldende publiserte versjon (se /terms). accepted må være true.

Body

{
  "phone": "912 34 567",
  "birthDate": "1988-03-14",
  "fullName": "Kari Nordmann",
  "email": "kari@example.com",
  "locale": "nb",
  "termsVersionId": "…",
  "accepted": true,
  "children": [{ "fullName": "Ola Nordmann", "birthDate": "2016-05-01" }],
  "childrenConfirmed": true
}

Svar

201 { "declaration": { … } }
DELETE/api/v1/declarations/{id}scope: write

Trekk tilbake en erklæring. Raden beholdes til utløp for sporbarhet, men regnes som ugyldig.

GET/api/v1/terms?locale=nbscope: read

Gjeldende publiserte vilkår i ønsket språk, med versjons-ID til bruk ved registrering.

GET/api/v1/tenantscope: read

Innstillinger, pakke, abonnementsstatus og bruk.

GET/api/v1/statsscope: read

Tall for dashbord: aktive, signert siste 7 og 30 dager, utløper neste 30 dager, barn, kilder.

Feilkoder

invalid_phoneTelefonnummeret kunne ikke tolkes.
too_youngGjesten er under minstealderen. details.minAge.
email_requiredVirksomheten krever e-post.
child_too_oldEt barn er 18 år eller eldre og må signere selv.
too_many_childrenFlere barn enn tillatt. details.max.
children_confirm_requiredchildrenConfirmed må være true når barn er med.
terms_outdatedtermsVersionId er ikke gjeldende versjon. Hent /terms på nytt.
no_termsVirksomheten har ikke publisert vilkår.
plan_limitPakkens grense for aktive erklæringer er nådd.
rate_limitedFor mange kall. Vent og prøv igjen.
unauthorizedManglende eller ugyldig API-nøkkel.
forbiddenNøkkelen mangler rettigheten, eller pakken inkluderer ikke API.

Innbygging

Skjemaet kan bygges inn på egen nettside. Rammen tilpasser høyden automatisk.

<iframe src="https://<slug>.declarely.app/embed" class="declarely-embed"
        style="width:100%;border:0;min-height:640px" title="Egenerklæring"></iframe>
<script src="https://<slug>.declarely.app/embed.js" async></script>