Skip to content

v0 app with fal.ai (images and video): AI launch checklist

v0 apps call fal.ai (images and video) with your own API key, from server code, so fal.ai (images and video)'s own limits are your safety net. Of the 20 checks before you charge users, v0 handles 2, partly handles 4, and leaves 14 to you.

Checked 12 Nov 2026 against each platform's docs; every fact links to its source.

How AI calls work in v0

Built-in AI
Yes: 'By default, v0 uses the Vercel AI Gateway'; v0 'is pre-configured to connect to the gateway'. Vercel's blog says provider tokens are used server-side only with short-lived OIDC tokens scoped per project.
Other options
Marketplace AI providers (fal, Deep Infra) and Grok by xAI via Project menu ... → Settings → Integrations; or direct provider keys as environment variables (docs example: OPEN_AI_API_KEY).
Who pays
Your Vercel team's AI Gateway Credits: provider list price, no markup or platform fee on tokens. Free tier covers a subset of models with lower per-model rate limits; buying credits moves you to the paid tier. BYOK needs purchased credits; failed BYOK requests are retried with system credentials and charged to your credits. Optional add-ons (custom reporting, team-wide ZDR, regional hosting at 5%) are surcharges.
Models and providers
OpenAI, Anthropic, Google and OpenRouter-style multi-provider access all go through AI Gateway's catalog; fal is a separate Marketplace integration.

Keys and secrets

Where secrets live
Project menu ... → Settings → Environment Variables, scoped to Production, Preview and/or Development; the v0 preview only sees Development variables. Keys are 'stored securely on Vercel'.
Server-side by default?
Yes for AI Gateway (OIDC, server-side). For your own env vars, Next.js keeps non-NEXT_PUBLIC_ variables server-only and inlines NEXT_PUBLIC_ ones into the browser bundle at build time.
How keys end up in the browser
A NEXT_PUBLIC_ prefix on an AI key. v0 checks for 'Misuse of NEXT_PUBLIC_ variables' and flagged insecure deployments need review before deploy.

The 20 checks, in v0

What v0 does for you, and what to ask it (or your coding agent) to add. Tick them off in the interactive checklist.

Cost and abuse

  • Partly

    A spending cap per user

    Set a daily project budget on the AI Gateway Budgets page (it stops the whole app, not one user), then ask v0: 'Before each streamText call, sum this user's cost today from ai_costs and return a limit message when it's over $2.'

    vercel.com ↗

  • Partly

    Rate limits on every AI endpoint

    Add Firewall → Configure → New Rule → Rate Limit on your AI route (Hobby gets one rule, keyed by IP or JA4), and ask v0 to add a per-user limit in the route handler keyed by the signed-in user id.

    vercel.com ↗

  • Handled

    AI keys only on the server

    AI Gateway calls run server-side with per-project OIDC tokens and v0 flags NEXT_PUBLIC_ misuse before deploy; if you add your own provider key under Settings → Environment Variables, never give it a NEXT_PUBLIC_ prefix.

    vercel.com ↗

  • You add it

    Retries capped, with a timeout

    Ask v0: 'Set maxRetries: 2 and an abort-signal timeout on every generateText and streamText call, and don't retry from the client.' AI Gateway also retries failed BYOK requests with system credentials and charges your credits.

    vercel.com ↗

  • Handled

    A budget alert at each AI provider

    Set team and project budgets with 50/75/100% email alerts on the AI Gateway Budgets page; budgets are off by default, BYOK spend isn't counted, and Spend Management's pause doesn't stop AI Gateway usage, so also set provider-side limits for BYOK keys.

    vercel.com ↗

Charging for AI use

  • You add it

    Every AI call charged or deliberately free

    Ask v0 to tag each gateway call with a step name and list which ones are charged to users; Custom Reporting can then group spend by tag to find untagged or free calls.

    vercel.com ↗

  • You add it

    Credits deducted on the server, after success

    Connect Supabase or Neon from v0's Databases and ask v0 to deduct credits in a server action after the result is saved, in one transaction, with database permissions that block client writes to the balance.

    v0.app ↗

  • You add it

    Failed AI calls refunded

    Ask v0 to catch gateway errors, including a 402 quota_for_entity_exceeded when a budget is hit, and refund reserved credits with the reason.

    vercel.com ↗

  • You add it

    One charge per request, even on a double click

    Ask v0 to send a request id from the client, store it with a unique constraint, return the saved result on repeats, and disable the submit button while pending.

    v0.app ↗

A record of every AI result

  • Partly

    Each AI result stored with its feature, model, prompt version and settings

    AI Gateway logs each request's model, tokens and spend, but not your user or prompt version, so ask v0 to save the gateway generation id with feature, model, prompt_version, params, input and user_id on an ai_results row.

    vercel.com ↗

  • You add it

    Retries and corrections saved next to the original, never over it

    Ask v0 to save regenerations and edits as new ai_results rows with parent_id and version instead of overwriting.

    v0.app ↗

  • You add it

    What users do next with each AI result, recorded on the server

    Ask v0 to add an ai_events table and a server action recordAiEvent called from the Retry, Edit, Copy and Export buttons.

    v0.app ↗

What worked, for whom, at what cost

  • You add it

    Worked first time, per feature, model and prompt version

    Ask v0 for an admin page showing worked-first-time by feature, model and prompt version for 7 and 30 days.

    v0.app ↗

  • Partly

    A cost record for every AI step

    Pass the user id and a step tag on each gateway request (Custom Reporting) or read cost per generation from Generation Lookup, and store it in an ai_costs row per call, retries included.

    vercel.com ↗

  • You add it

    Wasted AI spend and real cost per result, per feature

    Ask v0 for an admin query joining ai_costs and ai_events: total spend, spend on results that didn't work, cost per result that worked, per feature and model.

    vercel.com ↗

  • You add it

    Who the AI fails for

    Ask v0 to save language, length band, input kind, plan and new-user flag with each result and show worked-first-time per trait.

    v0.app ↗

Switching safely

  • You add it

    Prompts in version control, with version labels

    Ask v0 to move inline prompts into lib/prompts/ files with exported version labels saved on each result.

    v0.app ↗

  • You add it

    Model and prompt switchable by a flag

    Ask v0 to read the gateway model string and prompt version per feature from an environment variable (Settings → Environment Variables) or a database setting, with a user-id-hashed split.

    v0.app ↗

  • You add it

    Real past requests to replay before a change

    Ask v0 for a script that replays 50 anonymised past requests through any gateway model and prompt version and saves outputs and cost next to the originals.

    vercel.com ↗

  • You add it

    A plan for model shutdowns

    Keep every gateway model string in one config file and check it against the AI Gateway model list before switching.

    vercel.com ↗

fal.ai (images and video) limits to set before launch

Billing model
Prepaid credits drawn down per use; each model has its own unit (per image or megapixel, per second of video or flat per video, per request or per GPU-second). Only successful outputs are billed; 5xx errors and queue wait aren't.
Where secrets live
Billing dashboard https://fal.ai/dashboard/billing (overall spend, invoices, payment history). Org admins (enterprise organizations) can set spending alerts; the menu location isn't stated.
Per-key or project cap
not found.
Auto top-up
not found.
Key scoping
Create keys at https://fal.ai/dashboard/keys with permission presets (API, SERVERLESS, DEPLOY, COMPUTE, BILLING, READONLY, FULL; legacy ADMIN and API scopes). A key can be limited to a list of models in the 'Allowed models' tab (set at creation, can't be changed) and can expire after 1 hour to 1 year. Keys are managed per team. Per-key spend limits: not found. Guidance on keeping FAL_KEY out of the browser: not on the key page read.
Rate limits
Concurrency, not requests per second: new accounts get 2 concurrent requests, rising automatically with paid invoices over the last four weeks up to 40 self-serve; more via sales. Requests are queued, not rejected; raw HTTP gets 429 concurrent_requests_limit with X-Fal-needs-retry: 1. Some high-demand models have extra limits. View at https://fal.ai/dashboard/usage-billing/concurrency.
Where usage shows
Billing dashboard for overall spend; per-model cost breakdowns and request-level detail via the usage and analytics Platform APIs or billing reports; pricing API GET https://api.fal.ai/v1/models/pricing?endpoint_id=... . Team members can see request metadata (endpoint, status, timing, cost); API-key submissions aren't tied to an individual member.

fal.ai ↗fal.ai ↗fal.ai ↗fal.ai ↗

Mistakes v0 apps make at launch

  1. AI keys exposed with a NEXT_PUBLIC_ prefix.

    Vercel (Aug 4, 2025): v0 blocked over 17k insecure deployments in July 2025 alone, with exposed API keys and NEXT_PUBLIC_ misuse among the most common issues; about a thousand people were about to share OpenAI, Gemini, Claude and xAI keys.

    vercel.com ↗

  2. An unauthenticated AI route left over from development.

    Vercel Community thread (June–July 2026): a Hobby user saw Anthropic calls to models their app never used; the likely cause was 'an exposed route in my code that should have been removed when moving from dev to prod'. Advice: treat keys as compromised, rotate, authenticate or remove the route.

    community.vercel.com ↗

  3. Assuming Vercel caps AI spend.

    AI Gateway budgets are optional and unlimited by default; BYOK spend isn't counted; Spend Management's pause does not stop AI Gateway API key usage or v0 usage.

    vercel.com ↗vercel.com ↗

Questions

How do AI calls work in a v0 app with fal.ai (images and video)?

v0 apps call fal.ai (images and video) with your own API key, from server code, so fal.ai (images and video)'s own limits are your safety net.

Can v0 cap AI spending per user?

Partly. Set a daily project budget on the AI Gateway Budgets page (it stops the whole app, not one user), then ask v0: 'Before each streamText call, sum this user's cost today from ai_costs and return a limit message when it's over $2.'

Where should the fal.ai (images and video) key live in v0?

Handled. AI Gateway calls run server-side with per-project OIDC tokens and v0 flags NEXT_PUBLIC_ misuse before deploy; if you add your own provider key under Settings → Environment Variables, never give it a NEXT_PUBLIC_ prefix.

How do I stop one user running up my fal.ai (images and video) bill?

Add a per-user daily cap in your own code, checked before every AI call. Then set a limit at fal.ai (images and video) as a backstop: Billing dashboard https://fal.ai/dashboard/billing (overall spend, invoices, payment history). Org admins (enterprise organizations) can set spending alerts; the menu location isn't stated.

More checklists