Video detail

Read one stored video snapshot without triggering a live YouTube fetch.

GET
https://api.shortsmonkey.com/v1/videos/abc123

1 credit when found

Video detail#

Read one stored video snapshot without triggering a live YouTube fetch.

Authentication#

Send Authorization: Bearer sm_live_.... Never place the full key in URLs, cookies, bodies, logs, or analytics.

Data freshness#

Rankings read stable snapshots published by the worker. Public reads never trigger a YouTube refresh.

Request#

ItemValueDescription
MethodGETHTTP request method
Full URLhttps://api.shortsmonkey.com/v1/videos/abc123Production API URL
AuthenticationAuthorization: Bearer sm_live_...Send the full key only in the header
Content typeNo request bodyGET requests have no request body
Credits1 credit when foundError responses cost 0 credits

Request parameters#

NameLocationTypeRequiredDefaultValues or limitsDescription
video_idPathstringYes6–32 URL-safe charactersStored YouTube video ID; missing records return 404 at zero cost

Success response fields#

all_data is an unfiltered page from the stable snapshot; filter_data is a page from the same snapshot after endpoint defaults and request filters. Each result paginates independently.

Dot notation represents nested objects and [] represents array items. Unknown subscriber counts are null with subscriber_count_hidden: true. One request is billed once using the larger returned item count, never the sum of both sets.

Field pathTypeNullableDescription
data.all_data.itemsarray<object>NoUnfiltered video items on the current page
data.all_data.items[].video_idstringNoYouTube video ID
data.all_data.items[].titlestringNoVideo title
data.all_data.items[].video_urlstringNoYouTube video URL
data.all_data.items[].channel.idstringYesChannel ID
data.all_data.items[].channel.titlestringNoChannel title
data.all_data.items[].channel.subscribersintegerYesSubscriber count; null when hidden
data.all_data.items[].channel.subscriber_count_hiddenbooleanNoWhether the subscriber count is hidden
data.all_data.items[].viewsintegerNoView-count snapshot
data.all_data.items[].views_to_subscribers_rationumberYesViews-to-subscribers ratio
data.all_data.items[].opportunity_scorenumberYesOpportunity score
data.all_data.items[].duration_secondsintegerNoVideo duration in seconds
data.all_data.items[].published_atstring(date-time)YesVideo publication time in UTC ISO 8601
data.all_data.items[].snapshot_atstring(date-time)YesData collection time
data.all_data.items[].nichestringYesNiche or category
data.all_data.items[].trackstringYesDataset track identifier
data.all_data.items[].regionstringYesRegion code
data.all_data.items[].reasonsarray<string>NoRanking reasons
data.all_data.items[].video_typestringNoshorts or long
data.all_data.next_cursorstringYesNext-page cursor for this result set; null when finished
data.filter_data.itemsarray<object>NoVideo items after defaults and request filters
data.filter_data.items[].video_idstringNoYouTube video ID
data.filter_data.items[].titlestringNoVideo title
data.filter_data.items[].video_urlstringNoYouTube video URL
data.filter_data.items[].channel.idstringYesChannel ID
data.filter_data.items[].channel.titlestringNoChannel title
data.filter_data.items[].channel.subscribersintegerYesSubscriber count; null when hidden
data.filter_data.items[].channel.subscriber_count_hiddenbooleanNoWhether the subscriber count is hidden
data.filter_data.items[].viewsintegerNoView-count snapshot
data.filter_data.items[].views_to_subscribers_rationumberYesViews-to-subscribers ratio
data.filter_data.items[].opportunity_scorenumberYesOpportunity score
data.filter_data.items[].duration_secondsintegerNoVideo duration in seconds
data.filter_data.items[].published_atstring(date-time)YesVideo publication time in UTC ISO 8601
data.filter_data.items[].snapshot_atstring(date-time)YesData collection time
data.filter_data.items[].nichestringYesNiche or category
data.filter_data.items[].trackstringYesDataset track identifier
data.filter_data.items[].regionstringYesRegion code
data.filter_data.items[].reasonsarray<string>NoRanking reasons
data.filter_data.items[].video_typestringNoshorts or long
data.filter_data.next_cursorstringYesNext-page cursor for this result set; null when finished
meta.request_idstringNoRequest trace ID
credits.costintegerNo1 when the video is found
credits.remainingintegerNoRemaining account credits
credits.period_ends_atstring(date-time)NoCurrent credit-period end

Pagination and cursors#

Send all_data.next_cursor as all_cursor and filter_data.next_cursor as filter_cursor. The cursors are independent, opaque, signed, and valid for 24 hours; legacy cursor is only an alias for filter_cursor.

ETag#

Rankings support If-None-Match. A hit returns HTTP 304 with X-Credits-Cost: 0.

Errors and rate limits#

Every error contains code, stable English message, request_id, and details. All 4xx/5xx responses cost zero credits.

HTTP statusCodeCauseSuggested action
400INVALID_REQUESTInvalid parameter format, combination, or rangeCorrect the parameters using details.issues
401INVALID_API_KEYThe key is invalid or inactiveCheck the Bearer header and key status
402SUBSCRIPTION_REQUIRED / CREDITS_EXHAUSTEDSubscription or credits are unavailableCheck the plan, balance, and key safety budget
429RATE_LIMITEDRate or concurrency limit exceededRetry after the Retry-After interval
503DATA_STALE / SERVICE_UNAVAILABLEData or service is temporarily unavailableRetry later and retain request_id
curl -X GET "https://api.shortsmonkey.com/v1/videos/abc123" \
  -H "Authorization: Bearer $SHORTSMONKEY_API_KEY"