Clips

Cut a window (start..end seconds) from any finished recording. Get a shareable URL playing just that window. Powers TikTok-style short shares and "best moments" feeds.

No-code option: Cut clips directly in the customer portal — open any stream at /app/streams/<streamId>Recordings tab → Cut clip. Browse all clips at /app/clips.

1. Lifecycle

1. A live stream ends → recorder produces an MP4 → uploaded to S3 → status = READY
2. Customer-side UI picks an in/out point  → POST /v1/me/clips
3. Kardolive transcoder worker renders the window → status: pending → rendering → ready
4. clip.ready webhook fires; assetUrl is now playable
5. Sharable URL: https://kardocloud.com/clips/<id>

2. Create a clip

POST https://api.kardocloud.com/v1/me/clips
Authorization: Bearer kl_live_xxx
{
  "recordingId":         "rec_xxx",
  "startSec":            45.2,
  "endSec":              78.0,
  "title":               "Funniest moment",
  "description":         "When the host accidentally dropped the box.",
  "createdByExternalId": "user_42",        // your-app's user id
  "isPublic":            true              // false = signed-URL access only
}
→ {
    "id":         "clip_xxx",
    "status":     "pending",
    "startSec":   45.2,
    "endSec":     78.0,
    "title":      "Funniest moment",
    "assetUrl":   null,                    // until rendering completes
    "createdAt":  "..."
  }

Constraints:

3. Render status & URL

GET /v1/me/clips/<clipId>
→ {
    "id":         "clip_xxx",
    "status":     "ready",                // pending | rendering | ready | failed
    "assetUrl":   "https://kardocloud.com/clips/clip_xxx.mp4",
    "posterUrl":  "https://kardocloud.com/clips/clip_xxx.jpg",
    "renderedAt": "..."
  }

List all clips for the tenant or for a specific recording:

GET /v1/me/clips
GET /v1/me/clips?recordingId=rec_xxx

4. Public sharing page

When isPublic: true the clip is reachable without authentication at https://kardocloud.com/clips/<clipId> — perfect for embedding in social shares or your own site.

GET https://kardocloud.com/v1/clips/<clipId>
→ {
    "id":          "clip_xxx",
    "title":       "Funniest moment",
    "description": "...",
    "startSec":    45.2,
    "endSec":      78.0,
    "durationSec": 32.8,
    "assetUrl":    "https://kardocloud.com/clips/clip_xxx.mp4",
    "posterUrl":   "https://kardocloud.com/clips/clip_xxx.jpg",
    "status":      "ready"
  }

Set isPublic: false if you need to gate access — then mint your own signed URL on the customer side.

5. Delete a clip

DELETE /v1/me/clips/<clipId>

Removes the DB row + the S3 asset.

6. Webhook events

EventWhen
clip.createdPOST received; queued for render
clip.readyRender finished; assetUrl is now playable
clip.failedRender failed; see errorMessage

Next

Scheduled premieres → · Restream / simulcast → · Push notifications →