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

October 4, 2026 (October 20, 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 videos and images, 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 has a paid Google AI subscription.

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 video request in curl, and the n8n UGC ad template shows retries and refusals handled in a no-code workflow.

Frequently asked questions

Does a failed video use Flow credits?
Through useapi.net, a PUBLIC_ERROR_UNUSUAL_ACTIVITY failure costs nothing, because Google checks the captcha before it starts generating, and an upscale the plan doesn’t include is refused with a 400 before any captcha is solved. For other failures, compare the account’s credit balance before and after (remainingCredits on the finished job) if you need to be sure.

Why does it work on the Flow website but fail in my script?
Through useapi.net, as in any script, the reCAPTCHA token comes from a captcha-solving service, while on the website it comes from your own signed-in browser, and Google trusts solver tokens less. The account’s own trust level applies to both, so an account that keeps failing through the API is worth resting or replacing.

Is there an official Google Flow API?
Through useapi.net you call Google Flow from code with a third-party REST API on your Google Flow website subscription, because Google offers no public Flow API. An 8-second Veo 3.1 Fast video costs $0.08 on Google AI Ultra $199.99, against $0.80 on Google’s Cloud Agent Platform, where Veo moves when the Gemini API’s Veo 3.1 Preview models shut down on October 22, 2026 (as of October 2026).

Start using the API

A single $15/month subscription covers every API on useapi.net — one token, all services. You connect up to 3 accounts per service, each with its own website subscription, and useapi.net handles the REST API, load balancing, and polling. Need more accounts? Each extra subscription is $10/month and adds 3 more accounts per service.

Subscribe — $15/month Pay with crypto

Pricing and volume options — full refund within the first 14 days if you have fewer than 50 successful generations. Already subscribed? Change the quantity in the Stripe Customer Portal instead of buying again.