This guide assumes you’ve set
$LYMO_KEY, $LYMO_BASE, and $VIDEO as in the quickstart. $LYMO_BASE stops at /platform; versioned paths go under /v1.POST /v1/videos/:id/analyses— analyze a videoPOST /v1/deals/:id/scorings— score a deal
201 immediately with status: "processing" and a stable id. You then poll the resource or subscribe to a webhook for completion.
Lifecycle
Status values
External status collapses several internal workflow states into three values:| Status | Meaning |
|---|---|
processing | Work is queued or in flight |
completed | Finished successfully — result is populated |
failed | Terminal failure — error: { code, message } present |
completed or failed, it does not transition again.
Reading the completed result
When an analysis or scoring reachescompleted, the same GET endpoint returns a result field alongside the existing status metadata. The full per-field schema is in the API Reference tab; here’s what to expect at a glance:
- Analyses —
resultsurfaces the summary sections, checklist evaluation (when enabled on the org), and sales events produced by the run. You can also fetch these piecemeal viaGET /v1/videos/:id/summary,.../checklist,.../events. - Scorings —
resultsurfaces the computed score factors for the deal.GET /v1/deals/:idreturns the same factors on the deal itself.
failed, an error: { code, message } object replaces result. code is a stable machine-readable string you can switch on; message is human-readable and may change between versions.
Typical end-to-end latency is on the order of minutes — polling once every 5–10 seconds is more than enough. Work that gets genuinely stuck is driven to failed by internal timeouts; the API itself does not hold a resource in processing indefinitely.
Polling
429 response includes a Retry-After header — honor it rather than retrying immediately.
Idempotency
POST requests accept anIdempotency-Key header. The API caches the first 2xx response for 24 hours, keyed by (organization, method, path, key, body-hash), and returns it verbatim on retry:
Subscribing instead of polling
For production workloads, register a webhook and let Lymo notify you:video.analysis.completedvideo.analysis.failed
Deal scoring events (
deal.scoring.completed, deal.scoring.failed) are declared in the schema so SDK types remain stable, but the publisher isn’t wired up yet — subscribing today produces no deliveries. They’ll be enabled in a future release.