An open source fal.ai MCP server and shared CLI with 66 tools and exact reviewed generation workflows.
Key takeaways
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 askingFind 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.
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
- Sign into the intended fal account. Confirm which personal/team account owns the credits and key before creating or copying it.
- 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.
- 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.
- 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.
- 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 --networkfal-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 --agentPublic 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 --agentThe 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:
| Flag | What it does |
|---|---|
| --agent | Compact JSON, never approval |
| --select a,b.c | Local result field selection |
| --confirm | Only the requested paid/mutating/file operation |
| --account LABEL | Exact private key profile |
| --payload / --payload-file | Exclusive native body input |
| --tasks JSON | Repeat each ordered generation object |
| --review-sha256 HASH | Exact current preview hash |
| --output-file PATH | New exclusive private signed-credential JSON file |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | It worked |
| 2 | The command was typed wrong, or a write needed --confirm |
| 3 | It wasn't found |
| 4 | fal.ai rejected the credentials |
| 5 | fal.ai's API failed |
| 7 | You hit a rate limit, so wait and try again |
| 10 | Nothing 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-settingsExact 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 --agentEvery 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_idstyle 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
depthlevels. - 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
usernamefield and a product line via theproductfield. - 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 --helpfal.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.
- Default
- Credentials
- What it does
- Private account API key; ignored as a fallback when named profiles are explicitly configured.
- Default
- Credentials
- What it does
- Absolute owner-private regular token-only file; overrides selected direct key.
- Default
- Credentials
- What it does
- Private unique {name,api_key,token_file} account profiles.
- Default
- Credentials
- What it does
- Exact selected profile label; provider owner is not inferred.
- Default
- Safety
- What it does
- 1/true hides and directly refuses every non-read task.
- Default
- Safety
- What it does
- 0/false refuses confirmed paid/mutating/file-write tasks.
- Default
- Safety
- What it does
- Optional best-effort append-only guard decision file, no payload/key.
- Default
- Tuning
- What it does
- Default 30000; 100–300000 permitted; no auto retry.
- 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 see | What to do |
|---|---|
| Missing/invalid profiles | Check exact unique private labels and key/file settings. |
| Public catalog works only | Model metadata can be anonymous; verify permissions for the actual private operation. |
| 401/403 | Check intended key, account role and native operation scopes. |
| 429 | Respect provider concurrency/quota guidance; no automatic retry. |
| Model schema unsupported | Fails closed before paid work; no guessed fallback. |
| Review mismatch | Preview the exact changed inputs, order, account label, schema and unit quotes again. |
| Unknown generation outcome | Inspect history before explicitly requesting another paid submission. |
| Result not ready | Read status once; preserve the existing job ID. |
| Upload refused | Absolute regular non-symlink file, 1 byte–20 MiB, correct MIME. |
| Existing signed-output file | Choose 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_idwins. 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
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- 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"}
- Parameter
q- Required
- False
- Native shape
- {"type": "string", "description": "Free-text search query to filter models by name, description, or category"}
- Parameter
category- Required
- False
- Native shape
- {"type": "string", "description": "Filter by category (e.g., 'text-to-image', 'image-to-video', 'training')"}
- Parameter
status- Required
- False
- Native shape
- {"type": "string", "enum": ["active", "deprecated"], "description": "Filter models by status - omit to include all statuses"}
- 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.
- 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.
- 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.
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- 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."}
- 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."}
- 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."}
- 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)."}
- 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."}
- 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"}
- 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"}
- 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"}
- 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.
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- 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."}
- 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."}
- 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."}
- 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)."}
- 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."}
- 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"}
- 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.
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- 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."}
- 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."}
- 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"}
- 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"}
- 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"}
- 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"}
- 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.
- Parameter
request_id- Required
- True
- Native shape
- {"type": "string", "format": "uuid", "description": "Unique identifier for the request (UUID format)"}
- 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
- Parameter
limit- Required
- False
- Native shape
- {"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Number of items to return per page (max 100)"}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor encoding the page number"}
- 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"}
- 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."}
- 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."}
- Parameter
status- Required
- False
- Native shape
- {"type": "string", "enum": ["success", "error", "user_error"], "description": "Filter by request status"}
- Parameter
request_id- Required
- False
- Native shape
- {"type": "string", "format": "uuid", "description": "Filter by specific request ID"}
- 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."}
- 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
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- Parameter
query- Required
- False
- Native shape
- {"type": "string", "description": "Text search query for semantic search. Mutually exclusive with image_url and video_url."}
- Parameter
image_url- Required
- False
- Native shape
- {"type": "string", "description": "Image URL for similarity search. Mutually exclusive with query and video_url."}
- Parameter
video_url- Required
- False
- Native shape
- {"type": "string", "description": "Video URL for similarity search. Mutually exclusive with query and image_url."}
- 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)."}
- 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_idwins.", "deprecated": true}
- 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."}
- Parameter
only_api_requests- Required
- False
- Native shape
- {"type": "boolean", "description": "Only include requests made via API keys. Mutually exclusive with exclude_api_requests."}
- 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
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- Parameter
search- Required
- False
- Native shape
- {"type": "string", "description": "Search by workflow name or title"}
- 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.
- 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
- Parameter
username- Required
- True
- Native shape
- {"type": "string", "maxLength": 128, "pattern": "^[a-zA-Z0-9_-]+$", "description": "The username of the workflow owner"}
- 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.
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- Parameter
q- Required
- False
- Native shape
- {"type": "string", "description": "Text query for hybrid semantic search"}
- Parameter
search_image_url- Required
- False
- Native shape
- {"type": "string", "format": "uri", "description": "fal-hosted image URL to use for semantic image search"}
- Parameter
search_video_url- Required
- False
- Native shape
- {"type": "string", "format": "uri", "description": "fal-hosted video URL to use for semantic video search"}
- 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"}
- 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"}
- Parameter
section- Required
- False
- Native shape
- {"type": "string", "enum": ["all-media", "uploads", "favorites", "generated"], "default": "all-media", "description": "Asset library section to browse"}
- Parameter
collection_id- Required
- False
- Native shape
- {"type": "string", "description": "Collection scope to browse"}
- Parameter
character_identifier- Required
- False
- Native shape
- {"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Character identifiers to use as @mention semantic filters"}
- Parameter
tag_id- Required
- False
- Native shape
- {"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Tag IDs to filter by"}
- 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.
- Parameter
limit- Required
- False
- Native shape
- {"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Maximum number of collections to return"}
- 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.
- 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.
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- Parameter
q- Required
- False
- Native shape
- {"type": "string", "description": "Text query for hybrid semantic search"}
- Parameter
search_image_url- Required
- False
- Native shape
- {"type": "string", "format": "uri", "description": "fal-hosted image URL to use for semantic image search"}
- Parameter
search_video_url- Required
- False
- Native shape
- {"type": "string", "format": "uri", "description": "fal-hosted video URL to use for semantic video search"}
- 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"}
- 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"}
- Parameter
section- Required
- False
- Native shape
- {"type": "string", "enum": ["all-media", "uploads", "favorites", "generated"], "default": "all-media", "description": "Asset library section to browse"}
- Parameter
character_identifier- Required
- False
- Native shape
- {"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Character identifiers to use as @mention semantic filters"}
- Parameter
tag_id- Required
- False
- Native shape
- {"type": ["array", "null"], "items": {"type": "string"}, "default": [], "description": "Tag IDs to filter by"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
collection_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Collection ID"}
- 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.
- Parameter
limit- Required
- False
- Native shape
- {"type": "integer", "minimum": 1, "maximum": 100, "default": 50, "description": "Maximum number of collections to return"}
- 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.
- 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.
- Parameter
character_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Character collection ID"}
- 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.
- 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.
- Parameter
character_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Character collection ID"}
- 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.
- Parameter
character_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Character collection ID"}
- 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.
- Parameter
character_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Character collection ID"}
- 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.
- 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.
- 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.
- 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.
- Parameter
tag_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Tag ID"}
- 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.
- Parameter
tag_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Tag ID"}
- 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.
- 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.
- 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.
- Parameter
asset_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Asset ID"}
- 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.
- 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.
- 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.
- 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.
- Parameter
tag_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Tag ID"}
- 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.
- Parameter
tag_id- Required
- True
- Native shape
- {"type": "string", "minLength": 1, "description": "Tag ID"}
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- 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."}
- Parameter
cursor- Required
- False
- Native shape
- {"type": "string", "description": "Pagination cursor from previous response. Encodes the page number."}
- 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."}
- 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."}
- 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."}
- 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)."}
- 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."}
- 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"}
- 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"}
- 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."}
- 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)."}
- 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.
- Program
- fal-ai-cli
- Use
- Scripts and agents with a shell
- Program
- fal-ai-mcp
- Use
- AI clients supporting stdio
- Program
- fal-ai-2.0.1.mcpb
- Use
- Compatible Claude Desktop custom extensions
- 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 loginIf 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 toolsMake 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
- Sign into the intended fal account. Confirm which personal/team account owns the credits and key before creating or copying it.
- 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.
- 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.
- 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.
- 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 --networkAgent-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 listAccount 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 listUse 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
- Download
fal-ai-2.0.1.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- 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.
- 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:
| OS | Typical 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-cliCline 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 --agentPublic 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 --helpUpdates 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-cliTroubleshooting
| Symptom | Check and resolution |
|---|---|
| Binary/Node missing | Node22+, npm global executable PATH; reopen terminal, use npm.cmd if PowerShell policy requires. |
| Public models work but Assets fail | Catalog is public; verify intended API key/account and per-operation native permissions. |
| 401/403 | Check key ownership, revocation, permissions and endpoint eligibility; no cross-account fallback. |
| 429 | Respect provider guidance; local pacing is not shared account concurrency/quota enforcement. |
| Input schema error | Read exact current get_model_info output; native field names differ per model. |
| Schema unavailable/ambiguous | Paid call fails closed; official clients may support that endpoint differently. No fallback bypass. |
| Review mismatch | Current inputs/schema/unit price/profile/order changed; preview the actual requested batch again. |
| Unknown generation outcome | Preserve known receipt and inspect provider history before any explicit repeat. |
| Job result not ready | Read status once, then fetch result after COMPLETED; do not submit a replacement to poll. |
| Native queue path differs | Status/result/cancel use owner/app root from current SDK, not full inference subpath. |
| File upload refused | Absolute non-symlink regular file 1 byte–20 MiB, correct MIME; no multipart/URL upload shortcut. |
| Signed output path exists | Choose a new private path; existing files are never overwritten. |
| Changed storage policy | Native replacement may clear omitted settings; read current configuration and send full desired values. |
| GUI/remote config fails | That 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:mcpbSource 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| Flag | Behavior |
|---|---|
| --agent | Compact JSON, no input/color; never confirmation |
| --confirm | Explicit approval for exactly the requested operation |
| --account LABEL | Exact private API-key profile |
| --select a,b.c | Local output field selection |
| --payload / --payload-file | Native body, mutually exclusive with other body routes |
| --tasks JSON | Repeat an individual ordered generation object |
| --review-sha256 HASH | Exact preview hash before batch submission |
| --output-file PATH | New private signed-URL credential file |
| Exit | Meaning |
|---|---|
| 0 | Handler success/receipt; submission does not mean completed generation |
| 2 | Invalid input or refused policy operation |
| 3 | Not found |
| 4 | Provider authentication/permissions |
| 5 | Provider/network/unknown outcome |
| 7 | Rate limit |
| 10 | Missing 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.
- 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
| Component | Reviewed version |
|---|---|
| Package/desktop manifest | 2.0.0 |
| Node runtime | >=22 |
| MCP SDK | 1.32.0 |
| Ajv / formats | 8.20.0 / 3.0.1 |
| TypeScript / Vitest | 7.0.2 / 5.0.3 |
| Desktop builder | 2.1.2 |
| Official SDK comparison | @fal-ai/client 1.10.1 |
| Official genmedia comparison | 0.7.0 |
| Community MCP/CLI comparison | @sebgrosjean/fal 3.0.0 |
| Native platform snapshot | OpenAPI3.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-cliValidation 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.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 newsletterThe 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.













