---
title: "Mutate timeline project via action-based API (create/add track/add asset/attach asset/keyframe) with keyframe-level adjustments"
method: POST
path: "/api/video/timeline"
tags: ["video", "platform"]
---

# Mutate timeline project via action-based API (create/add track/add asset/attach asset/keyframe) with keyframe-level adjustments

`POST /api/video/timeline`

## Request body

- object
  - `action` 'create' | 'add_track' | 'add_asset' | 'attach_asset' | 'upsert_keyframe', required
  - `projectId` string
  - `durationMs` number
  - `frameRate` number
  - `type` 'video' | 'audio' | 'sticker' | 'text' | 'overlay'
  - `name` string
  - `sourceUrl` string
  - `trackId` string
  - `assetId` string
  - `startMs` number
  - `offsetMs` number
  - `atMs` number
  - `property` string
  - `value` number
  - `easing` 'linear' | 'ease_in' | 'ease_out' | 'ease_in_out'

## Response `200`

Timeline updated

## Other responses

- `201` — Timeline created
- `400` — Validation error

---

[API](https://skmtc.net/memesio/apis/memesio-api-contracts.md) · [All operations](https://skmtc.net/memesio/apis/memesio-api-contracts/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/memesio/memesio-api-contracts/revisions/826e6edbf294/schema)
