← För föreningar

Öppet API

Föreningens data är föreningens. Kön och medlemsregistret går alltid att exportera — och de går också att läsa maskinellt, så att föreningens andra verktyg (eller ett framtida centralt förbundsregister) kan hämta dem utan handpåläggning. API:t är skrivskyddat: registren ändras bara genom styrelsevyn och medlemmarnas egna BankID-bekräftelser.

Båda registren publiceras i samma två former — en lista över vad registret innehåller nu, och ett ändringsflöde som svarar på vad som hänt sedan förra anropet. Fyra endpoints, två frågor.

Autentisering

Styrelsen skapar API-nycklar under Inställningar → Öppet API i styrelsevyn. Nyckeln visas en enda gång och skickas som bearer-token:

Authorization: Bearer <nyckel>

En nyckel är knuten till en förening och kan återkallas när som helst. Max 120 anrop per 10 minuter och nyckel — använd ändringsflödena nedan i stället för att hämta om hela registret.

Kö-endpointerna kräver bara nyckeln. Medlems-endpointerna kräver därtill att föreningen har medlemsregistret påslaget; utan modulen svarar de 401, precis som en nyckel som pekar på fel förening.

GET /api/v1/forening/{slug}/ko

Den levande kön i rättvis ordning — samma ordning som medlemmen ser under Mina köplatser och som den öppna kölistan visar (könummer först när ett sådant finns, därefter ködatum). Lägg till .csv för samma fil som styrelsens egen export, kolumn för kolumn.

Fält per köplats: pos (platsen i kön just nu), queue_no (föreningens eget könummer från en migrerad papperskö — saknas om raden inte har ett), id, name, email, phone, street, postcode, city, status (imported/active/paused/offered), joined (den heliga kötiden), declines, trained, last_paid, plot, offer_accepted, created.

joined, trained och last_paid är null när uppgiften inte finns — och null betyder just inte uppgivet, aldrig noll eller nej. En rad med könummer har ofta inget ködatum alls, och en tom trained betyder inte att personen saknar introduktionskurs. Listan omfattar den levande kön; den som fått lott eller avslutat lämnar den och finns kvar i ändringsflödet nedan.

GET /api/v1/forening/{slug}/ko/handelser?since=2026-07-01T00:00:00Z

Köns händelselogg, nyast först — erbjudanden, ja och nej tack, vilande, placeringar och avslut. Fält: at, kind, name (den köandes namn), note. since (RFC 3339) är valfritt och gör flödet till en billig diff: skicka tillbaka at från den nyaste händelsen du behandlat, så får du bara det som hänt efter den.

GET /api/v1/forening/{slug}/medlemmar

Hela registret som JSON (lägg till .csv för Excel-vänlig CSV med samma kolumner som styrelsens export). Fält per medlem: id, name, email, phone, street, apt (lägenhetsnummer), postcode, city, member_no, kind (holder/cogrower/support/partner/honorary), magazine, since, last_paid, status, plot, updated, magazine_mode, sub_from, sub_to, mag_id, dist_code. Personnummer finns aldrig i API:t — fältet existerar inte i svaret, oavsett vad registret vet.

Tidningsfälten, definierade: magazine (bool) betyder står i tidningens pappersadressfil — den betydelse fältet alltid haft, eftersom papper var den enda form som fanns. Hela tidningsvalet står i magazine_mode (paper/digital/none); CSV:ns kolumn Tidning (Ja/Nej) följer samma pappersdefinition och hela valet står i kolumnen Tidningsval. Nya fält och kolumner läggs alltid sist — en konsument som läser på position eller på befintliga fältnamn fortsätter fungera; bygg aldrig in ett antagande om att kolumnlistan är komplett.

GET /api/v1/forening/{slug}/handelser?since=2026-07-01T00:00:00Z

Registrets händelselogg, nyast först — vad som hänt, när och för vem, aldrig själva värdena. since (RFC 3339) är valfritt och gör flödet till en billig diff: hämta bara det som hänt sedan förra anropet. Fält: at, kind (t.ex. imported, activated, contact_changed, plot_coupled, marked_paid, left, transfer_in), member, note.

Exempel

curl -H "Authorization: Bearer $NYCKEL" \
  https://www.minkolonilott.se/api/v1/forening/exempelkolonin/ko

curl -H "Authorization: Bearer $NYCKEL" \
  https://www.minkolonilott.se/api/v1/forening/exempelkolonin/medlemmar

API:t omfattar kön och medlemsregistret (det senare tillvalsmodulen). Personuppgiftsansvaret för båda ligger hos föreningen — se personuppgiftsbiträdesavtalet — så nycklarna och vart datat skickas är föreningens eget ansvar. Frågor och önskemål: info@minkolonilott.se.