Documentation / Projects
API REFERENCE

Everything starts
with a project.

Your timeline, your vector geometry, your source. Read and write the native document.

Projects and media belong to the key’s account. Identical ids in separate accounts do not grant access to each other. List responses are capped at 100 projects, the current per-account limit.

List projects

GET/api/v1/projects

Requires projects:read. Returns your projects, most recently updated first.

curl https://vunoblade.com/api/v1/projects \
  -H "Authorization: Bearer $VUNOBLADE_API_KEY"

Create a project

POST/api/v1/projects

Requires projects:write. Omitting id creates a new project. Pass a native data object to save an editable timeline. Starter templates afterimage, chromatic, and signal create editable copies of the showcase.

curl https://vunoblade.com/api/v1/projects \
  -H "Authorization: Bearer $VUNOBLADE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"First contact","ratio":"landscape","template":"afterimage"}'
FieldType / behavior
nameString · up to 100 characters
ratiolandscape, portrait, or square
templateOptional showcase starter id · only on creation
idOptional · letters, numbers, underscore, hyphen · max 100
dataOptional native document with tracks, clips, and assets arrays
expectedRevisionRequired by integrations when updating an existing project to detect conflicts

Read or update a project

GET/api/v1/projects/{id}

Returns { project, revision, assets }. To update, POST /projects with the same id, updated data, and the revision you just read as expectedRevision. A stale revision returns 409. Legacy writes without expectedRevision are accepted; new integrations should always send it.

{
  "id": "your-project-id",
  "name": "First contact — v2",
  "ratio": "landscape",
  "expectedRevision": 1,
  "data": {
    "tracks": [
      {
        "id": "picture",
        "name": "Picture",
        "kind": "video"
      }
    ],
    "clips": [],
    "assets": []
  }
}

Delete a project

DELETE/api/v1/projects/{id}

Requires projects:write. Permanently deletes this account’s server copy and uploaded sources for the project. Export a native backup before deletion. Device-local copies are separate.

Upload original media

PUT /projects/{id}/assets/{assetId}/meta with name, kind, mime, size, duration, chunkCount, and SHA-256 digest. Then PUT binary chunks to /projects/{id}/assets/{assetId}/chunks/{part}. Each chunk is 786432 bytes, except the final one. Chunk indexes start at zero. A complete upload is verified against its SHA-256; mismatched chunks are discarded and return 422.

ConstraintValue
Account media storage350 MB
Metadata body25 KB maximum
kindvideo, image, or audio
Supported mime prefixesvideo/, image/, audio/
GET chunkprojects:read · application/octet-stream
RetryUpload the same chunk index again; it replaces that chunk
Keep exploring the APIBuilt for work that stays editable.