tonhowtf/omniget · error
o Instagram nao confirmou o video
Error message
o Instagram nao confirmou o video
What it means
If publish_web's video configure loop exits without any recorded last error, it fails with 'o Instagram nao confirmou o video' (Instagram did not confirm the video) as a catch-all. This is a defensive default indicating the configure confirmation never arrived.
Solutions
- Log the configure response bodies to see why confirmation never matched
- Extend the retry window and re-check status explicitly
- Confirm the media ID exists on Instagram before declaring failure
Defensive patterns
Strategy: try-catch
Validate before calling
// confirm media id exists before declaring failure let exists = check_media_status(client, &media_id).await?;
Try / catch
if e.to_string().contains("nao confirmou o video") { // poll media status manually before retrying publish
poll_configure_status(media_id).await
} Prevention
- Always record last error on every failed attempt
- Explicitly query media status instead of relying only on configure response
- Keep request/response logging for configure calls
When it happens
Trigger: The retry loop for the video configure endpoint completed all attempts without a success and without populating last (edge case in error bookkeeping).
Common situations: Instagram API returning shapes the loop does not recognize, or a logic path where each attempt ends without setting last.
Understand the failure class
Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.
Related errors
- configure
- e
- a API oficial so aceita URLs publicas (https://…) para os…
- agendamento sem token da API
- Could not extract data from embed
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/d38845840ce85261.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/tools/instagram/publish.rs:456
.await
{
Ok(json) if s(&json, "status") == "ok" => {
report("done", 3, 3);
return Ok(result_of(&json));
}
Ok(json) => last = Some(anyhow!("configure: {}", json)),
Err(IgError::Other(e))
if e.contains("Transcode")
|| e.contains("not ready")
|| e.contains("202") =>
{
last = Some(anyhow!(e));
}
Err(e) => return Err(m(e)),
}
tokio::time::sleep(std::time::Duration::from_secs(4 + attempt * 3)).await;
}
Err(last.unwrap_or_else(|| anyhow!("o Instagram nao confirmou o video")))
}
"carousel" => {
if req.files.len() < 2 || req.files.len() > 20 {
return Err(anyhow!("um carrossel tem de 2 a 20 arquivos"));
}
let total = req.files.len() as u64 + 1;
let sidecar_id = upload_id();
let mut children: Vec<Value> = Vec::new();
for (i, f) in req.files.iter().enumerate() {
report("upload", i as u64, total);
let path = Path::new(f);
let uid = format!("{}{}", upload_id(), i);
let is_video = matches!(
path.extension()
.and_then(|e| e.to_str())
.map(|e| e.to_lowercase())
.as_deref(),
Some("mp4" | "mov" | "m4v" | "webm")View on GitHub (pinned to 8600b91f42)