curl --request GET \
--url https://video.bunnycdn.com/library/{libraryId}/statistics/encoding \
--header 'AccessKey: <api-key>'import requests
url = "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding"
headers = {"AccessKey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {AccessKey: '<api-key>'}};
fetch('https://video.bunnycdn.com/library/{libraryId}/statistics/encoding', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"AccessKey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("AccessKey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://video.bunnycdn.com/library/{libraryId}/statistics/encoding")
.header("AccessKey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://video.bunnycdn.com/library/{libraryId}/statistics/encoding")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["AccessKey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"hourly": true,
"total": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
},
"premium": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
},
"free": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
}
}{
"success": true,
"message": "<string>",
"statusCode": 123
}{
"success": true,
"message": "<string>",
"statusCode": 123
}{
"success": true,
"message": "<string>",
"statusCode": 123
}Get Encoding Statistics
Returns video encoding seconds for the library, split into premium and free tier. Each includes billable (normalized) and output seconds over time, plus totals by video codec, resolution, and JIT vs standard encoding. Data is available starting 2026-06-15.
curl --request GET \
--url https://video.bunnycdn.com/library/{libraryId}/statistics/encoding \
--header 'AccessKey: <api-key>'import requests
url = "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding"
headers = {"AccessKey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {AccessKey: '<api-key>'}};
fetch('https://video.bunnycdn.com/library/{libraryId}/statistics/encoding', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"AccessKey: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://video.bunnycdn.com/library/{libraryId}/statistics/encoding"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("AccessKey", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://video.bunnycdn.com/library/{libraryId}/statistics/encoding")
.header("AccessKey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://video.bunnycdn.com/library/{libraryId}/statistics/encoding")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["AccessKey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"hourly": true,
"total": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
},
"premium": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
},
"free": {
"normalizedTotal": 123,
"normalizedChart": {},
"outputTotal": 123,
"outputChart": {},
"byVideoCodec": {},
"byResolution": {},
"byJit": {}
}
}{
"success": true,
"message": "<string>",
"statusCode": 123
}{
"success": true,
"message": "<string>",
"statusCode": 123
}{
"success": true,
"message": "<string>",
"statusCode": 123
}Authorizations
AccessKey based authentication
Path Parameters
Query Parameters
Optional start of the time range (UTC). Defaults to 14 days ago. Data is available starting 2026-06-15.
Optional end of the time range (UTC). If omitted, the current date is used.
Optional. If true, returns hourly data for ranges of up to 31 days within the last 89 days; otherwise daily (UTC). Default is daily.
Optional video codecs to include: H264, VP9, HEVC, AV1. Repeat for multiple values.
Optional highest output resolutions to include: 240, 360, 480, 540, 720, 1080, 1440, 2160. Repeat for multiple values.
Optional. If true, only JIT encodes are included; if false, only standard encodes. Omit for both.
Response
Returns video encoding seconds for the requested video library, split by premium and free tier.
Indicates whether the charts use hourly or daily UTC buckets.
Combined premium and free encoding statistics for the selected period.
Show child attributes
Show child attributes
Encoding statistics for videos encoded with the premium encoding tier.
Show child attributes
Show child attributes
Encoding statistics for videos encoded with the free encoding tier.
Show child attributes
Show child attributes
Was this page helpful?