tonhowtf/omniget · error
Post not available
Error message
Post not available: {} What it means
TikTok's video-detail payload includes a non-empty statusMsg, which the library interprets as 'this post cannot be shown' and surfaces verbatim. This is TikTok's own status message (e.g. 'Video currently unavailable', removal notice) wrapped in this error.
Solutions
- Read the included statusMsg — it states why TikTok won't serve the post (deleted, private, banned).
- Confirm in a browser that the URL still resolves to a playable video.
- If the post exists but is region-blocked, retry via a proxy in an allowed region.
- Handle this as a permanent user-facing condition rather than retrying blindly.
Defensive patterns
Strategy: try-catch
Try / catch
match tiktok.get_media_info(url).await {
Err(e) if e.to_string().starts_with("Post not available:") => {
// surface statusMsg to the user; do not retry
}
other => { other?; }
} Prevention
- Check the post exists and is public in a browser before batch processing.
- Treat statusMsg errors as permanent — skip, don't retry.
- Maintain a skip-list for unavailable posts in bulk jobs.
- Surface the embedded statusMsg verbatim to end users.
When it happens
Trigger: fetch_detail finds video_detail.statusMsg as a non-empty string after a successful parse and key lookup, and immediately returns Post not available: {statusMsg}.
Common situations: The video was deleted by its author; the account was banned or made private; TikTok removed the video for ToS violations; region-blocked content returning a status message instead of data.
Related errors
- Post not available (status )
- Post not available
- Post not available
- a API do TikTok devolveu resposta vazia — normalmente é a…
- a API do TikTok respondeu HTTP
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/ce7e7e543b149b2e.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/platforms/tiktok.rs:183
.split("<script id=\"__UNIVERSAL_DATA_FOR_REHYDRATION__\" type=\"application/json\">")
.nth(1)
.and_then(|s| s.split("</script>").next())
.ok_or_else(|| anyhow!("TikTok is blocking requests. Try again in a few minutes."))?;
let data: serde_json::Value = serde_json::from_str(json_str)
.map_err(|_| anyhow!("Erro ao processar resposta do TikTok"))?;
let video_detail = data
.get("__DEFAULT_SCOPE__")
.and_then(|s| s.get("webapp.video-detail"))
.ok_or_else(|| anyhow!("Video data not found in TikTok response"))?;
if let Some(status_msg) = video_detail
.get("statusMsg")
.and_then(|v| v.as_str())
.filter(|s| !s.is_empty())
{
return Err(anyhow!("Post not available: {}", status_msg));
}
if let Some(status_code) = video_detail.get("statusCode").and_then(|v| v.as_u64()) {
if status_code != 0 {
return Err(anyhow!("Post not available (status {})", status_code));
}
}
let detail = video_detail
.pointer("/itemInfo/itemStruct")
.ok_or_else(|| anyhow!("Video data not found in TikTok response"))?
.clone();
if detail
.get("isContentClassified")
.and_then(|v| v.as_bool())
.unwrap_or(false)
{View on GitHub (pinned to 8600b91f42)