Öppet API · v2026-10-13

Bygg på era möten.

Möten, transkript, åtgärder, risk och coachning som REST — med testnycklar som rullar tillbaka, signerade webhooks och en referens som genereras ur koden som kör.

Terminal
curl https://api.notetaker.se/v1/meetings?limit=1 \
  -H "Authorization: Bearer $TELINK_API_KEY"

{
  "ok": true,
  "data": {
    "items": [{
      "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
      "title": "Kundmöte Nord",
      "one_liner": "Genomgång av offert, kunden vill se referenser.",
      "duration_seconds": 2712,
      "open_task_count": 3,
      "state": "done"
    }],
    "has_more": true,
    "next_cursor": "MjAyNi0xMC0xM1QwOTo0Njo1Mi4wMDBa…"
  },
  "warnings": [],
  "errors": []
}

Stockholm

All data i AWS eu-north-1. Den lämnar aldrig EU — inte heller loggar eller kopior.

600 anrop/min

Per nyckel. Webhooks väntar högst 10 sekunder på ert svar.

Testläge på riktigt

Skrivningar körs fullt ut och rullas sedan tillbaka — samma fel i test som i drift.

Kom igång

Kom igång på tre minuter

  1. 1

    Skapa en testnyckel

    Under Inställningar → API. Testnycklar börjar med tmi_test_ och kör varje skrivning fullt ut innan den rullas tillbaka.

    Till Inställningar → API
  2. 2

    Kontrollera nyckeln

    /v1/me visar nyckelns namn, läge och scopes.

    curl
    curl https://api.notetaker.se/v1/me \
      -H "Authorization: Bearer $TELINK_API_KEY"
  3. 3

    Läs de senaste mötena

    Nyaste först, med sammanfattningens första mening och antal öppna åtgärder.

    curl
    curl "https://api.notetaker.se/v1/meetings?limit=5" \
      -H "Authorization: Bearer $TELINK_API_KEY"
  4. 4

    Lägg till en webhook

    Ange en https-adress, välj händelser och tryck Skicka test. Leveransen syns i loggen inom sekunder.

Grunderna

Det som gäller för alla anrop

Autentisering

Skicka nyckeln som Bearer. tmi_live_ för drift, tmi_test_ för test. Nyckeln visas en gång när den skapas — vi sparar bara ett hash.

Authorization: Bearer tmi_live_3f9a1c2e…

Svarskuvertet

Alla svar har samma form. ok säger om anropet lyckades, errors har en stabil code och ett svenskt message.

{ "ok": true, "data": { … }, "warnings": [], "errors": [] }

Paginering

Listor ger has_more och next_cursor. Skicka cursor tills has_more är false.

let cursor = null;
do {
  const res = await fetch(`https://api.notetaker.se/v1/meetings?limit=100${cursor ? `&cursor=${cursor}` : ""}`, {
    headers: { Authorization: `Bearer ${process.env.TELINK_API_KEY}` },
  });
  const { data } = await res.json();
  for (const m of data.items) console.log(m.title);
  cursor = data.has_more ? data.next_cursor : null;
} while (cursor);

Idempotens

Skicka Idempotency-Key på skrivningar. Samma nyckel och kropp inom 24 h ger samma svar utan att köras igen; en annan kropp ger 409 idempotency_mismatch. Omspelade svar har Idempotent-Replayed: true.

Idempotency-Key: 6f1c2a4e-8b3d-4f5a-9c7e-1d2b3a4c5e6f

Ratelimit

600 anrop per minut och nyckel. X-RateLimit-Remaining visar hur många som återstår; vid 429 säger Retry-After hur många sekunder du ska vänta.

HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Remaining: 0

Version

Varje svar bär Telink-Version. Vi bryter aldrig ett befintligt fält inom en version; nya fält kan tillkomma.

Telink-Version: 2026-10-13

Referens

Alla anrop

Inbyggd kopia · OpenAPI 3.1.0

Kom igång

Första anropet.

Vem är jag

GET/me

Bekräftar att nyckeln fungerar och visar vilka scopes den har. Börja här.

Svar · 200 · data

  • keyobject
  • key.idstring
    Nyckel-id
  • key.prefixstring
    Prefix
  • key.namestring
    Namn
  • key.modestring
    live eller test
  • scopesobject[]
  • scopes[].scopestring
    Scope
  • scopes[].descriptionstring
    Beskrivning
  • organizationobject
  • organization.idstring
    Id
  • organization.namestring
    Namn
  • organization.slugstring
    Slug
  • organization.timezonestring
    Tidszon
  • organization.localestring
    Språk

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
curl https://api.notetaker.se/v1/me \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "key": {
      "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
      "prefix": "tmi_test_3f9a1c2e",
      "name": "Affärssystemet",
      "mode": "test"
    },
    "scopes": [
      {
        "scope": "meetings:read",
        "description": "Läsa möten, sammanfattningar, kapitel och höjdpunkter"
      }
    ],
    "organization": {
      "id": "a1b2c3d4-0000-4000-8000-000000000001",
      "name": "Nordbolaget AB",
      "slug": "nordbolaget",
      "timezone": "Europe/Stockholm",
      "locale": "sv-SE"
    }
  },
  "warnings": [],
  "errors": []
}

Möten

Hållna möten med sammanfattning, kapitel, höjdpunkter, transkript och inspelning.

Lista möten

GET/meetingsmeetings:read

Hållna möten med innehåll som standard, nyaste först. Listan bär inte transkriptet — hämta det per möte. Sök med q (svensk fulltext).

Parametrar

  • statusstringquery
    held (standard), upcoming, failed eller any.
  • fromstringquery
    Planerad start från och med (ISO 8601).
  • tostringquery
    Planerad start före (ISO 8601).
  • ownerstringquery
    Bara mötesägaren med detta användar-id.
  • categorystringquery
    Bara denna kategori.
  • qstringquery
    Fritext i titel, sammanfattning och transkript.
  • limitintegerquery
    Antal per sida, 1–100. Standard 50.
  • cursorstringquery
    next_cursor från föregående sida.

Svar · 200 · data

  • items*MeetingListItem[]
  • has_more*boolean
    Fler finns
  • next_cursorstring | null
    Skicka som cursor för nästa sida

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/meetings \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
        "title": "Kundmöte Nord",
        "one_liner": "Genomgång av offert, kunden vill se referenser.",
        "scheduled_at": "2026-10-13T09:00:00.000Z",
        "started_at": "2026-10-13T09:01:40.000Z",
        "ended_at": "2026-10-13T09:46:52.000Z",
        "duration_seconds": 2712,
        "category": "sälj",
        "meeting_type": "uppföljning",
        "platform": "teams",
        "source": "calendar",
        "owner": {
          "id": "c0ffee00-1111-4222-8333-444455556666",
          "display_name": "Alex Persson",
          "email": "alex@exempel.se"
        },
        "participant_count": 4,
        "open_task_count": 3,
        "objection_count": 2,
        "has_media": true,
        "state": "done",
        "state_label": "Klart"
      }
    ],
    "has_more": true,
    "next_cursor": "MjAyNi0xMC0xM1QwOTo0Njo1Mi4wMDBafDNmMmExYjlj"
  },
  "warnings": [],
  "errors": []
}

Hämta ett möte

GET/meetings/{id}meetings:read

Hela mötet: sammanfattning, kapitel, höjdpunkter, taltid, insikter. Transkriptet hämtas separat.

Parametrar

  • id*stringstig
    Mötes-id

Svar · 200 · data

  • id*string
    Mötes-id
  • titlestring | null
    Titel
  • one_linerstring | null
    En mening
  • scheduled_atstring | null
    Planerad start
  • started_atstring | null
    Start
  • ended_atstring | null
    Slut
  • duration_secondsinteger | null
    Sekunder
  • categorystring | null
    Kategori
  • meeting_typestring | null
    Typ
  • ownerUser
  • participantsobject[]
    Deltagare med namn, e-post och is_internal
  • summaryany
    Sammanfattning (objekt med text och bullets)
  • chaptersobject[]
    Kapitel med start_s/end_s
  • highlightsobject[]
    Höjdpunkter: kind (objection, decision, question, commitment …), text, at_s, speaker
  • talk_statsany
    Andel taltid per talare
  • insightsany
    Övriga insikter
  • has_mediaboolean
    Inspelning finns
  • sourcestring | null
    Källa
  • transcript_enginestring | null
    Transkriberingsmotor
  • retention_delete_atstring | null
    När mötet raderas enligt organisationens gallringstid
  • state*string
    Tillstånd
  • state_labelstring
    Etikett

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/meetings/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "title": "Kundmöte Nord",
    "one_liner": "Genomgång av offert, kunden vill se referenser.",
    "scheduled_at": "2026-10-13T09:00:00.000Z",
    "started_at": "2026-10-13T09:01:40.000Z",
    "ended_at": "2026-10-13T09:46:52.000Z",
    "duration_seconds": 2712,
    "category": "sälj",
    "meeting_type": "uppföljning",
    "platform": "teams",
    "source": "calendar",
    "owner": {
      "id": "c0ffee00-1111-4222-8333-444455556666",
      "display_name": "Alex Persson",
      "email": "alex@exempel.se"
    },
    "participant_count": 4,
    "open_task_count": 3,
    "objection_count": 2,
    "has_media": true,
    "state": "done",
    "state_label": "Klart",
    "participants": [
      {
        "name": "Alex Persson",
        "email": "alex@exempel.se",
        "is_internal": true
      },
      {
        "name": "Maria Nord",
        "email": "maria@nordbolaget.se",
        "is_internal": false
      }
    ],
    "summary": {
      "text": "Kunden är positiv till offerten men vill se två referenser i samma bransch innan beslut.",
      "bullets": [
        "Offerten på 180 000 kr gicks igenom",
        "Beslut väntas vecka 44"
      ]
    },
    "chapters": [
      {
        "title": "Inledning",
        "start_s": 0,
        "end_s": 180
      },
      {
        "title": "Offertgenomgång",
        "start_s": 180,
        "end_s": 1900
      }
    ],
    "highlights": [
      {
        "kind": "objection",
        "text": "Priset ligger över vad vi räknat med.",
        "at_s": 1240,
        "speaker": "Maria Nord"
      }
    ],
    "talk_stats": {
      "Alex Persson": 0.58,
      "Maria Nord": 0.42
    },
    "insights": {
      "sentiment": "positiv",
      "next_step": "Skicka två referenser senast fredag"
    },
    "transcript_engine": "elevenlabs-scribe-v2",
    "retention_delete_at": "2027-10-13T09:00:00.000Z"
  },
  "warnings": [],
  "errors": []
}

Ändra titel eller kategori

PATCH/meetings/{id}meetings:write

Med en testnyckel körs ändringen fullt ut och rullas sedan tillbaka; svaret får dry_run: true.

Parametrar

  • id*stringstig
    Mötes-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • titlestring
    Ny titel, max 300 tecken
  • categorystring
    Ny kategori, max 50 tecken

Svar · 200 · data

  • idstring
    Id
  • titlestring | null
    Titel
  • categorystring | null
    Kategori
  • changedboolean
    Ändrad
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
  • 409idempotency_mismatchSamma Idempotency-Key har redan använts för ett annat anrop.
curl -X PATCH https://api.notetaker.se/v1/meetings/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"title":"Kundmöte Nord – offert","category":"sälj"}'
Svar 200
{
  "ok": true,
  "data": {
    "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "title": "Kundmöte Nord – offert",
    "category": "sälj",
    "changed": true
  },
  "warnings": [],
  "errors": []
}

Radera ett möte

DEL/meetings/{id}meetings:write

Raderar hela kedjan — inspelning, transkript, sammanfattning, åtgärder, betyg. Loggas i revisionsspåret och skickar meeting.deleted. Går inte att ångra.

Parametrar

  • id*stringstig
    Mötes-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • idstring
    Id
  • deletedboolean
    Raderat
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X DELETE https://api.notetaker.se/v1/meetings/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "deleted": true
  },
  "warnings": [],
  "errors": []
}

Hämta transkriptet

GET/meetings/{id}/transcripttranscripts:read

Segment i ordning med talare och tid. Paginera med offset/limit för långa möten. status är pending, running, done, failed eller skipped.

Parametrar

  • id*stringstig
    Mötes-id
  • offsetintegerquery
    Första segment. Standard 0.
  • limitintegerquery
    1–2000. Standard 1000.

Svar · 200 · data

  • segmentsTranscriptSegment[]
  • statusstring
    Transkriptets status

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/meetings/$ID/transcript \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "segments": [
      {
        "idx": 0,
        "start_s": 0,
        "end_s": 4.2,
        "speaker": "Alex Persson",
        "text": "Hej Maria, kul att ses igen."
      },
      {
        "idx": 1,
        "start_s": 4.4,
        "end_s": 9.1,
        "speaker": "Maria Nord",
        "text": "Hej! Ja, vi har sett över offerten."
      }
    ],
    "status": "done"
  },
  "warnings": [],
  "errors": []
}

Signerad länk till inspelningen

GET/meetings/{id}/recording-urlrecordings:read

Länken gäller i en timme och skapas vid varje anrop. Cacha den aldrig. Varje uppslag skrivs i organisationens revisionsspår.

Parametrar

  • id*stringstig
    Mötes-id

Svar · 200 · data

  • urlstring
    Signerad adress
  • expires_atstring
    Giltig till

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/meetings/$ID/recording-url \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "url": "https://telink-mi-prod-media.s3.eu-north-1.amazonaws.com/t/…?X-Amz-Signature=…",
    "expires_at": "2026-10-13T10:47:12.000Z"
  },
  "warnings": [],
  "errors": []
}

Åtgärder

Det som ska göras efter mötet.

Lista åtgärder

GET/taskstasks:read

Åtgärder som analysen hittat i mötena. Öppna som standard.

Parametrar

  • statusstringquery
    open (standard), done, dropped eller any.
  • assigneestringquery
    Bara denna användare.
  • meeting_idstringquery
    Bara detta möte.
  • limitintegerquery
    Antal per sida, 1–200. Standard 100.
  • cursorstringquery
    next_cursor från föregående sida.

Svar · 200 · data

  • items*Task[]
  • has_more*boolean
    Fler finns
  • next_cursorstring | null
    Skicka som cursor för nästa sida

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/tasks \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "9e8d7c6b-5a49-4382-9170-6f5e4d3c2b1a",
        "title": "Skicka två referenser till Nord",
        "detail": null,
        "due_on": "2026-10-17",
        "at_second": 1402,
        "status": "open",
        "created_at": "2026-10-13T09:50:00.000Z",
        "done_at": null,
        "assignee": {
          "id": "c0ffee00-1111-4222-8333-444455556666",
          "display_name": "Alex Persson",
          "email": "alex@exempel.se"
        },
        "meeting": {
          "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
          "title": "Kundmöte Nord",
          "scheduled_at": "2026-10-13T09:00:00.000Z"
        }
      }
    ],
    "has_more": false,
    "next_cursor": null
  },
  "warnings": [],
  "errors": []
}

Bocka av eller återöppna

PATCH/tasks/{id}tasks:write

Svarar 200 med changed: true eller 404 — aldrig 200 utan ändring. Skickar task.updated.

Parametrar

  • id*stringstig
    Åtgärds-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • status*string
    open, done eller dropped

Svar · 200 · data

  • idstring
    Id
  • meeting_idstring
    Möte
  • statusstring
    Status
  • done_atstring | null
    Avbockad
  • changedboolean
    Ändrad
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
  • 409idempotency_mismatchSamma Idempotency-Key har redan använts för ett annat anrop.
curl -X PATCH https://api.notetaker.se/v1/tasks/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'
Svar 200
{
  "ok": true,
  "data": {
    "id": "9e8d7c6b-5a49-4382-9170-6f5e4d3c2b1a",
    "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "status": "done",
    "done_at": "2026-10-13T11:02:00.000Z",
    "changed": true
  },
  "warnings": [],
  "errors": []
}

Kalender

Kommande möten och botens läge per möte.

Kommande kalendermöten

GET/calendar/eventscalendar:read

Möten ur de kopplade kalendrarna med botens läge per möte. Standard: nu till 14 dagar framåt.

Parametrar

  • fromstringquery
    Från (ISO 8601). Standard nu.
  • tostringquery
    Till (ISO 8601). Standard +14 dagar.

Svar · 200 · data

  • itemsCalendarEvent[]

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/calendar/events \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
        "subject": "Demo Nordbolaget",
        "starts_at": "2026-10-15T13:00:00.000Z",
        "ends_at": "2026-10-15T13:45:00.000Z",
        "platform": "teams",
        "organizer_email": "alex@exempel.se",
        "is_internal": false,
        "notetaker_opt_out": false,
        "joinable": true,
        "bot_booked": true
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Stäng av eller sätt på boten

PATCH/calendar/events/{id}calendar:write

notetaker_opt_out: true hindrar boten från att gå in i mötet.

Parametrar

  • id*stringstig
    Kalendermötes-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • notetaker_opt_out*boolean
    true = boten håller sig borta

Svar · 200 · data

  • idstring
    Id
  • notetaker_opt_outboolean
    Läge
  • changedboolean
    Ändrad
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X PATCH https://api.notetaker.se/v1/calendar/events/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"notetaker_opt_out":true}'
Svar 200
{
  "ok": true,
  "data": {
    "id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
    "notetaker_opt_out": true,
    "changed": true
  },
  "warnings": [],
  "errors": []
}

Bot

Skicka boten till ett möte nu.

Skicka boten till ett kalendermöte nu

POST/calendar/events/{id}/botbots:write

För möten som redan börjat. Sitter en bot redan i mötet svarar vi med den i stället för att skicka en till. Testnycklar validerar men skickar inget.

Parametrar

  • id*stringstig
    Kalendermötes-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • okboolean
    Boten är på väg
  • meeting_idstring
    Mötet som skapades eller redan fanns
  • existingboolean
    En bot satt redan där
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 409cap_reachedMånadens inspelningstak är nått.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/calendar/events/$ID/bot \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "ok": true,
    "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "existing": false
  },
  "warnings": [],
  "errors": []
}

Skicka boten till en möteslänk

POST/botsbots:write

Teams, Zoom, Google Meet och Webex. Mötet skapas i Telink och följer samma kedja som kalendermöten.

Parametrar

  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • join_url*string
    Möteslänk
  • titlestring
    Titel, valfri

Svar · 200 · data

  • okboolean
    Boten är på väg
  • meeting_idstring
    Mötes-id
  • existingboolean
    En bot satt redan där
  • dry_runboolean
    Bara med testnyckel

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 409cap_reachedMånadens inspelningstak är nått.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/bots \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"join_url":"https://teams.microsoft.com/l/meetup-join/19%3ameeting_…","title":"Avstämning leverans"}'
Svar 200
{
  "ok": true,
  "data": {
    "ok": true,
    "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "existing": false
  },
  "warnings": [],
  "errors": []
}

Fråga

Fråga om mötena i klartext.

Ställ en fråga om mötena

POST/askask:read

Samma motor som Fråga i appen. Datum, "senaste" och invändningar slås upp i databasen; modellen formulerar bara svaret. route säger hur svaret togs fram.

Parametrar

  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • question*string
    Frågan på svenska
  • scopestring
    all (standard) eller mine

Svar · 200 · data

  • answerstring
    Svar
  • sourcesobject[]
  • sources[].meeting_idstring
    Möte
  • sources[].titlestring | null
    Titel
  • sources[].at_secondnumber | null
  • sources[].quotestring | null
    Citat
  • routestring
    latest, highlights, tasks, stats, risk, coaching, search, semantic eller mixed

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/ask \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"question":"Vilka invändningar fick vi i september?"}'
Svar 200
{
  "ok": true,
  "data": {
    "answer": "I september kom tre invändningar, alla om pris: Nordbolaget (13/9), Vestia (20/9) och Kalmar Bygg (27/9).",
    "sources": [
      {
        "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
        "title": "Kundmöte Nord",
        "at_second": 1240,
        "quote": "Priset ligger över vad vi räknat med."
      }
    ],
    "route": "highlights"
  },
  "warnings": [],
  "errors": []
}

Affärsrisk

Motparter som riskerar att tappas.

Motparter med öppna risksignaler

GET/riskrisk:read

Sortera på risk_points. labels översätter signaltyper till svenska.

Parametrar

  • min_pointsintegerquery
    Minsta risk_points. Standard 0.

Svar · 200 · data

  • counterpartiesCounterparty[]
  • labelsobject

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/risk \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "counterparties": [
      {
        "counterparty_id": "11112222-3333-4444-8555-666677778888",
        "domain": "nordbolaget.se",
        "name": "Nordbolaget AB",
        "last_seen_at": "2026-10-13T09:46:52.000Z",
        "open_signals": 2,
        "risk_points": 5,
        "kinds": [
          "price_objection",
          "silence"
        ]
      }
    ],
    "labels": {
      "price_objection": "Prisinvändning",
      "silence": "Tystnad"
    }
  },
  "warnings": [],
  "errors": []
}

Signaler för en motpart

GET/risk/{id}risk:read

Öppna och stängda signaler med belägg, plus mötena med motparten.

Parametrar

  • id*stringstig
    Motparts-id

Svar · 200 · data

  • counterpartyobject
  • signalsobject[]
  • meetingsobject[]
  • labelsobject

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/risk/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "counterparty": {
      "id": "11112222-3333-4444-8555-666677778888",
      "domain": "nordbolaget.se",
      "name": "Nordbolaget AB",
      "first_seen_at": "2026-08-01T08:00:00.000Z",
      "last_seen_at": "2026-10-13T09:46:52.000Z",
      "is_muted": false
    },
    "signals": [
      {
        "kind": "price_objection",
        "severity": 2,
        "detail": "Priset ifrågasattes utan att besvaras.",
        "evidence_quote": "Priset ligger över vad vi räknat med.",
        "evidence_at_s": 1240,
        "evidence_meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
        "evidence_meeting_title": "Kundmöte Nord",
        "detected_at": "2026-10-13T10:00:00.000Z",
        "resolved_at": null,
        "resolved_reason": null
      }
    ],
    "meetings": [
      {
        "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
        "title": "Kundmöte Nord",
        "scheduled_at": "2026-10-13T09:00:00.000Z",
        "one_liner": "Genomgång av offert.",
        "attendee_emails": [
          "maria@nordbolaget.se"
        ]
      }
    ],
    "labels": {
      "price_objection": "Prisinvändning"
    }
  },
  "warnings": [],
  "errors": []
}

Coachning

Scorekort per möte.

Scorekortet för ett möte

GET/meetings/{id}/scorecoaching:read

Visa aldrig ett betyg utan dess citat. gaps är inte nollor — de är kriterier som inte kunde bedömas.

Parametrar

  • id*stringstig
    Mötes-id

Svar · 200 · data

  • scoresobject[]
  • scores[].keystring
    Kriterienyckel
  • scores[].labelstring
    Etikett
  • scores[].scoreinteger
    Poäng
  • scores[].max_scoreinteger
    Max
  • scores[].evidence_quotestring
    Citat som belägger betyget
  • scores[].evidence_at_snumber | null
  • scores[].rationalestring | null
    Motivering
  • gapsobject[]
  • gaps[].keystring
    Kriterienyckel
  • gaps[].labelstring
    Etikett
  • gaps[].reasonstring
    no_evidence, quote_not_found eller not_applicable
  • gaps[].detailstring | null
    Detalj
  • summaryobject | null
  • summary.scored_criteriainteger
    Bedömda kriterier
  • summary.weighted_pointsnumber
  • summary.weighted_maxnumber
  • summary.pctnumber

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/meetings/$ID/score \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "scores": [
      {
        "key": "discovery",
        "label": "Behovsanalys",
        "score": 4,
        "max_score": 5,
        "evidence_quote": "Vad är det viktigaste för er att få löst i höst?",
        "evidence_at_s": 312,
        "rationale": "Öppen fråga tidigt i mötet."
      }
    ],
    "gaps": [
      {
        "key": "closing",
        "label": "Avslut",
        "reason": "no_evidence",
        "detail": null
      }
    ],
    "summary": {
      "scored_criteria": 4,
      "weighted_points": 15,
      "weighted_max": 20,
      "pct": 75
    }
  },
  "warnings": [],
  "errors": []
}

Användare

Organisationens personer.

Organisationens användare

GET/usersusers:read

För att översätta owner- och assignee-id till personer, och för att filtrera möten per säljare.

Svar · 200 · data

  • itemsobject[]
  • items[].idstring
    Id
  • items[].emailstring
    E-post
  • items[].display_namestring | null
    Namn
  • items[].rolestring
    platform_admin, tenant_admin, manager eller member
  • items[].statusstring
    invited eller active
  • items[].created_atstring
    Skapad

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/users \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "c0ffee00-1111-4222-8333-444455556666",
        "email": "alex@exempel.se",
        "display_name": "Alex Persson",
        "role": "member",
        "status": "active",
        "created_at": "2026-09-01T07:00:00.000Z"
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Webhooks

Händelser till er server, signerade.

Lista webhooks

GET/webhookswebhooks:manage

Högst tio per organisation.

Svar · 200 · data

  • itemsWebhookEndpoint[]
  • limitinteger
    Max antal
  • eventsstring[]

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/webhooks \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
        "url": "https://example.se/telink/webhook",
        "description": "Affärssystemet",
        "events": [
          "meeting.completed",
          "task.updated"
        ],
        "active": true,
        "test_mode": false,
        "last_status": 200,
        "last_error": null,
        "last_delivery_at": "2026-10-13T09:47:13.000Z",
        "gave_up_at": null,
        "created_at": "2026-10-01T08:00:00.000Z"
      }
    ],
    "limit": 10,
    "events": [
      "meeting.started",
      "meeting.completed",
      "meeting.failed",
      "meeting.deleted",
      "task.updated",
      "score.ready",
      "risk.signal_detected",
      "webhook.test"
    ]
  },
  "warnings": [],
  "errors": []
}

Skapa en webhook

POST/webhookswebhooks:manage

Svaret innehåller secret — enda gången den visas. Verifiera Telink-Signature med den. Adressen måste vara https och publik.

Parametrar

  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • url*string
    Mottagaradress, https
  • events*string[]
    Minst en händelse
  • descriptionstring
    Valfri beskrivning

Svar · 201 · data

  • id*string
    Webhook-id
  • url*string
    Mottagaradress, https
  • descriptionstring | null
    Beskrivning
  • events*string[]
    Prenumererade händelser
  • active*boolean
    Aktiv
  • test_modeboolean
    Skapad med testnyckel — får aldrig skarpa händelser
  • last_statusinteger | null
    Senaste HTTP-status från mottagaren
  • last_errorstring | null
    Senaste fel
  • last_delivery_atstring | null
    Senaste leverans
  • gave_up_atstring | null
    Satt när åtta försök misslyckats; nollställs vid återaktivering
  • created_atstring
    Skapad
  • secretstring
    Signeringshemligheten. Bara i svaret vid skapande och rullning.

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 409limit_reachedHögst 10 webhooks per organisation.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/webhooks \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.se/telink/webhook","events":["meeting.completed","task.updated"],"description":"Affärssystemet"}'
Svar 201
{
  "ok": true,
  "data": {
    "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "url": "https://example.se/telink/webhook",
    "description": "Affärssystemet",
    "events": [
      "meeting.completed",
      "task.updated"
    ],
    "active": true,
    "test_mode": false,
    "last_status": null,
    "last_error": null,
    "last_delivery_at": null,
    "gave_up_at": null,
    "created_at": "2026-10-13T09:00:00.000Z",
    "secret": "tmi_whsec_4f6d…"
  },
  "warnings": [],
  "errors": []
}

Hämta en webhook

GET/webhooks/{id}webhooks:manage

Utan hemligheten.

Parametrar

  • id*stringstig
    Webhook-id

Svar · 200 · data

  • id*string
    Webhook-id
  • url*string
    Mottagaradress, https
  • descriptionstring | null
    Beskrivning
  • events*string[]
    Prenumererade händelser
  • active*boolean
    Aktiv
  • test_modeboolean
    Skapad med testnyckel — får aldrig skarpa händelser
  • last_statusinteger | null
    Senaste HTTP-status från mottagaren
  • last_errorstring | null
    Senaste fel
  • last_delivery_atstring | null
    Senaste leverans
  • gave_up_atstring | null
    Satt när åtta försök misslyckats; nollställs vid återaktivering
  • created_atstring
    Skapad
  • secretstring
    Signeringshemligheten. Bara i svaret vid skapande och rullning.

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/webhooks/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "url": "https://example.se/telink/webhook",
    "description": "Affärssystemet",
    "events": [
      "meeting.completed"
    ],
    "active": true,
    "test_mode": false,
    "last_status": 200,
    "last_error": null,
    "last_delivery_at": "2026-10-13T09:47:13.000Z",
    "gave_up_at": null,
    "created_at": "2026-10-01T08:00:00.000Z"
  },
  "warnings": [],
  "errors": []
}

Ändra eller pausa en webhook

PATCH/webhooks/{id}webhooks:manage

active: true återaktiverar också en webhook som gett upp efter åtta misslyckade försök.

Parametrar

  • id*stringstig
    Webhook-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Kropp

  • urlstring
    Ny adress
  • eventsstring[]
  • descriptionstring
    Beskrivning
  • activeboolean
    Aktiv

Svar · 200 · data

  • id*string
    Webhook-id
  • url*string
    Mottagaradress, https
  • descriptionstring | null
    Beskrivning
  • events*string[]
    Prenumererade händelser
  • active*boolean
    Aktiv
  • test_modeboolean
    Skapad med testnyckel — får aldrig skarpa händelser
  • last_statusinteger | null
    Senaste HTTP-status från mottagaren
  • last_errorstring | null
    Senaste fel
  • last_delivery_atstring | null
    Senaste leverans
  • gave_up_atstring | null
    Satt när åtta försök misslyckats; nollställs vid återaktivering
  • created_atstring
    Skapad
  • secretstring
    Signeringshemligheten. Bara i svaret vid skapande och rullning.

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X PATCH https://api.notetaker.se/v1/webhooks/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"active":false}'
Svar 200
{
  "ok": true,
  "data": {
    "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "url": "https://example.se/telink/webhook",
    "description": "Affärssystemet",
    "events": [
      "meeting.completed"
    ],
    "active": false,
    "test_mode": false,
    "last_status": 200,
    "last_error": null,
    "last_delivery_at": "2026-10-13T09:47:13.000Z",
    "gave_up_at": null,
    "created_at": "2026-10-01T08:00:00.000Z"
  },
  "warnings": [],
  "errors": []
}

Ta bort en webhook

DEL/webhooks/{id}webhooks:manage

Tar bort endpointen och dess leveranslogg.

Parametrar

  • id*stringstig
    Webhook-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • idstring
    Id
  • deletedboolean
    Borttagen

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X DELETE https://api.notetaker.se/v1/webhooks/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "deleted": true
  },
  "warnings": [],
  "errors": []
}

Ny signeringshemlighet

POST/webhooks/{id}/rotate-secretwebhooks:manage

Den gamla slutar gälla direkt.

Parametrar

  • id*stringstig
    Webhook-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • idstring
    Id
  • secretstring
    Ny hemlighet

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/webhooks/$ID/rotate-secret \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
    "secret": "tmi_whsec_9a1c…"
  },
  "warnings": [],
  "errors": []
}

Skicka en testhändelse

POST/webhooks/{id}/testwebhooks:manage

Går genom hela kedjan: kö, signatur, leveranslogg. Händelsetypen är webhook.test.

Parametrar

  • id*stringstig
    Webhook-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • event_idstring
    Händelse
  • delivery_idstring
    Leverans
  • queuedboolean
    Köad

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 409inactiveWebhooken är pausad.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/webhooks/$ID/test \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "event_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
    "delivery_id": "d1e2f3a4-b5c6-4d7e-8f90-a1b2c3d4e5f6",
    "queued": true
  },
  "warnings": [],
  "errors": []
}

Leveranslogg

GET/webhooks/{id}/deliverieswebhooks:manage

Senaste leveranserna med status, svar och fel.

Parametrar

  • id*stringstig
    Webhook-id
  • limitintegerquery
    1–200. Standard 50.

Svar · 200 · data

  • itemsWebhookDelivery[]

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/webhooks/$ID/deliveries \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": "d1e2f3a4-b5c6-4d7e-8f90-a1b2c3d4e5f6",
        "status": "delivered",
        "attempts": 1,
        "max_attempts": 8,
        "next_attempt_at": "2026-10-13T09:47:12.000Z",
        "response_status": 200,
        "response_ms": 212,
        "last_error": null,
        "delivered_at": "2026-10-13T09:47:13.000Z",
        "created_at": "2026-10-13T09:47:12.000Z",
        "event_id": "5a4b3c2d-1e0f-4a9b-8c7d-6e5f4a3b2c1d",
        "event_type": "meeting.completed",
        "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b"
      }
    ]
  },
  "warnings": [],
  "errors": []
}

Hämta en händelse

GET/webhook-events/{id}webhooks:manage

Händelsens innehåll, för felsökning och för att hämta det som en missad leverans bar.

Parametrar

  • id*stringstig
    Händelse-id

Svar · 200 · data

  • id*string
    Händelse-id
  • type*string
    Händelsetyp En av: meeting.started, meeting.completed, meeting.failed, meeting.deleted, task.updated, score.ready, risk.signal_detected, webhook.test.
  • created_at*string
    Skapad
  • tenant_idstring
    Organisation
  • meeting_idstring | null
    Möte
  • data*object
    Händelsens innehåll

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl https://api.notetaker.se/v1/webhook-events/$ID \
  -H "Authorization: Bearer $TELINK_API_KEY"
Svar 200
{
  "ok": true,
  "data": {
    "id": "7d4e8a2b-1c3f-4e5a-9b6d-2f1a3c4e5b6d",
    "type": "meeting.completed",
    "created_at": "2026-10-13T09:47:12.000Z",
    "tenant_id": "a1b2c3d4-0000-4000-8000-000000000001",
    "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "data": {
      "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
      "title": "Kundmöte Nord",
      "one_liner": "Genomgång av offert, kunden vill se referenser.",
      "scheduled_at": "2026-10-13T09:00:00.000Z",
      "started_at": "2026-10-13T09:01:40.000Z",
      "ended_at": "2026-10-13T09:46:52.000Z",
      "duration_seconds": 2712,
      "category": "sälj",
      "meeting_type": "uppföljning",
      "platform": "teams",
      "source": "calendar",
      "owner_user_id": "c0ffee00-1111-4222-8333-444455556666",
      "participant_count": 4,
      "has_media": true,
      "join_failure_kind": null,
      "summary_available": true,
      "open_task_count": 3,
      "objection_count": 2
    }
  },
  "warnings": [],
  "errors": []
}

Leverera igen

POST/webhook-deliveries/{id}/redeliverwebhooks:manage

Nollställer försöken och köar leveransen på nytt. Återaktiverar endpointen om den gett upp.

Parametrar

  • id*stringstig
    Leverans-id
  • Idempotency-Keystringhuvud
    Valfri men rekommenderad. Samma nyckel + samma kropp inom 24 h ger samma svar utan att köras igen.

Svar · 200 · data

  • idstring
    Id
  • queuedboolean
    Köad

Fel

  • 401unauthorizedNyckeln känns inte igen.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 404not_foundMötet finns inte.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
curl -X POST https://api.notetaker.se/v1/webhook-deliveries/$ID/redeliver \
  -H "Authorization: Bearer $TELINK_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 200
{
  "ok": true,
  "data": {
    "id": "d1e2f3a4-b5c6-4d7e-8f90-a1b2c3d4e5f6",
    "queued": true
  },
  "warnings": [],
  "errors": []
}

Webhooks

Händelser till er server

  1. 01

    Händelsen skrivs i samma transaktion som tillståndet den beskriver — finns mötet som klart, finns händelsen.

  2. 02

    Leveransen går ut inom sekunder, signerad med endpointens hemlighet.

  3. 03

    Svarar ni inte 2xx försöker vi igen upp till åtta gånger med backoff: 1, 2, 4 … 128 minuter.

  4. 04

    Efter åtta misslyckade försök sätts gave_up_at och endpointen pausas. Återaktivera eller omleverera med en knapp.

Händelser

  • meeting.startedBoten är inne i mötet och spelar in.
  • meeting.completedTranskript, sammanfattning och åtgärder är klara.
  • meeting.failedBoten kom inte in (lobby, nekad, ingen dök upp).
  • meeting.deletedMötet raderades — av en användare eller av retention.
  • task.updatedEn åtgärd bockades av, återöppnades eller ströks.
  • score.readyScorekortet för mötet är satt.
  • risk.signal_detectedEn ny risksignal på en motpart.
  • webhook.testTesthändelse från portalen.

Huvuden vi skickar

  • Telink-Signaturet=<unix>,v1=<hex> — HMAC-SHA256 av t + "." + råkroppen
  • Telink-Event-IdHändelsens id. Använd för idempotens.
  • Telink-Event-TypeT.ex. meeting.completed
  • Telink-Delivery-IdLeveransens id, samma vid omförsök
  • Telink-AttemptFörsök 1–8
  • User-AgentTelink-Webhooks/1.0

Regler

  • Svara 2xx inom 10 sekunder och gör arbetet asynkront.
  • Var idempotent på Telink-Event-Id — samma händelse kan komma mer än en gång.
  • Omdirigeringar följs inte.
  • Adressen måste vara https och nåbar från internet.
  • Avvisa leveranser vars t är äldre än 5 minuter.
POST · meeting.completed
{
  "id": "7d4e8a2b-1c3f-4e5a-9b6d-2f1a3c4e5b6d",
  "type": "meeting.completed",
  "created_at": "2026-10-13T09:47:12.000Z",
  "tenant_id": "a1b2c3d4-0000-4000-8000-000000000001",
  "meeting_id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
  "data": {
    "id": "3f2a1b9c-5d6e-4f70-8a9b-0c1d2e3f4a5b",
    "title": "Kundmöte Nord",
    "one_liner": "Genomgång av offert, kunden vill se referenser.",
    "scheduled_at": "2026-10-13T09:00:00.000Z",
    "started_at": "2026-10-13T09:01:40.000Z",
    "ended_at": "2026-10-13T09:46:52.000Z",
    "duration_seconds": 2712,
    "category": "sälj",
    "meeting_type": "uppföljning",
    "platform": "teams",
    "source": "calendar",
    "owner_user_id": "c0ffee00-1111-4222-8333-444455556666",
    "participant_count": 4,
    "has_media": true,
    "join_failure_kind": null,
    "summary_available": true,
    "open_task_count": 3,
    "objection_count": 2
  }
}
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifyTelink(header, rawBody, secret, toleranceSec = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.trim().split("=")));
  const t = Number(parts.t);
  if (!parts.v1 || !Number.isFinite(t) || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
  const got = Buffer.from(parts.v1, "hex");
  return got.length === expected.length && timingSafeEqual(got, expected);
}
// app.post("/telink/webhook", express.raw({ type: "application/json" }), (req, res) => {
//   if (!verifyTelink(req.get("Telink-Signature"), req.body.toString(), process.env.TELINK_WEBHOOK_SECRET)) return res.sendStatus(401);
//   const event = JSON.parse(req.body); /* event.type, event.data */ res.sendStatus(200);
// });

Fel

Felkoder

  • 401unauthorizedNyckeln känns inte igen.
  • 401key_expiredNyckeln har gått ut. Skapa en ny under Inställningar → API.
  • 401key_revokedNyckeln är återkallad.
  • 403insufficient_scopeNyckeln saknar behörigheten meetings:read.
  • 403forbiddenDu har inte behörighet till det här.
  • 404not_foundMötet finns inte.
  • 400validationlimit måste vara ett heltal mellan 1 och 100.
  • 409idempotency_mismatchSamma Idempotency-Key har redan använts för ett annat anrop.
  • 409limit_reachedHögst 10 webhooks per organisation.
  • 409cap_reachedMånadens inspelningstak är nått.
  • 409inactiveWebhooken är pausad.
  • 429rate_limitedHögst 600 anrop per minut och nyckel.
  • 500internalNågot gick fel hos oss.

code är stabil och gjord för att programmera mot. message är på svenska och kan visas för användaren som den är.

Bifoga X-Request-Id från svaret när ni kontaktar support — då hittar vi anropet direkt.

Ändringslogg

Ändringslogg

  • 2026-10-13v1 lanserad: möten, transkript, inspelningar, åtgärder, kalender, bot, Fråga, affärsrisk, coachning, användare, webhooks med åtta händelser, OpenAPI 3.1.