tonhowtf/omniget · error
Post not available
Error message
Post not available: {} What it means
TikTok's video-detail payload contains a non-empty statusMsg string; fetch_detail forwards it to the caller wrapped in this error. It is TikTok's own explanation of why the post content is unavailable.
Solutions
- Read TikTok's statusMsg in the error text to determine the exact cause
- Inform the user the post itself is unavailable (not a library bug)
- Skip/mark the post and continue batch processing
- Retest later for temporary messages like 'currently unavailable'
Defensive patterns
Strategy: try-catch
Try / catch
match get_media_info(url).await {
Err(e) if e.to_string().starts_with("Post not available:") => {
mark_unavailable(url, e.to_string())
}
other => other,
} Prevention
- Parse statusMsg from the error text to inform users precisely
- Treat these as permanent failures and skip rather than retry
- Keep a list of known TikTok statusMsg values for better UX
When it happens
Trigger: The video-detail JSON parses successfully but statusMsg is set (e.g. 'Video currently unavailable', 'Content removed', region or account restrictions).
Common situations: Deleted or private videos, content removed for ToS violations, region-locked posts, or account suspended/deleted.
Related errors
- a API do TikTok devolveu resposta vazia — normalmente é a…
- a API do TikTok respondeu HTTP
- Post not available
- Post not available (status )
- Post not available (status )
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/05422e18366f4658.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/tiktok/mod.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)