Partner-API
Send arrangementer til Duito fra deres eget system. Ett endepunkt, JSON inn og ut, og samme ID oppdaterer i stedet for å lage duplikater.
Kom i gang
- Registrer organisasjonen på duito.net/partner (se Kom i gang).
- Lag en API-nøkkel i portalen. Den vises bare én gang, så lagre den trygt.
- Send arrangementer som vist under. Før partneren er godkjent, svarer API-et
403 PARTNER_PENDING_APPROVAL.
Autentisering
Send nøkkelen i headeren X-Partner-Api-Key på hvert kall. Bruk alltid HTTPS, og hold nøkkelen på serversiden. Den skal aldri ligge i en nettside eller app som brukerne laster ned.
X-Partner-Api-Key: duito_pk_3f9a...
Opprett eller oppdater et arrangement
POST https://api.duito.net/partner/events
Kallet er idempotent på externalId. Første gang opprettes arrangementet, og senere kall med samme externalId oppdaterer det. Send hele arrangementet hver gang, ikke bare feltene som er endret.
Felter
| Felt | Type | Beskrivelse | |
|---|---|---|---|
externalId | string, 1–200 | påkrevd | Deres egen, stabile ID for arrangementet. |
title | string, 1–200 | påkrevd | Tittel. |
category | string | påkrevd | En kategori fra listen under. |
startsAt | ISO 8601 med tidssone | påkrevd | For eksempel 2026-11-14T19:00:00+01:00 eller …Z. |
location | objekt | påkrevd | { "lat": number, "lng": number, "label": string }. label er stedsnavnet som vises (1–200 tegn). |
endsAt | ISO 8601 med tidssone | valgfri | Må være etter startsAt. |
description | string, maks 5000 | valgfri | Ren tekst. HTML fjernes. |
ticketUrl | URL | valgfri | Lenke til billettsalg eller mer informasjon. |
coverImageUrl | URL | valgfri | Bilde for arrangementet, på deres egen server. |
capacity | heltall > 0 | valgfri | Maks antall deltakere. |
tags | string[], maks 10 | valgfri | Deres egne stikkord, for eksempel ["Jazz", "Konsert"]. Brukes til å sortere arrangementet riktig. |
Eksempel med curl
curl -X POST https://api.duito.net/partner/events \
-H "X-Partner-Api-Key: duito_pk_..." \
-H "Content-Type: application/json" \
-d '{
"externalId": "konsert-2026-11-14",
"title": "Høstkonsert med Mandal kammerkor",
"description": "Årets høstkonsert med verk av Grieg og Sommerro.",
"category": "musikk",
"startsAt": "2026-11-14T19:00:00+01:00",
"endsAt": "2026-11-14T21:00:00+01:00",
"location": { "lat": 58.0294, "lng": 7.4609, "label": "Buen kulturhus, Mandal" },
"ticketUrl": "https://dere.no/billetter/hostkonsert",
"coverImageUrl": "https://dere.no/bilder/hostkonsert.jpg",
"tags": ["Kor", "Klassisk"]
}'
Eksempel i JavaScript
const res = await fetch("https://api.duito.net/partner/events", {
method: "POST",
headers: {
"X-Partner-Api-Key": process.env.DUITO_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
externalId: event.id, // deres egen ID - samme ID oppdaterer
title: event.title,
category: "musikk",
startsAt: event.start.toISOString(),
location: { lat: event.lat, lng: event.lng, label: event.venueName },
ticketUrl: event.ticketUrl,
}),
});
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message}`);
}
Svar
| Status | Body | Betyr |
|---|---|---|
201 | { "status": "created" } | Arrangementet er opprettet. |
200 | { "status": "updated" } | Et arrangement med samme externalId er oppdatert. |
200 | { "status": "attached" } | Det samme arrangementet fantes allerede fra en annen kilde. Deres versjon er koblet til det. |
200 | { "status": "duplicate", "message": "…" } | Et svært likt arrangement finnes allerede, og ble ikke publisert på nytt. |
Feil
Alle feil har samme format:
{ "error": { "code": "INVALID_CATEGORY", "message": "Ukjent kategori" } }
| Status | Kode | Betyr |
|---|---|---|
400 | VALIDATION_ERROR | Et felt mangler eller har feil format. Meldingen sier hvilket. |
400 | INVALID_CATEGORY | Kategorien finnes ikke. |
401 | UNAUTHORIZED | Nøkkelen mangler, er feil, eller partneren er deaktivert. |
401 | API_KEY_REVOKED | Nøkkelen er trukket tilbake. Lag en ny i portalen. |
403 | PARTNER_PENDING_APPROVAL | Partneren er ikke godkjent ennå. |
429 | RATE_LIMITED | For mange kall. Vent litt og prøv igjen. |
Kategorier
Hent gjeldende kategorier fra GET https://api.duito.net/categories (offentlig, ingen nøkkel). Bruk slug-verdien i category. Lista kan utvides, så les den fra endepunktet i stedet for å hardkode den. Per i dag:
| slug | Brukes for |
|---|---|
musikk | Konserter, kor, festivaler med musikk |
sport | Kamper, løp, treninger, turer |
familie | Barn og familie |
sosialt | Quiz, treff, foredrag, markeder |
annet | Alt annet |
Bruk gjerne tags for å beskrive arrangementet mer presist enn kategorien.
Grenser og god praksis
- Maks 100 kall per minutt. Synkroniserer dere mange arrangementer, send dem ett og ett med litt mellomrom.
- Send arrangementet på nytt når noe endres. Det er trygt å sende det samme flere ganger.
- Bruk en stabil
externalId. Endres den, blir det et nytt arrangement. - Bildelenker må være offentlig tilgjengelige og peke rett på bildet.
- Få avlyste arrangementer ut av Duito ved å kontakte oss inntil videre. Kalenderlenken håndterer avlysning automatisk.