API i Webhook-ovi

Gradi na WorkThroughLine kroz REST API po organizaciji i potpisane izlazne webhook-ove.

Kako da počneš

API je REST preko HTTPS-a i vraća JSON. Svaki zahtev je vezan za jednu organizaciju preko API ključa.

1. Napravi API ključ

U aplikaciji otvori Podešavanja → API ključevi i napravi ključ. Kopiraj ga odmah - prikazuje se samo pri kreiranju. Ključevi izgledaju kao pos_sk_….

2. Bazni URL i autentikacija

Šalji ključ u x-api-key zaglavlju na svakom zahtevu. Bazni URL je:

https://app.workthroughline.com/api/v1

3. Prvi zahtev

Izlistaj svoje work item-e:

curl https://app.workthroughline.com/api/v1/work-items \
  -H "x-api-key: pos_sk_your_key_here"

Konvencije

Autentikacija

Prosledi x-api-key na svakom zahtevu. Ključ deluje sa ulogom za koju je napravljen i vezan je za svoju organizaciju.

Ograničenje brzine

100 zahteva u minuti po klijentu. Prekoračenje vraća HTTP 429.

Greške

Odgovori van 2xx vraćaju JSON { "error", "message" }, a kod validacije i details objekat.

Paginacija

Velike liste koriste cursor paginaciju: prosledi ?cursor=… &limit=… i prati nextCursor dok ne bude null.

Webhook-ovi

Pretplati HTTPS endpoint na događaje i mi šaljemo potpisani JSON (POST) kada se dese. Isporuka se ponavlja uz eksponencijalni backoff.

Tipovi događaja

work_item.createdA work item was created.
work_item.updatedA work item was edited.
work_item.status_changedA work item moved to a new status (payload adds `previousStatus`).
ckr.createdAn OKR was created.
ckr.updatedAn OKR was edited.
opportunity.createdA discovery opportunity was created.
experiment.concludedAn experiment was concluded (SUCCEEDED / FAILED / INCONCLUSIVE).
intake.createdA stakeholder submitted intake (no submitter contact is ever sent).
changelog.publishedA changelog entry was published.

Payload

Svaka isporuka je verzionisani omotač. id je isti za sve endpoint-e jednog događaja - koristi ga kao idempotency ključ.

{
  "id": "b3f1c2e4-0000-0000-0000-000000000000",
  "event": "work_item.status_changed",
  "apiVersion": "2026-07-13",
  "createdAt": "2026-07-13T10:00:00.000Z",
  "organizationId": "a1b2c3d4-0000-0000-0000-000000000000",
  "data": {
    "id": "…",
    "key": "WI-42",
    "title": "Checkout crash",
    "status": "DONE",
    "previousStatus": "IN_REVIEW"
  }
}

Proveri potpis

Svaki zahtev nosi X-WTL-Signature: sha256=<hmac>. Ponovo izračunaj HMAC-SHA256 sirovog tela sa svojim webhook ključem i uporedi u konstantnom vremenu.

import { createHmac, timingSafeEqual } from 'node:crypto';

function verify(rawBody, signature, secret) {
  const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(signature ?? '');
  return a.length === b.length && timingSafeEqual(a, b);
}

// Express — note express.raw so you verify the EXACT bytes we signed:
app.post('/hooks/wtl', express.raw({ type: 'application/json' }), (req, res) => {
  if (!verify(req.body, req.get('X-WTL-Signature'), process.env.WTL_WEBHOOK_SECRET))
    return res.sendStatus(401);
  const event = JSON.parse(req.body.toString());
  // handle event.event / event.data … then ack quickly
  res.sendStatus(200);
});
Nikada ne šaljemo lične podatke preko potrebnog (npr. kontakt podnosioca intake-a je izostavljen). Zovemo samo javne HTTPS/HTTP endpoint-e - privatne, loopback i metadata adrese su blokirane.

Endpointi

Primer - registruj webhook:
curl -X POST https://app.workthroughline.com/api/v1/webhooks \
  -H "x-api-key: pos_sk_your_key_here" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com/hooks/wtl","events":["work_item.status_changed"]}'

Strategy Goals and OKRs

Discovery Opportunities, solutions, experiments

Delivery Work items and sprints

Intake Stakeholder intake submissions

Webhooks Outbound event subscriptions