JOuDigest

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.

Chrome extension · iPhone shortcut · Telegram