Docs/Videos
/v1/videos1 creditEvery video a page declares: <video> and <source> files, og:video, player embeds (YouTube, Vimeo, Wistia, Loom) and direct video-file links - each tagged by source, with the poster image when the page declares one. Reads the initial HTML, so videos mounted by a JavaScript player at runtime need render=true.
urlrequiredThe page to extract from. With or without protocol (https:// is assumed).fieldsoptionalComma-separated list of fields to return (e.g. fields=videos). Omit for the full object. url is always included. Trims the response only - the credit cost is unchanged. videos · count · noterenderoptionalLoad the page in a real browser and run its JavaScript before extracting. Use for client-rendered sites (React, Next, SPAs) where the default static fetch returns little - runtime-injected images, styles, media and Lotties become visible. Slower (a real page load), and adds 5 credits to the call. Cache hits stay free. Free keys get 5 renders a month; after that a render=true call runs as the static extraction and usage.renderSkipped says so - it is never refused. Paid API plans and credit packs render without a monthly limit. You rarely have to guess: when a static extraction comes back thin because the page is client-rendered, the response includes a top-level hint field telling you to retry with render=true (on a free key, with how many free renders are left, or that rendering is a paid feature once they are used). Free keys also get rendering automatically, from the same monthly allowance, when a plain call is refused by the site itself (401, 403 or 406): the server retries it once in the browser at no charge - see usage.renderRescue. true · false (default)freshoptionalSkip the 24-hour cache and re-extract from the live page. Use it when you know the site just changed (a redeploy, a rebrand) and a cached copy would be stale. The call is charged normally - the extraction really runs - and the fresh result replaces the cached copy for the next caller. Off by default: identical repeat calls within 24 hours are served from cache at 0 credits. true · false (default)screenshotoptionalRequires render=true. The same real browser that renders the page also captures a screenshot - true for the 1440x900 viewport, full for the entire page height. The response gains a screenshot field with a public image URL that stays live for 7 days. No extra credits beyond the render surcharge. Captured on fresh extractions - a cache hit returns the screenshot stored with the cached result (pass fresh=true to force a new one). true · full · false (default)Build a request
GEThttps://miromiro.app/api/v1/v1/videos?url=stripe.com
urlrequiredfieldsNothing selected returns the full response.
renderfreshscreenshot Options at their default are left out of the URL - the API assumes them. Auth isn't shown here: send your key as an Authorization: Bearer header (see the example below).
Response
{
"url": "https://example.com",
"videos": [
{ "url": "https://…/hero.mp4", "source": "video", "poster": "https://…/poster.jpg" },
{ "url": "https://www.youtube.com/embed/…", "source": "embed" }
],
"count": 2,
"note": "Best-effort: JS-mounted players need render=true.",
"usage": { "creditsSpent": 1, "creditsThisMonth": 1, "monthlyLimit": 300, "remaining": 299, "cached": false }
}urlstringThe resolved URL that was extracted.videos[]arrayEach { url, source, poster }. source ∈ video, source, og, embed, link, structured-data, file, platform. file means the URL you passed was itself a video file, returned as the single result; platform means the URL was a video page on YouTube, Vimeo, TikTok, Dailymotion or Loom, answered from the URL alone with the player embed (no fetch, so render=true is ignored) - the file itself is not downloadable through the API; embed is a player page (YouTube/Vimeo/Wistia/Loom), not a downloadable file; structured-data is the VideoObject the page declares in JSON-LD (how news publishers describe a JS-mounted video: contentUrl and embedUrl, with its thumbnail as poster); the others are direct URLs. poster is included when the page declared one.countnumberTotal number of videos found.notestringCoverage caveat: only videos declared in the initial HTML are found - add render=true for JS-mounted players.usageobjectMetering for this call: credits spent this month, your monthly cap (null = unlimited), credits remaining, what this call cost (0 on cache hits), and whether it was served from the 24-hour cache. packCredits appears only when you hold a credit pack: the never-expiring balance left after this call.Example request
curl "https://miromiro.app/api/v1/videos?url=stripe.com" \
-H "Authorization: Bearer $MIROMIRO_API_KEY"
# Client-rendered site (React, Next, SPA)? Add render=true to run its
# JavaScript in a real browser first (+5 credits):
curl "https://miromiro.app/api/v1/videos?url=stripe.com&render=true" \
-H "Authorization: Bearer $MIROMIRO_API_KEY"