Skip to content

Fal category is on the model row, not an OpenAPI selector #561

Closed

Description

@tombeckenham

Fal publishes a category on each model row (providerMetadata.category). It is not a selector on GET /v1/openapi/fal.

GET /v1/models?provider=fal (1453 models, fetched 2026-11-04) includes:

providerMetadata.category models
image-to-image 382
video-to-video 194
text-to-image 187
image-to-video 184
text-to-video 118
text-to-audio 59
text-to-speech 41

The OpenAPI operation getProviderOpenApi accepts model and activity only. There is no category parameter.

?activity= is the closest selector, and it still 400s:

  • GET /v1/openapi/fal?activity=image — spec_requires_selector, model-grained, 638 endpoints
  • GET /v1/openapi/fal?activity=video — same, 653 endpoints

The only 200 is one model. GET /v1/openapi/fal?model=fal-ai/flux/dev is two paths on https://queue.fal.run:

  • POST /fal-ai/flux/dev
  • GET /fal-ai/flux/dev/requests/{request_id}

TanStack AI's fal client is one queue client for every model: POST https://queue.fal.run/{endpointId} and GET https://queue.fal.run/{endpointId}/requests/{requestId}. Generating one client per model (1495 of them) does not match that client. A category document would also still hit the 40-endpoint cap: the smallest large categories above are 41 to 382 endpoints.

Same model-grained refusal, no category field at all:

  • cloudflare-ai-gateway — 197 endpoints
  • reactor — 145 endpoints

Ask

  1. Accept ?category= on GET /v1/openapi/fal, using the published providerMetadata.category.
  2. Publish one fal queue document: model id is a path parameter, and the body schema stays the per-model schema. That is the client we can generate once.
  3. Category documents still need the 40-endpoint cap raised, or they 400 as well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions