Integrationshandbok

Koppla Kursportal till CRM, rapportering och egna system

Den här handboken visar när du ska använda Zapier, Make, signerade webhooks eller publikt API, och vilka fält som behövs för en robust integration mellan kursaffären och resten av verksamheten.

FortnoxBokföring
Google AdsMätning
GmailE-post
OutlookSäljteam
POST https://example.com/kursportal-webhook
x-kursportal-event: PAYMENT_PAID
x-kursportal-signature: t=1781085660,v1=...

Välj rätt integrationsspår

Börja med flödet, inte verktyget

De flesta kursgivare behöver tre typer av kopplingar: enkla automationer, realtidshändelser och återkommande datasynk. Kursportal stödjer alla tre utan att tvinga varje team in i ett utvecklingsprojekt.

Zapier eller Make

Använd när sälj, support eller utbildningsansvariga vill koppla Kursportal till CRM, kalkylark, Slack, Teams eller e-post utan egen kod.

  • Bäst för snabb CRM-synk, rapportblad och notiser
  • Välj Kursportal-händelse och klistra in webhook-URL
  • Mappa fält med payload.* i Zapier eller Make

Signerade webhooks

Använd när ditt eget system ska reagera på händelser i nära realtid och kunna verifiera att leveransen verkligen kommer från Kursportal.

  • Enrollment, betalning, kurs klar, kursbevis och accepterad inbjudan
  • HMAC SHA-256-signatur per endpoint
  • Leveranser sparas med svarskod och retry-status

Publikt API

Använd när ett externt system behöver läsa kurskatalog, anmälningar eller ordrar i batch och styra synken med stabil pagination.

  • Bearer-nyckel med organisationsscope
  • Cursor-baserade listor för stora datamängder
  • Passar datalager, BI och egna säljportaler

Publikt API

Läs data med scoped API-nyckel och cursor-pagination

API:t är gjort för rapportering, BI, CRM-synk och egna portaler som behöver hämta kursdata regelbundet. Varje nyckel hör till en organisation och ska bara ges de scopes mottagaren behöver.

Skicka Authorization: Bearer kp_live_.... Alla listor returnerar pagination.nextCursor. Skicka tillbaka värdet som cursor för nästa sida.

Kurser

GET /public/v1/courses?limit=100

Läs publicerad kurskatalog med kurskod, namn, pris, kategori och synliga metadata.

Anmälningar

GET /public/v1/enrollments?courseId=...

Hämta deltagare, kurskoppling och status när CRM, support eller uppföljning behöver egen vy.

Ordrar

GET /public/v1/orders?cursor=...

Synka ordrar med belopp, plattformsavgift, säljarbelopp, faktura, kupong, attribution och accountingMapping.* till rapportering eller ekonomiförberedelse.

Signerade webhooks

Ta emot händelser när något viktigt händer

Webhooks passar när externa system ska reagera på nya anmälningar, betalda ordrar, kursbevis eller accepterade inbjudningar. Leveransen innehåller ett eventnamn, tidpunkt och payload med affärsdata.

ENROLLMENT_CREATEDPAYMENT_PAIDCOURSE_COMPLETEDCERTIFICATE_ISSUEDINVITE_ACCEPTED
{
  "id": "evt_01J...",
  "event": "ENROLLMENT_CREATED",
  "createdAt": "2026-06-10T12:00:00.000Z",
  "payload": {
    "courseId": "course_123",
    "courseName": "Säkra lyft",
    "enrollmentId": "enr_456",
    "userId": "user_789",
    "occurredAt": "2026-06-10T12:00:00.000Z"
  }
}
x-kursportal-deliveryx-kursportal-eventx-kursportal-timestampx-kursportal-signature

Signaturen är HMAC SHA-256(timestamp.body) och skickas som t=timestamp,v1=signature. Spara gärna delivery-id i mottagande system för felsökning och idempotens.

Färdiga automationsrecept

Starta med mallar som matchar Kursportals payload

Skapa en Catch Hook i Zapier eller en Custom webhook i Make, välj samma händelse i Kursportal och använd fältmappningen som första version av automationen.

ENROLLMENT_CREATED

Zapier: ny anmälan till CRM

HubSpot, Pipedrive eller Airtable

Trigger: Webhooks by Zapier, Catch Hook. Action: create/update contact och tagga kursen.

{
  "external_id": "{{payload.userId}}",
  "course_id": "{{payload.courseId}}",
  "course_name": "{{payload.courseName}}",
  "enrollment_id": "{{payload.enrollmentId}}",
  "source": "kursportal",
  "occurred_at": "{{payload.occurredAt}}"
}
PAYMENT_PAID

Make: betalad order till säljrapport

Google Sheets, CRM-affär eller orderrapport

Trigger: Make Custom webhook. Action: add row eller create deal för uppföljning.

{
  "order_number": "{{payload.orderNumber}}",
  "course": "{{payload.courseName}}",
  "bundle": "{{payload.bundleName}}",
  "amount": "{{payload.amount}}",
  "platform_fee": "{{payload.platformFeeAmount}}",
  "seller_amount": "{{payload.sellerAmount}}",
  "revenue_account": "{{payload.accountingMapping.revenueAccount}}",
  "platform_fee_account": "{{payload.accountingMapping.platformFeeAccount}}",
  "currency": "{{payload.currency}}",
  "paid_at": "{{payload.paidAt}}"
}
CERTIFICATE_ISSUED

Zapier/Make: kursbevis till kundteam

Slack, Teams eller e-post

Trigger: certificate issued. Action: meddela säljare, kundteam eller ansvarig chef.

{
  "certificate_number": "{{payload.certificateNumber}}",
  "verification_code": "{{payload.verificationCode}}",
  "course": "{{payload.courseName}}",
  "user_id": "{{payload.userId}}",
  "issued_at": "{{payload.issuedAt}}"
}

Drift och felsökning

Bygg mottagare som tål retries

Kursportal sparar webhook-leveranser och transienta fel kan skickas igen. Därför ska mottagande system kunna känna igen en redan behandlad leverans.

Svara snabbt med 2xx

Bekräfta mottagning först och gör tyngre jobb asynkront i mottagande system. Då kan Kursportal markera leveransen som lyckad.

Verifiera signaturen

Beräkna HMAC SHA-256 av timestamp.body med endpointens secret och jämför med v1-värdet i x-kursportal-signature.

Gör mottagaren idempotent

Använd delivery-id eller event-id som idempotensnyckel så en retry inte skapar dubbla CRM-kontakter, rader eller notiser.

Vanliga frågor

Praktiskt innan ni kopplar på system

Behöver vi egen utvecklare för att använda integrationer?

Nej, Zapier och Make räcker ofta för CRM-synk, rapportblad och notiser. Egen utveckling behövs främst när ni vill verifiera signerade webhooks eller bygga en återkommande API-synk.

Hur skyddas webhook-leveranser?

Varje endpoint har en egen secret. Kursportal skickar timestamp, delivery-id, eventnamn och HMAC SHA-256-signatur så mottagaren kan verifiera payloaden innan data används.

Kan vi läsa alla rader från API:t utan att missa data?

Ja. List-endpoints returnerar pagination.nextCursor. Skicka tillbaka värdet som cursor tills nästa cursor saknas.

Finns seller-specifik Fortnox eller bokföringsintegration?

Plattformens Fortnox-flöde hanteras centralt. Säljare kan exportera orderbok som CSV, JSON och SIE 4i-utkast med egna kontomappningar. Live-synk mot seller-specifika bokföringsleverantörer kräver mer kravarbete kring konton, kostnadsställen, moms och ansvar innan den bör byggas.

Nästa steg

Testa med ett verkligt kursflöde

Börja med en anmälan, en betald order eller ett kursbevis. Då ser du vilka fält CRM, rapportering och kundteam faktiskt behöver.