Docs

Start here

List every model a key can run

GET/v1/modelson https://api.auray.ai/v1

Every model a key can run, and what each one would do with a request.

Every model a key can run, and what each one would do with a request. connected means a request dispatches; described means it answers 501 model_not_connected today; undescribed means the address is served but this platform has not read the model's documentation, so a submit answers 404 model_not_described and no field list is published; paused means a submit is refused 503 before anything is charged — the product's switch, a product this platform is not charging for, the model's own pause or its family's — and the row carries the code and the reason that submit would answer; retired means the address answers 410 model_deprecated, with the successor to use. The four models behind the apps are listed beside the rest of the catalogue. The chat slots (kind: chat, called at /v1/chat) and the embedding model (kind: embedding, called at /openai/v1/embeddings) are rows too, listed when asked for with kind — the default is the addresses, as it always was. A model we have hidden is in no row and no count.

Filter with status, kind, category, endpoint_id (either spelling of an id) and q (a case-folded substring over slug, address and category). Page with limit and cursor; expand=openapi embeds each row's contract and forces a page of at most 25; include=input adds the field list. total, described, connected, paused, chat and embedding count the whole catalogue and never move with a filter; filtered is the filtered set before paging.

#Authentication

Authorization: Bearer auray_sk_… — Any key. The read bucket paces it.

#Request

#Query parameters

NameTypeRequiredDescription
statusstringnoReturn only models in this state. One of "connected", "described", "undescribed", "paused", "retired".
kindstringnoReturn only models of these kinds, as one of the four or a comma-separated list of them: ours the models behind the apps, resold the rest of the catalogue, chat a chat slot, embedding the embedding model. Left out, the listing is the addresses (ours,resold), as it always was; kind=ours,resold,chat,embedding lists every model. Anything else is refused 400 invalid_kind.
categorystringnoReturn only models filed under this task, e.g. text-to-image. The vocabulary is derived from the models that exist rather than declared, so a refusal carries the full list in categories.
addressstringnoOnly the model at this address — the string a job prints as model and a submit is posted to. The same filter as endpoint_id, under the name the rest of the API uses; it wins when both are sent.
endpoint_idstringnoReturn only the model with this address (bria/fibo-edit/blend, with or without a leading slash) or this slug (bria-fibo-edit-blend). An address nobody serves returns an empty list rather than a 404 — it is a filter.
includestringnoAdd each model's field list. Off by default: across the catalogue it is tens of thousands of characters. One of "input".
expandstringnoEmbed each row's full OpenAPI 3.1 contract, the same document GET /models/{address}/openapi.json serves. The documents average 22 kB, so this sets limit to 10 by default and caps it at 25. One of "openapi".
limitintegernoHow many models to return. Omit it and the whole catalogue comes back in one response, which is what this endpoint has always done — paging is opt-in so that callers written before it existed keep getting a complete list. 1 to 1000.
cursorstringnoResume after this id. Pass back the next_cursor of the previous page and stop when it is null. It is a position in the sorted list, not a reference, so a page still resolves when the model it was cut at has since been withdrawn.
qstringnoA case-folded substring matched against the slug, the address and the category.

#Example request

curl https://api.auray.ai/v1/models \
  -H "Authorization: Bearer $AURAY_API_KEY"

#Responses

#200 OK

The catalogue.

FieldTypeRequiredDefaultDescription
objectstringno—One of "list".
dataobject[]no—
data[].idstringno—The catalogue slug to put in model.
data[].addressstringyes—The address: what a job prints as model, what /v1/jobs?model= filters on, and what is posted to. id is the catalogue slug, kept as an alias. A chat slot's is its own name, which is what a chat turn prints as model; POST /v1/chat and /openai/v1 also accept it as auray-ai/<slot>, as every model behind the apps is addressed under auray-ai/.
data[].kindstringno—Which kind of model it is: one behind the apps (ours), the rest of the catalogue (resold), a chat slot or the embedding model. One of "ours", "resold", "chat", "embedding".
data[].statusstringno—connected dispatches; described is 501 model_not_connected; undescribed is 404 model_not_described; paused is refused 503 with code and reason; retired is 410 model_deprecated with successor. One of "connected", "described", "undescribed", "paused", "retired".
data[].codestringno—For paused and retired: the error code a submit would answer, e.g. model_disabled, api_disabled, model_deprecated.
data[].reasonstringno—For paused and retired: our note for it, or null when there is none — code is then the whole answer.
data[].successorstringno—For retired: the address to use instead, when one is named.
data[].providerstringno—Which adapter would run it. Null when none can.
data[].base_urlstringno—The host endpoint is called on: the execution host for an address, this API for a chat slot or the embedding model.
data[].endpointstringno—The address to POST to on the execution host, with a leading slash — /auray-ai/krea-2-turbo/text-to-image. It was the constant /external until every model got an address of its own.
data[].categorystringno—What the model does, e.g. image-to-video. unknown for a model nothing has filed yet.
data[].modalitystringno—On an address: what it makes. A plan opens catalogue models by this (limits.external.modalities on GET /v1/plans); a model the account's plan leaves out is refused 403 model_not_in_plan before anything is charged — unless a pass the account holds for it covers the job: a catalogue model's pass runs it on any plan (passes on GET /v1/me). A trainer is what it trains. One of "image", "video", "audio", "3d", "text", "other".
data[].licenceobjectno—On an address: the licence that limits where it may be served, or null. A model under one is refused 428 region_required until the account declares its country, and 451 region_blocked where the licence excludes it.
data[].licence.idstringno—
data[].licence.namestringno—
data[].licence.excludesstringno—The territories the licence excludes, in words.
data[].lifecycleobjectno—On an address: how its jobs live — our figures where we set one, the model's compiled ones elsewhere.
data[].lifecycle.queuestringno—What a full platform does with a job: parks it in the queue, or refuses at once. A queue option sent to a model that refuses is answered 422 queue_not_offered on the queue hosts. One of "waits", "refuses".
data[].lifecycle.cancelstringno—What a stop does: nothing, because the model cannot be stopped once it starts (none — the charge stands and you stop watching), the job is stopped and refunded in full (full), or it is stopped and what already ran is kept, the rest refunded (keeps_progress). One of "none", "full", "keeps_progress".
data[].lifecycle.waitablebooleanno—Whether ?wait= and auray.run may hold a request open on it.
data[].lifecycle.wait_ceiling_secondsintegerno—The longest such a wait, in seconds; 0 when it is not waitable.
data[].lifecycle.poll_secondsintegerno—How often to come back when polling.
data[].lifecycle.stall_ceiling_secondsintegerno—Past this age a job nobody has heard from is reaped and refunded — the reap in force, which we may lengthen.
data[].lifecycle.expected_secondsintegerno—How long one usually takes, for an estimate; 0 means not known.
data[].presentationobjectno—On an address: how the desktop presents it — ours where we set it, null for the compiled presentation.
data[].presentation.featured_orderintegerno—Its place in Playground's hero, 1 first, ahead of the models behind the apps.
data[].presentation.default_for_appstringno—The app it opens for somebody who never chose a model there; only ever that app's own model. One of "photo", "video", "music", "threed", null.
data[].presentation.cover_urlstringno—Its cover, on our media origin.
data[].inputobject[]no—Only with include=input.
data[].input[].namestringno—
data[].input[].typestringno—
data[].input[].requiredbooleanno—
data[].openapiobjectno—The model's own OpenAPI 3.1 document. Only with expand=openapi.
next_cursorstringno—Pass as cursor for the next page, or null when this page reached the end. Always present, including on an unpaged response.
filteredintegerno—How many models matched the filters, before paging. The only one of the three counts that moves when a filter does.
totalintegerno—Every address in the catalogue that is listed, whatever its status. The chat slots and the embedding model are counted apart, in chat and embedding.
describedintegerno—How many of total have a published field list.
connectedintegerno—How many of them can run today.
pausedintegerno—How many listed addresses a submit would refuse 503 today.
chatintegerno—How many chat slots can run today.
embeddingintegerno—How many embedding models can run today.

#403 Forbidden

#Status codes

StatusMeaning
200The catalogue.
403Forbidden

Every refusal names its code, and every code is explained at Errors.

Start typing to search every page of the documentation.

Up arrow Down arrow to moveEnter to openEscape to close