API
DOCS.
Copy an example, add your API key, and make your first request.
Authentication
Authorization: Bearer YOUR_API_KEY
Binary Downloads
Use curl -L for downloads. Do not use curl -i when saving files because it writes HTTP headers into the binary output. URL encode the source URL, save output with -o, verify with ls -lh and file, and never cat video, audio, or image files.
curl -L \
"https://verinio.com/api/download?url=https%3A%2F%2Fx.com%2FPJaccetturo%2Fstatus%2F2062887190326304986%3Fs%3D20&format=http-832" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o nexus_360.mp4
ls -lh nexus_360.mp4
file nexus_360.mp4
Credit Costs
Fetch downloads are priced by file size (~3.5 credits/MB, 5-credit minimum); every other action has a flat per-action cost. These are admin-configurable, so query GET /api/credit-config (public, no key required) for the current values - it returns the same numbers shown on the signed-in dashboard.
Error Responses
Check the HTTP status and error.code. Failed operations are not charged.
{
"error": {
"code": "TRANSCRIPT_NOT_AVAILABLE",
"message": "Transcript is not available for this video.",
"requestId": "a1b2c3d4"
}
}
Common codes: INVALID_API_KEY, NOT_AUTHENTICATED, ACCOUNT_SUSPENDED, NOT_ENOUGH_CREDITS, MISSING_URL, INVALID_URL, DOWNLOAD_FAILED, TRANSCRIPT_NOT_AVAILABLE, METADATA_FAILED, and FILE_TOO_LARGE.
Video Info
cURL
curl "https://verinio.com/api/video-info?url=https%3A%2F%2Fexample.com%2Fvideo" \
-H "Authorization: Bearer YOUR_API_KEY"
JavaScript
const url = encodeURIComponent("https://example.com/video");
const response = await fetch(`https://verinio.com/api/video-info?url=${url}`, {
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
const data = await response.json();
Python
import requests
response = requests.get("https://verinio.com/api/video-info",
params={"url": "https://example.com/video"},
headers={"Authorization": "Bearer YOUR_API_KEY"})
data = response.json()
Download
Add &clean=1 to get a re-encoded copy with identifying metadata and chapters stripped (same audio/video quality, safe to share/re-upload) instead of the original file untouched. Omit it, or use clean=0, for the original file exactly as the source provides it. Both are the same video/audio content - "clean" only affects the container metadata, not quality.
cURL
curl -L "https://verinio.com/api/download?url=ENCODED_URL&format=FORMAT_ID" \
-H "Authorization: Bearer YOUR_API_KEY" -o output.mp4
# Clean variant (metadata/chapters stripped, same quality):
curl -L "https://verinio.com/api/download?url=ENCODED_URL&format=FORMAT_ID&clean=1" \
-H "Authorization: Bearer YOUR_API_KEY" -o output-clean.mp4
JavaScript
const response = await fetch(`https://verinio.com/api/download?url=${encodeURIComponent(sourceUrl)}&format=${formatId}&clean=1`, {
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
const file = await response.blob();
Python
response = requests.get("https://verinio.com/api/download",
params={"url": source_url, "format": format_id, "clean": 1},
headers={"Authorization": "Bearer YOUR_API_KEY"})
response.raise_for_status()
open("output-clean.mp4", "wb").write(response.content)
Transcript Info
cURL
curl "https://verinio.com/api/transcript-info?url=https%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3DVIDEO_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
JavaScript
const response = await fetch(`https://verinio.com/api/transcript-info?url=${encodeURIComponent(youtubeUrl)}`, {
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
const data = await response.json();
Python
response = requests.get("https://verinio.com/api/transcript-info",
params={"url": youtube_url},
headers={"Authorization": "Bearer YOUR_API_KEY"})
data = response.json()
Transcript Download
cURL
curl -L "https://verinio.com/api/transcript?url=ENCODED_YOUTUBE_URL&format=json" \
-H "Authorization: Bearer YOUR_API_KEY" -o transcript.json
JavaScript
const response = await fetch(`https://verinio.com/api/transcript?url=${encodeURIComponent(youtubeUrl)}&format=json`, {
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
const transcript = await response.json();
Python
response = requests.get("https://verinio.com/api/transcript",
params={"url": youtube_url, "format": "json"},
headers={"Authorization": "Bearer YOUR_API_KEY"})
transcript = response.json()
Metadata Inspect
cURL
curl -X POST "https://verinio.com/api/metadata" \
-H "Authorization: Bearer YOUR_API_KEY" -F "[email protected]"
JavaScript
const form = new FormData();
form.append("file", file);
const response = await fetch("https://verinio.com/api/metadata", {
method: "POST", headers: { Authorization: "Bearer YOUR_API_KEY" }, body: form
});
const metadata = await response.json();
Python
with open("image.jpg", "rb") as file:
response = requests.post("https://verinio.com/api/metadata",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": file})
metadata = response.json()
Metadata Sanitize
cURL
curl -L -X POST "https://verinio.com/api/sanitize" \
-H "Authorization: Bearer YOUR_API_KEY" -F "[email protected]" -o image-clean.jpg
JavaScript
const form = new FormData();
form.append("file", file);
const response = await fetch("https://verinio.com/api/sanitize", {
method: "POST", headers: { Authorization: "Bearer YOUR_API_KEY" }, body: form
});
const cleanFile = await response.blob();
Python
with open("image.jpg", "rb") as file:
response = requests.post("https://verinio.com/api/sanitize",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": file})
response.raise_for_status()
open("image-clean.jpg", "wb").write(response.content)