API and webhooks
Available on the Max plan. Create your key in Settings, Integrations. Every request carries it as a bearer token. Items added through the API use your minutes like items added in the app.
Authentication
Authorization: Bearer jd_live_...
Add an item
POST https://app.joudigest.com/api/v1/jobs. Returns 201 with the item id, or 200 when you already have this link.
curl -X POST https://app.joudigest.com/api/v1/jobs \
-H "Authorization: Bearer jd_live_..." \
-H "Content-Type: application/json" \
-d '{"url":"https://www.youtube.com/watch?v=...","lang":"cs","extraLangs":["en"],"focus":"pricing","notify":false}'
{"id":"job_...","status":"queued","existed":false}Fields: url (required), lang (2 letter code, one of cs, sk, en, de, pl, uk, es, fr, it, pt, zh, ar, bg, hr, da, nl, et, fi, el, he, hi, hu, id, ja, ko, lv, lt, ms, no, ro, ru, sr, sl, sv, th, tr, vi; default from Settings), extraLangs (up to 2), focus (what the reader cares about most), notify (e-mail on completion). Errors: 402 quota-exceeded, 422 unsupported or unsupported-drm, 409 queue-full, 422 platform-disabled.
Read an item
GET https://app.joudigest.com/api/v1/jobs/{id}. Includes every summary version, the transcript and chapters once status is done.
{"id":"job_...","status":"done","title":"...","sourceUrl":"...","langTarget":"cs","summaryStyle":"standard",
"summaries":{"cs":"## TL;DR ..."},
"versions":[{"lang":"cs","style":"short","content":"..."},{"lang":"cs","style":"standard","content":"..."},{"lang":"cs","style":"deep","content":"..."}],
"transcript":"...","chapters":[{"start":272,"title":"..."}]}List items
GET https://app.joudigest.com/api/v1/jobs?limit=50&status=done&cursor=<createdAt of the last item>
Upload a file
curl -X POST https://app.joudigest.com/api/v1/uploads -H "Authorization: Bearer jd_live_..." \ -F file=@meeting.m4a -F lang=cs -F focus="decisions and deadlines"
Webhook
Set an https URL and create a secret in Settings, Integrations. We POST once per finished or failed item, retry once, and record the result in your e-mail log. Verify the signature: HMAC SHA-256 of the raw body with your secret, hex, in the header X-JOuDigest-Signature as sha256=...
POST https://example.com/joudigest
X-JOuDigest-Event: summary.ready
X-JOuDigest-Signature: sha256=3f1a...
{"event":"summary.ready","sentAt":"2026-10-02T19:30:00.000Z",
"item":{"id":"job_...","url":"https://app.joudigest.com/jobs/job_...","sourceUrl":"...","sourceType":"youtube","title":"...","channelName":"...","durationSec":2880,"lang":"cs","style":"standard","status":"done","error":null,"finishedAt":"..."},
"summaries":[{"lang":"cs","style":"short","content":"..."},{"lang":"cs","style":"standard","content":"..."},{"lang":"cs","style":"deep","content":"..."}]}// Node.js check
const sig = "sha256=" + crypto.createHmac("sha256", SECRET).update(rawBody).digest("hex");
if (sig !== req.headers["x-joudigest-signature"]) return res.status(401).end();Limits
Up to 40 items waiting at once on Max (15 on Pro, 3 on Free). Minutes per month per plan. Keys can be regenerated or revoked at any time; the old key stops working immediately.