MeowLoad Docs
On this page

Errors

Error format

Every non-200 response has the same JSON shape:

{
  "message": "The content has been deleted or does not exist",
  "code": "content_deleted",
  "retryable": false
}
FieldDescription
messageHuman-readable, localized by the Accept-Language header. Do not branch on it; the wording may change.
codeMachine-readable error code. Every extraction failure (400) carries one and 429 is always too_many_requests; 401, 402, 422 and 500 carry no code and are identified by the status itself. A request whose body is not valid JSON returns message only.
retryableWhether retrying the same URL later might succeed. Sent together with code.
detailOnly on 422: the list of request body validation issues

HTTP status codes

StatusMeaningCommon causeWhat to do
200Success-The body is the extraction result. This is the only case that is charged.
400Extraction failedInvalid link, unreachable content, platform restrictions. A body that is not valid JSON is also 400, with message onlyHandle by code (table below). Not charged.
401Authentication failedMissing Authorization header or a non-Bearer scheme, or the API key is wrong or has been resetCheck your key in the Developer Console
402Out of creditsRemaining credits are 0Top up in the Developer Console
422Invalid request bodyMissing url, url not a string, Content-Type not JSON (the body is then validated as an empty object)Read detail and fix the request
429Rate limitedOver 1,200 requests per minute per key; code is too_many_requestsBack off and retry. MCP shares this quota with REST.
500Server errorInternal failureRetry later; contact us if it persists

Extraction error codes

Extraction failures return HTTP 400 with one of the 18 codes below. These are business failures and are not charged.

CodeMeaningCommon causeWhat to doretryable
invalid_urlMalformed linkNot a URL, or no recognizable link in the inputFix the URLfalse
unsupported_urlNot a post/video linkA valid URL that is not a content page, such as a site home page or search pageUse the share link of a single post or videofalse
unsupported_siteSite not supportedThe platform is not on the supported listContact us to request itfalse
invalid_playlist_urlNot a profile/channel/playlist linkThe playlist endpoint received a single post or a non-list pageUse a public profile, channel or playlist URLfalse
playlist_not_supportedA list URL was sent to the post endpoint/extract/post received a profile or playlist linkCall /extract/playlist, or pass a single post URLfalse
content_deletedContent deleted or never existedThe post was removed, the link is wrong, or it never existedNothing to extractfalse
user_not_foundUser not foundAccount deleted, renamed or restricted by the platformVerify the handlefalse
no_storyNo active storiesStories expire after 24 hoursTry again when there are new storiesfalse
private_contentPrivate contentPrivate account or follower-only contentNot extractablefalse
members_only_contentPaid or members-only contentRequires a subscription, payment or membershipNot extractablefalse
age_restrictedAge-restrictedThe platform requires a signed-in age checkNot extractable (see note below)false
region_restrictedRegion-restrictedContent visible only in certain regionsNot extractable (see note below)false
not_premieredNot published yetA scheduled premiere or timed release has not gone liveRetry after the publish timefalse
live_stream_not_supportedLive streams on this site not supportedThe stream is currently liveRetry once it is archived as a normal video (see note below)false
extract_failedExtraction failedSite changes, or the content is currently unreachableRetry latertrue
retryableTransient failureA momentary error during extractionRetry after a short delaytrue
timeoutExtraction timed outThe extraction exceeded the time limitRetry after a short delaytrue
unknownUnclassified failureAn unexpected errorRetry once; if it keeps happening, contact us with the request timetrue

age_restricted, region_restricted and live_stream_not_supported only come up on a small number of platforms. Age- and region-restricted media usually extracts fine, and live streams are supported on many platforms (Twitch and TikTok among them). Getting one of these three means we cannot reach that kind of media on that particular platform; it does not mean the kind itself is unsupported.

What retryable means

retryable answers one question: is there any point in retrying the same URL later? It is sent alongside the error code.

  • true: a transient failure; the same URL may succeed a little later. Use exponential back-off starting at a few seconds, and give up and log after two or three attempts.
  • false: a settled conclusion about the content itself (deleted, private, unsupported, and so on). Retrying will not change the outcome, so do not retry.
  • Field missing: treat as false.

Codes get added over time. When you see a code that is not in the table above, treat it as permanent and log it rather than retrying in a loop. If one platform keeps returning extract_failed, or unknown shows up repeatedly, contact us with the request time.

retryable means "a retry is allowed", not "a retry will succeed". The values in the table are the typical value for each code; always use the value actually sent in the response.