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/v13. 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);
});Endpointi
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"]}'