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

  1. Log the configure response bodies to see why confirmation never matched
  2. Extend the retry window and re-check status explicitly
  3. 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

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


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)