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:
| Rate | 20 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.
Related
- fal.ai/models to search the catalog
- REST API for the OpenAI-shaped endpoints
- OpenAI Compatible to point an existing tool at AI Pass