> For the complete documentation index, see [llms.txt](https://docs.otari.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.otari.ai/api-reference/catalog.md).

# Catalog

## List Catalog

> The models this caller may use, one entry each however many providers serve it.\
> \
> Prices are the caller's: an organization's override where one applies, else\
> the deployment's row, else the models.dev default. Aliases and routing\
> policies are not models and are not listed; see Routing. A visitor, where\
> the catalog is public, sees the configured instances and the hosted\
> models every organization reaches, at the deployment's rates, and nothing\
> that belongs to a tenant.

```json
{"openapi":"3.1.0","info":{"title":"otari","version":"0.33.0"},"security":[{"ApiKeyAuth":[]},{"XApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"description":"Enter your API key here (sent as Otari-Key header).","in":"header","name":"Otari-Key","type":"apiKey"},"XApiKeyAuth":{"description":"Anthropic-native clients send credentials here (no Bearer prefix).","in":"header","name":"x-api-key","type":"apiKey"}},"schemas":{"CatalogCapability":{"enum":["tool_call","reasoning","structured_output","attachment","open_weights"],"title":"CatalogCapability","type":"string"},"CatalogResponse":{"description":"The grouped catalog, and the facts a reader needs to interpret its prices.","properties":{"count":{"description":"Models matching all filters before paging.","title":"Count","type":"integer"},"default_pricing":{"description":"Whether an unpriced model is metered at the models.dev default.","title":"Default Pricing","type":"boolean"},"defaults_as_of":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"description":"When the accepted models.dev snapshot, which the defaults are billed from, was taken. Null while the bundled snapshot serves.","title":"Defaults As Of"},"facets":{"anyOf":[{"$ref":"#/components/schemas/CatalogFacets"},{"type":"null"}],"description":"Present when include_facets is requested."},"metadata_available":{"description":"False when models.dev could not be read; descriptions are then absent.","title":"Metadata Available","type":"boolean"},"models":{"items":{"$ref":"#/components/schemas/CatalogModelSummary"},"title":"Models","type":"array"}},"required":["default_pricing","defaults_as_of","metadata_available","count","models"],"title":"CatalogResponse","type":"object"},"CatalogFacets":{"description":"The filter rail's choices, from the caller's whole authorized catalog rather than one page.","properties":{"providers":{"description":"Every provider instance offering an authorized model, sorted.","items":{"type":"string"},"title":"Providers","type":"array"},"total_count":{"description":"Authorized models before any of the request's filters.","minimum":0,"title":"Total Count","type":"integer"},"vendors":{"items":{"$ref":"#/components/schemas/CatalogVendorFacet"},"title":"Vendors","type":"array"}},"required":["total_count","providers","vendors"],"title":"CatalogFacets","type":"object"},"CatalogVendorFacet":{"properties":{"value":{"description":"The vendor's name; empty for models whose vendor is unknown.","title":"Value","type":"string"},"vendor_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Slug"}},"required":["value"],"title":"CatalogVendorFacet","type":"object"},"CatalogModelSummary":{"description":"One model, as the list shows it.","properties":{"capabilities":{"$ref":"#/components/schemas/CatalogCapabilities"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The largest any offering serves.","title":"Context Window"},"deprecated":{"default":false,"description":"True only when every offering with metadata says so.","title":"Deprecated","type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"models.dev's, from the offering that named the model.","title":"Description"},"discovered":{"description":"Whether any offering was discovered from its provider.","title":"Discovered","type":"boolean"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"id":{"description":"The catalog id, vendor-qualified where the vendor is known: `z-ai/glm-5.3`, else the bare slug.","title":"Id","type":"string"},"input_modalities":{"items":{"type":"string"},"title":"Input Modalities","type":"array"},"knowledge_cutoff":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Cutoff"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The largest any offering serves.","title":"Max Output Tokens"},"min_input_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"The cheapest offering's, at the comparison context where one was asked for.","title":"Min Input Price Per Million"},"min_output_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Output Price Per Million"},"name":{"title":"Name","type":"string"},"offering_count":{"title":"Offering Count","type":"integer"},"open_weights":{"default":false,"title":"Open Weights","type":"boolean"},"output_modalities":{"items":{"type":"string"},"title":"Output Modalities","type":"array"},"price_sources":{"description":"Which price lists the priced offerings came from, distinct and sorted.","items":{"enum":["organization","deployment","defaults"],"type":"string"},"title":"Price Sources","type":"array"},"provider_count":{"title":"Provider Count","type":"integer"},"providers":{"description":"The provider instances offering it, sorted.","items":{"type":"string"},"title":"Providers","type":"array"},"release_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Release Date"},"resolves_to":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The offering `selector` resolves to.","title":"Resolves To"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The id as a selector: send it as `model` and the best offering the caller can reach answers. Priced offerings come first, and among them the organization's own key, then the vendor's own provider, then the cheapest. Null until the gateway has indexed the catalog.","title":"Selector"},"selectors":{"description":"Every offering's selector, so the list can be searched by one.","items":{"type":"string"},"title":"Selectors","type":"array"},"unpriced_count":{"description":"How many offerings carry no price for this caller.","title":"Unpriced Count","type":"integer"},"vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"}},"required":["id","name","vendor","capabilities","input_modalities","output_modalities","offering_count","provider_count","providers","selectors","price_sources","unpriced_count","discovered"],"title":"CatalogModelSummary","type":"object"},"CatalogCapabilities":{"description":"What a model can do, as models.dev reports it. Any offering's yes is the model's.","properties":{"attachment":{"default":false,"title":"Attachment","type":"boolean"},"reasoning":{"default":false,"title":"Reasoning","type":"boolean"},"structured_output":{"default":false,"title":"Structured Output","type":"boolean"},"temperature":{"default":false,"title":"Temperature","type":"boolean"},"tool_call":{"default":false,"title":"Tool Call","type":"boolean"}},"title":"CatalogCapabilities","type":"object"},"HTTPValidationError":{"properties":{"code":{"const":"invalid_request","description":"Stable error code, also sent as the Otari-Error-Code header.","title":"Code","type":"string"},"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"title":"Detail","type":"array"}},"title":"HTTPValidationError","type":"object"},"ValidationError":{"properties":{"ctx":{"title":"Context","type":"object"},"input":{"title":"Input"},"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"title":"Location","type":"array"},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationError","type":"object"}}},"paths":{"/api/v1/catalog/models":{"get":{"description":"The models this caller may use, one entry each however many providers serve it.\n\nPrices are the caller's: an organization's override where one applies, else\nthe deployment's row, else the models.dev default. Aliases and routing\npolicies are not models and are not listed; see Routing. A visitor, where\nthe catalog is public, sees the configured instances and the hosted\nmodels every organization reaches, at the deployment's rates, and nothing\nthat belongs to a tenant.","operationId":"catalog-list_catalog","parameters":[{"description":"Compare prices for a request of this many input tokens: each model's minimum is taken from the pricing tier that request would settle at. Omitted, the base rates compare.","in":"query","name":"at_context","required":false,"schema":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"description":"Compare prices for a request of this many input tokens: each model's minimum is taken from the pricing tier that request would settle at. Omitted, the base rates compare.","title":"At Context"}},{"description":"Case-insensitive text in a model's name, vendor, id, selectors, or provider instances.","in":"query","name":"search","required":false,"schema":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"description":"Case-insensitive text in a model's name, vendor, id, selectors, or provider instances.","title":"Search"}},{"description":"Number of matching models to skip.","in":"query","name":"skip","required":false,"schema":{"default":0,"description":"Number of matching models to skip.","minimum":0,"title":"Skip","type":"integer"}},{"description":"Maximum number of models to return.","in":"query","name":"limit","required":false,"schema":{"default":100,"description":"Maximum number of models to return.","maximum":1000,"minimum":1,"title":"Limit","type":"integer"}},{"description":"Match any named provider instance.","in":"query","name":"provider","required":false,"schema":{"description":"Match any named provider instance.","items":{"type":"string"},"maxItems":100,"title":"Provider","type":"array"}},{"description":"Match any vendor; an empty value names unknown vendors.","in":"query","name":"vendor","required":false,"schema":{"description":"Match any vendor; an empty value names unknown vendors.","items":{"type":"string"},"maxItems":100,"title":"Vendor","type":"array"}},{"description":"Require every input modality.","in":"query","name":"input_modality","required":false,"schema":{"description":"Require every input modality.","items":{"type":"string"},"maxItems":100,"title":"Input Modality","type":"array"}},{"description":"Require every output modality.","in":"query","name":"output_modality","required":false,"schema":{"description":"Require every output modality.","items":{"type":"string"},"maxItems":100,"title":"Output Modality","type":"array"}},{"description":"Require every capability.","in":"query","name":"capability","required":false,"schema":{"description":"Require every capability.","items":{"$ref":"#/components/schemas/CatalogCapability"},"maxItems":100,"title":"Capability","type":"array"}},{"description":"Minimum context window; unknown windows do not match.","in":"query","name":"min_context","required":false,"schema":{"default":0,"description":"Minimum context window; unknown windows do not match.","minimum":0,"title":"Min Context","type":"integer"}},{"description":"Maximum cheapest input price per million tokens; unpriced models do not match.","in":"query","name":"max_input","required":false,"schema":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Maximum cheapest input price per million tokens; unpriced models do not match.","title":"Max Input"}},{"in":"query","name":"pricing","required":false,"schema":{"default":"all","enum":["all","custom","default","priced","unpriced"],"title":"Pricing","type":"string"}},{"in":"query","name":"source","required":false,"schema":{"default":"all","enum":["all","discovered","custom"],"title":"Source","type":"string"}},{"description":"Release window ending today (UTC); zero disables it. Unknown and future releases do not match.","in":"query","name":"released_within_days","required":false,"schema":{"default":0,"description":"Release window ending today (UTC); zero disables it. Unknown and future releases do not match.","maximum":36500,"minimum":0,"title":"Released Within Days","type":"integer"}},{"in":"query","name":"sort","required":false,"schema":{"default":"name","enum":["name","released","input","output","context","providers"],"title":"Sort","type":"string"}},{"in":"query","name":"direction","required":false,"schema":{"default":"asc","enum":["asc","desc"],"title":"Direction","type":"string"}},{"description":"Include the filter choices drawn from the whole authorized catalog.","in":"query","name":"include_facets","required":false,"schema":{"default":false,"description":"Include the filter choices drawn from the whole authorized catalog.","title":"Include Facets","type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogResponse"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"description":"Validation Error"}},"summary":"List Catalog","tags":["catalog"]}}}}
```

## Get Catalog Model

> One model and every offering of it this caller may use.\
> \
> The whole merged catalog is built and grouped to answer for one model. That\
> is deliberate: the identity a model is found by is a property of the group,\
> so narrowing the build to one model would need the grouping done first. The\
> query count is constant; the cost is CPU per page view, growing with the\
> size of the catalog rather than with the number of readers.\
> \
> A model the caller may not see answers 404, the same as one that does not\
> exist, so the route cannot be used to probe the catalog behind an allow-list.\
> A signed-in caller's offerings also carry their organization's own usage of\
> each over the last 30 days.

```json
{"openapi":"3.1.0","info":{"title":"otari","version":"0.33.0"},"security":[{"ApiKeyAuth":[]},{"XApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"description":"Enter your API key here (sent as Otari-Key header).","in":"header","name":"Otari-Key","type":"apiKey"},"XApiKeyAuth":{"description":"Anthropic-native clients send credentials here (no Bearer prefix).","in":"header","name":"x-api-key","type":"apiKey"}},"schemas":{"CatalogModelDetail":{"description":"One model with everything the detail page shows.","properties":{"also_available_from":{"items":{"$ref":"#/components/schemas/CatalogElsewhere"},"title":"Also Available From","type":"array"},"capabilities":{"$ref":"#/components/schemas/CatalogCapabilities"},"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The largest any offering serves.","title":"Context Window"},"default_pricing":{"description":"Whether an unpriced model is metered at the models.dev default.","title":"Default Pricing","type":"boolean"},"deprecated":{"default":false,"description":"True only when every offering with metadata says so.","title":"Deprecated","type":"boolean"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"models.dev's, from the offering that named the model.","title":"Description"},"discovered":{"description":"Whether any offering was discovered from its provider.","title":"Discovered","type":"boolean"},"family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Family"},"id":{"description":"The catalog id, vendor-qualified where the vendor is known: `z-ai/glm-5.3`, else the bare slug.","title":"Id","type":"string"},"input_modalities":{"items":{"type":"string"},"title":"Input Modalities","type":"array"},"knowledge_cutoff":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Cutoff"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"The largest any offering serves.","title":"Max Output Tokens"},"min_input_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"The cheapest offering's, at the comparison context where one was asked for.","title":"Min Input Price Per Million"},"min_output_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Output Price Per Million"},"name":{"title":"Name","type":"string"},"offering_count":{"title":"Offering Count","type":"integer"},"offerings":{"items":{"$ref":"#/components/schemas/CatalogOffering"},"title":"Offerings","type":"array"},"open_weights":{"default":false,"title":"Open Weights","type":"boolean"},"output_modalities":{"items":{"type":"string"},"title":"Output Modalities","type":"array"},"price_sources":{"description":"Which price lists the priced offerings came from, distinct and sorted.","items":{"enum":["organization","deployment","defaults"],"type":"string"},"title":"Price Sources","type":"array"},"provider_count":{"title":"Provider Count","type":"integer"},"providers":{"description":"The provider instances offering it, sorted.","items":{"type":"string"},"title":"Providers","type":"array"},"release_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Release Date"},"resolves_to":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The offering `selector` resolves to.","title":"Resolves To"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The id as a selector: send it as `model` and the best offering the caller can reach answers. Priced offerings come first, and among them the organization's own key, then the vendor's own provider, then the cheapest. Null until the gateway has indexed the catalog.","title":"Selector"},"selectors":{"description":"Every offering's selector, so the list can be searched by one.","items":{"type":"string"},"title":"Selectors","type":"array"},"unpriced_count":{"description":"How many offerings carry no price for this caller.","title":"Unpriced Count","type":"integer"},"vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor"}},"required":["id","name","vendor","capabilities","input_modalities","output_modalities","offering_count","provider_count","providers","selectors","price_sources","unpriced_count","discovered","default_pricing","offerings","also_available_from"],"title":"CatalogModelDetail","type":"object"},"CatalogElsewhere":{"description":"A provider models.dev lists for this model that this deployment has not configured.","properties":{"name":{"title":"Name","type":"string"},"provider_type":{"title":"Provider Type","type":"string"}},"required":["provider_type","name"],"title":"CatalogElsewhere","type":"object"},"CatalogCapabilities":{"description":"What a model can do, as models.dev reports it. Any offering's yes is the model's.","properties":{"attachment":{"default":false,"title":"Attachment","type":"boolean"},"reasoning":{"default":false,"title":"Reasoning","type":"boolean"},"structured_output":{"default":false,"title":"Structured Output","type":"boolean"},"temperature":{"default":false,"title":"Temperature","type":"boolean"},"tool_call":{"default":false,"title":"Tool Call","type":"boolean"}},"title":"CatalogCapabilities","type":"object"},"CatalogOffering":{"description":"One way this deployment can call a model: a selector on a provider.","properties":{"context_window":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Context Window"},"credential":{"$ref":"#/components/schemas/CatalogCredential","description":"Whose key serves it: `deployment` for a `providers:` instance the operator configured, `hosted` for a provider the deployment pays for in any workspace of the viewer's organization, `organization` for one on the organization's own key, which it may set its own rate for. A workspace can still call a `hosted` provider with the organization's own key."},"discovered":{"description":"Whether the provider itself reported this model.","title":"Discovered","type":"boolean"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"metadata_input_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"What the live models.dev catalog lists this provider charging. The default is billed from the accepted models.dev snapshot, which can lag the live catalog, so a difference means a price update is waiting for review.","title":"Metadata Input Price Per Million"},"metadata_output_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Metadata Output Price Per Million"},"price_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"For a default, the `models.dev:<provider>/<model>` entry that matched; the selector otherwise.","title":"Price Reference"},"price_source":{"anyOf":[{"enum":["organization","deployment","defaults"],"type":"string"},{"type":"null"}],"description":"Which price list `pricing` came from, for this viewer: the organization's own override, the deployment's stored row, or the models.dev defaults. Null when nothing prices it.","title":"Price Source"},"pricing":{"anyOf":[{"$ref":"#/components/schemas/ModelPricingInfo"},{"type":"null"}]},"provider":{"description":"The provider instance the selector names.","title":"Provider","type":"string"},"provider_type":{"description":"The any-llm implementation behind the instance.","title":"Provider Type","type":"string"},"quantization":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"From the provider's id, when it names one.","title":"Quantization"},"selector":{"description":"What to send as `model`, in `instance:model` form.","title":"Selector","type":"string"},"short_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The pinned spelling the gateway also accepts for this offering: the instance with the model's catalog id (`fireworks:openai/gpt-oss-120b`), which pins the instance and reaches the model's best offering on it. Null for another build on the same instance, or until the gateway has indexed the catalog.","title":"Short Selector"},"usage_30d":{"anyOf":[{"$ref":"#/components/schemas/OfferingUsage"},{"type":"null"}]}},"required":["selector","provider","provider_type","credential","discovered"],"title":"CatalogOffering","type":"object"},"CatalogCredential":{"description":"Whose key serves a catalog offering, which also says who may price it.","enum":["deployment","organization","hosted"],"title":"CatalogCredential","type":"string"},"ModelPricingInfo":{"description":"Pricing information for a model.","properties":{"cache_read_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cache Read Price Per Million"},"cache_write_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cache Write Price Per Million"},"input_price_per_million":{"title":"Input Price Per Million","type":"number"},"output_price_per_million":{"title":"Output Price Per Million","type":"number"},"pricing_tiers":{"items":{"anyOf":[{"$ref":"#/components/schemas/PricingTier"},{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"integer"}]},"type":"object"}]},"title":"Pricing Tiers","type":"array"},"unit":{"default":"tokens","title":"Unit","type":"string"}},"required":["input_price_per_million","output_price_per_million"],"title":"ModelPricingInfo","type":"object"},"PricingTier":{"description":"Whole-request price cliff selected by total billable input tokens.","properties":{"cache_read_price_per_million":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"title":"Cache Read Price Per Million"},"cache_write_price_per_million":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"title":"Cache Write Price Per Million"},"input_price_per_million":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"title":"Input Price Per Million"},"min_input_tokens":{"exclusiveMinimum":0,"title":"Min Input Tokens","type":"integer"},"output_price_per_million":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"title":"Output Price Per Million"}},"required":["min_input_tokens"],"title":"PricingTier","type":"object"},"OfferingUsage":{"description":"What the viewer's organization actually paid for one offering, last 30 days.\n\nThe listed rate is what a token costs; this is what the tokens cost, which is\nlower wherever prompt caching hit. Absent for a visitor and for an offering\nthe organization never called.","properties":{"cache_hit_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Cache-read tokens over prompt tokens. Null when no prompt tokens.","title":"Cache Hit Rate"},"cache_read_tokens":{"title":"Cache Read Tokens","type":"integer"},"effective_price_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Spend over every token served, per million. Null when no tokens were served.","title":"Effective Price Per Million"},"requests":{"title":"Requests","type":"integer"},"spend_usd":{"title":"Spend Usd","type":"number"},"total_tokens":{"title":"Total Tokens","type":"integer"}},"required":["requests","total_tokens","cache_read_tokens","spend_usd","cache_hit_rate","effective_price_per_million"],"title":"OfferingUsage","type":"object"},"HTTPValidationError":{"properties":{"code":{"const":"invalid_request","description":"Stable error code, also sent as the Otari-Error-Code header.","title":"Code","type":"string"},"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"title":"Detail","type":"array"}},"title":"HTTPValidationError","type":"object"},"ValidationError":{"properties":{"ctx":{"title":"Context","type":"object"},"input":{"title":"Input"},"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"title":"Location","type":"array"},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationError","type":"object"}}},"paths":{"/api/v1/catalog/models/{model_id}":{"get":{"description":"One model and every offering of it this caller may use.\n\nThe whole merged catalog is built and grouped to answer for one model. That\nis deliberate: the identity a model is found by is a property of the group,\nso narrowing the build to one model would need the grouping done first. The\nquery count is constant; the cost is CPU per page view, growing with the\nsize of the catalog rather than with the number of readers.\n\nA model the caller may not see answers 404, the same as one that does not\nexist, so the route cannot be used to probe the catalog behind an allow-list.\nA signed-in caller's offerings also carry their organization's own usage of\neach over the last 30 days.","operationId":"catalog-get_catalog_model","parameters":[{"in":"path","name":"model_id","required":true,"schema":{"title":"Model Id","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogModelDetail"}}},"description":"Successful Response"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}},"description":"Validation Error"}},"summary":"Get Catalog Model","tags":["catalog"]}}}}
```

## Refresh Selector Index

> Re-index the short spellings now, rather than on the refresher's next tick.

```json
{"openapi":"3.1.0","info":{"title":"otari","version":"0.33.0"},"security":[{"ApiKeyAuth":[]},{"XApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"description":"Enter your API key here (sent as Otari-Key header).","in":"header","name":"Otari-Key","type":"apiKey"},"XApiKeyAuth":{"description":"Anthropic-native clients send credentials here (no Bearer prefix).","in":"header","name":"x-api-key","type":"apiKey"}},"schemas":{"SelectorIndexResponse":{"description":"What the rebuilt index knows.","properties":{"models":{"description":"Slugs that resolve to an offering.","title":"Models","type":"integer"},"offerings":{"description":"Selectors the deployment serves.","title":"Offerings","type":"integer"},"pinned_selectors":{"description":"Pinned spellings, one per instance a model is offered on.","title":"Pinned Selectors","type":"integer"}},"required":["offerings","pinned_selectors","models"],"title":"SelectorIndexResponse","type":"object"}}},"paths":{"/api/v1/catalog/selectors/refresh":{"post":{"description":"Re-index the short spellings now, rather than on the refresher's next tick.","operationId":"catalog-refresh_selector_index","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectorIndexResponse"}}},"description":"Successful Response"}},"summary":"Refresh Selector Index","tags":["catalog"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.otari.ai/api-reference/catalog.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
