vimeo-ott/SKILL.md
Query Vimeo OTT (VHX) products, customers, videos, live events, browse rows, and analytics with multi-account API key support. First pass ships read-only helpers for production-safe investigation.
npx skillsauth add supercorks/agent-skills vimeo-ottInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Query Vimeo OTT's REST API for analytics, customer profiles, products, videos, collections, browse data, and live events.
This first pass is intentionally read-only. The API itself supports writes for customers, videos, collections, comments, and authorizations, but the included scripts only perform GET requests so they are safe to use against production accounts for investigation and reporting.
Vimeo OTT uses the legacy VHX API surface:
https://api.vhx.tv_links and _embeddedThe most important resource groups are:
products for subscription or transactional packagescustomers for customer profiles, subscription status, watchlist, and in-progress watchingvideos for catalog assets, files, metadata, plays, and finisheslive_events for scheduled and active Vimeo Events tied to productscollections and browse for storefront organizationanalytics for traffic, subscribers, churn, units, and video reportingUse a JSON object mapping account aliases to API keys:
export VIMEO_OTT_ACCOUNTS='{"yogaworks":"YOUR_API_KEY"}'
When multiple accounts are configured, pass --account <name> to choose one. If only one account is configured, it is selected automatically.
Official Vimeo OTT guidance:
Manage > Platforms.Create Key.Important behavior from the official help docs:
List configured aliases:
node scripts/list-accounts.js
Verify API access and summarize the account:
node scripts/verify-access.js --account yogaworks
The verification script does a small read-only smoke test against products, customers, videos, collections, and analytics.
List products:
node scripts/list-products.js --account yogaworks
node scripts/list-products.js --active true --sort alphabetical --account yogaworks
Read any product sub-resource with the generic reader:
node scripts/get-resource.js --path /products/156019/prices --account yogaworks
List customers:
node scripts/list-customers.js --status all --per-page 25 --account yogaworks
node scripts/list-customers.js --email [email protected] --status all --account yogaworks
node scripts/list-customers.js --query smith --status all --account yogaworks
Read a customer profile:
node scripts/read-customer.js --id 55289178 --account yogaworks
Include watchlist and in-progress watching:
node scripts/read-customer.js \
--id 55289178 \
--include-watchlist \
--include-watching \
--account yogaworks
Notes:
GET /customers defaults to status=enabled unless you set status explicitly.GET /customers/:id/watching should include the VHX-Customer header. The script handles that automatically when --include-watching is used.--product <id|href>.List videos:
node scripts/list-videos.js --sort newest --per-page 25 --account yogaworks
node scripts/list-videos.js --query vinyasa --plan standard --account yogaworks
Read a video:
node scripts/read-video.js --id 3595351 --account yogaworks
Include file renditions:
node scripts/read-video.js --id 3595351 --include-files --account yogaworks
node scripts/read-video.js --id 3595351 --include-files --quality adaptive --format m3u8 --account yogaworks
Notes:
live_video, live_event_id, and scheduled_at.List live events for a product:
node scripts/list-live-events.js --product 156019 --sort latest --account yogaworks
You can inspect a specific live event using the generic reader:
node scripts/get-resource.js --path /live_events/12345 --account yogaworks
Read an aggregate traffic report:
node scripts/read-analytics.js \
--type traffic \
--from 1-month-ago \
--to today \
--account yogaworks
Read subscriber trends:
node scripts/read-analytics.js \
--type subscribers \
--from 3-months-ago \
--to today \
--by month \
--account yogaworks
Read video-specific analytics:
node scripts/read-analytics.js \
--type video.platforms \
--video-id 3595351 \
--from 1-month-ago \
--to today \
--account yogaworks
Supported analytics types from the official docs:
trafficincome_statementunitssubscriberschurnvideovideo.platformsvideo.geographyvideo.subtitlesNotes:
--by converts the report into a time-series variant.--video-id.YYYY-MM-DD, YYYY-MM-DDTHH:MM:SSZ, and relative ranges like 1-month-ago.Use this when the endpoint exists in the official docs but there is no dedicated helper yet:
node scripts/get-resource.js --path /browse --query-json '{"product":"https://api.vhx.tv/products/156019"}' --account yogaworks
node scripts/get-resource.js --path /collections/123/items --query-json '{"include_events":1,"per_page":10}' --account yogaworks
node scripts/get-resource.js --path /comments --query-json '{"video":"https://api.vhx.tv/videos/3595351"}' --account yogaworks
The generic script also supports request headers for customer-scoped reads:
node scripts/get-resource.js \
--path /customers/55289178/watching \
--customer 55289178 \
--account yogaworks
https://dev.vhx.tv/api/https://dev.vhx.tv/docs/api/https://help.vimeo.com/hc/en-us/articles/12427832342673-Does-Vimeo-OTT-have-an-APIhttps://help.vimeo.com/hc/en-us/articles/12427027758609-Generate-an-API-key-on-Vimeo-OTTThe reference docs cover these major read and write surfaces:
products: list, retrieve, list pricescustomers: create, retrieve, list, update, add/remove product, watchlist, watchingvideos: create, retrieve, list, list files, update, deletelive_events: list, retrievecomments: create, retrieve, list, reportcollections: create, retrieve, list, update, position updates, item listing and item managementbrowse: list storefront rows for a productauthorizations: create player authorization tokens for customer playbackanalytics: retrieve aggregate and time-series reportsGET endpoints unless you intentionally want a write.VHX-Customer so the response is scoped to the right user._links.self.href rather than reconstructing URLs by hand.count, total, _links, and _embedded arrays.GET /browse and GET /live_events require a product scope.GET /customers/:id/watching is customer-header-sensitive.For analytics and customer investigation, this sequence is usually efficient:
node scripts/verify-access.js --account <alias>node scripts/list-products.js --account <alias>node scripts/list-customers.js --status all --query <term> --account <alias>node scripts/read-customer.js --id <id> --include-watchlist --include-watching --account <alias>node scripts/read-analytics.js --type subscribers --from 3-months-ago --to today --by month --account <alias>node scripts/read-analytics.js --type video.platforms --video-id <video_id> --from 1-month-ago --to today --account <alias>tools
Read local coding-agent thread/session history for Codex, Codex CLI, Copilot CLI, Copilot Chat local VS Code threads, and Claude Code. Use when asked to find, inventory, summarize, search, or inspect local agent conversations, session subjects, transcript files, or agent thread storage.
tools
Operate Google Workspace (Drive, Gmail, Calendar, Sheets, Docs, Slides, Chat, Admin, Forms, Tasks…) via the @googleworkspace/cli (`gws`) Rust CLI distributed on npm. Use for any read/write task across Workspace APIs — list/search/upload Drive files (incl. shared drives), send/read mail, manage calendar events, sheets cell ops, etc.
development
Find useful Agent Skills in curated public skill repositories for a user query. Searches official and community skill repos, ranks matching SKILL.md files, and recommends candidates with source trust notes.
tools
Use Browserbase and the browse CLI for browser automation, Fetch/Search API work, authenticated remote browsing, UI QA, debugging, tracing, and Browserbase platform or Functions workflows with multi-account support.