Most application workflows need structured evidence first and finished media second. ChatClipThat keeps those operations separate so you can search, rank, review, and store Moment JSON without rendering every candidate.
analysis_id does not expose renderable Moments. Audio stays private JSON with transcript/audio evidence.1. Complete video moment discovery before rendering
Use either a video find_moments scanner run or POST /v1/analyses, then wait for completion. A completed video find_moments observation contains its renderable moment_id; a one-off analysis exposes Moment IDs from GET /v1/analyses/{analysis_id}/moments. Other scanner types and all audio scanner results are not renderable.
GET /v1/analyses/ana_.../moments
Authorization: Bearer $CCT_API_KEY
{
"analysis_id": "ana_...",
"moments": [
{
"moment_id": "mom_...",
"start_ms": 84210,
"end_ms": 109440,
"title": "Repeated setup failure"
}
]
}
2. Put a real selection boundary in front of media work
Choose one to twenty Moment IDs from the same completed analysis. Selection can be a human approval, a product policy, or a deterministic threshold appropriate to your use case. Do not treat an observation ID as a Moment ID, and do not combine Moment IDs from different analyses.
3. Read capabilities instead of guessing
Call GET /v1/render-presets before presenting output settings. It returns supported aspect ratios, format, caption presets, bundled fonts, effects, and bounded editor controls. Keep a short-lived local cache, but let the live response—not hard-coded UI options—define valid requests.
4. Submit one idempotent render request
POST /v1/renders
Authorization: Bearer $CCT_API_KEY
Idempotency-Key: review-item-928-render-v1
Content-Type: application/json
{
"analysis_id": "ana_...",
"moment_ids": ["mom_..."],
"render": {
"output": {"format": "mp4", "aspect_ratio": "9:16"},
"captions": {"enabled": true, "preset_id": "cct_clean_v1"}
}
}
Persist the returned render ID immediately. A stable idempotency key protects a retry after a client timeout from intentionally creating another render operation.
5. Poll, publish, and retain intentionally
Poll GET /v1/renders/{render_id} every 5–10 seconds with jitter and stop on completed or failed. Copy completed output into your authorized publishing or review system according to the retention limit shown for your account. Do not expose bearer keys, source URLs, or signed output URLs in client logs.
Credit behavior
Analysis costs one credit per minute analyzed from the shared ChatClipThat wallet, rounded up to the next minute. A selected video find_moments window is billed by its duration; omitting the window bills the measured full upload. Status polling, Moment JSON, render history, presets, and rendering are included without another API credit charge. Account-specific processing and retention limits remain visible in Console → Usage.