---
title: "Concatenate Videos and Images"
method: POST
path: "/concat"
tags: ["Edit"]
---

# Concatenate Videos and Images

`POST /concat`

Concatenate several videos clips and images with transitions into one timeline. Helpful when adding intro/outro- or creating slideshows.

## Request body

- object
  - `items` object[] — List of videos and images to combine into a slideshow.
    - `video_url` string, uri, nullable — Source video URL. (Use either image_url or video_url.)
    - `volume` integer, nullable — Control the video volume. Adjust from 0 to 100. 0 will mute the video completely and 100 will have it at max.
    - `image_url` string, uri, nullable — Source image URL. (Use either image_url or video_url.)
    - `scale` 'fit' | 'fill', nullable — Fit is where the longer side (width/height) fits the video canvas (e.g. see the width and height params). Fill is where the shorter side fits the background. Fit is the default.
    - `duration` integer, nullable — Duration of the image in milliseconds. Applies only if the image_url is provided.
    - `transition` 'none' | 'fade' | 'zoom_in' | 'zoom_out' | 'spin' | 'fly_in_from_left' | 'fly_in_from_right' | 'fly_in_from_top' | 'fly_in_from_bottom' | 'fly_out_to_left' | 'fly_out_to_right' | 'fly_out_to_bottom' | 'fly_out_to_top'
  - `bg_audio_url` string, uri, nullable — Background audio/sound URL.
  - `bg_audio_repeat` boolean, nullable — Use true to repeat the audion in the background for the whole video duration or false if you want to play the audio only once.
  - `bg_audio_volume` integer, nullable — Control the audio volume. Adjust from 0 to 100. 0 will mute the audio completely and 100 will have it at max.
  - `export` object
    - `format` 'MOV' | 'MP4' | 'WEBM' | 'GIF' — Optionally select one of the output video formats (MP4 is chosen if left blank). Container options are as follows * MOV * MP4 * WEBM * GIF
    - `frame_rate` integer — The output video frame rate.
    - `bitrate` integer — The output video bitrate in kb/s. Leave empty to set automatically and optimize accordingly.

## Response `202`

Requested successfully accepted when doing asynchronous transformation.

- object
  - `transaction_id` string, nullable
  - `status` string

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `402` — Payment Required
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `413` — Request Entity Too Large
- `415` — Unsupported Media Type
- `429` — Too Many Requests
- `431` — Request Header Fields Too Large
- `500` — Internal Server Error
- `503` — Service Unavailable

---

[API](https://skmtc.net/picsart/apis/picsart-programmable-image-apis.md) · [All operations](https://skmtc.net/picsart/apis/picsart-programmable-image-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/picsart/picsart-programmable-image-apis/versions/726b2a637ae8/schema)
