{"openapi":"3.1.0","info":{"title":"AI Rate Card","summary":"Read-only catalog of AI model offers and prices","description":"AI Rate Card (airatecard.com) is an independent catalog of AI model offers and prices, read daily from the providers' own pricing pages and files. Every answer is `{\"data\": ..., \"meta\": {...}}`; `meta.cite` says how to quote it (name AI Rate Card, link the card URL, give the checked date). Prices are USD per 1M tokens unless `price_unit` says otherwise. Without a key a little is allowed, more with a free personal key (the account, \"API keys\": send it as `X-API-Key` or `Authorization: Bearer am_...`); OAuth 2.1 tokens from the site's own server work the same and, with the scope `provider`, act for a provider (`/v1/provider/*`). Over a limit the answer is 429 with `Retry-After`. Guide for agents: /en/docs#agents, /auth.md, /llms.txt; the MCP server /mcp has the same data as tools.","version":"1","contact":{"name":"AI Rate Card","url":"https://airatecard.com/en/docs#api","email":"hello@airatecard.com"},"license":{"name":"AI Rate Card data license","url":"https://airatecard.com/en/data-license"}},"paths":{"/v1/seller/{seller}/analytics":{"get":{"summary":"Seller Analytics","description":"The provider's own analytics (free since 2026-10-16; was premium, Art 2026-10-08): demand_daily rows of its\npage and offers.","operationId":"seller_analytics_v1_seller__seller__analytics_get","parameters":[{"name":"seller","in":"path","required":true,"schema":{"type":"string","title":"Seller"},"description":"the seller's catalog key, e.g. deepinfra (as provider_id in /v1/offers)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"},"description":"how many days back, counted from today (UTC)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"},"description":"json (default) or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["catalog"],"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/seller-requests":{"post":{"summary":"Seller Requests Post","operationId":"seller_requests_post_v1_seller_requests_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["catalog"],"description":"Ask for a seller to be added to the catalog: its name, site and price page. Anyone may ask; the request is reviewed by people, nothing is published automatically.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"the seller's name"},"website":{"type":"string","description":"its site"},"pricing_url":{"type":"string","description":"its price page or model list"},"contact":{"type":"string","description":"how to reach the person asking (optional)"},"note":{"type":"string","description":"anything else that helps"}}},"example":{"name":"Example AI","website":"https://example.ai","pricing_url":"https://example.ai/pricing"}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/me":{"get":{"tags":["account"],"summary":"Me","operationId":"me_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The caller as the API sees it: the account (or anonymous), the key or token in use, its limits and what is left of them this hour and day.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/check-domain":{"get":{"tags":["provider"],"summary":"Check Domain Route","operationId":"check_domain_route_v1_provider_check_domain_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"","title":"Domain"},"description":"the provider's domain, e.g. example.ai (no scheme, no path)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Public, no key: the catalog key a provider on this domain gets, whether the catalog already lists a seller on it (then claim_url - prove it is yours instead of adding it again) and what to publish. Step 0 of the provider path.","security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/provider/validate":{"post":{"tags":["provider"],"summary":"Validate Route","operationId":"validate_route_v1_provider_validate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Public, no key: check a models.yaml text before publishing it on your domain. Every problem names the line, the model and the field, with a hint. Nothing is stored.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["models"],"properties":{"models":{"type":"string","description":"the whole models.yaml text (templates version 2, see files.templates in an application)"}}},"example":{"models":"version: 2\nprovider: Example AI\nmodels:\n  - id: example-70b\n    base_model: meta/llama-3.3-70b\n"}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/provider/applications":{"get":{"tags":["provider"],"summary":"Applications List","operationId":"applications_list_v1_provider_applications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The applications (new providers) of the caller's organizations, newest first.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]},"post":{"tags":["provider"],"summary":"Applications Post","operationId":"applications_post_v1_provider_applications_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Step 1: start listing a new provider - its name and domain. Returns the application with application_id, the domain-proof token and next_action. 200 when this domain was started before by the caller; 409 when the catalog already lists it (claim it) or another organization is adding it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","domain"],"properties":{"name":{"type":"string","description":"the company name shown on the site, 1-60 characters"},"domain":{"type":"string","description":"its domain, e.g. example.ai"},"org_id":{"type":"integer","description":"one of the caller's organizations; none = a new one named `name`"},"verification":{"type":"string","enum":["file","dns","meta"],"description":"how the domain is proved (default file)"}}},"example":{"name":"Example AI","domain":"example.ai","verification":"file"}}}},"security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/applications/{ob_id}":{"get":{"tags":["provider"],"summary":"Application Get","operationId":"application_get_v1_provider_applications__ob_id__get","parameters":[{"name":"ob_id","in":"path","required":true,"schema":{"type":"integer","title":"Ob Id"},"description":"the application id (application_id in the answer of POST /v1/provider/applications)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The application: every step with its status, what to publish where, the file problems of the last check and next_action.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/applications/{ob_id}/verify-domain":{"post":{"tags":["provider"],"summary":"Verify Domain","operationId":"verify_domain_v1_provider_applications__ob_id__verify_domain_post","parameters":[{"name":"ob_id","in":"path","required":true,"schema":{"type":"integer","title":"Ob Id"},"description":"the application id (application_id in the answer of POST /v1/provider/applications)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Step 2: check the domain-proof token now (a file under /.well-known, a DNS TXT record or a meta tag). Optionally switch the way first.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"verification":{"type":"string","enum":["file","dns","meta"],"description":"switch to another way first (optional)"}}},"example":{}}}},"security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/applications/{ob_id}/check-files":{"post":{"tags":["provider"],"summary":"Check Files","operationId":"check_files_v1_provider_applications__ob_id__check_files_post","parameters":[{"name":"ob_id","in":"path","required":true,"schema":{"type":"integer","title":"Ob Id"},"description":"the application id (application_id in the answer of POST /v1/provider/applications)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Step 3: read models.yaml from the domain (or from models_url) and check it like the daily collection does; every problem with line, model and field.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"models_url":{"type":"string","description":"where models.yaml is, if not at the default /.well-known/airatecard-models.yaml of the domain"}}},"example":{}}}},"security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/applications/{ob_id}/publish":{"post":{"tags":["provider"],"summary":"Publish","operationId":"publish_v1_provider_applications__ob_id__publish_post","parameters":[{"name":"ob_id","in":"path","required":true,"schema":{"type":"integer","title":"Ob Id"},"description":"the application id (application_id in the answer of POST /v1/provider/applications)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Step 4: the file is read once more and the provider is queued for the collector (every few minutes); poll the application until status is published.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/sellers/{key}":{"get":{"tags":["provider"],"summary":"Seller Get","operationId":"seller_get_v1_provider_sellers__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"},"description":"the seller's catalog key, e.g. deepinfra (as provider_id in /v1/offers)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"A seller the caller's organization has verified: its card, the file read last (time, ok, error), its policy and next_action.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/sellers/{key}/offers":{"get":{"tags":["provider"],"summary":"Seller Offers Get","operationId":"seller_offers_get_v1_provider_sellers__key__offers_get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"},"description":"the seller's catalog key, e.g. deepinfra (as provider_id in /v1/offers)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The seller's offers as the catalog shows them: model, price, status and when each was checked.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/sellers/{key}/recheck":{"post":{"tags":["provider"],"summary":"Seller Recheck","operationId":"seller_recheck_v1_provider_sellers__key__recheck_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"},"description":"the seller's catalog key, e.g. deepinfra (as provider_id in /v1/offers)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Read the seller's file again now instead of at the next daily run (at most once a day). Answers with the queued request.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}},"example":{}}}},"security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/provider/sellers/{key}/analytics":{"get":{"tags":["provider"],"summary":"Seller Analytics","operationId":"seller_analytics_v1_provider_sellers__key__analytics_get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"},"description":"the seller's catalog key, e.g. deepinfra (as provider_id in /v1/offers)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"},"description":"how many days back, counted from today (UTC)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"},"description":"json (default) or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The seller's own demand by day: views of its pages and offers, impressions in lists and clicks to its site, people and AI agents apart. JSON or CSV.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1":{"get":{"tags":["meta"],"summary":"Index","description":"What `/v1` offers (launch checklist 2026-09-30: llms.txt links here, so it answers, not 404):\nthe endpoints, the OpenAPI description and the agents' guide.","operationId":"index_v1_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/offers":{"get":{"tags":["catalog"],"summary":"Offers","operationId":"offers_v1_offers_get","parameters":[{"name":"q","schema":{"type":"string"},"description":"words of the model, provider or display name, e.g. gpt-4o","in":"query","required":false},{"name":"category","schema":{"type":"string","enum":["llm","embedding","rerank","moderation","ocr","search","image_generation","image_editing","video_generation","text_to_speech","speech_to_text","speech_to_speech","audio_generation","3d_generation"]},"description":"the model type; may repeat; none = every type","in":"query","required":false},{"name":"provider","schema":{"type":"string"},"description":"a provider key (as `provider_id`), may repeat","in":"query","required":false},{"name":"model","schema":{"type":"string"},"description":"one model id (`model_id`): its offers at every provider","in":"query","required":false},{"name":"sort","schema":{"type":"string","enum":["accepts","api_endpoints","capabilities","category","checked","context","cost","data_policy","expiration","features","hf_model_id","input_modalities","knowledge_cutoff","launched_at","max_input","max_output","name","output_modalities","params_active","params_total","price_cache_read","price_cache_write","price_input","price_output","price_status","price_unit","quantization","reasoning","region","seller","status","subscription","variant","votes"]},"description":"the order; price_input (cheapest input first) by default","in":"query","required":false},{"name":"desc","schema":{"type":"boolean"},"description":"reverse the order","in":"query","required":false},{"name":"min_context","schema":{"type":"integer"},"description":"context window in tokens, at least","in":"query","required":false},{"name":"max_context","schema":{"type":"integer"},"description":"context window in tokens, at most","in":"query","required":false},{"name":"min_max_output","schema":{"type":"integer"},"description":"max output tokens, at least","in":"query","required":false},{"name":"max_max_output","schema":{"type":"integer"},"description":"max output tokens, at most","in":"query","required":false},{"name":"min_price_input","schema":{"type":"number"},"description":"USD per 1M input tokens, at least","in":"query","required":false},{"name":"max_price_input","schema":{"type":"number"},"description":"USD per 1M input tokens, at most","in":"query","required":false},{"name":"min_price_output","schema":{"type":"number"},"description":"USD per 1M output tokens, at least","in":"query","required":false},{"name":"max_price_output","schema":{"type":"number"},"description":"USD per 1M output tokens, at most","in":"query","required":false},{"name":"min_params","schema":{"type":"number"},"description":"model size in billions of parameters, at least","in":"query","required":false},{"name":"max_params","schema":{"type":"number"},"description":"model size in billions of parameters, at most","in":"query","required":false},{"name":"input_modality","schema":{"type":"string"},"description":"what the model accepts: text, image, audio, video, file, pdf; may repeat","in":"query","required":false},{"name":"output_modality","schema":{"type":"string"},"description":"what the model produces: text, image, audio, video, embedding; may repeat","in":"query","required":false},{"name":"region","schema":{"type":"string"},"description":"where the offer is sold (US, EU, GLOBAL, APAC, ...); may repeat","in":"query","required":false},{"name":"pricing","schema":{"type":"string","enum":["usage","subscription","free","none"]},"description":"how it is billed; may repeat","in":"query","required":false},{"name":"status","schema":{"type":"string"},"description":"offer status (available, deprecated, ...); may repeat","in":"query","required":false},{"name":"quantization","schema":{"type":"string"},"description":"served precision (fp8, bf16, ...); may repeat","in":"query","required":false},{"name":"priced_only","schema":{"type":"boolean"},"description":"only offers with a price","in":"query","required":false},{"name":"has_free","schema":{"type":"boolean"},"description":"only models with a free offer","in":"query","required":false},{"name":"has_cache_price","schema":{"type":"boolean"},"description":"only offers with a prompt-cache price","in":"query","required":false},{"name":"verified_only","schema":{"type":"boolean"},"description":"only verified providers","in":"query","required":false},{"name":"reasoning","schema":{"type":"boolean"},"description":"only reasoning models","in":"query","required":false},{"name":"tools","schema":{"type":"boolean"},"description":"only models with tool calling","in":"query","required":false},{"name":"cur","schema":{"type":"string"},"description":"display currency of the *_usd twins in meta (USD by default)","in":"query","required":false},{"name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":25},"description":"rows a page, 25 by default and 50 at most; a larger number counts as 50, meta.limit says what was used","in":"query","required":false},{"name":"offset","schema":{"type":"integer","minimum":0,"default":0},"description":"rows to skip; negative counts as 0; offset + limit at most 100000 (beyond that a 400: narrow the filters instead)","in":"query","required":false}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffersEnvelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The catalog: one row per offer (one model at one provider), filtered and sorted by any of the parameters below, priced offers first. Prices in USD per 1M tokens unless price_unit says otherwise.","security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/workload":{"get":{"tags":["workload"],"summary":"Workload Rank","description":"The cheapest offers for a whole monthly workload (Art 2026-10-11, workload.py): a `preset` (chatbot,\ncoding_agent, rag, summarization, long_context, vision, embedding_index, trial) and/or `input_tokens` /\n`output_tokens` a month, `min_context`, `category`, `input_modality`; best offer of each model, no free promos\nor batch/flex prices unless `include_free` / `include_special`. USD a month, each row with its card and cite.","operationId":"workload_rank_v1_workload_get","parameters":[{"name":"preset","in":"query","required":false,"schema":{"type":"string","default":"","title":"Preset"},"description":"a ready-made workload: chatbot, coding_agent, rag, summarization, long_context, vision, embedding_index, trial (GET /v1/workload/presets); your own numbers below override it"},{"name":"input_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Input Tokens"},"description":"input tokens of the workload (a month for /v1/workload; for /v1/cost and /v1/compare the whole job); 1M by default"},{"name":"output_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Output Tokens"},"description":"output tokens of the workload, same period as input_tokens; 200k by default"},{"name":"min_context","in":"query","required":false,"schema":{"type":"string","default":"","title":"Min Context"},"description":"the context window in tokens the offer must have at least"},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"},"description":"model type: llm, embedding, rerank, moderation, ocr, image_generation, text_to_speech, speech_to_text ..."},{"name":"input_modality","in":"query","required":false,"schema":{"type":"string","default":"","title":"Input Modality"},"description":"an input the model must accept: text, image, audio, video, pdf"},{"name":"include_free","in":"query","required":false,"schema":{"type":"string","default":"","title":"Include Free"},"description":"true to include free offers (promotions, free tiers) - off by default, they rarely carry a workload"},{"name":"include_special","in":"query","required":false,"schema":{"type":"string","default":"","title":"Include Special"},"description":"true to include batch / flex / regional prices - off by default, they are not the ordinary price"},{"name":"one_per_model","in":"query","required":false,"schema":{"type":"string","default":"","title":"One Per Model"},"description":"true (default) to keep only the cheapest offer of each model"},{"name":"limit","in":"query","required":false,"schema":{"type":"string","default":"","title":"Limit"},"description":"rows to return"},{"name":"tools","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tools"},"description":"true to keep only models that call tools (function calling)"},{"name":"query","in":"query","required":false,"schema":{"type":"string","default":"","title":"Query"},"description":"words of the model, provider or display name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/workload/presets":{"get":{"tags":["workload"],"summary":"Workload Presets","description":"The ready-made workloads of `/v1/workload` (and the MCP tool cheapest_for_workload).","operationId":"workload_presets_v1_workload_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/models":{"get":{"tags":["catalog"],"summary":"Models","operationId":"models_v1_models_get","parameters":[{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"},{"name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":25},"description":"rows a page, 25 by default and 50 at most; a larger number counts as 50, meta.limit says what was used","in":"query","required":false},{"name":"offset","schema":{"type":"integer","minimum":0,"default":0},"description":"rows to skip; negative counts as 0; offset + limit at most 100000 (beyond that a 400: narrow the filters instead)","in":"query","required":false}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"The catalog folded by model: one row per model with its number of providers, the lowest and median prices and the longest context.","security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/analytics/cheapest":{"get":{"tags":["analytics"],"summary":"Analytics Cheapest","description":"The `n` models with the lowest of their own lowest current price of `task`.","operationId":"analytics_cheapest_v1_analytics_cheapest_get","parameters":[{"name":"task","in":"query","required":true,"schema":{"type":"string","enum":["text","vision","image","video","stt","tts","embedding","rerank","moderation"],"title":"Task"},"description":"what the model does: text, vision, image, video, stt, tts, embedding, rerank, moderation"},{"name":"component","in":"query","required":false,"schema":{"type":"string","default":"input_tokens","title":"Component"},"description":"the price compared: input_tokens (default) or output_tokens"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","enum":["all","specialized","universal","multi"],"default":"all","title":"Scope"},"description":"all (default), specialized (models made for the task), universal (general models that also do it) or multi (multimodal ones)"},{"name":"n","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":10,"title":"N"},"description":"how many models to return"},{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/analytics/dearest":{"get":{"tags":["analytics"],"summary":"Analytics Dearest","description":"The same, highest first.","operationId":"analytics_dearest_v1_analytics_dearest_get","parameters":[{"name":"task","in":"query","required":true,"schema":{"type":"string","enum":["text","vision","image","video","stt","tts","embedding","rerank","moderation"],"title":"Task"},"description":"what the model does: text, vision, image, video, stt, tts, embedding, rerank, moderation"},{"name":"component","in":"query","required":false,"schema":{"type":"string","default":"input_tokens","title":"Component"},"description":"the price compared: input_tokens (default) or output_tokens"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","enum":["all","specialized","universal","multi"],"default":"all","title":"Scope"},"description":"all (default), specialized (models made for the task), universal (general models that also do it) or multi (multimodal ones)"},{"name":"n","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":10,"title":"N"},"description":"how many models to return"},{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/analytics/median":{"get":{"tags":["analytics"],"summary":"Analytics Median","description":"The median of every qualifying model's own lowest price of `task`, and the `n` models\nclosest to it.","operationId":"analytics_median_v1_analytics_median_get","parameters":[{"name":"task","in":"query","required":true,"schema":{"type":"string","enum":["text","vision","image","video","stt","tts","embedding","rerank","moderation"],"title":"Task"},"description":"what the model does: text, vision, image, video, stt, tts, embedding, rerank, moderation"},{"name":"component","in":"query","required":false,"schema":{"type":"string","default":"input_tokens","title":"Component"},"description":"the price compared: input_tokens (default) or output_tokens"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","enum":["all","specialized","universal","multi"],"default":"all","title":"Scope"},"description":"all (default), specialized (models made for the task), universal (general models that also do it) or multi (multimodal ones)"},{"name":"n","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":10,"title":"N"},"description":"how many models to return"},{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/facets":{"get":{"tags":["catalog"],"summary":"Facets","description":"`data` = `Catalog.facets` (prices in USD); price limits are read in `cur`.","operationId":"facets_v1_facets_get","parameters":[{"name":"q","schema":{"type":"string"},"description":"words of the model, provider or display name, e.g. gpt-4o","in":"query","required":false},{"name":"category","schema":{"type":"string","enum":["llm","embedding","rerank","moderation","ocr","search","image_generation","image_editing","video_generation","text_to_speech","speech_to_text","speech_to_speech","audio_generation","3d_generation"]},"description":"the model type; may repeat; none = every type","in":"query","required":false},{"name":"provider","schema":{"type":"string"},"description":"a provider key (as `provider_id`), may repeat","in":"query","required":false},{"name":"model","schema":{"type":"string"},"description":"one model id (`model_id`): its offers at every provider","in":"query","required":false},{"name":"sort","schema":{"type":"string","enum":["accepts","api_endpoints","capabilities","category","checked","context","cost","data_policy","expiration","features","hf_model_id","input_modalities","knowledge_cutoff","launched_at","max_input","max_output","name","output_modalities","params_active","params_total","price_cache_read","price_cache_write","price_input","price_output","price_status","price_unit","quantization","reasoning","region","seller","status","subscription","variant","votes"]},"description":"the order; price_input (cheapest input first) by default","in":"query","required":false},{"name":"desc","schema":{"type":"boolean"},"description":"reverse the order","in":"query","required":false},{"name":"min_context","schema":{"type":"integer"},"description":"context window in tokens, at least","in":"query","required":false},{"name":"max_context","schema":{"type":"integer"},"description":"context window in tokens, at most","in":"query","required":false},{"name":"min_max_output","schema":{"type":"integer"},"description":"max output tokens, at least","in":"query","required":false},{"name":"max_max_output","schema":{"type":"integer"},"description":"max output tokens, at most","in":"query","required":false},{"name":"min_price_input","schema":{"type":"number"},"description":"USD per 1M input tokens, at least","in":"query","required":false},{"name":"max_price_input","schema":{"type":"number"},"description":"USD per 1M input tokens, at most","in":"query","required":false},{"name":"min_price_output","schema":{"type":"number"},"description":"USD per 1M output tokens, at least","in":"query","required":false},{"name":"max_price_output","schema":{"type":"number"},"description":"USD per 1M output tokens, at most","in":"query","required":false},{"name":"min_params","schema":{"type":"number"},"description":"model size in billions of parameters, at least","in":"query","required":false},{"name":"max_params","schema":{"type":"number"},"description":"model size in billions of parameters, at most","in":"query","required":false},{"name":"input_modality","schema":{"type":"string"},"description":"what the model accepts: text, image, audio, video, file, pdf; may repeat","in":"query","required":false},{"name":"output_modality","schema":{"type":"string"},"description":"what the model produces: text, image, audio, video, embedding; may repeat","in":"query","required":false},{"name":"region","schema":{"type":"string"},"description":"where the offer is sold (US, EU, GLOBAL, APAC, ...); may repeat","in":"query","required":false},{"name":"pricing","schema":{"type":"string","enum":["usage","subscription","free","none"]},"description":"how it is billed; may repeat","in":"query","required":false},{"name":"status","schema":{"type":"string"},"description":"offer status (available, deprecated, ...); may repeat","in":"query","required":false},{"name":"quantization","schema":{"type":"string"},"description":"served precision (fp8, bf16, ...); may repeat","in":"query","required":false},{"name":"priced_only","schema":{"type":"boolean"},"description":"only offers with a price","in":"query","required":false},{"name":"has_free","schema":{"type":"boolean"},"description":"only models with a free offer","in":"query","required":false},{"name":"has_cache_price","schema":{"type":"boolean"},"description":"only offers with a prompt-cache price","in":"query","required":false},{"name":"verified_only","schema":{"type":"boolean"},"description":"only verified providers","in":"query","required":false},{"name":"reasoning","schema":{"type":"boolean"},"description":"only reasoning models","in":"query","required":false},{"name":"tools","schema":{"type":"boolean"},"description":"only models with tool calling","in":"query","required":false},{"name":"cur","schema":{"type":"string"},"description":"display currency of the *_usd twins in meta (USD by default)","in":"query","required":false}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/models/{model_id}/history":{"get":{"tags":["catalog"],"summary":"Model History","description":"One model's market by day (min, median, max price in USD, sellers), one model a request: `days` back\nfrom today, 90 at most (a larger number counts as 90).","operationId":"model_history_v1_models__model_id__history_get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"the model's id as in /v1/models, e.g. openai/gpt-6-sol"},{"name":"component","in":"query","required":false,"schema":{"type":"string","default":"input_tokens","title":"Component"},"description":"the price compared: input_tokens (default) or output_tokens"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":90,"default":90,"title":"Days"},"description":"how many days back, counted from today (UTC)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/models/{model_id}":{"get":{"tags":["catalog"],"summary":"Model","operationId":"model_v1_models__model_id__get","parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"},"description":"the model's id as in /v1/models, e.g. openai/gpt-6-sol"},{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"One model's passport and every provider's current price of it, cheapest first.","security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/providers/{provider_id}":{"get":{"tags":["provider"],"summary":"Provider","operationId":"provider_v1_providers__provider_id__get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"},"description":"the provider's catalog key, e.g. deepinfra"},{"name":"cur","in":"query","required":false,"schema":{"type":"string","description":"display currency, a code of fx_rates","default":"USD","title":"Cur"},"description":"display currency, a code of fx_rates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"no key or token, or an unknown one (WWW-Authenticate says where the OAuth metadata is)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"One provider: its card and every offer it sells.","security":[{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["provider"]}]}},"/v1/compare":{"get":{"tags":["workload"],"summary":"Compare Models","description":"2..4 models side by side (Art 2026-10-05), computed on request from the current offers: per field\nthe value of each model, the best one and how far the others are behind (percent), the providers\nselling all of them, the cost of a 1M-in / 200k-out workload and plain-English summary lines.\n`models=a,b` or `model=a&model=b`; prices in USD per 1M tokens.","operationId":"compare_models_v1_compare_get","parameters":[{"name":"models","in":"query","required":false,"schema":{"type":"string","default":"","title":"Models"},"description":"2 to 4 model ids separated by commas (or repeat model=...)"},{"name":"input_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Input Tokens"},"description":"input tokens of the workload (a month for /v1/workload; for /v1/cost and /v1/compare the whole job); 1M by default"},{"name":"output_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Output Tokens"},"description":"output tokens of the workload, same period as input_tokens; 200k by default"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/cost":{"get":{"tags":["workload"],"summary":"Cost","description":"The cost of a workload at every provider of one model, computed on request from the current\noffers, cheapest first: `model` (id), `input_tokens`, `output_tokens`, `cached_input_tokens`, `requests`\n(defaults 1M / 200k / 0 / 1). USD; offers flagged price_suspect get no cost.","operationId":"cost_v1_cost_get","parameters":[{"name":"model","in":"query","required":false,"schema":{"type":"string","default":"","title":"Model"},"description":"the model's id as in /v1/models, e.g. openai/gpt-6-sol"},{"name":"input_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Input Tokens"},"description":"input tokens of the workload (a month for /v1/workload; for /v1/cost and /v1/compare the whole job); 1M by default"},{"name":"output_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Output Tokens"},"description":"output tokens of the workload, same period as input_tokens; 200k by default"},{"name":"cached_input_tokens","in":"query","required":false,"schema":{"type":"string","default":"","title":"Cached Input Tokens"},"description":"the part of input_tokens served from the provider's prompt cache (cheaper where it has a cache price); 0 by default"},{"name":"requests","in":"query","required":false,"schema":{"type":"string","default":"","title":"Requests"},"description":"number of requests, for providers that also charge per request; 1 by default"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}},"/v1/meta":{"get":{"tags":["meta"],"summary":"Meta","operationId":"meta_v1_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"When the catalog was last collected, how many offers, models and providers it holds, and the license of the data."}},"/v1/articles":{"get":{"summary":"V1 Articles","operationId":"v1_articles_v1_articles_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"},"description":"the language of the text: en, ru, de, fr, es or pt (default en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"not allowed: a blocked account, a token without the scope, no verified claim on the seller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"a bad parameter: the message names it, the allowed range and an example","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"over a limit; Retry-After says when to try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["catalog"],"description":"The site's articles (price comparisons written from the catalog), newest first, in the language asked for.","security":[{},{"ApiKey":[]},{"PersonalKey":[]},{"OAuth2":["api"]}]}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","properties":{"status":{"type":"integer"},"message":{"type":"string","description":"what was wrong and how to fix the call"}}}}},"Meta":{"type":"object","description":"how to cite, when generated, the question's own fields (currency, task, ...)","properties":{"cite":{"type":"string"},"generated_at":{"type":"string","format":"date-time"}},"additionalProperties":true},"Envelope":{"type":"object","required":["data","meta"],"properties":{"data":{},"meta":{"$ref":"#/components/schemas/Meta"}}},"Offer":{"type":"object","description":"one model at one provider with its current prices","properties":{"offer_id":{"type":["string","null"],"description":"the offer's id: <provider_id>|<the model id as the provider writes it>; card at /c/offer:<offer_id>"},"model_id":{"type":["string","null"],"description":"the model's id (<creator>/<model>); card at /model/<model_id>"},"provider_id":{"type":["string","null"],"description":"the provider's key"},"display_name":{"type":["string","null"],"description":"the model's name"},"price_input_usd":{"type":["number","null"],"description":"USD per 1M input tokens"},"price_output_usd":{"type":["number","null"],"description":"USD per 1M output tokens"},"context_length":{"type":["integer","null"],"description":"context window in tokens"},"input_modalities":{"type":"array","items":{"type":"string"}},"prices_verified":{"type":["boolean","null"]},"checked_at":{"type":["string","null"],"description":"when the price was last read (ISO 8601, UTC)"},"category":{"type":["string","null"],"description":"the model type"},"price_unit":{"type":["string","null"],"description":"the unit of price_unit_usd for models not priced per token (per_image, per_second, per_request)"},"price_unit_usd":{"type":["number","null"],"description":"USD per price_unit"},"price_free":{"type":["boolean","null"],"description":"the offer costs nothing"},"price_suspect":{"type":["boolean","null"],"description":"the price looks wrong - do not quote it as fact"},"offer_status":{"type":["string","null"],"description":"available, deprecated, retired, ..."},"regions":{"type":"array","items":{"type":"string"},"description":"where it is sold"},"route":{"type":["object","null"]},"review_reason":{"type":["string","null"],"description":"null = clean; else why the price is under review (jump_10pct, zero, parse_error, page_down, differs_html) - shown as read, checked within a day or two"},"price_subscription_usd":{"type":["number","null"],"description":"USD a month when sold by subscription"},"subscription_plan":{"type":["string","null"],"description":"the plan's name"},"multimodal":{"type":["boolean","null"]},"output_modalities":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"],"description":"the model's description"},"price_cache_read_usd":{"type":["number","null"],"description":"USD per 1M cached input tokens read"},"price_cache_write_usd":{"type":["number","null"],"description":"USD per 1M tokens written to the cache"},"source_url":{"type":["string","null"],"description":"the provider's page the price was read from"},"max_output_tokens":{"type":["integer","null"],"description":"the longest answer in tokens"}}},"OffersEnvelope":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}},"meta":{"$ref":"#/components/schemas/Meta"}}}},"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"a personal key from the account (am_...); the same key works as a Bearer token"},"PersonalKey":{"type":"http","scheme":"bearer","description":"the personal key as Authorization: Bearer am_..."},"OAuth2":{"type":"oauth2","description":"the site's own OAuth 2.1 server (discovery: /.well-known/oauth-authorization-server); register a client at /oauth2/register; device flow at /oauth2/device/auth","flows":{"authorizationCode":{"authorizationUrl":"https://airatecard.com/oauth2/auth","tokenUrl":"https://airatecard.com/oauth2/token","refreshUrl":"https://airatecard.com/oauth2/token","scopes":{"api":"read the catalog with the account's limits","provider":"act for the account's providers (/v1/provider/*)","offline_access":"a refresh token"}}}}}},"servers":[{"url":"https://airatecard.com"}],"tags":[{"name":"catalog","description":"Offers (one model at one provider), models and providers with current prices."},{"name":"analytics","description":"Cheapest, dearest and typical prices for a job (text, vision, image, ...)."},{"name":"workload","description":"What a whole monthly workload costs at every provider; ready presets."},{"name":"provider","description":"A provider's own path for its agent: check the domain, validate the files, start the application, verify, check, publish, then its offers and rechecks. Needs the person's key or an OAuth token with the scope `provider`, except check-domain and validate."},{"name":"account","description":"The caller's own account: /v1/me."},{"name":"meta","description":"The API about itself."}],"externalDocs":{"description":"Guide for agents: the API, MCP and OAuth","url":"https://airatecard.com/en/docs#agents"}}