Find an API

Search public APIs with auth details & Postman guides

← All APIs

Shotstack

shotstack · Media

Media No Auth Free & Open media

Shotstack is a video, image and audio editing service that allows for the automated generation of videos, images and audio using JSON and a RESTful API. You arrange and configure an edit and POST it to the API which will render your media and provide a file location when complete. For more details visit [shotstack.io](https://shotstack.io) or checkout our [getting started](https://shotstack.gitbook.io/docs/guides/getting-started) documentation. There are two main API's, one for editing and ge

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Get Asset

The Serve API is used to interact with, and delete hosted assets including videos, images, audio files, thumbnails and poster images. Use this endpoint to fetch an asset by asset id. Note that an asset id is unique for each asset and different from the render id. **base URL:** https://api.shotstac

https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}"
import requests
response = requests.get(
    "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}",
)
print(response.json())
const url = 'https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}';

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	targetURL := "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}"
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/{id}";
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get Render Status

Get the rendering status, temporary asset url and details of a render by ID. **base URL:** https://api.shotstack.io/{version}

https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}"
import requests
response = requests.get(
    "https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}",
)
print(response.json())
const url = 'https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}';

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	targetURL := "https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}"
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/shotstack.io/v1/render/{id}";
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Get Asset by Render ID

A render may generate more than one file, such as a video, thumbnail and poster image. When the assets are created the only known id is the render id returned by the original [render request](#render-video), status request or webhook. This endpoint lets you look up one or more assets by the render

https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}"
import requests
response = requests.get(
    "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}",
)
print(response.json())
const url = 'https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}';

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	targetURL := "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}"
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/shotstack.io/v1/assets/render/{id}";
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. See official documentation for authentication and setup.

What can you build with Shotstack?

Shotstack is a Media API. Developers commonly use media APIs for:

  • storing and delivering images, video, and audio
  • building digital asset management and media libraries
  • transcoding and optimising media for the web
  • adding video streaming and playback to your app
  • automating content tagging and metadata extraction

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Shotstack is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗