Google Flow Errors Explained: Upscaling Failed, PUBLIC_ERROR_UNUSUAL_ACTIVITY and Unsafe Generation

October 4, 2026

Table of contents

  1. Introduction
  2. “Upscaling failed”
  3. PUBLIC_ERROR_UNUSUAL_ACTIVITY
  4. PUBLIC_ERROR_UNSAFE_GENERATION
  5. If you automate Google Flow
  6. Frequently asked questions

Introduction

Google Flow’s “Upscaling failed”, PUBLIC_ERROR_UNUSUAL_ACTIVITY and PUBLIC_ERROR_UNSAFE_GENERATION mean, in turn, an upscale your plan or Google couldn’t complete, a rejected reCAPTCHA check, and a safety-filter refusal. This page explains each one and what to do, using what the useapi.net Google Flow API sees when the same requests run through it, where Google’s response names the reason.

“Upscaling failed”

Flow shows “Upscaling failed” when an upscale did not finish. Through the API, failed upscales come down to these causes, in order of how easy they are to check:

  1. The plan doesn’t include that upscale. 4K needs Google AI Ultra for both videos and images. Other paid plans upscale videos to 720p or 1080p, and free accounts cannot upscale videos at all. Images upscale to 2K on every plan, including free. For videos, 720p and 1080p are free and 4K costs 50 credits. Image upscales are free.
  2. Google’s reCAPTCHA check rejected the request. Upscales go through the same check as generations, so the next section applies here too. Nothing is created and no credits are used, and you can retry right away.
  3. A temporary error on Google’s side. Retry once. If an earlier upscale of the same video succeeded, upscaling it again returns that cached result at no extra credits.

If every video upscale fails on one account, check that it is on a paid Google AI plan.

PUBLIC_ERROR_UNUSUAL_ACTIVITY

PUBLIC_ERROR_UNUSUAL_ACTIVITY means Google’s reCAPTCHA check did not trust the request. Google checks before it starts generating, so nothing was created and no Flow credits were used. You can try again right away.

Our data points to the Google account more than to the captcha solver. Google gives each account its own trust level. Through the API, a trusted account gets about 9 in 10 checks accepted and a distrusted one about 3 in 10, whatever solves the captcha. A related code, PUBLIC_ERROR_UNUSUAL_ACTIVITY_TOO_MUCH_TRAFFIC, arrives as HTTP 429 and Google’s message reads “reCAPTCHA evaluation failed”. It means the same thing.

What helps:

  • Check which accounts fail. If one keeps failing while others work, rest it, and replace it if it stays low for more than a day or two.
  • If every account drops at the same time, the captcha solver is the likely cause. Configure a second one.
  • Spread the work over more than one Google account if you have several.

PUBLIC_ERROR_UNSAFE_GENERATION

PUBLIC_ERROR_UNSAFE_GENERATION means Google’s safety filters refused the prompt or the result. It is not an account problem. Google names related refusals with similar codes:

  • PUBLIC_ERROR_PROMINENT_PEOPLE_FILTER_FAILED: a real, recognizable person.
  • PUBLIC_ERROR_MINOR, PUBLIC_ERROR_SEXUAL, PUBLIC_ERROR_DANGER_FILTER: the content categories they name.
  • PUBLIC_ERROR_AUDIO_FILTERED: the generated audio was blocked.
  • PUBLIC_ERROR_IP_INPUT_IMAGE: an input image looked like protected content.

Retrying the same prompt usually fails again. Rephrase the part that tripped the filter, replace the reference image, or remove the real person’s name. The list is Google’s and grows over time, so match on substrings rather than an exact list. Not every PUBLIC_ERROR_ code is about content: PUBLIC_ERROR_MODEL_ACCESS_DENIED means the plan lacks the model, and USER_QUOTA_REACHED, USER_REQUESTS_THROTTLED and PER_MODEL_DAILY_QUOTA_REACHED are account limits.

If you automate Google Flow

Running Flow from code with the useapi.net Google Flow API handles most of this for you:

  • Rejected captchas are retried with a fresh captcha, up to 5 times by default (captchaRetry). You only get a 403 or 429 back when every try was refused. The error starts with captcha_quality: so your code can tell it apart from other failures.
  • When you leave out email and have several Google accounts connected, accounts whose captchas Google has been rejecting get less of the new work. GET /accounts/captcha-stats shows each account’s acceptance rate.
  • Content refusals come back either as an immediate 400 that names the reason, or, for a video that fails while generating, in failureReasons on the job, so you can show the user what to change. Some failures arrive with no reason at all, and those are usually worth one retry.
  • An upscale the account’s plan doesn’t include (4K without Ultra, or any video upscale on a free account) is refused with a 400 before a captcha is solved, so it costs nothing.

The Veo 3.1 tutorial shows a full generation in curl, and the n8n UGC ad template shows retries and refusals handled in a no-code workflow.

Frequently asked questions

Does a failed generation use Flow credits?
Not for PUBLIC_ERROR_UNUSUAL_ACTIVITY, because Google checks before generating. For other failures, check the credit balance before and after if you need to be sure.

Why does it work on the Flow website but fail in my script?
On the website the reCAPTCHA token comes from your own signed-in browser. A script gets its token from a captcha-solving service, and Google trusts those tokens less. The account’s own trust level applies to both.

Is there an official Google Flow API?
No public one. Google’s Gemini API offers Veo with its own per-second pricing. The useapi.net Google Flow API is a third-party API that drives your own Google account at a flat $15/month. See the Google Flow API overview.

Start using the API

A single $15/month subscription covers every API on useapi.net — one token, all services. You connect up to 3 of your own provider accounts per service, and useapi.net handles the REST API, load balancing, and polling.

Subscribe — $15/month

Pricing, crypto payment, and volume options — full refund within the first 14 days if you have fewer than 50 successful generations.