fal.ai MCP Server & CLI

An open source fal.ai MCP server and shared CLI with 66 tools and exact reviewed generation workflows.

Navid Moazzezby Navid Moazzez·Updated Oct 3, 2026·131 min read·
Rate this tool
key_takeaways.mdTL;DR

Key takeaways

The same 66 tasks are available through a shared CLI, local MCP and versioned desktop bundle.
Each private account profile uses only its own key or file.
All 34 paid, mutating, upload and private-output operations require explicit approval.
Exact reviewed batches bind ordered inputs, current schemas, unit quotes and the selected profile label.
Queue receipts preserve accepted jobs without claiming generation is complete.
fal already offers official MCPs and genmedia; this companion adds demonstrated workflow and policy improvements.

This free fal.ai MCP server and CLI gives your AI real access to current model discovery, explicitly approved generation, queue receipts, Assets and storage controls. Discover exact native model schemas, review generation inputs and current unit pricing, submit only approved work and inspect its saved receipt.

It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 66 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.

Here's what the fal.ai MCP server and CLI is, how to set it up in each app, and every tool it has.

What is the fal.ai MCP server & CLI?

The fal.ai MCP server & CLI is a free, open source program that lets AI agents read and change requested fal account/media data with explicit approval for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.

You ask in plain language. Your AI picks the right tool, and the server makes the call to fixed fal API origins with the selected private account key; local upload PUTs never receive that key.

The CLI is the same program as commands. fal-ai-cli search-models runs the same code your AI runs when you deliberately read one native model catalog page, whether an agent like Claude Code runs it or you do.

What can you ask it?

Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:

Try asking
Find current endpoint IDs and inspect the exact native model schema.
Read unit pricing and estimate the requested output quantities.
Review these ordered generation inputs and their exact hash.
Submit only that matching approved batch and save each request ID.
Read status once and fetch the existing result after completion.
Manage only these requested Assets and private signed-output files.

fal already provides an official OAuth model MCP, separate Platform MCP and provider-linked genmedia CLI with model and Assets workflows. This owned companion adds verified shared local confirmation/read-only rules, isolated API-key profiles, exact current-schema/unit-quote reviews and private signed-credential delivery.

How to install the fal.ai MCP server

Choose the shared task CLI, local stdio MCP or versioned desktop bundle. Codex setup comes first, followed by every declared client and operating system.

Before you start0/3

Watch out: Public catalog discovery does not prove a private account key is valid. Paid generation is not an installation smoke test.

Set up fal.ai access

Private account access

  1. Sign into the intended fal account. Confirm which personal/team account owns the credits and key before creating or copying it.
  2. Use only the provider permissions needed for the requested work. Model execution, Assets, billing and organization reads have different requirements. A working model read does not prove asset/admin permissions.
  3. Store FAL_KEY in private user/client environment settings or FAL_TOKEN_FILE as an absolute token-only file outside Git. On macOS/Linux use an owner-private directory and regular non-symlink 0600 file, at most 64 KiB. On Windows restrict ACLs to yourself; POSIX mode does not prove Windows ACLs.
  4. Run fal-ai-cli doctor for local settings; doctor --network deliberately reads one model with limit=1. It reports count only, does not spend credits and does not prove the authenticated owner. Public model discovery can work without a key.
  5. Inspect the exact current model schema and unit pricing before approving generation. Use a queue receipt to read progress/results; never submit again to check progress. Do not generate paid media, create keys or delete assets just to test installation.

FAL_ACCOUNTS is a private JSON array of unique {name,api_key,token_file} profiles; FAL_DEFAULT_ACCOUNT selects an exact label. A selected token file overrides only that profile's key. Explicit profiles never inherit FAL_KEY or another profile after missing credentials or a 401/403. Labels are not verified fal owners. Tokens cache until process restart; rotate/revoke at fal and restart clients.

This wrapper uses API keys with Authorization: Key on fixed api.fal.ai, queue.fal.run, fal.run and the SDK-pinned rest.fal.ai upload-initiation origin. No credential goes on the CDN upload PUT. No hosted OAuth, .env loading, SDK key-ID/secret environment inheritance, official genmedia config import, session cookie import, telemetry or automatic background update exists. login prints setup instructions and does not save credentials or start sign-in.

Official account connections

The current model-generation MCP uses OAuth at https://mcp.fal.ai/mcp-relay. Its Active MCP account setting routes new uploads/generations; old jobs remain with their original account, and failed selected-account access does not fall back to personal credits. This is already an official isolation feature. API-key clients, including this package and genmedia, use the key's owning account separately.

The separate Platform MCP at https://api.fal.ai/v1/mcp/platform uses API keys and is read-only account/serverless tooling. Documentation MCP at https://fal.ai/docs/mcp searches public docs without model execution. The old March launch article/key-based endpoint and its nine tools are historical evidence, not the current OAuth setup or tool count.

Costs and permissions

The AGPL wrapper is free; fal generation credits, endpoint pricing, output quantities, model eligibility and concurrency limits apply. Unit pricing and cost estimates are different from completed billable usage. Unit quotes can scale with resolution, duration, output count or GPU time; a batch of ten requests is not a ten-output or ten-dollar limit. No local budget guarantee or credit reservation is promised.

No requests automatically retry, including reads, 429, failed uploads, timeouts or 5xx. Respect current provider throttling guidance before deliberately repeating a read. A timeout after a paid POST may have spent credits without returning a request ID: inspect fal history before another submission. Responses cap at 5 MiB and JSON requests at 1 MiB. One native list page is returned with its real cursor; there is no invented all-pages backup.

Data and file controls

Generated and uploaded CDN media may be public under account defaults. The local generation default sends X-Fal-Store-IO:0 to disable provider JSON input/output storage; CDN media access and expiration are separate. Explicit store_io:true allows native payload storage. Native lifecycle JSON can specify expiration_duration_seconds and initial_acl with default allow/forbid/hide and nickname rules. Unknown nicknames may be silently dropped by fal; an ACL request is not proof of actual external visibility.

Local upload sends only the selected regular file, 1 byte–20 MiB, through upload initiation and one restricted fal.media PUT. Larger/multipart/remote-URL upload conveniences belong to the official clients; no retry or automatic generation occurs here. Sign-file URL credentials are saved only into an exclusive new private JSON file. Existing files are never overwritten. Keep parent directory and Windows ACLs private; a signature is access authority even if its field says URL.

Rotation and revocation

Revoke the exact key at fal, replace private settings/files and restart every process. Revoke official OAuth connections separately. Removing the package/client registration does not cancel jobs, undo asset mutations, delete provider payloads/CDN files, revoke credentials or refund generation credits. Inspect receipts and provider state before explicitly requested cleanup.

Check that it works

Start with local discovery/settings; deliberately opt into a public catalog read without generation.

fal-ai-cli --version
fal-ai-cli doctor
fal-ai-cli list-accounts --agent
fal-ai-cli doctor --network
fal-ai-cli --version
fal-ai-cli tools
fal-ai-cli list-accounts --agent
fal-ai-cli doctor
fal-ai-cli doctor --network
fal-ai-cli search-models --limit 1 --agent
fal-ai-cli get-model-info --model-id fal-ai/flux/dev --agent

Public model discovery/schema reads have been verified without credentials or generation credits. Private doctor --network reads one model with count only; model metadata can be public, so that result is not an account-owner or all-permissions test. Model runs, authenticated Assets and real queue outcomes require separate live-account verification. Never use a paid or destructive call as an install smoke test.

Use the fal.ai CLI

The CLI is the same 66 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.

Every tool name becomes a command with dashes, so search_models runs as fal-ai-cli search-models.

fal-ai-cli tools
fal-ai-cli search-models --help
fal-ai-cli schema submit-job
fal-ai-cli search-models --limit 5 --agent
fal-ai-cli get-model-info --model-id fal-ai/flux/dev --agent

The bare fal-ai-cli lists every command, and fal-ai-cli <command> --help shows what a command takes. All 34 paid/mutating/upload/private-file operations require --confirm. --agent/--yes never approve work. Repeat --tasks with individual JSON objects; native bodies may use an absolute private payload_file.

These flags work on every command:

FlagWhat it does
--agentCompact JSON, never approval
--select a,b.cLocal result field selection
--confirmOnly the requested paid/mutating/file operation
--account LABELExact private key profile
--payload / --payload-fileExclusive native body input
--tasks JSONRepeat each ordered generation object
--review-sha256 HASHExact current preview hash
--output-file PATHNew exclusive private signed-credential JSON file

A script can branch on the exit code:

Exit codeWhat it means
0It worked
2The command was typed wrong, or a write needed --confirm
3It wasn't found
4fal.ai rejected the credentials
5fal.ai's API failed
7You hit a rate limit, so wait and try again
10Nothing is set up yet

MCP server or CLI: which one?

Both surfaces call the same tools. Codex can connect to the local MCP server or run the CLI directly. Neither requires Claude Code.

MCP provides structured tool discovery; the CLI supports scripts, compact JSON, field selection and command/schema discovery. Official hosted MCP connection and local CLI authentication have different setup requirements.

Codex-specific token measurements are pending. Record the actual client/model versions, discovery configuration, input/output usage, caching, latency and equivalent successful outcomes. Standing definitions and full task cost are separate measurements; CLI commands, selected help, results and reasoning still consume tokens.

No efficiency percentage or Claude-derived figure is presented as a Codex result. Other-client benchmarks can be added separately.

Model and asset workflows

Deliberate model selection

Search the current catalog, get exact model info/schema and pricing, then supply its native input fields. An image endpoint may use image_url, start_image_url, images or other model-specific fields; a wrapper should not guess them. Input validation proves schema compatibility, not prompt quality, rights, reachable input URLs, output appearance or available credits.

Receipt-driven generation

Queue submission creates one billable job and returns its receipt. Preserve model_id, selected account and request_id. Read status once and request the result after COMPLETED; do not resubmit to poll. Status/result/cancel use the SDK's owner/app root, removing inference subpaths. This corrects the old full-model-path queue URL. Cancel only requested jobs; acceptance cannot guarantee a refund or stop processing.

Assets versus CDN files

upload_file sends a chosen local input to the CDN. upload_asset ingests an existing fal-hosted media URL into the account's Assets library with native type/collection/tags/caption. These are different operations and approvals. Browse before altering a collection, tag or character; inspect native IDs, nullable fields and current ownership.

Private media access

Read the target file ACL before explicitly changing it. set_storage_file_acl and update_storage_settings can replace policies: send the full desired native configuration because omitted/null settings can clear previous choices. Native signing creates access authority even for an ACL-restricted file; save it only to a chosen new private file and share it only when requested.

fal-ai-cli get-job-status --model-id fal-ai/flux/dev --request-id YOUR_REQUEST_ID --account work --agent
fal-ai-cli get-job-result --model-id fal-ai/flux/dev --request-id YOUR_REQUEST_ID --account work --agent
fal-ai-cli list-assets --help
fal-ai-cli schema update-storage-settings

Exact reviewed generation batches and pagination

preview_generation_batch reads current model metadata/schema for every task and native unit quotes, validates all inputs and creates a canonical SHA-256. It binds ordered exact inputs, model IDs, lifecycle/store-IO settings, selected profile label, current input-schema hashes, native unit quotes and the packaged API snapshot. It performs no paid generation or file write.

submit_generation_batch requires explicit confirmation and the matching hash. It repeats all preflight reads before any paid POST; schema/price/profile/order/input drift refuses the batch. It then queues sequentially and stops at first failure with known request IDs, failed index and unattempted indices. Earlier requests may still execute/spend credits; the failed request may have an unknown outcome. There is no rollback, cancellation, retry, implicit continuation or final cost reservation.

One to ten jobs is a request-count bound, not an output/price ceiling. Unit quotes are not resolution/duration/output-adjusted final cost, a live account-owner check or cryptographic proof of human approval. Profile labels can retain the same name after a key change. Review actual pricing and credits separately.

Each list task returns one native cursor page; keep next_cursor with the same filters/account, then deliberately request the next page. The model page has an explicit local limit 1–100; the provider may return less according to expansion. No automatic all-pages loop or full-backup claim.

fal-ai-cli preview-generation-batch --tasks '{"model_id":"fal-ai/flux/dev","input":{"prompt":"Approved product image"}}' --account work --agent
fal-ai-cli submit-generation-batch --tasks '{"model_id":"fal-ai/flux/dev","input":{"prompt":"Approved product image"}}' --account work --review-sha256 YOUR_REVIEW_SHA256 --confirm --agent

Every fal.ai tool

Actual discovery exposes 66 tools: 32 reads and 34 confirmed operations. Fifty-three selected native platform operations and thirteen helpers share handlers. All nine legacy tool names remain with deliberate 2.0 breaking behavior/input corrections. Every native argument follows below.

Models

search_models
What it does
Unified endpoint for discovering model endpoints.
Kind
Read/helper
get_pricing
What it does
Returns unit pricing for requested endpoint IDs.
Kind
Read/helper
estimate_pricing
What it does
Computes cost estimates using one of two methods: **1.
Kind
Read/helper
get_usage
What it does
Returns paginated usage records for your workspace with filters for endpoint, user, date range, and auth method.
Kind
Read/helper
get_analytics
What it does
Time-bucketed metrics per model endpoint, including request counts, success/error rates, and latency percentiles.
Kind
Read/helper
get_billing_events
What it does
Returns paginated individual billing event records with filters for endpoint and date range.
Kind
Read/helper
delete_request_payloads
What it does
Deletes the IO payloads and associated CDN output files for a specific request.
Kind
Confirmed operation
list_requests_by_endpoint
What it does
Lists requests for one or more endpoints (same endpoint_id style as usage/explore: comma-separated or repeated query params, up to 50 IDs).
Kind
Read/helper
search_requests
What it does
Search, filter, and browse your request history.
Kind
Read/helper

Workflows

list_workflows
What it does
List workflows for the authenticated user with optional search and filtering.
Kind
Read/helper
create_workflow
What it does
Create a new workflow owned by the authenticated user.
Kind
Confirmed operation
get_workflow
What it does
Get detailed information about a specific workflow, including its full contents/definition.
Kind
Read/helper

Assets

list_assets
What it does
Browse and semantically search fal Assets across all media, uploads, favorites, collections, tags, and character references.
Kind
Read/helper
list_asset_collections
What it does
List asset collections for the authenticated user's fal Assets library.
Kind
Read/helper
create_asset_collection
What it does
Create asset collection for the authenticated user's fal Assets library.
Kind
Confirmed operation
get_asset_collection
What it does
Get asset collection for the authenticated user's fal Assets library.
Kind
Read/helper
update_asset_collection
What it does
Update asset collection for the authenticated user's fal Assets library.
Kind
Confirmed operation
delete_asset_collection
What it does
Delete asset collection for the authenticated user's fal Assets library.
Kind
Confirmed operation
get_asset_collection_hierarchy
What it does
Get the nested subtree rooted at an asset collection, plus its ancestor collections ordered from the top level down to its direct parent.
Kind
Read/helper
favorite_asset_collection
What it does
Favorite an asset collection for the authenticated user's fal Assets library.
Kind
Confirmed operation
unfavorite_asset_collection
What it does
Unfavorite an asset collection for the authenticated user's fal Assets library.
Kind
Confirmed operation
move_asset_collection
What it does
Move a manual asset collection under another collection, or to the top level.
Kind
Confirmed operation
list_asset_collection_assets
What it does
Browse assets in a collection for the authenticated user's fal Assets library.
Kind
Read/helper
add_asset_to_collection
What it does
Add an asset to a manual or character collection.
Kind
Confirmed operation
remove_asset_from_collection
What it does
Remove an asset from a manual or character collection by request ID or vector ID.
Kind
Confirmed operation
list_asset_characters
What it does
List asset characters for the authenticated user's fal Assets library.
Kind
Read/helper
create_asset_character
What it does
Create an asset character for the authenticated user's fal Assets library.
Kind
Confirmed operation
update_asset_character
What it does
Update an asset character for the authenticated user's fal Assets library.
Kind
Confirmed operation
get_asset_character
What it does
Get asset character for the authenticated user's fal Assets library.
Kind
Read/helper
delete_asset_character
What it does
Delete asset character for the authenticated user's fal Assets library.
Kind
Confirmed operation
favorite_asset_character
What it does
Favorite an asset character for the authenticated user's fal Assets library.
Kind
Confirmed operation
unfavorite_asset_character
What it does
Unfavorite an asset character for the authenticated user's fal Assets library.
Kind
Confirmed operation
list_asset_tags
What it does
List asset tags for the authenticated user's fal Assets library.
Kind
Read/helper
create_asset_tag
What it does
Create asset tag for the authenticated user's fal Assets library.
Kind
Confirmed operation
set_asset_tags_for_asset
What it does
Set tags for an asset.
Kind
Confirmed operation
update_asset_tag
What it does
Update asset tag for the authenticated user's fal Assets library.
Kind
Confirmed operation
delete_asset_tag
What it does
Delete asset tag for the authenticated user's fal Assets library.
Kind
Confirmed operation
upload_asset
What it does
Upload asset for the authenticated user's fal Assets library.
Kind
Confirmed operation
get_asset
What it does
Get an asset document by vector ID from the authenticated user's fal Assets library.
Kind
Read/helper
get_asset_lineage
What it does
Get the derivation lineage of an asset by asset ID: the inputs it was generated from, the generation requests along the way, and any referenced characters, traversed recursively up to depth levels.
Kind
Read/helper
favorite_asset
What it does
Favorite an asset.
Kind
Confirmed operation
unfavorite_asset
What it does
Unfavorite an asset by request ID or vector ID.
Kind
Confirmed operation
list_asset_tags_for_asset
What it does
List tags for an asset by vector ID.
Kind
Read/helper
assign_asset_tag
What it does
Assign a tag to an asset.
Kind
Confirmed operation
unassign_asset_tag
What it does
Unassign a tag from an asset by request ID or vector ID.
Kind
Confirmed operation

Storage

get_storage_file_acl
What it does
Returns the Access Control List currently applied to a fal CDN file.
Kind
Read/helper
set_storage_file_acl
What it does
Replaces the Access Control List of a fal CDN file.
Kind
Confirmed operation
sign_storage_file_url
What it does
Creates a signed URL that grants temporary access to a fal CDN file, regardless of its ACL.
Kind
Confirmed operation
get_storage_settings
What it does
Returns the account-level storage lifecycle settings applied to newly uploaded fal CDN files: - expiration_duration_seconds: how long files live before being automatically deleted (null disables auto-expiration).
Kind
Read/helper
update_storage_settings
What it does
Replaces the account-level storage lifecycle settings applied to newly uploaded fal CDN files.
Kind
Confirmed operation

Account

get_account_billing
What it does
Returns billing information for the authenticated account.
Kind
Read/helper

Organization

get_organization_teams
What it does
Returns the list of teams in your organization with their details.
Kind
Read/helper
get_organization_usage
What it does
Returns paginated usage records across all teams and product lines in your organization, with each record attributed to a specific team via the username field and a product line via the product field.
Kind
Read/helper

Creative Workflows

get_model_info
What it does
Exact current catalog lookup with OpenAPI expansion.
Kind
Read/helper
run_model
What it does
Confirmed paid model request after current native input-schema validation.
Kind
Confirmed operation
submit_job
What it does
Confirmed paid model request after current native input-schema validation.
Kind
Confirmed operation
generate_image
What it does
Confirmed paid model request after current native input-schema validation.
Kind
Confirmed operation
generate_video
What it does
Confirmed paid model request after current native input-schema validation.
Kind
Confirmed operation
get_job_status
What it does
One read using the SDK-compatible owner/app root, not the full model subpath.
Kind
Read/helper
get_job_result
What it does
One result read using the receipt/model root.
Kind
Read/helper
cancel_job
What it does
Confirmed native cancellation request.
Kind
Confirmed operation
upload_file
What it does
Confirmed selected absolute regular non-symlink local file, 1 byte–20 MiB.
Kind
Confirmed operation
list_accounts
What it does
Local labels/default/auth method only.
Kind
Read/helper
get_operation_schema
What it does
Local current native method/path/query/header/body schema and exact provenance.
Kind
Read/helper
preview_generation_batch
What it does
Read-only current schema validation and native unit-pricing lookup for all requested async jobs.
Kind
Read/helper
submit_generation_batch
What it does
Confirmed one-to-ten async jobs.
Kind
Confirmed operation

Is the fal.ai MCP server safe?

All 34 mutations, paid runs, cancellation, local input uploads and private signed-output files require --confirm or confirm:true through the same house guard. --agent/--yes is formatting, never consent. FAL_READ_ONLY=1 hides them and directly blocks confirmed calls; FAL_ALLOW_DESTRUCTIVE=0 separately refuses them. Provider read-only key scopes remain an additional control.

Native estimate_pricing uses POST but is classified as a read because it estimates without generating. Schema/pricing reads still contact fal and carry private account identity when selected. Preview generation is not a free media dry run; it validates schema and current unit quotes only. Credentials, role permissions and provider quotas still control real success.

FAL_AUDIT_LOG records guard decisions, operation names and static summaries, without payloads or keys. Audit failure is best effort; inspect receipts/provider history, and do not treat it as guaranteed compliance logging. Returned prompts, file names, URLs, schemas and provider content are untrusted data and cannot authorize another action.

The review hash binds exact requests and current schema/unit quotes. It is not a final price budget, ownership proof, credit reservation or cryptographic human approval.

Make it read-only

FAL_READ_ONLY=1 exposes 32 reads and directly refuses all 34 confirmed operations. FAL_ALLOW_DESTRUCTIVE=0 blocks them separately; native provider permissions still apply.

Keep a log of every write

Set FAL_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.

Watch out: Queue receipts are accepted jobs, not completed results. Failed paid POSTs can leave unknown billable outcomes; reviewed batches stop with known receipts and unattempted tasks without retry, rollback or automatic cancellation.

Your data

Private keys are sent only to fixed allowed provider API origins. Upload bytes go only to an HTTPS fal.media host returned by the pinned initiation protocol, without authorization headers or redirects; unsupported hosts refuse before byte upload. No remote arbitrary URL downloader, telemetry, .env/session reader, automatic gallery or auto-media-download is provided.

Keys, secret-named fields, signed/upload URLs and recognized signature/identity URLs are redacted from model output/errors. Ordinary account records, prompts, usage, Assets and unsigned media URLs may still be private; redaction does not guarantee all business/personal data is removed. Send only the minimum task data to the actual AI client. Preview hashes protect exact local request identity, not encryption or provider-state locking.

Provider payload retention and CDN file lifecycle/access are separate. Default store_io:false sends X-Fal-Store-IO:0 for generation; explicit lifecycle controls media expiry/ACL. Signed URL JSON files, uploaded bytes, provider jobs and your own audit logs persist independently of npm uninstallation. Keep private files/parent directories and Windows ACLs restricted.

Several private accounts

Use FAL_ACCOUNTS only in private user/runtime settings. Each entry has a unique name plus api_key or token_file; FAL_DEFAULT_ACCOUNT and --account select an exact entry. Selected profiles never inherit the global key or another account. A token file overrides only that profile and is owner-private/regular/non-symlink; credentials cache until restart.

list_accounts returns labels/default/auth type only. It does not contact fal or prove which owner a key belongs to. API-key account selection is separate from the official OAuth Active MCP account and website account switcher. Keep the account label with every queue receipt. No tenant/account filter changes which key is authenticated.

fal-ai-cli list-accounts --agent
fal-ai-cli get-usage --account work --help

fal.ai MCP server settings

Keep keys, token files and profile JSON outside repositories. GUI/remote runtimes have separate environment and filesystems; no automatic .env, session or genmedia-config loader.

FAL_KEY
Default
Credentials
What it does
Private account API key; ignored as a fallback when named profiles are explicitly configured.
FAL_TOKEN_FILE
Default
Credentials
What it does
Absolute owner-private regular token-only file; overrides selected direct key.
FAL_ACCOUNTS
Default
Credentials
What it does
Private unique {name,api_key,token_file} account profiles.
FAL_DEFAULT_ACCOUNT
Default
Credentials
What it does
Exact selected profile label; provider owner is not inferred.
FAL_READ_ONLY
Default
Safety
What it does
1/true hides and directly refuses every non-read task.
FAL_ALLOW_DESTRUCTIVE
Default
Safety
What it does
0/false refuses confirmed paid/mutating/file-write tasks.
FAL_AUDIT_LOG
Default
Safety
What it does
Optional best-effort append-only guard decision file, no payload/key.
FAL_REQUEST_TIMEOUT_MS
Default
Tuning
What it does
Default 30000; 100–300000 permitted; no auto retry.
FAL_MIN_REQUEST_INTERVAL_MS
Default
Tuning
What it does
Default 350; 0–10000 permitted; process-wide request spacing, not a provider/cross-process limiter.

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
Missing/invalid profilesCheck exact unique private labels and key/file settings.
Public catalog works onlyModel metadata can be anonymous; verify permissions for the actual private operation.
401/403Check intended key, account role and native operation scopes.
429Respect provider concurrency/quota guidance; no automatic retry.
Model schema unsupportedFails closed before paid work; no guessed fallback.
Review mismatchPreview the exact changed inputs, order, account label, schema and unit quotes again.
Unknown generation outcomeInspect history before explicitly requesting another paid submission.
Result not readyRead status once; preserve the existing job ID.
Upload refusedAbsolute regular non-symlink file, 1 byte–20 MiB, correct MIME.
Existing signed-output fileChoose a new private path; no overwrite.

If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.

Every tool argument and native input

search_models

Unified endpoint for discovering model endpoints. Supports three usage modes: 1. List Mode (no parameters): Paginated list of all available model endpoints with minimal metadata. 2. Find Mode (endpoint_id parameter): Retrieve specific model endpoint(s) by ID. Supports single or multiple IDs. 3. Search Mode (search parameters): Filter models by free-text query, category, or status. Expansion: Use expand to include additional data in each model object: - openapi-3.0 : full OpenAPI 3.0 schema in the openapi field - enterprise_status : enterprise readiness status (ready or pending) in the enterprise_status field Examples of endpoint_id values: - fal-ai/flux/dev - fal-ai/wan/v2.2-a14b/text-to-video - fal-ai/minimax/video-01/image-to-video - fal-ai/hunyuan3d-v21 See fal.ai Model APIs for more details. Authentication: Optional. Providing an API key grants higher rate limits. Common Use Cases: - Browse available models for integration - Retrieve metadata for specific endpoints - Search for models by category or keywords - Get OpenAPI schemas for code generation - Build model selection interfaces

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
endpoint_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Endpoint ID(s) to retrieve (e.g., 'fal-ai/flux/dev'). Can be a single value or multiple values (1-50 models). When combined with search params, narrows results to these IDs. Use array syntax: ?endpoint_id=model1&endpoint_id=model2
q
Required
No; body/guard requirements still apply
Type
string
Details
Free-text search query to filter models by name, description, or category
category
Required
No; body/guard requirements still apply
Type
string
Details
Filter by category (e.g., 'text-to-image', 'image-to-video', 'training')
status
Required
No; body/guard requirements still apply
Type
string
Details
Filter models by status - omit to include all statuses enum: ["active", "deprecated"].
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Fields to expand in the response. Supported values: 'openapi-3.0' (includes full OpenAPI 3.0 schema in 'openapi' field), 'enterprise_status' (includes enterprise readiness status)
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

get_pricing

Returns unit pricing for requested endpoint IDs. Most models use output-based pricing (e.g., per image/video with proportional adjustments for resolution/length). Some models use GPU-based pricing depending on architecture. Values are expressed per model's billing unit in a given currency. Authentication: Required. Users must provide a valid API key. Custom pricing or discounts may be applied based on account status. Common Use Cases: - Display pricing in user interfaces - Compare pricing across different models - Build cost estimation tools - Check current billing rates See fal.ai pricing for more details.

Policy: Read/helper; no explicit mutation approval.

endpoint_id
Required
Yes
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

estimate_pricing

Computes cost estimates using one of two methods: 1. Historical API Price (historical_api_price): - Based on historical pricing per API call from past usage patterns - Takes call_quantity (number of API calls) per endpoint - Useful for estimating based on actual historical usage patterns - Example: "How much will 100 calls to flux/dev cost?" 2. Unit Price (unit_price): - Based on unit price × expected billing units from pricing service - Takes unit_quantity (number of billing units like images/videos) per endpoint - Useful when you know the expected output quantity - Example: "How much will 50 images from flux/dev cost?" Authentication: Required. Users must provide a valid API key. Custom pricing or discounts may be applied based on account status. Common Use Cases: - Pre-calculate costs for batch operations - Display cost estimates in user interfaces - Budget planning and cost optimization See fal.ai pricing for more details.

Policy: Read/helper; no explicit mutation approval.

account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
payload
Required
No; body/guard requirements still apply
Type
JSON
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

input.payload oneOf branch 1

estimate_type
Required
Yes
Type
string
Details
Estimate type: historical API pricing based on past usage patterns enum: ["historical_api_price"].
endpoints
Required
Yes
Type
object
Details
Map of endpoint IDs to call quantities

input.payload.oneOf1.endpoints

input.payload.oneOf1.endpoints.{key}

call_quantity
Required
Yes
Type
integer
Details
Number of API calls to estimate (regardless of units per call) minimum: 1.

input.payload oneOf branch 2

estimate_type
Required
Yes
Type
string
Details
Estimate type: unit price calculation based on billing units enum: ["unit_price"].
endpoints
Required
Yes
Type
object
Details
Map of endpoint IDs to unit quantities

input.payload.oneOf2.endpoints

input.payload.oneOf2.endpoints.{key}

unit_quantity
Required
Yes
Type
number
Details
Number of billing units expected (e.g., number of images, videos, etc.) minimum: 1e-06.

get_usage

Returns paginated usage records for your workspace with filters for endpoint, user, date range, and auth method. Each item includes the billed unit quantity, the pre-discount unit price and cost_subtotal, any percentage discount applied, and the final cost_total (cost_subtotal − cost_discount). Key Features: - Usage data for all endpoints or filtered by specific endpoint(s) - Flexible date range filtering - User-specific usage tracking - Detailed usage line items with unit quantity, price, and discount breakdown - Paginated results for large datasets Common Use Cases: - Generate usage reports for all endpoints or specific models - Track usage patterns - Monitor endpoint usage across different auth methods - Build usage dashboards and visualizations See fal.ai docs for more details.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
start
Required
No; body/guard requirements still apply
Type
JSON
Details
Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.
end
Required
No; body/guard requirements still apply
Type
JSON
Details
End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.
timezone
Required
No; body/guard requirements still apply
Type
string
Details
Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed. default: "UTC".
timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d). enum: ["minute", "hour", "day", "week", "month"].
bound_to_timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided. enum: ["true", "false"]. default: "true".
endpoint_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
api_key_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2
login_username
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by team member login username(s) (nickname). Accepts 1-50 usernames. Supports comma-separated values: ?login_username=alice,bob or array syntax: ?login_username=alice&login_username=bob
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Data to include in the response. Use 'time_series' for time-bucketed data, 'summary' for aggregate statistics, 'auth_method' to include a formatted authentication method label, and 'auth_method_structured' to include a machine-readable auth method object (detail, api_key_id, login_username). At least one of 'time_series' or 'summary' is required. default: ["time_series"].
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.start

input.start anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.start anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.end

input.end anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.end anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.api_key_id

input.api_key_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.api_key_id anyOf branch 2

input.api_key_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.login_username

input.login_username anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.login_username anyOf branch 2

input.login_username.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

get_analytics

Time-bucketed metrics per model endpoint, including request counts, success/error rates, and latency percentiles. prepare_duration reflects queue/prepare time before execution; duration is request execution time. Use with the Queue/Webhooks flow to monitor SLAs. Metric Selection: You must specify which metrics to include using the expand query parameter. Only requested metrics will be populated in the response, allowing you to optimize query performance and data transfer. Available Metrics: The expand parameter accepts these values, grouped by category: Volume - request_count: Total number of requests in the time bucket - success_count: Successful requests (2xx responses) - user_error_count: User errors (4xx responses) - error_count: Server errors (5xx responses) Error type breakdown - startup_error_count: Startup errors (startup timeout, scheduling failure) - connection_error_count: Connection errors (timeout, disconnected, refused) - timeout_error_count: Request timeout errors - runtime_error_count: Runtime errors (internal error, server error) Queue / prepare latency - p50_prepare_duration, p75_prepare_duration, p90_prepare_duration, p95_prepare_duration, p99_prepare_duration: Time from request submission until execution starts Request execution latency - p25_duration, p50_duration, p75_duration, p90_duration, p95_duration, p99_duration: Time spent processing the request Cold boot - cold_boot_count: Requests with cold boot (startup > 1s) - p50_cold_boot_duration, p75_cold_boot_duration, p90_cold_boot_duration: Cold boot duration percentiles Billing - total_billable_duration: Aggregate billed execution time Key Features: - Selective metric inclusion via expand parameter - Performance metrics (latency percentiles, duration stats) - Reliability metrics (success/error rates, request counts) - Error type breakdown (startup, connection, timeout, runtime) - Cold boot metrics (count, latency percentiles) - Billing duration tracking - Time-bucketed data for trend analysis - Single or multi-model analytics - Flexible date range and timeframe options Common Use Cases: - Monitor model performance and reliability - Generate performance dashboards - Analyze latency trends and patterns - Track error rates and success metrics See Queue API docs for more details.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
start
Required
No; body/guard requirements still apply
Type
JSON
Details
Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.
end
Required
No; body/guard requirements still apply
Type
JSON
Details
End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.
timezone
Required
No; body/guard requirements still apply
Type
string
Details
Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed. default: "UTC".
timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d). enum: ["minute", "hour", "day", "week", "month"].
bound_to_timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided. enum: ["true", "false"]. default: "true".
endpoint_id
Required
Yes
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Data and metrics to include in the response. Use 'time_series' for time-bucketed data, metric names for specific metrics in time series, and 'summary' for aggregate statistics. At least one of 'time_series' or 'summary' and at least one metric are required. default: ["time_series", "request_count"].
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.start

input.start anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.start anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.end

input.end anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.end anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

get_billing_events

Returns paginated individual billing event records with filters for endpoint and date range. Each record includes the request ID, timestamp, endpoint, output units billed, and a cost breakdown in USD (cost_subtotal, cost_discount, cost_total; cost_estimate_nano_usd carries cost_total in nano USD). Key Features: - Individual billing event records for each API request - Per-request cost breakdown before and after discounts - Flexible date range filtering - Optional endpoint filtering - Cursor-based pagination for efficient large dataset queries - Limited to 10000 records per page for performance - Date range capped at 90 days per request Common Use Cases: - Audit individual billing events - Track request patterns and volumes - Debug specific requests by ID - Monitor billing unit consumption per request See fal.ai docs for more details.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
start
Required
No; body/guard requirements still apply
Type
JSON
Details
Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.
end
Required
No; body/guard requirements still apply
Type
JSON
Details
End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.
endpoint_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
request_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific request ID(s). Accepts 1-50 request IDs. Supports comma-separated values: ?request_id=req1,req2 or array syntax: ?request_id=req1&request_id=req2
api_key_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2
login_username
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by team member login username(s) (nickname). Accepts 1-50 usernames. Supports comma-separated values: ?login_username=alice,bob or array syntax: ?login_username=alice&login_username=bob
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Data to include in the response. Use 'auth_method' for a formatted authentication method label, and 'auth_method_structured' for a machine-readable auth method object (detail, api_key_id, login_username).
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.start

input.start anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.start anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.end

input.end anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.end anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.request_id

input.request_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.request_id anyOf branch 2

input.request_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.api_key_id

input.api_key_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.api_key_id anyOf branch 2

input.api_key_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.login_username

input.login_username anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.login_username anyOf branch 2

input.login_username.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

delete_request_payloads

Deletes the IO payloads and associated CDN output files for a specific request. Important: - Only output CDN files are deleted (input files may be used by other requests) - This action is irreversible - Requires authentication with an admin API key What gets deleted: - Request input/output payload data - CDN-hosted output files (images, videos, etc.) What is NOT deleted: - Input CDN files (may be referenced by other requests) Response: - Returns deletion status for each CDN file - Each result includes the file link and any error that occurred Idempotency: - Optional Idempotency-Key header prevents duplicate deletions on retries - Responses cached for 10 minutes per unique key See fal.ai docs for more details about request payloads.

Policy: Confirmed operation; read-only hides and directly refuses it.

request_id
Required
Yes
Type
string
Details
Unique identifier for the request (UUID format) format: "uuid".
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

list_requests_by_endpoint

Lists requests for one or more endpoints (same endpoint_id style as usage/explore: comma-separated or repeated query params, up to 50 IDs). Authentication: Requires API key (user or enterprise). Filters: - Time range via start / end. If start is omitted, defaults to the last 24 hours : unless request_id is provided, in which case the default start bound is widened to 90 days. - Status (success, error, user_error) - Request ID - Pagination via cursor/limit (limit defaults to 50, max 100) Sorting: - By end time (default) or duration Expansions: - Include payloads by adding expand=payloads

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Number of items to return per page (max 100) minimum: 1. maximum: 100. default: 50.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor encoding the page number
endpoint_id
Required
Yes
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
start
Required
No; body/guard requirements still apply
Type
JSON
Details
Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.
end
Required
No; body/guard requirements still apply
Type
JSON
Details
End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.
status
Required
No; body/guard requirements still apply
Type
string
Details
Filter by request status enum: ["success", "error", "user_error"].
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Filter by specific request ID format: "uuid".
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Fields to expand in the response. Use payloads to include input and output payloads.
sort_by
Required
No; body/guard requirements still apply
Type
string
Details
Sort results by end time or duration enum: ["ended_at", "duration"]. default: "ended_at".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.start

input.start anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.start anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.end

input.end anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.end anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

search_requests

Search, filter, and browse your request history. Supports three modes: 1. Semantic Search (query, image_url, or video_url parameter): Find visually or conceptually similar results using AI embeddings. Provide a text query for text-to-image search, an image URL for image-to-image similarity search, or a video URL for video-to-image similarity search. 2. Filtered Browse (no query, image_url, or video_url): Browse request history with hard filters. Returns results ordered by creation date (newest first). 3. Semantic + Filters (search params AND filter params): Combine semantic search with hard filters. Filters narrow the candidate set before ranking by similarity. Filter Options: - endpoint_id: Filter by one or more fal endpoints (comma-separated or repeated, up to 50 IDs) - exclude_api_requests / only_api_requests: Filter by request source Examples: - Semantic text search: ?query=sunset+landscape - Image similarity: ?image_url=https://...&min_similarity=0.5 - Filtered search: ?query=portrait&endpoint_id=fal-ai/flux/dev - Browse across multiple endpoints: ?endpoint_id=fal-ai/flux/dev,fal-ai/flux/schnell

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
query
Required
No; body/guard requirements still apply
Type
string
Details
Text search query for semantic search. Mutually exclusive with image_url and video_url.
image_url
Required
No; body/guard requirements still apply
Type
string
Details
Image URL for similarity search. Mutually exclusive with query and video_url.
video_url
Required
No; body/guard requirements still apply
Type
string
Details
Video URL for similarity search. Mutually exclusive with query and image_url.
endpoint_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by one or more fal endpoints to scope request history. Accepts comma-separated or repeated values (1-50 IDs).
endpoint
Required
No; body/guard requirements still apply
Type
string
Details
Deprecated: use endpoint_id. Single-endpoint filter retained for backward compatibility. If both are provided, endpoint_id wins. Deprecated native compatibility field.
exclude_api_requests
Required
No; body/guard requirements still apply
Type
boolean
Details
Exclude requests made via API keys (only show playground/UI requests). Mutually exclusive with only_api_requests.
only_api_requests
Required
No; body/guard requirements still apply
Type
boolean
Details
Only include requests made via API keys. Mutually exclusive with exclude_api_requests.
min_similarity
Required
No; body/guard requirements still apply
Type
['number', 'null']
Details
Minimum similarity score (0-1) for semantic search results. Only applies when query or image_url is provided. minimum: 0. maximum: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

list_workflows

List workflows for the authenticated user with optional search and filtering. Features: - Paginated results with cursor-based pagination - Search by workflow name or title - Filter by model endpoints used in the workflow Authentication: Required. Returns only workflows owned by the authenticated user. Common Use Cases: - Display user's workflow library - Search for specific workflows - Find workflows using particular models

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
search
Required
No; body/guard requirements still apply
Type
string
Details
Search by workflow name or title
used_endpoint_ids
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by model endpoint IDs used in the workflow. Can be a single value or comma-separated values.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.used_endpoint_ids

input.used_endpoint_ids anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.used_endpoint_ids anyOf branch 2

input.used_endpoint_ids.anyOf2[]

Native JSON value; inspect the full schema for validation.

create_workflow

Create a new workflow owned by the authenticated user. Authentication: Required. Common Use Cases: - Save a newly built workflow - Programmatically provision workflows Note: Workflow names must be unique within your namespace. Creating a workflow with a name you already use returns a 400 validation error.

Policy: Confirmed operation; read-only hides and directly refuses it.

name
Required
No; body/guard requirements still apply
Type
string
Details
Unique workflow name/slug within the user's namespace maxLength: 128. pattern: "^[a-zA-Z0-9_-]+$".
title
Required
No; body/guard requirements still apply
Type
string
Details
Human-readable workflow title minLength: 1. maxLength: 256.
contents
Required
No; body/guard requirements still apply
Type
object
Details
The workflow definition/configuration object
is_public
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether the workflow is publicly visible default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.contents

name
Required
Yes
Type
string
Details
Internal name of the workflow definition
version
Required
Yes
Type
string
Details
Workflow definition format version
nodes
Required
Yes
Type
object
Details
Workflow nodes keyed by node id
output
Required
Yes
Type
object
Details
Output field mappings keyed by output name
schema
Required
Yes
Type
object
Details
Input/output schema for the workflow
metadata
Required
No; body/guard requirements still apply
Type
object
Details
Optional workflow metadata

input.contents.nodes

input.contents.nodes.{key}

input.contents.nodes.{key}.{key}

Native JSON value; inspect the full schema for validation.

input.contents.output

input.contents.output.{key}

Native JSON value; inspect the full schema for validation.

input.contents.schema

input
Required
Yes
Type
object
Details
Input fields schema
output
Required
Yes
Type
object
Details
Output fields schema

input.contents.schema.input

input.contents.schema.input.{key}

Native JSON value; inspect the full schema for validation.

input.contents.schema.output

input.contents.schema.output.{key}

Native JSON value; inspect the full schema for validation.

input.contents.metadata

input.contents.metadata.{key}

Native JSON value; inspect the full schema for validation.

input.payload

name
Required
Yes
Type
string
Details
Unique workflow name/slug within the user's namespace maxLength: 128. pattern: "^[a-zA-Z0-9_-]+$".
title
Required
Yes
Type
string
Details
Human-readable workflow title minLength: 1. maxLength: 256.
contents
Required
Yes
Type
object
Details
The workflow definition/configuration object
is_public
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether the workflow is publicly visible default: false.

input.payload.contents

name
Required
Yes
Type
string
Details
Internal name of the workflow definition
version
Required
Yes
Type
string
Details
Workflow definition format version
nodes
Required
Yes
Type
object
Details
Workflow nodes keyed by node id
output
Required
Yes
Type
object
Details
Output field mappings keyed by output name
schema
Required
Yes
Type
object
Details
Input/output schema for the workflow
metadata
Required
No; body/guard requirements still apply
Type
object
Details
Optional workflow metadata

input.payload.contents.nodes

input.payload.contents.nodes.{key}

input.payload.contents.nodes.{key}.{key}

Native JSON value; inspect the full schema for validation.

input.payload.contents.output

input.payload.contents.output.{key}

Native JSON value; inspect the full schema for validation.

input.payload.contents.schema

input
Required
Yes
Type
object
Details
Input fields schema
output
Required
Yes
Type
object
Details
Output fields schema

input.payload.contents.schema.input

input.payload.contents.schema.input.{key}

Native JSON value; inspect the full schema for validation.

input.payload.contents.schema.output

input.payload.contents.schema.output.{key}

Native JSON value; inspect the full schema for validation.

input.payload.contents.metadata

input.payload.contents.metadata.{key}

Native JSON value; inspect the full schema for validation.

get_workflow

Get detailed information about a specific workflow, including its full contents/definition. Authentication: Required. Common Use Cases: - Load a workflow for editing - View workflow configuration - Export workflow definition

Policy: Read/helper; no explicit mutation approval.

username
Required
Yes
Type
string
Details
The username of the workflow owner maxLength: 128. pattern: "^[a-zA-Z0-9_-]+$".
workflow_name
Required
Yes
Type
string
Details
The workflow name/slug maxLength: 128. pattern: "^[a-zA-Z0-9_-]+$".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

list_assets

Browse and semantically search fal Assets across all media, uploads, favorites, collections, tags, and character references.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
q
Required
No; body/guard requirements still apply
Type
string
Details
Text query for hybrid semantic search
search_image_url
Required
No; body/guard requirements still apply
Type
string
Details
fal-hosted image URL to use for semantic image search format: "uri".
search_video_url
Required
No; body/guard requirements still apply
Type
string
Details
fal-hosted video URL to use for semantic video search format: "uri".
media_type
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Filter by one or more media types default: [].
source
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Filter by one or more indexed sources default: [].
section
Required
No; body/guard requirements still apply
Type
string
Details
Asset library section to browse enum: ["all-media", "uploads", "favorites", "generated"]. default: "all-media".
collection_id
Required
No; body/guard requirements still apply
Type
string
Details
Collection scope to browse
character_identifier
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Character identifiers to use as @mention semantic filters default: [].
tag_id
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Tag IDs to filter by default: [].
tag_mode
Required
No; body/guard requirements still apply
Type
string
Details
Whether tag filters match any tag or all tags enum: ["any", "all"]. default: "any".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.media_type

input.media_type[]

Asset media type

input.source

input.source[]

Indexed asset source

input.character_identifier

input.character_identifier[]

Native JSON value; inspect the full schema for validation.

input.tag_id

input.tag_id[]

Native JSON value; inspect the full schema for validation.

list_asset_collections

List asset collections for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of collections to return minimum: 1. maximum: 100. default: 50.
offset
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Number of collections to skip minimum: 0. default: 0.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

create_asset_collection

Create asset collection for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
parent_collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional parent collection ID to nest this collection under (manual collections only). Omit or null to create a top-level collection. minLength: 1.
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

name
Required
Yes
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
parent_collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional parent collection ID to nest this collection under (manual collections only). Omit or null to create a top-level collection. minLength: 1.
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL

get_asset_collection

Get asset collection for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

update_asset_collection

Update asset collection for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

name
Required
No; body/guard requirements still apply
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL

delete_asset_collection

Delete asset collection for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

get_asset_collection_hierarchy

Get the nested subtree rooted at an asset collection, plus its ancestor collections ordered from the top level down to its direct parent.

Policy: Read/helper; no explicit mutation approval.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

favorite_asset_collection

Favorite an asset collection for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

unfavorite_asset_collection

Unfavorite an asset collection for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

move_asset_collection

Move a manual asset collection under another collection, or to the top level. Only manual collections can be moved or act as folders; nesting is limited to 5 levels deep and cannot create a cycle.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
parent_collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Parent collection ID to move this collection under, or null to move it to the top level. Must be a manual collection; nesting is limited to 5 levels and cannot create a cycle. minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

parent_collection_id
Required
Yes
Type
['string', 'null']
Details
Parent collection ID to move this collection under, or null to move it to the top level. Must be a manual collection; nesting is limited to 5 levels and cannot create a cycle. minLength: 1.

list_asset_collection_assets

Browse assets in a collection for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
q
Required
No; body/guard requirements still apply
Type
string
Details
Text query for hybrid semantic search
search_image_url
Required
No; body/guard requirements still apply
Type
string
Details
fal-hosted image URL to use for semantic image search format: "uri".
search_video_url
Required
No; body/guard requirements still apply
Type
string
Details
fal-hosted video URL to use for semantic video search format: "uri".
media_type
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Filter by one or more media types default: [].
source
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Filter by one or more indexed sources default: [].
section
Required
No; body/guard requirements still apply
Type
string
Details
Asset library section to browse enum: ["all-media", "uploads", "favorites", "generated"]. default: "all-media".
character_identifier
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Character identifiers to use as @mention semantic filters default: [].
tag_id
Required
No; body/guard requirements still apply
Type
['array', 'null']
Details
Tag IDs to filter by default: [].
tag_mode
Required
No; body/guard requirements still apply
Type
string
Details
Whether tag filters match any tag or all tags enum: ["any", "all"]. default: "any".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.media_type

input.media_type[]

Asset media type

input.source

input.source[]

Indexed asset source

input.character_identifier

input.character_identifier[]

Native JSON value; inspect the full schema for validation.

input.tag_id

input.tag_id[]

Native JSON value; inspect the full schema for validation.

add_asset_to_collection

Add an asset to a manual or character collection. Provide a request ID or vector ID; unresolved references are materialized before local collection state is added. For character collections, the asset is added by applying the character tag.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

remove_asset_from_collection

Remove an asset from a manual or character collection by request ID or vector ID.

Policy: Confirmed operation; read-only hides and directly refuses it.

collection_id
Required
Yes
Type
string
Details
Collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

list_asset_characters

List asset characters for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of collections to return minimum: 1. maximum: 100. default: 50.
offset
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Number of collections to skip minimum: 0. default: 0.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

create_asset_character

Create an asset character for the authenticated user's fal Assets library. Prefer vector IDs or request IDs in reference_images for existing fal-generated assets; use fal-hosted image URLs only for standalone images. Unresolved ID references are materialized before character state is added.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Character display name minLength: 1. maxLength: 255.
identifier
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional @mention identifier for the character maxLength: 64.
description
Required
No; body/guard requirements still apply
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
No; body/guard requirements still apply
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.reference_images

input.reference_images[]

Native JSON value; inspect the full schema for validation.

input.payload

name
Required
Yes
Type
string
Details
Character display name minLength: 1. maxLength: 255.
identifier
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional @mention identifier for the character maxLength: 64.
description
Required
Yes
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
Yes
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".

input.payload.reference_images

input.payload.reference_images[]

Native JSON value; inspect the full schema for validation.

update_asset_character

Update an asset character for the authenticated user's fal Assets library. Prefer vector IDs or request IDs in reference_images for existing fal-generated assets; use fal-hosted image URLs only for standalone images. Unresolved ID references are materialized before character state is added.

Policy: Confirmed operation; read-only hides and directly refuses it.

character_id
Required
Yes
Type
string
Details
Character collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Character display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
No; body/guard requirements still apply
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.reference_images

input.reference_images[]

Native JSON value; inspect the full schema for validation.

input.payload

name
Required
No; body/guard requirements still apply
Type
string
Details
Character display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
No; body/guard requirements still apply
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".

input.payload.reference_images

input.payload.reference_images[]

Native JSON value; inspect the full schema for validation.

get_asset_character

Get asset character for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

character_id
Required
Yes
Type
string
Details
Character collection ID minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

delete_asset_character

Delete asset character for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

character_id
Required
Yes
Type
string
Details
Character collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

favorite_asset_character

Favorite an asset character for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

character_id
Required
Yes
Type
string
Details
Character collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

unfavorite_asset_character

Unfavorite an asset character for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

character_id
Required
Yes
Type
string
Details
Character collection ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

list_asset_tags

List asset tags for the authenticated user's fal Assets library.

Policy: Read/helper; no explicit mutation approval.

account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

create_asset_tag

Create asset tag for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Tag name minLength: 1. maxLength: 50.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

name
Required
Yes
Type
string
Details
Tag name minLength: 1. maxLength: 50.

set_asset_tags_for_asset

Set tags for an asset. Provide a request ID or vector ID; unresolved references are materialized before tag state is added.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
tag_ids
Required
No; body/guard requirements still apply
Type
array
Details
Full replacement set of tag IDs
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.tag_ids

input.tag_ids[]

Native JSON value; inspect the full schema for validation.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
tag_ids
Required
Yes
Type
array
Details
Full replacement set of tag IDs

input.payload.tag_ids

input.payload.tag_ids[]

Native JSON value; inspect the full schema for validation.

update_asset_tag

Update asset tag for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

tag_id
Required
Yes
Type
string
Details
Tag ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
name
Required
No; body/guard requirements still apply
Type
string
Details
Tag name minLength: 1. maxLength: 50.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

name
Required
No; body/guard requirements still apply
Type
string
Details
Tag name minLength: 1. maxLength: 50.

delete_asset_tag

Delete asset tag for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

tag_id
Required
Yes
Type
string
Details
Tag ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.

upload_asset

Upload asset for the authenticated user's fal Assets library.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
url
Required
No; body/guard requirements still apply
Type
string
Details
fal-hosted media URL to ingest into the asset library format: "uri".
type
Required
No; body/guard requirements still apply
Type
string
Details
Media type for the uploaded asset enum: ["image", "video", "audio", "3d"].
prompt
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional caller-provided caption or description to index with the uploaded asset minLength: 1. maxLength: 2000.
collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional manual collection ID to add the uploaded asset to
favorite
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether to favorite the uploaded asset immediately default: false.
tag_ids
Required
No; body/guard requirements still apply
Type
array
Details
Tag IDs to assign to the uploaded asset default: [].
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.tag_ids

input.tag_ids[]

Native JSON value; inspect the full schema for validation.

input.payload

url
Required
Yes
Type
string
Details
fal-hosted media URL to ingest into the asset library format: "uri".
type
Required
Yes
Type
string
Details
Media type for the uploaded asset enum: ["image", "video", "audio", "3d"].
prompt
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional caller-provided caption or description to index with the uploaded asset minLength: 1. maxLength: 2000.
collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional manual collection ID to add the uploaded asset to
favorite
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether to favorite the uploaded asset immediately default: false.
tag_ids
Required
No; body/guard requirements still apply
Type
array
Details
Tag IDs to assign to the uploaded asset default: [].

input.payload.tag_ids

input.payload.tag_ids[]

Native JSON value; inspect the full schema for validation.

get_asset

Get an asset document by vector ID from the authenticated user's fal Assets library. The vector may exist only in Turbopuffer; in that case the response returns the Turbopuffer document with empty local state.

Policy: Read/helper; no explicit mutation approval.

vector_id
Required
Yes
Type
string
Details
Vector ID minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

get_asset_lineage

Get the derivation lineage of an asset by asset ID: the inputs it was generated from, the generation requests along the way, and any referenced characters, traversed recursively up to depth levels. Deleted or expired ancestors stay in the graph flagged as tombstones; inputs that were never captured appear as external inputs.

Policy: Read/helper; no explicit mutation approval.

asset_id
Required
Yes
Type
string
Details
Asset ID minLength: 1.
depth
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum traversal depth (levels of derivation edges) minimum: 1. maximum: 5. default: 5.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

favorite_asset

Favorite an asset. Provide a request ID or vector ID; unresolved references are materialized before favorite state is added.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

unfavorite_asset

Unfavorite an asset by request ID or vector ID.

Policy: Confirmed operation; read-only hides and directly refuses it.

Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

list_asset_tags_for_asset

List tags for an asset by vector ID. Vectors that have not been saved as assets return an empty tag list.

Policy: Read/helper; no explicit mutation approval.

vector_id
Required
Yes
Type
string
Details
Vector ID minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

assign_asset_tag

Assign a tag to an asset. Provide a request ID or vector ID; unresolved references are materialized before tag state is added.

Policy: Confirmed operation; read-only hides and directly refuses it.

tag_id
Required
Yes
Type
string
Details
Tag ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

unassign_asset_tag

Unassign a tag from an asset by request ID or vector ID.

Policy: Confirmed operation; read-only hides and directly refuses it.

tag_id
Required
Yes
Type
string
Details
Tag ID minLength: 1.
Idempotency_Key
Required
No; body/guard requirements still apply
Type
string
Details
Optional idempotency key for safe request retries
request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.payload

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

get_storage_file_acl

Returns the Access Control List currently applied to a fal CDN file. The ACL consists of a default decision (allow, forbid, or hide) plus optional per-user rules that override the default. Rule users are returned as nicknames where possible. Authentication: Required. The API key must have the assets:read permission.

Policy: Read/helper; no explicit mutation approval.

url
Required
Yes
Type
string
Details
Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters. format: "uri".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

set_storage_file_acl

Replaces the Access Control List of a fal CDN file. The ACL consists of a default decision (allow, forbid, or hide) plus optional per-user rules that override the default. Rule users may be specified by nickname or user ID. Setting default to allow with no rules makes the file public; forbid or hide restricts it to the rules you provide. Rules referencing users that do not exist are dropped. The response reflects the ACL actually applied, so verify it contains the rules you sent. Authentication: Required. The API key must have the assets:write permission.

Policy: Confirmed operation; read-only hides and directly refuses it.

url
Required
Yes
Type
string
Details
Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters. format: "uri".
default
Required
No; body/guard requirements still apply
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.rules

input.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

input.payload

default
Required
Yes
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].

input.payload.rules

input.payload.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

sign_storage_file_url

Creates a signed URL that grants temporary access to a fal CDN file, regardless of its ACL. Useful for sharing access-restricted files. The signature is valid for expiration_seconds (up to 7 days). Authentication: Required. The API key must have the assets:read permission.

Policy: Confirmed operation; read-only hides and directly refuses it.

url
Required
Yes
Type
string
Details
Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters. format: "uri".
expiration_seconds
Required
No; body/guard requirements still apply
Type
integer
Details
How long the signed URL stays valid, in seconds (max 7 days) minimum: 1. maximum: 604800.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.
output_file
Required
Yes
Type
string
Details
Required absolute new owner-private file; signed credential URL is never echoed. minLength: 1.

input.payload

expiration_seconds
Required
Yes
Type
integer
Details
How long the signed URL stays valid, in seconds (max 7 days) minimum: 1. maximum: 604800.

get_storage_settings

Returns the account-level storage lifecycle settings applied to newly uploaded fal CDN files: - expiration_duration_seconds: how long files live before being automatically deleted (null disables auto-expiration). - initial_acl: the default ACL applied to new uploads (null means the system default, which is public). Both fields are null when the account has never saved settings. Authentication: Required. The API key must have the account:settings:read permission.

Policy: Read/helper; no explicit mutation approval.

account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

update_storage_settings

Replaces the account-level storage lifecycle settings applied to newly uploaded fal CDN files. Omitted or null fields are cleared (reset to the system default), so always send the full desired configuration. ACL rules referencing users that do not exist are dropped. The response reflects the settings actually saved, so verify it contains the rules you sent. These are the same settings that the per-request X-Fal-Object-Lifecycle-Preference header overrides on individual requests. Authentication: Required. The API key must have the account:settings:write permission.

Policy: Confirmed operation; read-only hides and directly refuses it.

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Seconds after which newly uploaded files automatically expire and are deleted. Null disables auto-expiration. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
['object', 'null']
Details
Default ACL applied to newly uploaded files. Null uses the system default (public).
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Must be true for the requested mutation, paid work or private output file.
payload
Required
No; body/guard requirements still apply
Type
object
Details
Complete native JSON body, mutually exclusive with flat body flags and payload_file. Use schema for union bodies.
payload_file
Required
No; body/guard requirements still apply
Type
string
Details
Absolute regular non-symlink private JSON file, at most 1 MiB. Cannot mix with other body inputs. minLength: 1.

input.initial_acl

default
Required
Yes
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].

input.initial_acl.rules

input.initial_acl.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

input.payload

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Seconds after which newly uploaded files automatically expire and are deleted. Null disables auto-expiration. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
['object', 'null']
Details
Default ACL applied to newly uploaded files. Null uses the system default (public).

input.payload.initial_acl

default
Required
Yes
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].

input.payload.initial_acl.rules

input.payload.initial_acl.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

get_account_billing

Returns billing information for the authenticated account. Use the expand parameter to include additional details. Expandable Fields: - credits : Current credit balance and currency Common Use Cases: - Monitor available credit balance programmatically - Display balance in custom dashboards

Policy: Read/helper; no explicit mutation approval.

expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Data to include in the response. Use 'credits' to include current credit balance.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

get_organization_teams

Returns the list of teams in your organization with their details. > Availability: This endpoint is available to enterprise customers with organizations enabled. Contact your account team or support@fal.ai to request access. Must be called with an admin API key on the organization's root team. Key Features: - List all teams within the organization - Identify the organization's root team via is_org_root - View team usernames and display names See fal.ai docs for more details.

Policy: Read/helper; no explicit mutation approval.

account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

get_organization_usage

Returns paginated usage records across all teams and product lines in your organization, with each record attributed to a specific team via the username field and a product line via the product field. Covers all three fal product lines: - model_apis : model API endpoint calls (e.g. fal-ai/flux/dev) - serverless : fal Serverless SDK billing - compute : fal Compute (raw instance time) > Availability: This endpoint is available to enterprise customers with organizations enabled. Contact your account team or support@fal.ai to request access. Must be called with an admin API key on the organization's root team. Key Features: - Organization-wide usage data across all teams and products - Filter by team(s) (team_username), product line (product), endpoint, API key (api_key_id), date range, and auth method - Per-team and per-product attribution on every usage record - Paginated time series and aggregate summary views See fal.ai docs for more details.

Policy: Read/helper; no explicit mutation approval.

limit
Required
No; body/guard requirements still apply
Type
integer
Details
Maximum number of items to return. Actual maximum depends on query type and expansion parameters. minimum: 1.
cursor
Required
No; body/guard requirements still apply
Type
string
Details
Pagination cursor from previous response. Encodes the page number.
start
Required
No; body/guard requirements still apply
Type
JSON
Details
Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago.
end
Required
No; body/guard requirements still apply
Type
JSON
Details
End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time.
timezone
Required
No; body/guard requirements still apply
Type
string
Details
Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed. default: "UTC".
timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d). enum: ["minute", "hour", "day", "week", "month"].
bound_to_timeframe
Required
No; body/guard requirements still apply
Type
string
Details
Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided. enum: ["true", "false"]. default: "true".
endpoint_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2
api_key_id
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2
team_username
Required
No; body/guard requirements still apply
Type
JSON
Details
Filter by one or more team usernames within the organization. Accepts a comma-separated list or repeated parameter. If not provided, returns usage across all teams.
product
Required
No; body/guard requirements still apply
Type
JSON
Details
Restrict results to one or more product lines. Accepts a comma-separated list or repeated parameter. Defaults to all three (model_apis, serverless, compute).
expand
Required
No; body/guard requirements still apply
Type
JSON
Details
Data to include in the response. Use 'time_series' for time-bucketed data, 'summary' for aggregate statistics, 'auth_method' for a resolved authentication method label, and 'auth_method_structured' for a machine-readable auth method object (detail, api_key_id, login_username). At least one of 'time_series' or 'summary' is required. default: ["time_series"].
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact private account key profile label, not an authenticated provider owner ID.

input.start

input.start anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.start anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.end

input.end anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.end anyOf branch 2

Native JSON value; inspect the full schema for validation.

input.endpoint_id

input.endpoint_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.endpoint_id anyOf branch 2

input.endpoint_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.api_key_id

input.api_key_id anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.api_key_id anyOf branch 2

input.api_key_id.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.team_username

input.team_username anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.team_username anyOf branch 2

input.team_username.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.product

input.product anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.product anyOf branch 2

input.product.anyOf2[]

Native JSON value; inspect the full schema for validation.

input.expand

input.expand anyOf branch 1

Native JSON value; inspect the full schema for validation.

input.expand anyOf branch 2

input.expand.anyOf2[]

Native JSON value; inspect the full schema for validation.

get_model_info

Exact current catalog lookup with OpenAPI expansion. No generation or inferred model defaults. Schema may be unavailable; inspect actual native fields.

Policy: Read/helper; no explicit mutation approval.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.

run_model

Confirmed paid model request after current native input-schema validation. Exact model_id/input required; image/video commands do not invent fields or choose a default. Queue submissions return receipt only; synchronous timeout may leave an unknown paid outcome. No retry or polling.

Policy: Confirmed operation; read-only hides and directly refuses it.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

input.lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.lifecycle.initial_acl.rules

input.lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

submit_job

Confirmed paid model request after current native input-schema validation. Exact model_id/input required; image/video commands do not invent fields or choose a default. Queue submissions return receipt only; synchronous timeout may leave an unknown paid outcome. No retry or polling.

Policy: Confirmed operation; read-only hides and directly refuses it.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

input.lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.lifecycle.initial_acl.rules

input.lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

generate_image

Confirmed paid model request after current native input-schema validation. Exact model_id/input required; image/video commands do not invent fields or choose a default. Queue submissions return receipt only; synchronous timeout may leave an unknown paid outcome. No retry or polling.

Policy: Confirmed operation; read-only hides and directly refuses it.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

input.lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.lifecycle.initial_acl.rules

input.lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

generate_video

Confirmed paid model request after current native input-schema validation. Exact model_id/input required; image/video commands do not invent fields or choose a default. Queue submissions return receipt only; synchronous timeout may leave an unknown paid outcome. No retry or polling.

Policy: Confirmed operation; read-only hides and directly refuses it.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

input.lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.lifecycle.initial_acl.rules

input.lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

get_job_status

One read using the SDK-compatible owner/app root, not the full model subpath. No auto-polling, paid re-submission or arbitrary status URL.

Policy: Read/helper; no explicit mutation approval.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
request_id
Required
Yes
Type
string
Details
Exact queue receipt ID; status/result/cancel use its owner/app root, without inference subpaths. pattern: "^[A-Za-z0-9_-]{1,128}$".
logs
Required
No; body/guard requirements still apply
Type
boolean
Details
Include native provider logs only when requested. default: false.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.

get_job_result

One result read using the receipt/model root. No wait loop, media download, re-submission or auto-upload. Signed credential URLs are redacted; ordinary output media URLs remain account data.

Policy: Read/helper; no explicit mutation approval.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
request_id
Required
Yes
Type
string
Details
Exact queue receipt ID; status/result/cancel use its owner/app root, without inference subpaths. pattern: "^[A-Za-z0-9_-]{1,128}$".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.

cancel_job

Confirmed native cancellation request. Cancellation receipt is not proof processing stopped or credits were refunded; current provider state controls eligibility. No retry.

Policy: Confirmed operation; read-only hides and directly refuses it.

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
request_id
Required
Yes
Type
string
Details
Exact queue receipt ID; status/result/cancel use its owner/app root, without inference subpaths. pattern: "^[A-Za-z0-9_-]{1,128}$".
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

upload_file

Confirmed selected absolute regular non-symlink local file, 1 byte–20 MiB. Uses pinned SDK upload-initiation protocol then a credential-free HTTPS fal.media PUT with redirects refused. No remote URL ingestion, base64 model output, multipart retries or automatic generation.

Policy: Confirmed operation; read-only hides and directly refuses it.

file_path
Required
Yes
Type
string
Details
Absolute selected local media file, regular/non-symlink, 1 byte–20 MiB. minLength: 1.
content_type
Required
Yes
Type
string
Details
Plain MIME type matching the selected media. pattern: "^[a-zA-Z0-9.+-]+/[a-zA-Z0-9.+-]+$".
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.

input.lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.lifecycle.initial_acl.rules

input.lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

list_accounts

Local labels/default/auth method only. No keys, token paths, real provider identities or network request.

Policy: Read/helper; no explicit mutation approval.

Native JSON value; inspect the full schema for validation.

get_operation_schema

Local current native method/path/query/header/body schema and exact provenance. No credential or provider request.

Policy: Read/helper; no explicit mutation approval.

operation
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["search_models", "get_pricing", "estimate_pricing", "get_usage", "get_analytics", "get_billing_events", "delete_request_payloads", "list_requests_by_endpoint", "search_requests", "list_workflows", "create_workflow", "get_workflow", "list_assets", "list_asset_collections", "create_asset_collection", "get_asset_collection", "update_asset_collection", "delete_asset_collection", "get_asset_collection_hierarchy", "favorite_asset_collection", "unfavorite_asset_collection", "move_asset_collection", "list_asset_collection_assets", "add_asset_to_collection", "remove_asset_from_collection", "list_asset_characters", "create_asset_character", "update_asset_character", "get_asset_character", "delete_asset_character", "favorite_asset_character", "unfavorite_asset_character", "list_asset_tags", "create_asset_tag", "set_asset_tags_for_asset", "update_asset_tag", "delete_asset_tag", "upload_asset", "get_asset", "get_asset_lineage", "favorite_asset", "unfavorite_asset", "list_asset_tags_for_asset", "assign_asset_tag", "unassign_asset_tag", "get_storage_file_acl", "set_storage_file_acl", "sign_storage_file_url", "get_storage_settings", "update_storage_settings", "get_account_billing", "get_organization_teams", "get_organization_usage"].

preview_generation_batch

Read-only current schema validation and native unit-pricing lookup for all requested async jobs. Hash binds ordered exact inputs/lifecycle/store-IO/profile label/current schemas/unit quotes. Unit pricing is not final cost or a spending cap. No generation, file write or key ownership validation.

Policy: Read/helper; no explicit mutation approval.

tasks
Required
Yes
Type
array
Details
One to ten ordered async generation payloads. CLI repeats --tasks individual JSON objects. One job can produce several outputs; this is not a cost or output-count budget. minItems: 1. maxItems: 10.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.

input.tasks

input.tasks[]

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.

input.tasks[].lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.tasks[].lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.tasks[].lifecycle.initial_acl.rules

input.tasks[].lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

submit_generation_batch

Confirmed one-to-ten async jobs. Refetch all current schemas/unit quotes and validate all before first paid submission; refuse changed hash. Submit sequentially, stop on first failure, report known request IDs/failed and unattempted indices. No polling, retries, rollback, continuation or budget guarantee.

Policy: Confirmed operation; read-only hides and directly refuses it.

tasks
Required
Yes
Type
array
Details
One to ten ordered async generation payloads. CLI repeats --tasks individual JSON objects. One job can produce several outputs; this is not a cost or output-count budget. minItems: 1. maxItems: 10.
account
Required
No; body/guard requirements still apply
Type
string
Details
Exact configured isolated API-key profile label.
confirm
Required
No; body/guard requirements still apply
Type
boolean
Details
Explicit approval for the requested paid work, mutation, upload or private file.
review_sha256
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. pattern: "^[a-f0-9]{64}$".

input.tasks

input.tasks[]

model_id
Required
Yes
Type
string
Details
Exact current catalog endpoint ID. Never guess model names or parameter mappings. minLength: 3. maxLength: 240.
input
Required
Yes
Type
object
Details
Exact native model inputs. Fetched current model JSON schema validates these before a paid request; no guessed prompt/image/duration adapters.
lifecycle
Required
No; body/guard requirements still apply
Type
object
Details
Native CDN expiry/ACL preference. Omit to use account defaults. null expiration means no expiry; default CDN access may be public. Unknown nicknames may be dropped by provider.
store_io
Required
No; body/guard requirements still apply
Type
boolean
Details
Local default false sends X-Fal-Store-IO:0. true allows provider JSON payload storage; CDN media retention/ACL is separate. default: false.

input.tasks[].lifecycle

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Native field; use the reviewed provider reference. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
object
Details
Native field; use the reviewed provider reference.

input.tasks[].lifecycle.initial_acl

default
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
Native field; use the reviewed provider reference. maxItems: 100.

input.tasks[].lifecycle.initial_acl.rules

input.tasks[].lifecycle.initial_acl.rules[]

user
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. minLength: 1.
decision
Required
Yes
Type
string
Details
Native field; use the reviewed provider reference. enum: ["allow", "forbid", "hide"].

##### Native search_models: GET /models

Unified endpoint for discovering model endpoints. Supports three usage modes: 1. List Mode (no parameters): Paginated list of all available model endpoints with minimal metadata. 2. Find Mode (endpoint_id parameter): Retrieve specific model endpoint(s) by ID. Supports single or multiple IDs. 3. Search Mode (search parameters): Filter models by free-text query, category, or status. Expansion: Use expand to include additional data in each model object: - openapi-3.0 : full OpenAPI 3.0 schema in the openapi field - enterprise_status : enterprise readiness status (ready or pending) in the enterprise_status field Examples of endpoint_id values: - fal-ai/flux/dev - fal-ai/wan/v2.2-a14b/text-to-video - fal-ai/minimax/video-01/image-to-video - fal-ai/hunyuan3d-v21 See fal.ai Model APIs for more details. Authentication: Optional. Providing an API key grants higher rate limits. Common Use Cases: - Browse available models for integration - Retrieve metadata for specific endpoints - Search for models by category or keywords - Get OpenAPI schemas for code generation - Build model selection interfaces

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
endpoint_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Endpoint ID(s) to retrieve (e.g., 'fal-ai/flux/dev'). Can be a single value or multiple values (1-50 models). When combined with search params, narrows results to these IDs. Use array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
q
Required
False
Native shape
{"type": "string", "description": "Free-text search query to filter models by name, description, or category"}
query
Parameter
category
Required
False
Native shape
{"type": "string", "description": "Filter by category (e.g., 'text-to-image', 'image-to-video', 'training')"}
query
Parameter
status
Required
False
Native shape
{"type": "string", "enum": ["active", "deprecated"], "description": "Filter models by status - omit to include all statuses"}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Fields to expand in the response. Supported values: 'openapi-3.0' (includes full OpenAPI 3.0 schema in 'openapi' field), 'enterprise_status' (includes enterprise readiness status)"}

##### Native get_pricing: GET /models/pricing

Returns unit pricing for requested endpoint IDs. Most models use output-based pricing (e.g., per image/video with proportional adjustments for resolution/length). Some models use GPU-based pricing depending on architecture. Values are expressed per model's billing unit in a given currency. Authentication: Required. Users must provide a valid API key. Custom pricing or discounts may be applied based on account status. Common Use Cases: - Display pricing in user interfaces - Compare pricing across different models - Build cost estimation tools - Check current billing rates See fal.ai pricing for more details.

query
Parameter
endpoint_id
Required
True
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}

##### Native estimate_pricing: POST /models/pricing/estimate

Computes cost estimates using one of two methods: 1. Historical API Price (historical_api_price): - Based on historical pricing per API call from past usage patterns - Takes call_quantity (number of API calls) per endpoint - Useful for estimating based on actual historical usage patterns - Example: "How much will 100 calls to flux/dev cost?" 2. Unit Price (unit_price): - Based on unit price × expected billing units from pricing service - Takes unit_quantity (number of billing units like images/videos) per endpoint - Useful when you know the expected output quantity - Example: "How much will 50 images from flux/dev cost?" Authentication: Required. Users must provide a valid API key. Custom pricing or discounts may be applied based on account status. Common Use Cases: - Pre-calculate costs for batch operations - Display cost estimates in user interfaces - Budget planning and cost optimization See fal.ai pricing for more details.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

Native body required: False. Complete body sources cannot mix.

body oneOf branch 1

estimate_type
Required
Yes
Type
string
Details
Estimate type: historical API pricing based on past usage patterns enum: ["historical_api_price"].
endpoints
Required
Yes
Type
object
Details
Map of endpoint IDs to call quantities

body.oneOf1.endpoints

body.oneOf1.endpoints.{key}

call_quantity
Required
Yes
Type
integer
Details
Number of API calls to estimate (regardless of units per call) minimum: 1.

body oneOf branch 2

estimate_type
Required
Yes
Type
string
Details
Estimate type: unit price calculation based on billing units enum: ["unit_price"].
endpoints
Required
Yes
Type
object
Details
Map of endpoint IDs to unit quantities

body.oneOf2.endpoints

body.oneOf2.endpoints.{key}

unit_quantity
Required
Yes
Type
number
Details
Number of billing units expected (e.g., number of images, videos, etc.) minimum: 1e-06.

##### Native get_usage: GET /models/usage

Returns paginated usage records for your workspace with filters for endpoint, user, date range, and auth method. Each item includes the billed unit quantity, the pre-discount unit price and cost_subtotal, any percentage discount applied, and the final cost_total (cost_subtotal − cost_discount). Key Features: - Usage data for all endpoints or filtered by specific endpoint(s) - Flexible date range filtering - User-specific usage tracking - Detailed usage line items with unit quantity, price, and discount breakdown - Paginated results for large datasets Common Use Cases: - Generate usage reports for all endpoints or specific models - Track usage patterns - Monitor endpoint usage across different auth methods - Build usage dashboards and visualizations See fal.ai docs for more details.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
start
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago."}
query
Parameter
end
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time."}
query
Parameter
timezone
Required
False
Native shape
{"type": "string", "default": "UTC", "description": "Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed."}
query
Parameter
timeframe
Required
False
Native shape
{"type": "string", "enum": ["minute", "hour", "day", "week", "month"], "description": "Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d)."}
query
Parameter
bound_to_timeframe
Required
False
Native shape
{"type": "string", "enum": ["true", "false"], "default": "true", "description": "Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided."}
query
Parameter
endpoint_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
api_key_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2"}
query
Parameter
login_username
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by team member login username(s) (nickname). Accepts 1-50 usernames. Supports comma-separated values: ?login_username=alice,bob or array syntax: ?login_username=alice&login_username=bob"}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "default": ["time_series"], "description": "Data to include in the response. Use 'time_series' for time-bucketed data, 'summary' for aggregate statistics, 'auth_method' to include a formatted authentication method label, and 'auth_method_structured' to include a machine-readable auth method object (detail, api_key_id, login_username). At least one of 'time_series' or 'summary' is required."}

##### Native get_analytics: GET /models/analytics

Time-bucketed metrics per model endpoint, including request counts, success/error rates, and latency percentiles. prepare_duration reflects queue/prepare time before execution; duration is request execution time. Use with the Queue/Webhooks flow to monitor SLAs. Metric Selection: You must specify which metrics to include using the expand query parameter. Only requested metrics will be populated in the response, allowing you to optimize query performance and data transfer. Available Metrics: The expand parameter accepts these values, grouped by category: Volume - request_count: Total number of requests in the time bucket - success_count: Successful requests (2xx responses) - user_error_count: User errors (4xx responses) - error_count: Server errors (5xx responses) Error type breakdown - startup_error_count: Startup errors (startup timeout, scheduling failure) - connection_error_count: Connection errors (timeout, disconnected, refused) - timeout_error_count: Request timeout errors - runtime_error_count: Runtime errors (internal error, server error) Queue / prepare latency - p50_prepare_duration, p75_prepare_duration, p90_prepare_duration, p95_prepare_duration, p99_prepare_duration: Time from request submission until execution starts Request execution latency - p25_duration, p50_duration, p75_duration, p90_duration, p95_duration, p99_duration: Time spent processing the request Cold boot - cold_boot_count: Requests with cold boot (startup > 1s) - p50_cold_boot_duration, p75_cold_boot_duration, p90_cold_boot_duration: Cold boot duration percentiles Billing - total_billable_duration: Aggregate billed execution time Key Features: - Selective metric inclusion via expand parameter - Performance metrics (latency percentiles, duration stats) - Reliability metrics (success/error rates, request counts) - Error type breakdown (startup, connection, timeout, runtime) - Cold boot metrics (count, latency percentiles) - Billing duration tracking - Time-bucketed data for trend analysis - Single or multi-model analytics - Flexible date range and timeframe options Common Use Cases: - Monitor model performance and reliability - Generate performance dashboards - Analyze latency trends and patterns - Track error rates and success metrics See Queue API docs for more details.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
start
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago."}
query
Parameter
end
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time."}
query
Parameter
timezone
Required
False
Native shape
{"type": "string", "default": "UTC", "description": "Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed."}
query
Parameter
timeframe
Required
False
Native shape
{"type": "string", "enum": ["minute", "hour", "day", "week", "month"], "description": "Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d)."}
query
Parameter
bound_to_timeframe
Required
False
Native shape
{"type": "string", "enum": ["true", "false"], "default": "true", "description": "Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided."}
query
Parameter
endpoint_id
Required
True
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "default": ["time_series", "request_count"], "description": "Data and metrics to include in the response. Use 'time_series' for time-bucketed data, metric names for specific metrics in time series, and 'summary' for aggregate statistics. At least one of 'time_series' or 'summary' and at least one metric are required."}

##### Native get_billing_events: GET /models/billing-events

Returns paginated individual billing event records with filters for endpoint and date range. Each record includes the request ID, timestamp, endpoint, output units billed, and a cost breakdown in USD (cost_subtotal, cost_discount, cost_total; cost_estimate_nano_usd carries cost_total in nano USD). Key Features: - Individual billing event records for each API request - Per-request cost breakdown before and after discounts - Flexible date range filtering - Optional endpoint filtering - Cursor-based pagination for efficient large dataset queries - Limited to 10000 records per page for performance - Date range capped at 90 days per request Common Use Cases: - Audit individual billing events - Track request patterns and volumes - Debug specific requests by ID - Monitor billing unit consumption per request See fal.ai docs for more details.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
start
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago."}
query
Parameter
end
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time."}
query
Parameter
endpoint_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
request_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific request ID(s). Accepts 1-50 request IDs. Supports comma-separated values: ?request_id=req1,req2 or array syntax: ?request_id=req1&request_id=req2"}
query
Parameter
api_key_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2"}
query
Parameter
login_username
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by team member login username(s) (nickname). Accepts 1-50 usernames. Supports comma-separated values: ?login_username=alice,bob or array syntax: ?login_username=alice&login_username=bob"}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Data to include in the response. Use 'auth_method' for a formatted authentication method label, and 'auth_method_structured' for a machine-readable auth method object (detail, api_key_id, login_username)."}

##### Native delete_request_payloads: DELETE /models/requests/{request_id}/payloads

Deletes the IO payloads and associated CDN output files for a specific request. Important: - Only output CDN files are deleted (input files may be used by other requests) - This action is irreversible - Requires authentication with an admin API key What gets deleted: - Request input/output payload data - CDN-hosted output files (images, videos, etc.) What is NOT deleted: - Input CDN files (may be referenced by other requests) Response: - Returns deletion status for each CDN file - Each result includes the file link and any error that occurred Idempotency: - Optional Idempotency-Key header prevents duplicate deletions on retries - Responses cached for 10 minutes per unique key See fal.ai docs for more details about request payloads.

path
Parameter
request_id
Required
True
Native shape
{"type": "string", "format": "uuid", "description": "Unique identifier for the request (UUID format)"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native list_requests_by_endpoint: GET /models/requests/by-endpoint

Lists requests for one or more endpoints (same endpoint_id style as usage/explore: comma-separated or repeated query params, up to 50 IDs). Authentication: Requires API key (user or enterprise). Filters: - Time range via start / end. If start is omitted, defaults to the last 24 hours : unless request_id is provided, in which case the default start bound is widened to 90 days. - Status (success, error, user_error) - Request ID - Pagination via cursor/limit (limit defaults to 50, max 100) Sorting: - By end time (default) or duration Expansions: - Include payloads by adding expand=payloads

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Number of items to return per page (max 100)"}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor encoding the page number"}
query
Parameter
endpoint_id
Required
True
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
start
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago."}
query
Parameter
end
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time."}
query
Parameter
status
Required
False
Native shape
{"type": "string", "enum": ["success", "error", "user_error"], "description": "Filter by request status"}
query
Parameter
request_id
Required
False
Native shape
{"type": "string", "format": "uuid", "description": "Filter by specific request ID"}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Fields to expand in the response. Use payloads to include input and output payloads."}
query
Parameter
sort_by
Required
False
Native shape
{"type": "string", "enum": ["ended_at", "duration"], "default": "ended_at", "description": "Sort results by end time or duration"}

##### Native search_requests: GET /models/requests/search

Search, filter, and browse your request history. Supports three modes: 1. Semantic Search (query, image_url, or video_url parameter): Find visually or conceptually similar results using AI embeddings. Provide a text query for text-to-image search, an image URL for image-to-image similarity search, or a video URL for video-to-image similarity search. 2. Filtered Browse (no query, image_url, or video_url): Browse request history with hard filters. Returns results ordered by creation date (newest first). 3. Semantic + Filters (search params AND filter params): Combine semantic search with hard filters. Filters narrow the candidate set before ranking by similarity. Filter Options: - endpoint_id: Filter by one or more fal endpoints (comma-separated or repeated, up to 50 IDs) - exclude_api_requests / only_api_requests: Filter by request source Examples: - Semantic text search: ?query=sunset+landscape - Image similarity: ?image_url=https://...&min_similarity=0.5 - Filtered search: ?query=portrait&endpoint_id=fal-ai/flux/dev - Browse across multiple endpoints: ?endpoint_id=fal-ai/flux/dev,fal-ai/flux/schnell

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
query
Required
False
Native shape
{"type": "string", "description": "Text search query for semantic search. Mutually exclusive with image_url and video_url."}
query
Parameter
image_url
Required
False
Native shape
{"type": "string", "description": "Image URL for similarity search. Mutually exclusive with query and video_url."}
query
Parameter
video_url
Required
False
Native shape
{"type": "string", "description": "Video URL for similarity search. Mutually exclusive with query and image_url."}
query
Parameter
endpoint_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by one or more fal endpoints to scope request history. Accepts comma-separated or repeated values (1-50 IDs)."}
query
Parameter
endpoint
Required
False
Native shape
{"type": "string", "description": "Deprecated: use endpoint_id. Single-endpoint filter retained for backward compatibility. If both are provided, endpoint_id wins.", "deprecated": true}
query
Parameter
exclude_api_requests
Required
False
Native shape
{"type": "boolean", "description": "Exclude requests made via API keys (only show playground/UI requests). Mutually exclusive with only_api_requests."}
query
Parameter
only_api_requests
Required
False
Native shape
{"type": "boolean", "description": "Only include requests made via API keys. Mutually exclusive with exclude_api_requests."}
query
Parameter
min_similarity
Required
False
Native shape
{"type": ["number", "null"], "minimum": 0, "maximum": 1, "description": "Minimum similarity score (0-1) for semantic search results. Only applies when query or image_url is provided."}

##### Native list_workflows: GET /workflows

List workflows for the authenticated user with optional search and filtering. Features: - Paginated results with cursor-based pagination - Search by workflow name or title - Filter by model endpoints used in the workflow Authentication: Required. Returns only workflows owned by the authenticated user. Common Use Cases: - Display user's workflow library - Search for specific workflows - Find workflows using particular models

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
search
Required
False
Native shape
{"type": "string", "description": "Search by workflow name or title"}
query
Parameter
used_endpoint_ids
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by model endpoint IDs used in the workflow. Can be a single value or comma-separated values."}

##### Native create_workflow: POST /workflows

Create a new workflow owned by the authenticated user. Authentication: Required. Common Use Cases: - Save a newly built workflow - Programmatically provision workflows Note: Workflow names must be unique within your namespace. Creating a workflow with a name you already use returns a 400 validation error.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

Native body required: True. Complete body sources cannot mix.

name
Required
Yes
Type
string
Details
Unique workflow name/slug within the user's namespace maxLength: 128. pattern: "^[a-zA-Z0-9_-]+$".
title
Required
Yes
Type
string
Details
Human-readable workflow title minLength: 1. maxLength: 256.
contents
Required
Yes
Type
object
Details
The workflow definition/configuration object
is_public
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether the workflow is publicly visible default: false.

body.contents

name
Required
Yes
Type
string
Details
Internal name of the workflow definition
version
Required
Yes
Type
string
Details
Workflow definition format version
nodes
Required
Yes
Type
object
Details
Workflow nodes keyed by node id
output
Required
Yes
Type
object
Details
Output field mappings keyed by output name
schema
Required
Yes
Type
object
Details
Input/output schema for the workflow
metadata
Required
No; body/guard requirements still apply
Type
object
Details
Optional workflow metadata

body.contents.nodes

body.contents.nodes.{key}

body.contents.nodes.{key}.{key}

Native JSON value; inspect the full schema for validation.

body.contents.output

body.contents.output.{key}

Native JSON value; inspect the full schema for validation.

body.contents.schema

input
Required
Yes
Type
object
Details
Input fields schema
output
Required
Yes
Type
object
Details
Output fields schema

body.contents.schema.input

body.contents.schema.input.{key}

Native JSON value; inspect the full schema for validation.

body.contents.schema.output

body.contents.schema.output.{key}

Native JSON value; inspect the full schema for validation.

body.contents.metadata

body.contents.metadata.{key}

Native JSON value; inspect the full schema for validation.

##### Native get_workflow: GET /workflows/{username}/{workflow_name}

Get detailed information about a specific workflow, including its full contents/definition. Authentication: Required. Common Use Cases: - Load a workflow for editing - View workflow configuration - Export workflow definition

path
Parameter
username
Required
True
Native shape
{"type": "string", "maxLength": 128, "pattern": "^[a-zA-Z0-9_-]+$", "description": "The username of the workflow owner"}
path
Parameter
workflow_name
Required
True
Native shape
{"type": "string", "maxLength": 128, "pattern": "^[a-zA-Z0-9_-]+$", "description": "The workflow name/slug"}

##### Native list_assets: GET /assets

Browse and semantically search fal Assets across all media, uploads, favorites, collections, tags, and character references.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
q
Required
False
Native shape
{"type": "string", "description": "Text query for hybrid semantic search"}
query
Parameter
search_image_url
Required
False
Native shape
{"type": "string", "format": "uri", "description": "fal-hosted image URL to use for semantic image search"}
query
Parameter
search_video_url
Required
False
Native shape
{"type": "string", "format": "uri", "description": "fal-hosted video URL to use for semantic video search"}
query
Parameter
media_type
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string", "enum": ["image", "video", "audio", "3d"], "description": "Asset media type"}, "default": [], "description": "Filter by one or more media types"}
query
Parameter
source
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string", "enum": ["upload", "response", "request"], "description": "Indexed asset source"}, "default": [], "description": "Filter by one or more indexed sources"}
query
Parameter
section
Required
False
Native shape
{"type": "string", "enum": ["all-media", "uploads", "favorites", "generated"], "default": "all-media", "description": "Asset library section to browse"}
query
Parameter
collection_id
Required
False
Native shape
{"type": "string", "description": "Collection scope to browse"}
query
Parameter
character_identifier
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Character identifiers to use as @mention semantic filters"}
query
Parameter
tag_id
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Tag IDs to filter by"}
query
Parameter
tag_mode
Required
False
Native shape
{"type": "string", "enum": ["any", "all"], "default": "any", "description": "Whether tag filters match any tag or all tags"}

##### Native list_asset_collections: GET /assets/collections

List asset collections for the authenticated user's fal Assets library.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Maximum number of collections to return"}
query
Parameter
offset
Required
False
Native shape
{"type": ["integer", "null"], "minimum": 0, "default": 0, "description": "Number of collections to skip"}

##### Native create_asset_collection: POST /assets/collections

Create asset collection for the authenticated user's fal Assets library.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
Yes
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
parent_collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional parent collection ID to nest this collection under (manual collections only). Omit or null to create a top-level collection. minLength: 1.
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL

##### Native get_asset_collection: GET /assets/collections/{collection_id}

Get asset collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}

##### Native update_asset_collection: PATCH /assets/collections/{collection_id}

Update asset collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
No; body/guard requirements still apply
Type
string
Details
Collection display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection description
icon
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection icon
color
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional collection color
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the collection format: "uri".
filters
Required
No; body/guard requirements still apply
Type
JSON
Details
Assets filter DSL

##### Native delete_asset_collection: DELETE /assets/collections/{collection_id}

Delete asset collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native get_asset_collection_hierarchy: GET /assets/collections/{collection_id}/hierarchy

Get the nested subtree rooted at an asset collection, plus its ancestor collections ordered from the top level down to its direct parent.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}

##### Native favorite_asset_collection: POST /assets/collections/{collection_id}/favorite

Favorite an asset collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native unfavorite_asset_collection: POST /assets/collections/{collection_id}/unfavorite

Unfavorite an asset collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native move_asset_collection: POST /assets/collections/{collection_id}/move

Move a manual asset collection under another collection, or to the top level. Only manual collections can be moved or act as folders; nesting is limited to 5 levels deep and cannot create a cycle.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

parent_collection_id
Required
Yes
Type
['string', 'null']
Details
Parent collection ID to move this collection under, or null to move it to the top level. Must be a manual collection; nesting is limited to 5 levels and cannot create a cycle. minLength: 1.

##### Native list_asset_collection_assets: GET /assets/collections/{collection_id}/assets

Browse assets in a collection for the authenticated user's fal Assets library.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
q
Required
False
Native shape
{"type": "string", "description": "Text query for hybrid semantic search"}
query
Parameter
search_image_url
Required
False
Native shape
{"type": "string", "format": "uri", "description": "fal-hosted image URL to use for semantic image search"}
query
Parameter
search_video_url
Required
False
Native shape
{"type": "string", "format": "uri", "description": "fal-hosted video URL to use for semantic video search"}
query
Parameter
media_type
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string", "enum": ["image", "video", "audio", "3d"], "description": "Asset media type"}, "default": [], "description": "Filter by one or more media types"}
query
Parameter
source
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string", "enum": ["upload", "response", "request"], "description": "Indexed asset source"}, "default": [], "description": "Filter by one or more indexed sources"}
query
Parameter
section
Required
False
Native shape
{"type": "string", "enum": ["all-media", "uploads", "favorites", "generated"], "default": "all-media", "description": "Asset library section to browse"}
query
Parameter
character_identifier
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Character identifiers to use as @mention semantic filters"}
query
Parameter
tag_id
Required
False
Native shape
{"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Tag IDs to filter by"}
query
Parameter
tag_mode
Required
False
Native shape
{"type": "string", "enum": ["any", "all"], "default": "any", "description": "Whether tag filters match any tag or all tags"}

##### Native add_asset_to_collection: POST /assets/collections/{collection_id}/assets

Add an asset to a manual or character collection. Provide a request ID or vector ID; unresolved references are materialized before local collection state is added. For character collections, the asset is added by applying the character tag.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native remove_asset_from_collection: DELETE /assets/collections/{collection_id}/assets

Remove an asset from a manual or character collection by request ID or vector ID.

path
Parameter
collection_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native list_asset_characters: GET /assets/characters

List asset characters for the authenticated user's fal Assets library.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Maximum number of collections to return"}
query
Parameter
offset
Required
False
Native shape
{"type": ["integer", "null"], "minimum": 0, "default": 0, "description": "Number of collections to skip"}

##### Native create_asset_character: POST /assets/characters

Create an asset character for the authenticated user's fal Assets library. Prefer vector IDs or request IDs in reference_images for existing fal-generated assets; use fal-hosted image URLs only for standalone images. Unresolved ID references are materialized before character state is added.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
Yes
Type
string
Details
Character display name minLength: 1. maxLength: 255.
identifier
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional @mention identifier for the character maxLength: 64.
description
Required
Yes
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
Yes
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".

body.reference_images

body.reference_images[]

Native JSON value; inspect the full schema for validation.

##### Native update_asset_character: PATCH /assets/characters/{character_id}

Update an asset character for the authenticated user's fal Assets library. Prefer vector IDs or request IDs in reference_images for existing fal-generated assets; use fal-hosted image URLs only for standalone images. Unresolved ID references are materialized before character state is added.

path
Parameter
character_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Character collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
No; body/guard requirements still apply
Type
string
Details
Character display name minLength: 1. maxLength: 255.
description
Required
No; body/guard requirements still apply
Type
string
Details
Text description used for character semantic matching minLength: 1. maxLength: 2000.
reference_images
Required
No; body/guard requirements still apply
Type
array
Details
Reference images for the character. Prefer vector IDs or request IDs for existing fal-generated assets. Use fal-hosted image URLs only for standalone images. minItems: 1. maxItems: 20.
cover_image_url
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional fal-hosted cover image URL for the character format: "uri".

body.reference_images

body.reference_images[]

Native JSON value; inspect the full schema for validation.

##### Native get_asset_character: GET /assets/characters/{character_id}

Get asset character for the authenticated user's fal Assets library.

path
Parameter
character_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Character collection ID"}

##### Native delete_asset_character: DELETE /assets/characters/{character_id}

Delete asset character for the authenticated user's fal Assets library.

path
Parameter
character_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Character collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native favorite_asset_character: POST /assets/characters/{character_id}/favorite

Favorite an asset character for the authenticated user's fal Assets library.

path
Parameter
character_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Character collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native unfavorite_asset_character: POST /assets/characters/{character_id}/unfavorite

Unfavorite an asset character for the authenticated user's fal Assets library.

path
Parameter
character_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Character collection ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native list_asset_tags: GET /assets/tags

List asset tags for the authenticated user's fal Assets library.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

##### Native create_asset_tag: POST /assets/tags

Create asset tag for the authenticated user's fal Assets library.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
Yes
Type
string
Details
Tag name minLength: 1. maxLength: 50.

##### Native set_asset_tags_for_asset: PUT /assets/tags

Set tags for an asset. Provide a request ID or vector ID; unresolved references are materialized before tag state is added.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.
tag_ids
Required
Yes
Type
array
Details
Full replacement set of tag IDs

body.tag_ids

body.tag_ids[]

Native JSON value; inspect the full schema for validation.

##### Native update_asset_tag: PATCH /assets/tags/{tag_id}

Update asset tag for the authenticated user's fal Assets library.

path
Parameter
tag_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Tag ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

name
Required
No; body/guard requirements still apply
Type
string
Details
Tag name minLength: 1. maxLength: 50.

##### Native delete_asset_tag: DELETE /assets/tags/{tag_id}

Delete asset tag for the authenticated user's fal Assets library.

path
Parameter
tag_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Tag ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

##### Native upload_asset: POST /assets/uploads

Upload asset for the authenticated user's fal Assets library.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

url
Required
Yes
Type
string
Details
fal-hosted media URL to ingest into the asset library format: "uri".
type
Required
Yes
Type
string
Details
Media type for the uploaded asset enum: ["image", "video", "audio", "3d"].
prompt
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional caller-provided caption or description to index with the uploaded asset minLength: 1. maxLength: 2000.
collection_id
Required
No; body/guard requirements still apply
Type
['string', 'null']
Details
Optional manual collection ID to add the uploaded asset to
favorite
Required
No; body/guard requirements still apply
Type
boolean
Details
Whether to favorite the uploaded asset immediately default: false.
tag_ids
Required
No; body/guard requirements still apply
Type
array
Details
Tag IDs to assign to the uploaded asset default: [].

body.tag_ids

body.tag_ids[]

Native JSON value; inspect the full schema for validation.

##### Native get_asset: GET /assets/{vector_id}

Get an asset document by vector ID from the authenticated user's fal Assets library. The vector may exist only in Turbopuffer; in that case the response returns the Turbopuffer document with empty local state.

path
Parameter
vector_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Vector ID"}

##### Native get_asset_lineage: GET /assets/{asset_id}/lineage

Get the derivation lineage of an asset by asset ID: the inputs it was generated from, the generation requests along the way, and any referenced characters, traversed recursively up to depth levels. Deleted or expired ancestors stay in the graph flagged as tombstones; inputs that were never captured appear as external inputs.

path
Parameter
asset_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Asset ID"}
query
Parameter
depth
Required
False
Native shape
{"type": "integer", "minimum": 1, "maximum": 5, "default": 5, "description": "Maximum traversal depth (levels of derivation edges)"}

##### Native favorite_asset: POST /assets/favorite

Favorite an asset. Provide a request ID or vector ID; unresolved references are materialized before favorite state is added.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native unfavorite_asset: POST /assets/unfavorite

Unfavorite an asset by request ID or vector ID.

header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native list_asset_tags_for_asset: GET /assets/{vector_id}/tags

List tags for an asset by vector ID. Vectors that have not been saved as assets return an empty tag list.

path
Parameter
vector_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Vector ID"}

##### Native assign_asset_tag: POST /assets/tags/{tag_id}/assign

Assign a tag to an asset. Provide a request ID or vector ID; unresolved references are materialized before tag state is added.

path
Parameter
tag_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Tag ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native unassign_asset_tag: DELETE /assets/tags/{tag_id}/assign

Unassign a tag from an asset by request ID or vector ID.

path
Parameter
tag_id
Required
True
Native shape
{"type": "string", "minLength": 1, "description": "Tag ID"}
header
Parameter
Idempotency-Key
Required
False
Native shape
{"type": "string", "description": "Optional idempotency key for safe request retries"}

Native body required: True. Complete body sources cannot mix.

request_id
Required
No; body/guard requirements still apply
Type
string
Details
Request ID to save as an asset before mutating minLength: 1.
vector_id
Required
No; body/guard requirements still apply
Type
string
Details
Vector ID to save as an asset before mutating minLength: 1.

##### Native get_storage_file_acl: GET /storage/files/acl

Returns the Access Control List currently applied to a fal CDN file. The ACL consists of a default decision (allow, forbid, or hide) plus optional per-user rules that override the default. Rule users are returned as nicknames where possible. Authentication: Required. The API key must have the assets:read permission.

query
Parameter
url
Required
True
Native shape
{"type": "string", "format": "uri", "description": "Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters."}

##### Native set_storage_file_acl: PUT /storage/files/acl

Replaces the Access Control List of a fal CDN file. The ACL consists of a default decision (allow, forbid, or hide) plus optional per-user rules that override the default. Rule users may be specified by nickname or user ID. Setting default to allow with no rules makes the file public; forbid or hide restricts it to the rules you provide. Rules referencing users that do not exist are dropped. The response reflects the ACL actually applied, so verify it contains the rules you sent. Authentication: Required. The API key must have the assets:write permission.

query
Parameter
url
Required
True
Native shape
{"type": "string", "format": "uri", "description": "Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters."}

Native body required: True. Complete body sources cannot mix.

default
Required
Yes
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].

body.rules

body.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

##### Native sign_storage_file_url: POST /storage/files/sign

Creates a signed URL that grants temporary access to a fal CDN file, regardless of its ACL. Useful for sharing access-restricted files. The signature is valid for expiration_seconds (up to 7 days). Authentication: Required. The API key must have the assets:read permission.

query
Parameter
url
Required
True
Native shape
{"type": "string", "format": "uri", "description": "Full URL of the fal CDN file, as returned by the upload APIs (https://v3.fal.media/files/b/<id>/<filename>). Must not contain query parameters."}

Native body required: True. Complete body sources cannot mix.

expiration_seconds
Required
Yes
Type
integer
Details
How long the signed URL stays valid, in seconds (max 7 days) minimum: 1. maximum: 604800.

##### Native get_storage_settings: GET /storage/settings

Returns the account-level storage lifecycle settings applied to newly uploaded fal CDN files: - expiration_duration_seconds: how long files live before being automatically deleted (null disables auto-expiration). - initial_acl: the default ACL applied to new uploads (null means the system default, which is public). Both fields are null when the account has never saved settings. Authentication: Required. The API key must have the account:settings:read permission.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

##### Native update_storage_settings: PUT /storage/settings

Replaces the account-level storage lifecycle settings applied to newly uploaded fal CDN files. Omitted or null fields are cleared (reset to the system default), so always send the full desired configuration. ACL rules referencing users that do not exist are dropped. The response reflects the settings actually saved, so verify it contains the rules you sent. These are the same settings that the per-request X-Fal-Object-Lifecycle-Preference header overrides on individual requests. Authentication: Required. The API key must have the account:settings:write permission.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

Native body required: True. Complete body sources cannot mix.

expiration_duration_seconds
Required
No; body/guard requirements still apply
Type
['integer', 'null']
Details
Seconds after which newly uploaded files automatically expire and are deleted. Null disables auto-expiration. minimum: 1.
initial_acl
Required
No; body/guard requirements still apply
Type
['object', 'null']
Details
Default ACL applied to newly uploaded files. Null uses the system default (public).

body.initial_acl

default
Required
Yes
Type
string
Details
Fallback decision when no user-specific rule matches enum: ["allow", "forbid", "hide"].
rules
Required
No; body/guard requirements still apply
Type
array
Details
User-specific overrides to the default decision default: [].

body.initial_acl.rules

body.initial_acl.rules[]

user
Required
Yes
Type
string
Details
User nickname or user ID the rule applies to minLength: 1.
decision
Required
Yes
Type
string
Details
Access decision applied to this user enum: ["allow", "forbid", "hide"].

##### Native get_account_billing: GET /account/billing

Returns billing information for the authenticated account. Use the expand parameter to include additional details. Expandable Fields: - credits : Current credit balance and currency Common Use Cases: - Monitor available credit balance programmatically - Display balance in custom dashboards

query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Data to include in the response. Use 'credits' to include current credit balance."}

##### Native get_organization_teams: GET /organization/teams

Returns the list of teams in your organization with their details. > Availability: This endpoint is available to enterprise customers with organizations enabled. Contact your account team or support@fal.ai to request access. Must be called with an admin API key on the organization's root team. Key Features: - List all teams within the organization - Identify the organization's root team via is_org_root - View team usernames and display names See fal.ai docs for more details.

Native request
Parameter
No path/query/header arguments
Required
No
Native shape
See required body below

##### Native get_organization_usage: GET /organization/usage

Returns paginated usage records across all teams and product lines in your organization, with each record attributed to a specific team via the username field and a product line via the product field. Covers all three fal product lines: - model_apis : model API endpoint calls (e.g. fal-ai/flux/dev) - serverless : fal Serverless SDK billing - compute : fal Compute (raw instance time) > Availability: This endpoint is available to enterprise customers with organizations enabled. Contact your account team or support@fal.ai to request access. Must be called with an admin API key on the organization's root team. Key Features: - Organization-wide usage data across all teams and products - Filter by team(s) (team_username), product line (product), endpoint, API key (api_key_id), date range, and auth method - Per-team and per-product attribution on every usage record - Paginated time series and aggregate summary views See fal.ai docs for more details.

query
Parameter
limit
Required
False
Native shape
{"type": "integer", "minimum": 1, "description": "Maximum number of items to return. Actual maximum depends on query type and expansion parameters."}
query
Parameter
cursor
Required
False
Native shape
{"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
query
Parameter
start
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "Start date in ISO8601 format (e.g., '2025-01-01T00:00:00Z' or '2025-01-01'). Defaults to 24 hours ago."}
query
Parameter
end
Required
False
Native shape
{"anyOf": [{"type": "string", "format": "date-time"}, {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"}], "description": "End date in ISO8601 format, exclusive (e.g., '2025-02-01T00:00:00Z' or '2025-02-01'). Data up to but not including this timestamp is returned. Defaults to current time."}
query
Parameter
timezone
Required
False
Native shape
{"type": "string", "default": "UTC", "description": "Timezone for date aggregation and boundaries. All timestamps in responses are in UTC, but this controls how dates are bucketed."}
query
Parameter
timeframe
Required
False
Native shape
{"type": "string", "enum": ["minute", "hour", "day", "week", "month"], "description": "Aggregation timeframe for timeseries data (auto-detected from date range if not specified). Auto-detection uses: minute (<2h), hour (<2d), day (<64d), week (<183d), month (>=183d)."}
query
Parameter
bound_to_timeframe
Required
False
Native shape
{"type": "string", "enum": ["true", "false"], "default": "true", "description": "Whether to adjust start/end dates to align with timeframe boundaries and use exclusive end. Defaults to true. When true, dates are aligned to the start of the timeframe period (e.g., start of day) and end is made exclusive (e.g., start of next day). When false, uses exact dates provided."}
query
Parameter
endpoint_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific endpoint ID(s). Accepts 1-50 endpoint IDs. Supports comma-separated values: ?endpoint_id=model1,model2 or array syntax: ?endpoint_id=model1&endpoint_id=model2"}
query
Parameter
api_key_id
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by specific API key ID(s). Accepts 1-50 key IDs. Supports comma-separated values: ?api_key_id=key1,key2 or array syntax: ?api_key_id=key1&api_key_id=key2"}
query
Parameter
team_username
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Filter by one or more team usernames within the organization. Accepts a comma-separated list or repeated parameter. If not provided, returns usage across all teams."}
query
Parameter
product
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "description": "Restrict results to one or more product lines. Accepts a comma-separated list or repeated parameter. Defaults to all three (model_apis, serverless, compute)."}
query
Parameter
expand
Required
False
Native shape
{"anyOf": [{"type": "string"}, {"type": "array", "items": {"type": "string"}}], "default": ["time_series"], "description": "Data to include in the response. Use 'time_series' for time-bucketed data, 'summary' for aggregate statistics, 'auth_method' for a resolved authentication method label, and 'auth_method_structured' for a machine-readable auth method object (detail, api_key_id, login_username). At least one of 'time_series' or 'summary' is required."}

Complete client, OS and desktop setup

# Install fal.ai MCP Server & CLI

One npm package includes both binaries and all 66 tools. Requires Node.js 22 or newer for CLI/manual MCP installs. Discovery works before account authentication. Account operations need intended fal API access; provider account plans, key permissions and API quota apply.

Terminal
Program
fal-ai-cli
Use
Scripts and agents with a shell
Local MCP
Program
fal-ai-mcp
Use
AI clients supporting stdio
Desktop archive
Program
fal-ai-2.0.1.mcpb
Use
Compatible Claude Desktop custom extensions
fal.ai-hosted alternative
Program
https://mcp.fal.ai/mcp-relay
Use
Official remote provider-hosted access

Contents

Requirements · CLI · Private account setup · Claude Code · Codex · Claude Desktop · Cursor · VS Code and Copilot · Windsurf · Zed · Gemini CLI · Docker · Verify · Multiple accounts · Updates and removal · Troubleshooting · Development

Requirements

Install Node from nodejs.org. Open a new terminal and check node --version and npm --version. The desktop host needs a compatible Node runtime; dependencies are bundled. A GUI app may not inherit your terminal's environment. Check your account's current API access and quota with fal.ai instead of assuming npm installation provides it.

CLI

On macOS/Linux, use Terminal. On Windows, use PowerShell or Command Prompt:

npm install -g @thenavidm/fal-ai-mcp-cli@latest
fal-ai-cli --version
fal-ai-cli
fal-ai-cli search-models --help
fal-ai-cli schema submit-job
fal-ai-cli login

If PowerShell blocks npm.ps1, use npm.cmd or Command Prompt according to your policy. If a binary is missing, check npm prefix -g, ensure its executable directory is on PATH and open a new terminal. Avoid sudo as a workaround for PATH problems.

For one command without a global install:

npx -y --package @thenavidm/fal-ai-mcp-cli@latest fal-ai-cli tools

Make SKILL.md available in your agent's supported skill location. The installed file is <npm root -g>/@thenavidm/fal-ai-mcp-cli/SKILL.md. npm does not automatically register client skills. Your agent should read the actual schema and use --agent/--select for compact output.

Private account setup

Private account access

  1. Sign into the intended fal account. Confirm which personal/team account owns the credits and key before creating or copying it.
  2. Use only the provider permissions needed for the requested work. Model execution, Assets, billing and organization reads have different requirements. A working model read does not prove asset/admin permissions.
  3. Store FAL_KEY in private user/client environment settings or FAL_TOKEN_FILE as an absolute token-only file outside Git. On macOS/Linux use an owner-private directory and regular non-symlink 0600 file, at most 64 KiB. On Windows restrict ACLs to yourself; POSIX mode does not prove Windows ACLs.
  4. Run fal-ai-cli doctor for local settings; doctor --network deliberately reads one model with limit=1. It reports count only, does not spend credits and does not prove the authenticated owner. Public model discovery can work without a key.
  5. Inspect the exact current model schema and unit pricing before approving generation. Use a queue receipt to read progress/results; never submit again to check progress. Do not generate paid media, create keys or delete assets just to test installation.

FAL_ACCOUNTS is a private JSON array of unique {name,api_key,token_file} profiles; FAL_DEFAULT_ACCOUNT selects an exact label. A selected token file overrides only that profile's key. Explicit profiles never inherit FAL_KEY or another profile after missing credentials or a 401/403. Labels are not verified fal owners. Tokens cache until process restart; rotate/revoke at fal and restart clients.

This wrapper uses API keys with Authorization: Key on fixed api.fal.ai, queue.fal.run, fal.run and the SDK-pinned rest.fal.ai upload-initiation origin. No credential goes on the CDN upload PUT. No hosted OAuth, .env loading, SDK key-ID/secret environment inheritance, official genmedia config import, session cookie import, telemetry or automatic background update exists. login prints setup instructions and does not save credentials or start sign-in.

Official account connections

The current model-generation MCP uses OAuth at https://mcp.fal.ai/mcp-relay. Its Active MCP account setting routes new uploads/generations; old jobs remain with their original account, and failed selected-account access does not fall back to personal credits. This is already an official isolation feature. API-key clients, including this package and genmedia, use the key's owning account separately.

The separate Platform MCP at https://api.fal.ai/v1/mcp/platform uses API keys and is read-only account/serverless tooling. Documentation MCP at https://fal.ai/docs/mcp searches public docs without model execution. The old March launch article/key-based endpoint and its nine tools are historical evidence, not the current OAuth setup or tool count.

Costs and permissions

The AGPL wrapper is free; fal generation credits, endpoint pricing, output quantities, model eligibility and concurrency limits apply. Unit pricing and cost estimates are different from completed billable usage. Unit quotes can scale with resolution, duration, output count or GPU time; a batch of ten requests is not a ten-output or ten-dollar limit. No local budget guarantee or credit reservation is promised.

No requests automatically retry, including reads, 429, failed uploads, timeouts or 5xx. Respect current provider throttling guidance before deliberately repeating a read. A timeout after a paid POST may have spent credits without returning a request ID: inspect fal history before another submission. Responses cap at 5 MiB and JSON requests at 1 MiB. One native list page is returned with its real cursor; there is no invented all-pages backup.

Data and file controls

Generated and uploaded CDN media may be public under account defaults. The local generation default sends X-Fal-Store-IO:0 to disable provider JSON input/output storage; CDN media access and expiration are separate. Explicit store_io:true allows native payload storage. Native lifecycle JSON can specify expiration_duration_seconds and initial_acl with default allow/forbid/hide and nickname rules. Unknown nicknames may be silently dropped by fal; an ACL request is not proof of actual external visibility.

Local upload sends only the selected regular file, 1 byte–20 MiB, through upload initiation and one restricted fal.media PUT. Larger/multipart/remote-URL upload conveniences belong to the official clients; no retry or automatic generation occurs here. Sign-file URL credentials are saved only into an exclusive new private JSON file. Existing files are never overwritten. Keep parent directory and Windows ACLs private; a signature is access authority even if its field says URL.

Rotation and revocation

Revoke the exact key at fal, replace private settings/files and restart every process. Revoke official OAuth connections separately. Removing the package/client registration does not cancel jobs, undo asset mutations, delete provider payloads/CDN files, revoke credentials or refund generation credits. Inspect receipts and provider state before explicitly requested cleanup.

export FAL_TOKEN_FILE='/absolute/private/fal.txt'
fal-ai-cli doctor --network

Agent-guided installation

Help me install fal.ai MCP Server & CLI with INSTALL.md. Check Node and the binary, let me configure my account credentials privately, then run discovery and doctor --network. Do not change or mutate accounts during setup.

Codex

Codex is the current validation priority. Private token paths must exist in the process or remote environment where the server runs.

codex mcp add fal-ai -- npx -y @thenavidm/fal-ai-mcp-cli@latest
codex mcp list

Account credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:

[mcp_servers.fal-ai]
command = "npx"
args = ["-y", "@thenavidm/fal-ai-mcp-cli@latest"]
env_vars = ["FAL_KEY", "FAL_TOKEN_FILE", "FAL_ACCOUNTS", "FAL_DEFAULT_ACCOUNT", "FAL_READ_ONLY", "FAL_ALLOW_DESTRUCTIVE"]

env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.

Claude Code

For a user-scoped connection, after privately configuring credentials:

claude mcp add --scope user fal-ai -- npx -y @thenavidm/fal-ai-mcp-cli@latest
claude mcp list

Use the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.

Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.

Claude Desktop

Install the .mcpb extension

  1. Download fal-ai-2.0.1.mcpb from GitHub Releases.
  2. In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
  3. Enter a private API key in the sensitive setting, or an absolute private token-file path. Leave the unused credential method empty. Authenticated native fal requests use Authorization: Key, not Bearer. Anonymous model/schema discovery can run without a key; paid/model/account work uses the explicitly selected private key. Use the intended account API key; named profiles are configured separately in private client environments.
  4. Enable read-only if you want only the 32 read operations. Reconnect and ask for account verification.

The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.

Manual config

Open Settings > Developer > Edit Config, or use your platform's config file:

OSTypical config path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build
{
"mcpServers": {
"fal-ai": {
"command": "npx",
"args": ["-y", "@thenavidm/fal-ai-mcp-cli@latest"],
"env": {
"FAL_KEY": "YOUR_PRIVATE_API_KEY",
"FAL_TOKEN_FILE": ""
}
}
}
}

Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.

If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/fal-ai-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.

Cursor

Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.

{
"mcpServers": {
"fal-ai": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/fal-ai-mcp-cli@latest"],
"env": {
"FAL_KEY": "${env:FAL_KEY}",
"FAL_TOKEN_FILE": "${env:FAL_TOKEN_FILE}"
}
}
}
}

The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.

VS Code and Copilot

Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:

{
"inputs": [
{"type": "promptString", "id": "fal-ai-api-token", "description": "fal.ai API key (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "fal-ai-token-file", "description": "Optional private token-file path (leave empty for API key)"}
],
"servers": {
"fal-ai": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/fal-ai-mcp-cli@latest"],
"env": {
"FAL_KEY": "${input:fal-ai-api-token}",
"FAL_TOKEN_FILE": "${input:fal-ai-token-file}"
}
}
}
}

Start fal.ai through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.

Windsurf

Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect fal.ai in Cascade; project files must not contain secrets.

Zed

Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:

{
"context_servers": {
"fal-ai": {
"command": "npx",
"args": ["-y", "@thenavidm/fal-ai-mcp-cli@latest"],
"env": {
"FAL_KEY": "YOUR_PRIVATE_API_KEY",
"FAL_TOKEN_FILE": ""
}
}
}
}

Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.

Gemini CLI

Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private credential values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.

Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.

Docker

Build locally from the reviewed source; no prebuilt registry image is claimed:

git clone https://github.com/thenavidm/fal-ai-mcp-cli.git
cd fal-ai-mcp-cli
docker build -t fal-ai-mcp-cli .
docker run --rm -i -e FAL_KEY fal-ai-mcp-cli

Cline and other local MCP clients

Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/fal-ai-mcp-cli@latest, stdio transport, and private local FAL_KEY or FAL_TOKEN_FILE settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use fal.ai's official server rather than this local stdio command.

Verify

fal-ai-cli --version
fal-ai-cli tools
fal-ai-cli list-accounts --agent
fal-ai-cli doctor
fal-ai-cli doctor --network
fal-ai-cli search-models --limit 1 --agent
fal-ai-cli get-model-info --model-id fal-ai/flux/dev --agent

Public model discovery/schema reads have been verified without credentials or generation credits. Private doctor --network reads one model with count only; model metadata can be public, so that result is not an account-owner or all-permissions test. Model runs, authenticated Assets and real queue outcomes require separate live-account verification. Never use a paid or destructive call as an install smoke test.

Multiple accounts

Use FAL_ACCOUNTS only in private user/runtime settings. Each entry has a unique name plus api_key or token_file; FAL_DEFAULT_ACCOUNT and --account select an exact entry. Selected profiles never inherit the global key or another account. A token file overrides only that profile and is owner-private/regular/non-symlink; credentials cache until restart.

list_accounts returns labels/default/auth type only. It does not contact fal or prove which owner a key belongs to. API-key account selection is separate from the official OAuth Active MCP account and website account switcher. Keep the account label with every queue receipt. No tenant/account filter changes which key is authenticated.

fal-ai-cli list-accounts --agent
fal-ai-cli get-usage --account work --help

Updates and removal

Use npx -y @thenavidm/fal-ai-mcp-cli@latest for fresh launch resolution, and reconnect/restart existing processes. Global installs need npm update -g @thenavidm/fal-ai-mcp-cli; a versioned desktop extension needs an explicit updated bundle. Inspect release notes before a major upgrade.

Remove the exact MCP registration/skill/global package or desktop extension when requested. Revoke intended provider keys/OAuth separately. Do not delete other account connections. Removing tooling does not cancel generation, refund credits, delete provider media/payloads or private signed files, or undo account/Assets changes.

npm update -g @thenavidm/fal-ai-mcp-cli
fal-ai-cli --version
# Remove only when requested
codex mcp remove fal-ai
npm uninstall -g @thenavidm/fal-ai-mcp-cli

Troubleshooting

SymptomCheck and resolution
Binary/Node missingNode22+, npm global executable PATH; reopen terminal, use npm.cmd if PowerShell policy requires.
Public models work but Assets failCatalog is public; verify intended API key/account and per-operation native permissions.
401/403Check key ownership, revocation, permissions and endpoint eligibility; no cross-account fallback.
429Respect provider guidance; local pacing is not shared account concurrency/quota enforcement.
Input schema errorRead exact current get_model_info output; native field names differ per model.
Schema unavailable/ambiguousPaid call fails closed; official clients may support that endpoint differently. No fallback bypass.
Review mismatchCurrent inputs/schema/unit price/profile/order changed; preview the actual requested batch again.
Unknown generation outcomePreserve known receipt and inspect provider history before any explicit repeat.
Job result not readyRead status once, then fetch result after COMPLETED; do not submit a replacement to poll.
Native queue path differsStatus/result/cancel use owner/app root from current SDK, not full inference subpath.
File upload refusedAbsolute non-symlink regular file 1 byte–20 MiB, correct MIME; no multipart/URL upload shortcut.
Signed output path existsChoose a new private path; existing files are never overwritten.
Changed storage policyNative replacement may clear omitted settings; read current configuration and send full desired values.
GUI/remote config failsThat runtime needs private settings, filesystem path and Node runtime; terminal environment is separate.

Development

git clone https://github.com/thenavidm/fal-ai-mcp-cli.git
cd fal-ai-mcp-cli
npm ci
npm run typecheck
npm run build
npm test
npm run check:counts
npm run build:mcpb

Source mode: configure private env, then register node /absolute/path/fal-ai-mcp-cli/dist/index.js as the MCP command. Build before registration and after source changes. No local credentials are packaged. CONTRIBUTING.md, SECURITY.md and THIRD_PARTY_NOTICES.md cover contributions, disclosures and licensing.

Output, flags and exit codes

Both surfaces return provider JSON through the same handlers. Queue submission returns request_id receipts with completed:false. get_job_status and get_job_result read once; cancel receipts do not prove stopped processing/refunds. Synchronous run timeouts can leave an unknown paid outcome. No returned media is downloaded or embedded automatically. Signed access credentials go only to a new exclusive private file; console responses contain saved-file metadata.

Use the actual task schema. Repeated primitive array flags pass one value each; repeated --tasks values are individual JSON task objects. Complete native body unions use --payload JSON or a private --payload-file, mutually exclusive with flat body flags. Native query/header/body names remain visible in the schema; kebab-case flags come from the shared house bridge.

fal-ai-cli search-models --limit 5 --agent --select models,next_cursor
fal-ai-cli submit-job --help
fal-ai-cli schema estimate-pricing
FlagBehavior
--agentCompact JSON, no input/color; never confirmation
--confirmExplicit approval for exactly the requested operation
--account LABELExact private API-key profile
--select a,b.cLocal output field selection
--payload / --payload-fileNative body, mutually exclusive with other body routes
--tasks JSONRepeat an individual ordered generation object
--review-sha256 HASHExact preview hash before batch submission
--output-file PATHNew private signed-URL credential file
ExitMeaning
0Handler success/receipt; submission does not mean completed generation
2Invalid input or refused policy operation
3Not found
4Provider authentication/permissions
5Provider/network/unknown outcome
7Rate limit
10Missing or invalid local account credentials/configuration

Official and community comparisons

Reviewed surface
Current OAuth relay; 11 publicly listed tools, checked 2026-10-03
Useful capabilities and limits
Model discovery/schema/pricing/docs/recommendations, generation, queue/result/cancel and uploads. Active MCP account isolation and prepared signed local upload already exist. Public listed count is not authenticated tools/list. Its example prompt asks a model for approval; docs explicitly say that prompt is not a server-side gate.
Reviewed surface
Hosted read-only API-key account/serverless surface
Useful capabilities and limits
Existing account diagnostics, spend, requests and files. Provider permissions still apply. Different product scope from model OAuth; do not call it a generation-only duplicate.
Reviewed surface
Provider-linked v0.7.0, source 63ef5e5b6a72df984c78dfa7fe8e6ed3c03647c0
Useful capabilities and limits
Cross-platform binaries, dynamic flags/model schemas, smart prompt routing, queue, file upload/download, pricing/docs, gallery, skills, Assets and local encrypted key config. An actual pinned run handler with current SDK 1.10.1 constructed one intercepted paid POST without a confirmation flag. No provider outcome or compiled-binary paid task was run.
Reviewed surface
Separate deployment/application CLI
Useful capabilities and limits
Serverless app management and fal api inference; this is distinct from genmedia. Deployment privileges, machine configuration and application lifecycle are outside this creative companion.
Reviewed surface
@sebgrosjean/fal 3.0.0; source 175db5a858e9321107a446a5b43a2252abda274a
Useful capabilities and limits
Seven reviewed MCP tools plus task CLI, model discovery, native submit/status/result/cancel/upload, shortcuts and local output downloads. Source inspection is not runtime/task-token evidence; no shared exact current-schema/price/profile review boundary found in inspected source.
This owned companion
Reviewed surface
Shared CLI/local stdio MCP and versioned desktop bundle
Useful capabilities and limits
66 tasks: 32 reads and 34 explicitly confirmed operations, 53 selected current native platform routes plus 13 creative/account/batch helpers. Mandatory shared approval/direct read-only refusal, isolated account keys, current dynamic input validation, exact ordered generation review, Assets/ACL control and private signed-URL delivery. No hosted OAuth, prompt smart-routing, automatic media download/gallery, serverless deployment or measured token superiority.

Build criterion: useful repeatable improvements that are demonstrated, while acknowledging what the official clients already ship. CLI availability, model count, token estimates and SEO alone do not establish a reason to duplicate fal. The official run-command fixture attempted one intercepted POST with dummy credentials; our same submit_job is blocked by the common guard before schema lookup until the caller explicitly confirms. Current model MCP docs also distinguish prompt-level approval from a server gate. This supports the local policy boundary, not universal superiority or a successful paid workload comparison.

Pinned SDK @fal-ai/client 1.10.1 determines current queue owner/app-root construction and upload initiation. This runtime uses reviewed native HTTP rather than the upstream SDK retry/automatic-file helpers; no vendor source code is copied. Dynamic model schemas are fetched on demand, validated before paid calls and included by hash in reviewed batches. Native Assets metadata remains separate from an uploaded input file.

The pinned provider platform snapshot has 82 operations. This package selects 53 creative platform operations: models/pricing/estimation/usage/requests, workflows, every documented Assets endpoint and storage ACL/expiry, plus account billing and organization usage/team reads. Thirteen helpers add model inspection/execution/queue/local upload/private labels/native-schema lookup/reviewed batches. Serverless/compute/key administration, streaming log/file APIs and CSV FOCUS/model-access-control report wrappers are outside this package. This is explicit scope, not total API parity or 66 unique native HTTP routes.

Versions and legacy migration

ComponentReviewed version
Package/desktop manifest2.0.0
Node runtime>=22
MCP SDK1.32.0
Ajv / formats8.20.0 / 3.0.1
TypeScript / Vitest7.0.2 / 5.0.3
Desktop builder2.1.2
Official SDK comparison@fal-ai/client 1.10.1
Official genmedia comparison0.7.0
Community MCP/CLI comparison@sebgrosjean/fal 3.0.0
Native platform snapshotOpenAPI3.1 / APIv1, checked 2026-10-03

2.0.0 is a deliberate major replacement of the private legacy 1.0.0 MCP. All nine tool names remain. search_models uses current native q/cursor/endpoint_id/expand, not old query without cursor. generate_image/generate_video now require explicit model_id and exact input; they return a queue receipt instead of guessing fields, using stale defaults or waiting implicitly. get_job_result reads once; old wait/max_wait_seconds and video wait_for_result are removed. run_model remains one synchronous paid request with a bounded timeout. Status/result/cancel correct the old full-model-subpath URLs to SDK owner/app roots.

Every paid/mutating/file operation now needs explicit approval, uses strict named-account keys and current schemas. Automatic retries, implicit polling, old output summarization, copied popular-model tables and universal every-model claims are removed. Existing receipts should remain with their original account/model; no history or private settings are imported into the public repo. See CHANGELOG.md and RELEASE-CHECKLIST.md.

Updates and removal

Use npx -y @thenavidm/fal-ai-mcp-cli@latest for fresh launch resolution, and reconnect/restart existing processes. Global installs need npm update -g @thenavidm/fal-ai-mcp-cli; a versioned desktop extension needs an explicit updated bundle. Inspect release notes before a major upgrade.

Remove the exact MCP registration/skill/global package or desktop extension when requested. Revoke intended provider keys/OAuth separately. Do not delete other account connections. Removing tooling does not cancel generation, refund credits, delete provider media/payloads or private signed files, or undo account/Assets changes.

npm update -g @thenavidm/fal-ai-mcp-cli
fal-ai-cli --version
# Remove only when requested
codex mcp remove fal-ai
npm uninstall -g @thenavidm/fal-ai-mcp-cli

Validation and remaining evidence

Typecheck/build, 55 behavior/shared CLI tests, 18 actual CLI process checks and full/read-only discovery pass. Two actual anonymous model/schema reads passed without paid requests. The actual current Flux input schema passed an offline intercepted valid submission and rejected a missing prompt before any paid call. A pinned genmedia run handler constructed one intercepted POST without a confirmation flag; no provider network request or paid outcome occurred in either fixture. Public release/CI/artifact and CMS outcomes are recorded separately. Authenticated provider outcomes, desktop GUI installation, fresh matched Codex task/token usage and private site scene/shared-helper deployment remain pending.

More tools for your creative workflow

Connect the tools needed for your requested media work.

fal.ai MCP Server & CLI FAQs

Official MCP and CLI differences, private keys, exact generation reviews, queue receipts, Assets, media access and maintenance.

A shared fal.ai task CLI, local stdio MCP and versioned desktop bundle with 66 tasks, current schemas, private accounts and mandatory operation approval.

Yes.

Current OAuth model generation, separate read-only API-key Platform MCP and public documentation MCP have distinct scopes.

This companion adds shared local policies and reviewed workflows.

Yes.

Provider-linked genmedia offers model/Assets workflows and cross-platform binaries; the separate Python fal CLI manages applications and inference.

CLI absence is not our build criterion.

Verified common confirmation/read-only enforcement, strict private key profiles, exact ordered current-schema/price reviews and file-only signed-credential delivery support recurring creator workflows.

Node22+ local stdio/CLI on macOS, Windows and Linux.

INSTALL covers Codex, Claude Code/Desktop, Cursor, VS Code, Windsurf, Zed, Gemini, Cline and Docker.

Remote-only clients use the official relay.

No.

Codex registers the same stdio npm package directly.

Claude clients are additional supported setups, not prerequisites.

No.

Current public model catalog/schema reads can be anonymous.

Private Assets/billing/generation permissions and key owner require their own safe checks.

Yes.

Exact unique FAL_ACCOUNTS profiles select only their own key/token file; no inherited global or cross-account fallback occurs.

A label does not prove provider owner identity.

No.

Generic endpoints use current discoverable native input schemas.

Missing, ambiguous, external-reference or uncompileable schema fails closed before paid work; provider eligibility still applies.

2.0 requires explicit model_id and native input.

Both generation conveniences queue one job and return a receipt; they do not choose stale defaults, map guessed fields or automatically wait/download.

No.

Save the receipt/account/model, read status once and fetch results after completion.

Never resubmit to check progress; another submission can spend credits again.

Ordered inputs/model IDs/lifecycle/store-IO, selected profile label, current schema hashes, unit quotes and packaged snapshot.

It is not final pricing, ownership proof, key fingerprint or cryptographic human approval.

No.

One-to-ten job limit is not an output/credit ceiling.

Unit quotes vary by actual duration/resolution/output units.

Review cost separately before approval.

Execution stops with known receipt IDs, failed index and unattempted tasks.

Earlier jobs may continue spending credits; failed submission can have unknown outcome.

No replay/rollback/automatic cancellation.

Yes.

FAL_READ_ONLY hides all 34 confirmed operations and the common guard directly refuses confirmed calls too. --agent/--yes never authorize paid work.

No.

Account/lifecycle ACL and expiry control CDN access; provider defaults can be public.

Local store_io:false controls JSON payload storage separately, not media access.

Chosen regular local input uploads are confirmed and capped at 20 MiB; no arbitrary downloader runs.

Signed access credentials are saved only to a requested exclusive private JSON file, never model output.

No.

A cancellation receipt does not guarantee processing stopped, eligibility or refunded credits.

Inspect provider job/billing state; no automatic retry.

Fresh matched successful Codex task/API-usage measurements remain pending.

Schema size, fixture refusals or another client/package’s old numbers cannot establish a saving percentage.

Restart/reconnect npm@latest processes; update global installs/desktop bundles explicitly.

Remove only the intended client registration, then revoke keys/OAuth separately and review retained jobs/media/private files.

Navid Moazzez

AI business strategist & AI OS builder

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.

More MCP servers & CLIs

Related free tools

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers