View raw .mdDownload

Fal AI models

AI Pass speaks Fal's API. Any model on fal.ai/models can be called through your AI Pass key, billed to your AI Pass wallet. You do not need a Fal account.

Browse the full catalog at fal.ai/models, copy the endpoint id, and call it.

Base URL

Replace https://queue.fal.run with https://aipass.one/v1/fal and keep the endpoint id exactly as Fal writes it.

https://aipass.one/v1/fal/{fal-endpoint-id}

Your AI Pass key goes in the Authorization header. Fal's own Key scheme works, and so does Bearer, so a client written for Fal needs a credential change and nothing else.

Submit a request

curl -X POST https://aipass.one/v1/fal/fal-ai/gemini-3.1-flash-tts \
  -H "Authorization: Key $AIPASS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Hi there"}'

You get Fal's queue document back, with every URL pointing at AI Pass:

{
  "status": "IN_QUEUE",
  "request_id": "aiprv_68e7a49e-909d-4508-a5b3-b45a1f055c54",
  "response_url": "https://aipass.one/v1/fal/fal-ai/gemini-3.1-flash-tts/requests/aiprv_68e7a49e-...",
  "status_url": "https://aipass.one/v1/fal/fal-ai/gemini-3.1-flash-tts/requests/aiprv_68e7a49e-.../status",
  "cancel_url": "https://aipass.one/v1/fal/fal-ai/gemini-3.1-flash-tts/requests/aiprv_68e7a49e-.../cancel"
}

Poll and collect

curl "$STATUS_URL" -H "Authorization: Key $AIPASS_API_KEY"
# {"status":"IN_QUEUE",...}  then  {"status":"COMPLETED",...}

curl "$RESPONSE_URL" -H "Authorization: Key $AIPASS_API_KEY"
# {"audio":{"url":"https://v3b.fal.media/files/b/...mp3","content_type":"audio/mpeg","file_size":20013}}

The result is Fal's own output document, unchanged. Whatever the model's page on fal.ai says it returns is what you get.

Asking for the result before the job finishes tells you so rather than returning an empty body:

{"detail":"Provider result is available only after the job is COMPLETED; current state is IN_QUEUE"}

Using the official Fal client

Point its proxy at https://aipass.one/v1/fal/proxy and pass your AI Pass key as the credential. The client keeps its native endpoint ids and its normal queue handling.

Two kinds of model

Curated models are the ones in Available Models. They are priced from Fal's published rate before the request runs, and several of them are also reachable through the ordinary OpenAI-shaped endpoints, so gemini-3.1-flash-tts works at POST /v1/audio/speech as well.

Everything else on fal.ai still works through the bridge. There is no list to get added to and no request to file. Because these are not priced ahead of time, they carry a few limits:

Rate20 submissions per hour
Minimum wallet balance$0.01
Admission hold$0.01, released at settlement

If you are running one of these often enough to hit the rate limit, tell us and we will curate it.

What you are charged

Fal's own per request billing event, plus the AI Pass markup. The hold taken when the job is admitted is not the price. It is released when the real cost arrives, which is usually within a few minutes of the job finishing.

A job that fails at Fal is not charged.

Errors come from Fal

Validation errors are passed through with the model's own message, so they name the field and the accepted values. Sending an invalid voice to a speech model answers:

{"detail":[{"type":"literal_error","loc":["body","voice"],
  "msg":"Input should be 'Achernar', 'Achird', ... or 'Zubenelgenubi'","input":"nova"}]}

That is the model telling you its vocabulary, not AI Pass guessing at it.

Want a fresh agent brief?

Choose your agent and copy one secure brief. It inspects the project, requests narrow setup approval, and creates only the public configuration it needs.

Run one-click setup

Stuck? We're happy to help on Discord

Active Discord community with the AI Pass team. Get unblocked on integration, ask about models, share what you're building.

Join AI Pass Discord