---
title: "Create keyframe and associate to playlist"
method: POST
path: "/v1/playlists/{playlist_id}/keyframes/"
---

# Create keyframe and associate to playlist

`POST /v1/playlists/{playlist_id}/keyframes/`

## Request

- Base URL: `https://app.iconik.io/API/files`
- URL: `https://app.iconik.io/API/files/v1/playlists/{playlist_id}/keyframes/`
- Auth: none declared. Required headers: `App-ID`, `Auth-Token`
- TypeScript: <https://skmtc.dev/iconik/apis/iconik-files/docs/v1/playlists/:playlist_id/keyframes/post.ts> (a function with typed inputs; its response is checked against the schema)

Required roles:
 - can_write_keyframes

## Path parameters

- `playlist_id` string, required

## Headers

- `App-ID` string, required
- `Auth-Token` string, required

## Request body

- PlaylistKeyframeCreateSchema
  - `content_type` string
  - `date_created` string, date-time
  - `date_modified` string, date-time
  - `filename` string
  - `format` string, nullable
  - `id` string, uuid
  - `is_custom_keyframe` boolean
  - `is_public` boolean
  - `name` string
  - `playlist_id` string, uuid
  - `resolution` ResolutionType
    - `height` integer
    - `width` integer
  - `rotation` integer, nullable
  - `size` integer, nullable
  - `status` 'OPEN' | 'GROWING' | 'AWAITED' | 'CLOSED' | 'FAILED' | 'ARCHIVED' | 'MISSING' | 'REDISCOVERED' | 'DELETED'
  - `storage_id` string, uuid
  - `time_code` TimeCodeType
    - `frames_number` integer
    - `is_drop_frame` boolean
    - `time_base` TimeBaseType
      - `denominator` integer
      - `numerator` integer
  - `type` 'KEYFRAME_MAP' | 'KEYFRAME' | 'POSTER', required
  - `upload_credentials` object
  - `upload_headers` object
  - `upload_method` string
  - `upload_url` string
  - `url` string

## Response `201`

Returns a keyframe that was created for this playlist

- PlaylistKeyframeCreateSchema
  - `content_type` string
  - `date_created` string, date-time
  - `date_modified` string, date-time
  - `filename` string
  - `format` string, nullable
  - `id` string, uuid
  - `is_custom_keyframe` boolean
  - `is_public` boolean
  - `name` string
  - `playlist_id` string, uuid
  - `resolution` ResolutionType
    - `height` integer
    - `width` integer
  - `rotation` integer, nullable
  - `size` integer, nullable
  - `status` 'OPEN' | 'GROWING' | 'AWAITED' | 'CLOSED' | 'FAILED' | 'ARCHIVED' | 'MISSING' | 'REDISCOVERED' | 'DELETED'
  - `storage_id` string, uuid
  - `time_code` TimeCodeType
    - `frames_number` integer
    - `is_drop_frame` boolean
    - `time_base` TimeBaseType
      - `denominator` integer
      - `numerator` integer
  - `type` 'KEYFRAME_MAP' | 'KEYFRAME' | 'POSTER', required
  - `upload_credentials` object
  - `upload_headers` object
  - `upload_method` string
  - `upload_url` string
  - `url` string

## Other responses

- `400`: Bad request
- `401`: Token is invalid
- `404`: Storage not found
- `default`: Error response

---

[API](https://skmtc.dev/iconik/apis/iconik-files.md) - [All operations](https://skmtc.dev/iconik/apis/iconik-files/llms.txt) - [OpenAPI document](https://skmtc.dev/iconik/apis/iconik-files/revisions/ed57d13791a2?raw)
