---
title: "Upload node media"
method: POST
path: "/forms/{formId}/nodes/{nodeId}/media"
tags: ["node-media"]
---

# Upload node media

`POST /forms/{formId}/nodes/{nodeId}/media`

## Request

- Base URL: `https://api.clipform.io/v1`
- URL: `https://api.clipform.io/v1/forms/{formId}/nodes/{nodeId}/media`
- Auth: HTTP bearer

Returns a URL to upload media for a node.

## Path parameters

- `formId` string, uuid, required
- `nodeId` string, uuid, required

## Request body

- object
  - `media_type` 'video' | 'still', required: Type of media - video (plays) or still (static image/color, optional audio)
  - `media_source` 'uploaded' | 'recorded': How the media was created
  - `duration` number: Media length in seconds (optional).
  - `fit_media` boolean: true = contain (show the whole frame), false/omitted = cover (fill the player, croppable, positionable)

## Response `200`

Upload URL created

- MediaUploadResponse
  - `media_id` string, uuid
  - `upload_url` string, uri: The URL to upload the file to.
  - `upload_method` 'tus' | 'put': How to send the file: "tus" = resumable upload (the tus.io protocol, used for video), "put" = a single PUT request (used for images).
  - `status` 'awaiting_upload'

## Other responses

- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/clipform/apis/clipform-api.md) · [All operations](https://skmtc.dev/clipform/apis/clipform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/clipform/apis/clipform-api/revisions/490de83af482?raw)
