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

  1. Registrer organisasjonen på duito.net/partner (se Kom i gang).
  2. Lag en API-nøkkel i portalen. Den vises bare én gang, så lagre den trygt.
  3. 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

FeltTypeBeskrivelse
externalIdstring, 1–200påkrevdDeres egen, stabile ID for arrangementet.
titlestring, 1–200påkrevdTittel.
categorystringpåkrevdEn kategori fra listen under.
startsAtISO 8601 med tidssonepåkrevdFor eksempel 2026-11-14T19:00:00+01:00 eller …Z.
locationobjektpåkrevd{ "lat": number, "lng": number, "label": string }. label er stedsnavnet som vises (1–200 tegn).
endsAtISO 8601 med tidssonevalgfriMå være etter startsAt.
descriptionstring, maks 5000valgfriRen tekst. HTML fjernes.
ticketUrlURLvalgfriLenke til billettsalg eller mer informasjon.
coverImageUrlURLvalgfriBilde for arrangementet, på deres egen server.
capacityheltall > 0valgfriMaks antall deltakere.
tagsstring[], maks 10valgfriDeres 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

StatusBodyBetyr
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" } }
StatusKodeBetyr
400VALIDATION_ERROREt felt mangler eller har feil format. Meldingen sier hvilket.
400INVALID_CATEGORYKategorien finnes ikke.
401UNAUTHORIZEDNøkkelen mangler, er feil, eller partneren er deaktivert.
401API_KEY_REVOKEDNøkkelen er trukket tilbake. Lag en ny i portalen.
403PARTNER_PENDING_APPROVALPartneren er ikke godkjent ennå.
429RATE_LIMITEDFor 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:

slugBrukes for
musikkKonserter, kor, festivaler med musikk
sportKamper, løp, treninger, turer
familieBarn og familie
sosialtQuiz, treff, foredrag, markeder
annetAlt 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.
Spørsmål om integrasjonen? Kontakt oss, så hjelper vi dere i gang.