{"openapi":"3.1.0","info":{"title":"AI API Hub API","version":"v1","description":"OpenAI-compatible AI gateway. See /docs/llms.txt for agent instructions."},"servers":[{"url":"https://crea-ai.ru/v1","description":"Production"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"Error":{"description":"API error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"},"retryable":{"type":"boolean"}}}}}}}}}},"paths":{"/models":{"get":{"summary":"List public models","responses":{"200":{"description":"Model list"}}}},"/models/stats":{"get":{"summary":"Model catalog statistics","responses":{"200":{"description":"Statistics"}}}},"/models/{slug}/pricing":{"get":{"summary":"Model pricing","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pricing"},"404":{"$ref":"#/components/responses/Error"}}}},"/chat/completions":{"post":{"summary":"Create a chat completion, including function calling","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string"}},{"name":"X-Routing-Mode","in":"header","schema":{"enum":["balanced","cheap","fast","stable","fixed"]}},{"name":"X-Max-Cost-RUB","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","messages"],"properties":{"model":{"type":"string"},"messages":{"type":"array","description":"OpenAI messages; tool messages require tool_call_id and assistant calls use tool_calls."},"tools":{"type":"array","items":{"type":"object","required":["type","function"],"properties":{"type":{"const":"function"},"function":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"parameters":{"type":"object"}}}}}},"tool_choice":{"oneOf":[{"enum":["none","auto","required"]},{"type":"object","description":"{ type: 'function', function: { name } }"}]},"temperature":{"type":"number","minimum":0,"maximum":2},"stream":{"type":"boolean"},"async":{"type":"boolean"},"wait_timeout_ms":{"type":"integer","minimum":0,"maximum":30000},"webhook_url":{"type":"string","format":"uri"},"webhook_secret":{"type":"string","minLength":16,"maxLength":256},"routing":{"type":"object"}}}}}},"responses":{"200":{"description":"Completion/SSE; an assistant message may contain tool_calls with finish_reason tool_calls"},"202":{"description":"Async job created (object: ai.job)"},"400":{"description":"Invalid tool schema or tool_calling_unsupported","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string"},"code":{"type":"string"},"request_id":{"type":"string"},"retryable":{"type":"boolean"}}}}}}}},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/responses":{"post":{"summary":"OpenAI Responses-compatible chat entry point","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Response"}}}},"/embeddings":{"post":{"summary":"Create embeddings","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","input"],"properties":{"model":{"type":"string"},"input":{},"dimensions":{"type":"integer","minimum":1},"encoding_format":{"enum":["float","base64"]}}}}}},"responses":{"200":{"description":"Embedding"}}}},"/search":{"post":{"summary":"Search through Serper or Tavily","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["model","type","q"],"properties":{"model":{"const":"serper.model"},"type":{"enum":["search","images","news","maps","places","videos","shopping","scholar","patents","autocomplete"]},"q":{"type":"string"}},"additionalProperties":true},{"type":"object","required":["model","operation"],"properties":{"model":{"const":"tavily.model"},"operation":{"enum":["search","extract","map","crawl","research"]},"query":{"type":"string"},"urls":{},"url":{"type":"string","format":"uri"},"input":{"type":"string"}},"additionalProperties":true}]}}}},"responses":{"200":{"description":"Raw provider response with billing metadata"},"202":{"description":"Tavily research accepted"}}}},"/images/generations":{"post":{"summary":"Create an image task (synchronous, up to 10 min)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","prompt"],"properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":4},"size":{"type":"string"},"response_format":{"enum":["url","b64_json"]},"routing":{"type":"object"}}}}}},"responses":{"201":{"description":"Task created with result_url and billing"}}}},"/files":{"post":{"summary":"Upload an image source for editing","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Temporary S3-backed image_url and 12-hour retention task"}}}},"/images/edits":{"post":{"summary":"Edit an image from an HTTPS URL","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","prompt","image_url"],"properties":{"model":{"type":"string"},"prompt":{"type":"string"},"image_url":{"type":"string","format":"uri"},"size":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":4},"routing":{"type":"object"}}}}}},"responses":{"201":{"description":"Edited image task"}}}},"/videos/generations":{"post":{"summary":"Create a video task (synchronous, up to 20 min)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","prompt"],"properties":{"model":{"type":"string"},"prompt":{"type":"string"},"n":{"type":"integer","minimum":1,"maximum":1},"size":{"type":"string"},"input_image_url":{"type":"string","format":"uri"},"routing":{"type":"object"}}}}}},"responses":{"201":{"description":"Task created with result_url and billing"}}}},"/tasks/{id}":{"get":{"summary":"Get task","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Task"}}}},"/tasks/{id}/cancel":{"post":{"summary":"Cancel task","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Task"}}}},"/tasks/{id}/content":{"get":{"summary":"Download task result","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"307":{"description":"Temporary redirect to result"}}}},"/jobs/{id}":{"get":{"summary":"Get async chat job status","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job (object: ai.job)"}}}},"/jobs/{id}/cancel":{"post":{"summary":"Cancel async chat job","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job"}}}}}}