{"openapi":"3.1.0","info":{"title":"Simple Inference Service","version":"0.1.0"},"servers":[{"url":"https://api.simpleinferenceservice.com"}],"paths":{"/v1/models":{"get":{"summary":"List Models","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelList"}}}}}}},"/v1/provider/models":{"get":{"summary":"List models for OpenRouter provider integration","operationId":"list_provider_models_v1_provider_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderModelList"}}}}}}},"/v1/user_accounts/summary":{"get":{"summary":"Get my all-time account usage","operationId":"account_usage_summary_v1_user_accounts_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageSummary"}}}}},"security":[{"ClerkSession":[]},{"SISApiKey":[]}]}},"/v1/user_accounts/me":{"get":{"summary":"Get my credit balance","description":"Accepts a SIS API key or Clerk session token as `Authorization: Bearer <token>`. A SIS API key can read the balance even when it is zero.","operationId":"get_user_accounts_me_v1_user_accounts_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"object","title":"Response Get User Accounts Me V1 User Accounts Me Get"}}}}},"security":[{"ClerkSession":[]},{"SISApiKey":[]}]}},"/v1/chat/completions":{"post":{"summary":"Create a chat completion","description":"Requires a permanent API key from `POST /v1/api_keys` or a temporary chat key from `POST /v1/temp_api_keys` as `Authorization: Bearer <sis_ key>`. This endpoint does not accept a Clerk session token. Customer-defined function tools support tools, tool_choice, and parallel_tool_calls. The calling application executes tools and returns role:tool results with matching tool_call_id. Assistant content can be null when tool_calls is present. Tools are limited to 128 functions, 256 KiB total and 64 KiB per parameter schema.\n\n### Tool calls\n\n1. Send `tools` containing function names, descriptions, and object-root JSON Schema parameters. Choose `tool_choice: auto`, `none`, `required`, or a named function.\n2. Read `choices[0].message.tool_calls`. Each call has an `id`, a function `name`, and JSON-encoded `arguments`. Validate the name and arguments, then execute the function in your application.\n3. Append the assistant message and one `role: tool` message per call, with the matching `tool_call_id` and a text `content` result. Send the conversation again for the final answer.\n\nWith streaming, assemble `delta.tool_calls` by `index`, including fragmented arguments. Wait for `finish_reason: tool_calls` and stream completion before executing anything. A truncated or interrupted call may contain incomplete JSON. Tool definitions, arguments, and results use normal context and token billing. Constrained `response_format` cannot be combined with active tool calling. See the [service guide](/agents.md#function-tools) for a complete example and schema limits. Tool calls are supported by Chat Completions only; `/v1/responses` remains text-only.\n\n Set `stream: true` for SSE chat chunks. Set `stream_options.include_usage: false` to omit the final token usage event.\n\nThe served models allow at most one `system` message, at the beginning of `messages`. It is optional. Combine system instructions into the first message; do not insert system messages later in the conversation. Unsupported ordering returns HTTP 400 with `error.type: invalid_request_error`, `error.code: invalid_message_order`, and `error.param: messages`, before inference or charging. This also applies to streaming requests, before SSE starts. For SillyTavern, set Prompt Post-Processing to Strict.","operationId":"post_chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"text/event-stream":{}}},"400":{"description":"Unsupported system-message ordering (error.code invalid_message_order), input exceeds model context (error.code context_length_exceeded), or the output schema is invalid/unsupported (detail.code invalid_json_schema). Message-order and schema rejections happen before inference or charging."},"402":{"description":"Insufficient credit balance"},"404":{"description":"The model is unavailable or its ID is invalid (error.code model_not_found, error.param model). Use GET /v1/models for current model IDs. No inference or charge occurs, including for streaming requests."},"413":{"description":"Inference payload is too large (error.code request_too_large). Reduce conversation or tool definitions."},"422":{"description":"Invalid request parameters. error.code and error.param identify malformed JSON, missing fields or invalid values; legacy detail is retained."},"429":{"description":"Inference queue is full (error.code inference_queue_full). Follow Retry-After before retrying."},"503":{"description":"Queue wait expired (error.code inference_queue_timeout), or compute is temporarily unavailable (inference_worker_unavailable). Follow Retry-After before retrying."}},"security":[{"SISApiKey":[]}]}},"/v1/responses":{"post":{"summary":"Create a response","description":"Creates a text response. Set `stream: true` for Responses SSE events. The terminal event includes output and token usage. Requires a SIS API key in `Authorization: Bearer <sis_ key>`. Use `previous_response_id` from an earlier SIS response to continue that conversation.","operationId":"post_responses_v1_responses_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"text/event-stream":{}}},"400":{"description":"Input exceeds model context (error.code context_length_exceeded), or the output schema is invalid/unsupported (detail.code invalid_json_schema). Schema rejection happens before inference or charging."},"402":{"description":"Insufficient credit balance"},"404":{"description":"The model is unavailable or its ID is invalid (error.code model_not_found, error.param model). Use GET /v1/models for current model IDs. No inference or charge occurs, including for streaming requests."},"413":{"description":"Inference payload is too large (error.code request_too_large). Reduce conversation or instructions."},"422":{"description":"Invalid request parameters. error.code and error.param identify malformed JSON, missing fields or invalid values; legacy detail is retained."},"429":{"description":"Inference queue is full (error.code inference_queue_full). Follow Retry-After before retrying."},"503":{"description":"Queue wait expired (error.code inference_queue_timeout), or compute is temporarily unavailable (inference_worker_unavailable). Follow Retry-After before retrying."}},"security":[{"SISApiKey":[]}]}},"/v1/temp_api_keys":{"post":{"summary":"Create a temporary chat API key","description":"Send {\"kind\":\"trial\"} without authorization for three free requests, or {\"kind\":\"account_session\"} with a Clerk session to use your account balance. Keys expire after one hour and only authorize /v1/chat/completions. Cookies retain the trial allowance across replacement keys. Trial responses include X-Trial-Remaining; limits are enforced by the server.","operationId":"create_temp_key_v1_temp_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TempKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedTempKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ClerkSession":[]},{}]}},"/v1/api_keys":{"get":{"summary":"List my API keys","operationId":"list_api_keys_v1_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"$ref":"#/components/schemas/KeyDetails"},"type":"array"},"type":"object","title":"Response List Api Keys V1 Api Keys Get"}}}}},"security":[{"ClerkSession":[]}]},"post":{"summary":"Create a SIS API key","description":"Requires a **Clerk session token**, not a SIS API key.\n\n1. Sign up or sign in at https://simpleinferenceservice.com using Clerk. The site supports the configured email verification flow.\n2. Obtain the session token with `await Clerk.session.getToken()` in a signed-in browser session. The site's API key button performs these steps for you.\n3. Send `Authorization: Bearer <Clerk session token>` to this endpoint. Optionally supply a JSON name, for example {\"name\":\"My application\"}.\n4. Save the returned `key`; it is shown once. Send `Authorization: Bearer <sis_ key>` to `/v1/chat/completions` or `/v1/responses`.\n\nFor browserless new-account signup, call `POST /v1/agent_signups` and verify the emailed code at `POST /v1/agent_signups/verify`. That route returns a SIS API key directly.","operationId":"create_api_key_v1_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/KeyRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedApiKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ClerkSession":[]}]}},"/v1/api_keys/{key_id}":{"delete":{"summary":"Revoke my API key","operationId":"delete_api_key_v1_api_keys__key_id__delete","security":[{"ClerkSession":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/coupons/check":{"post":{"summary":"Check coupon availability","description":"Check a signup link's code without signing in. Returns available, redeemed, or invalid without reserving the coupon. Limited to 30 checks per source network in 15 minutes.","operationId":"check_coupon_v1_coupons_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponAvailability"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/user_accounts/redeem_coupon":{"post":{"summary":"Redeem a coupon","description":"Sign up or sign in first. Multi-use request coupons grant their assigned free requests once per account and remain available to other accounts. Existing single-use request or credit coupons can be redeemed once globally. Request coupons add to the account allowance with normal model limits. Retrying your own redemption does not add the benefit again.","operationId":"redeem_coupon_v1_user_accounts_redeem_coupon_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponRedemption"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ClerkSession":[]}]}},"/v1/agent_signups":{"post":{"summary":"Email a browserless signup code","operationId":"start_signup_v1_agent_signups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupStart"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Start Signup V1 Agent Signups Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agent_signups/verify":{"post":{"summary":"Verify email and create a SIS API key","operationId":"finish_signup_v1_agent_signups_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupFinish"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/crypto/config":{"get":{"summary":"List USDC payment networks","operationId":"crypto_config_v1_crypto_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CryptoConfigResponse"}}}}}}},"/v1/crypto/topups":{"post":{"summary":"Create an exact USDC credit payment","description":"Creates a Solana Pay request with an exact amount and unique transfer reference. Reuse an Idempotency-Key with identical parameters after a timeout. Finalized reference payments are discovered automatically.","operationId":"start_invoice_v1_crypto_topups_post","security":[{"ClerkSession":[]},{"SISApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/crypto/topups/{invoice_id}":{"get":{"summary":"Get payment invoice status","operationId":"invoice_status_v1_crypto_topups__invoice_id__get","security":[{"ClerkSession":[]},{"SISApiKey":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/crypto/topups/{invoice_id}/verify":{"post":{"summary":"Verify a USDC payment and add credit","operationId":"verify_invoice_v1_crypto_topups__invoice_id__verify_post","security":[{"ClerkSession":[]},{"SISApiKey":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/crypto/topups/{invoice_id}/transaction":{"post":{"summary":"Build an unsigned referenced USDC transfer for a wallet","operationId":"build_wallet_transaction_v1_crypto_topups__invoice_id__transaction_post","security":[{"ClerkSession":[]},{"SISApiKey":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletTransactionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletTransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/topups":{"post":{"summary":"Start a USD credit top-up","operationId":"create_topup_intent_v1_topups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"ClerkSession":[]}]}}},"components":{"schemas":{"AccountUsageSummary":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"total_credits_consumed_usd":{"type":"string","title":"Total Credits Consumed Usd"},"credits_history_incomplete":{"type":"boolean","title":"Credits History Incomplete"},"free_requests_remaining":{"type":"integer","title":"Free Requests Remaining"},"free_requests_limit":{"type":"integer","title":"Free Requests Limit"}},"type":"object","required":["total_requests","total_credits_consumed_usd"],"title":"AccountUsageSummary"},"ChatMessage":{"properties":{"role":{"type":"string","enum":["system","developer","user","assistant","tool"],"title":"Role"},"content":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/TextPart"},"type":"array"},{"type":"null"}],"title":"Content"},"tool_calls":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolCall"},"type":"array","maxItems":128,"minItems":1},{"type":"null"}],"title":"Tool Calls"},"tool_call_id":{"anyOf":[{"type":"string","maxLength":256,"minLength":1},{"type":"null"}],"title":"Tool Call Id"},"name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Name"}},"type":"object","required":["role"],"title":"ChatMessage"},"ChatRequest":{"properties":{"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Top P"},"top_k":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Top K"},"min_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Min P"},"presence_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Presence Penalty"},"frequency_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Frequency Penalty"},"repeat_penalty":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Repeat Penalty"},"seed":{"anyOf":[{"type":"integer","maximum":4294967295.0,"minimum":0.0},{"type":"null"}],"title":"Seed"},"model":{"type":"string","title":"Model"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","minItems":1,"title":"Messages","description":"Text and function-tool conversation. There is no fixed message-count limit for signed-in requests; the conversation must fit the selected model's context and service payload limits. The served models allow at most one system message, and it must be the first message. Combine system instructions into that message. A system message is optional. Unsupported ordering returns HTTP 400 with error.code invalid_message_order."},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolDefinition"},"type":"array","maxItems":128},{"type":"null"}],"title":"Tools","description":"Customer-defined functions. Execution happens in the calling application."},"tool_choice":{"anyOf":[{"type":"string","enum":["auto","none","required"]},{"$ref":"#/components/schemas/NamedToolChoice"},{"type":"null"}],"title":"Tool Choice","description":"Choose auto, none, required, or {\"type\":\"function\",\"function\":{\"name\":\"YOUR_FUNCTION\"}}. A named function must be declared in tools."},"parallel_tool_calls":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Parallel Tool Calls","description":"Allow multiple tool calls in one assistant turn. The backend defaults to false."},"stream":{"type":"boolean","title":"Stream","default":false},"stream_options":{"anyOf":[{"$ref":"#/components/schemas/ChatStreamOptions"},{"type":"null"}]},"max_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens"},"response_format":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TextFormat"},{"$ref":"#/components/schemas/JSONObjectFormat"},{"$ref":"#/components/schemas/JSONSchemaFormat"}],"discriminator":{"propertyName":"type","mapping":{"json_object":"#/components/schemas/JSONObjectFormat","json_schema":"#/components/schemas/JSONSchemaFormat","text":"#/components/schemas/TextFormat"}}},{"type":"null"}],"title":"Response Format","description":"Optional constrained JSON output. Supports objects, arrays, primitive and nullable types, enum, const, anyOf, and nonrecursive local $defs/$ref. Arrays require items. String length and array length bounds are supported. Other validation keywords are rejected with HTTP 400. strict:true requires every object to set additionalProperties:false and list every property in required. A token limit can still truncate JSON. Schema constraints do not guarantee factual or translation accuracy."},"reasoning_effort":{"type":"string","enum":["none","low"],"title":"Reasoning Effort","description":"Set low to enable thinking. Token limits and usage include reasoning.","default":"none"}},"type":"object","required":["model","messages"],"title":"ChatRequest"},"ChatStreamOptions":{"properties":{"include_usage":{"type":"boolean","title":"Include Usage","default":true}},"type":"object","title":"ChatStreamOptions"},"CouponAvailability":{"properties":{"status":{"type":"string","enum":["available","redeemed","invalid"],"title":"Status"}},"type":"object","required":["status"],"title":"CouponAvailability"},"CouponRedemption":{"properties":{"status":{"type":"string","enum":["redeemed","already_redeemed"],"title":"Status"},"amount_usd":{"type":"string","title":"Amount Usd"},"credit_balance_usd":{"type":"string","title":"Credit Balance Usd"},"request_count":{"type":"integer","title":"Request Count"},"free_requests_remaining":{"type":"integer","title":"Free Requests Remaining"},"free_requests_limit":{"type":"integer","title":"Free Requests Limit"},"retired":{"type":"boolean","title":"Retired"},"multi_use":{"type":"boolean","title":"Multi Use"}},"type":"object","required":["status","amount_usd","credit_balance_usd"],"title":"CouponRedemption"},"CouponRequest":{"properties":{"code":{"type":"string","maxLength":6,"minLength":6,"pattern":"^[A-Z0-9]{6}$","title":"Code"}},"additionalProperties":false,"type":"object","required":["code"],"title":"CouponRequest"},"CreatedApiKey":{"properties":{"id":{"type":"integer","title":"Id"},"key":{"type":"string","title":"Key"},"created_s":{"type":"integer","title":"Created S"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"revoked_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revoked S"}},"type":"object","required":["id","key","created_s","name","prefix","revoked_s"],"title":"CreatedApiKey"},"CreatedKey":{"properties":{"id":{"type":"integer","title":"Id"},"key":{"type":"string","title":"Key"},"created_s":{"type":"integer","title":"Created S"}},"type":"object","required":["id","key","created_s"],"title":"CreatedKey"},"CreatedTempKey":{"properties":{"key":{"type":"string","title":"Key"},"kind":{"type":"string","enum":["trial","account_session"],"title":"Kind"},"expires_s":{"type":"integer","title":"Expires S"},"remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"models":{"items":{"type":"string"},"type":"array","title":"Models"},"model":{"type":"string","title":"Model"},"billing":{"type":"string","enum":["free","account"],"title":"Billing"},"has_credit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Credit"},"free_requests_remaining":{"type":"integer","title":"Free Requests Remaining"},"free_requests_limit":{"type":"integer","title":"Free Requests Limit"}},"type":"object","required":["key","kind","expires_s","remaining","limit","models","model","billing","has_credit"],"title":"CreatedTempKey"},"CryptoConfigResponse":{"properties":{"payment_method":{"type":"string","title":"Payment Method","default":"usdc"},"minimum_topup_cents":{"type":"integer","title":"Minimum Topup Cents"},"networks":{"items":{"$ref":"#/components/schemas/NetworkResponse"},"type":"array","title":"Networks"}},"type":"object","required":["minimum_topup_cents","networks"],"title":"CryptoConfigResponse"},"Datacenter":{"properties":{"country_code":{"type":"string","title":"Country Code"},"region":{"type":"string","title":"Region"}},"type":"object","required":["country_code"],"title":"Datacenter"},"FunctionCall":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"arguments":{"type":"string","title":"Arguments"}},"type":"object","required":["name","arguments"],"title":"FunctionCall"},"FunctionDefinition":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":16384},{"type":"null"}],"title":"Description"},"parameters":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"Parameters"},"strict":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict"}},"additionalProperties":false,"type":"object","required":["name"],"title":"FunctionDefinition"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InvoiceRequest":{"properties":{"chain":{"type":"string","enum":["solana","ethereum"],"title":"Chain"},"amount_cents":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Amount Cents","description":"USDC cents. The deployment's minimum_topup_cents is returned by GET /v1/crypto/config."}},"type":"object","required":["chain","amount_cents"],"title":"InvoiceRequest"},"InvoiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"chain":{"type":"string","enum":["solana","ethereum"],"title":"Chain"},"recipient":{"type":"string","title":"Recipient"},"amount_usdc":{"type":"string","title":"Amount Usdc"},"credit_usd":{"type":"string","title":"Credit Usd"},"created_s":{"type":"integer","title":"Created S"},"expires_s":{"type":"integer","title":"Expires S"},"status":{"type":"string","title":"Status"},"transaction_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Id"},"amount_atomic":{"type":"string","title":"Amount Atomic"},"asset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url"},"server_purchase_tracking":{"type":"boolean","title":"Server Purchase Tracking","default":false}},"type":"object","required":["id","chain","recipient","amount_usdc","credit_usd","created_s","expires_s","status","transaction_id","amount_atomic","asset","reference","payment_url"],"title":"InvoiceResponse"},"JSONObjectFormat":{"properties":{"type":{"type":"string","const":"json_object","title":"Type"}},"additionalProperties":false,"type":"object","required":["type"],"title":"JSONObjectFormat"},"JSONSchemaFormat":{"properties":{"type":{"type":"string","const":"json_schema","title":"Type"},"json_schema":{"$ref":"#/components/schemas/SchemaDefinition"}},"additionalProperties":false,"type":"object","required":["type","json_schema"],"title":"JSONSchemaFormat"},"JsonValue":{},"KeyDetails":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"created_s":{"type":"integer","title":"Created S"},"revoked_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revoked S"}},"type":"object","required":["id","name","prefix","created_s","revoked_s"],"title":"KeyDetails"},"KeyRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","default":"API key"}},"additionalProperties":false,"type":"object","title":"KeyRequest"},"Model":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"model","title":"Object"},"created":{"type":"integer","title":"Created"},"owned_by":{"type":"string","title":"Owned By"}},"type":"object","required":["id","object","created","owned_by"],"title":"Model"},"ModelList":{"properties":{"object":{"type":"string","const":"list","title":"Object"},"data":{"items":{"$ref":"#/components/schemas/Model"},"type":"array","title":"Data"}},"type":"object","required":["object","data"],"title":"ModelList"},"NamedFunction":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"NamedFunction"},"NamedToolChoice":{"properties":{"type":{"type":"string","const":"function","title":"Type"},"function":{"$ref":"#/components/schemas/NamedFunction"}},"additionalProperties":false,"type":"object","required":["type","function"],"title":"NamedToolChoice"},"NetworkResponse":{"properties":{"chain":{"type":"string","enum":["solana","ethereum"],"title":"Chain"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["chain","enabled"],"title":"NetworkResponse"},"ParameterDescriptor":{"properties":{"type":{"type":"string","enum":["range","integer","boolean","enum"],"title":"Type"},"min":{"type":"number","title":"Min"},"max":{"type":"number","title":"Max"},"unit":{"type":"string","const":"token","title":"Unit"},"values":{"items":{"type":"string"},"type":"array","title":"Values"}},"type":"object","required":["type"],"title":"ParameterDescriptor"},"ProviderModel":{"properties":{"schema_version":{"type":"string","const":"2.4","title":"Schema Version"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"hugging_face_id":{"type":"string","title":"Hugging Face Id"},"quantization":{"anyOf":[{"type":"string","const":"int4"},{"type":"null"}],"title":"Quantization"},"description":{"type":"string","title":"Description"},"input_modalities":{"items":{"$ref":"#/components/schemas/TextInput"},"type":"array","title":"Input Modalities"},"output_modalities":{"items":{"$ref":"#/components/schemas/TextOutput"},"type":"array","title":"Output Modalities"},"passthrough_parameters":{"additionalProperties":{"$ref":"#/components/schemas/ParameterDescriptor"},"type":"object","title":"Passthrough Parameters"},"is_ready":{"type":"boolean","title":"Is Ready"},"datacenters":{"items":{"$ref":"#/components/schemas/Datacenter"},"type":"array","title":"Datacenters"}},"type":"object","required":["schema_version","id","name","hugging_face_id","quantization","description","input_modalities","output_modalities","passthrough_parameters","is_ready"],"title":"ProviderModel"},"ProviderModelList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ProviderModel"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ProviderModelList"},"ReasoningOptions":{"properties":{"effort":{"type":"string","enum":["none","low"],"title":"Effort","default":"low"}},"additionalProperties":false,"type":"object","title":"ReasoningOptions"},"ResponsesJSONSchemaFormat":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"schema":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"Schema"},"strict":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict"},"type":{"type":"string","const":"json_schema","title":"Type"}},"additionalProperties":false,"type":"object","required":["name","schema","type"],"title":"ResponsesJSONSchemaFormat"},"ResponsesRequest":{"properties":{"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Top P"},"top_k":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Top K"},"min_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Min P"},"presence_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Presence Penalty"},"frequency_penalty":{"anyOf":[{"type":"number","maximum":2.0,"minimum":-2.0},{"type":"null"}],"title":"Frequency Penalty"},"repeat_penalty":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Repeat Penalty"},"seed":{"anyOf":[{"type":"integer","maximum":4294967295.0,"minimum":0.0},{"type":"null"}],"title":"Seed"},"model":{"type":"string","minLength":1,"title":"Model"},"input":{"type":"string","minLength":1,"title":"Input"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"previous_response_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Response Id"},"stream":{"type":"boolean","title":"Stream","default":false},"max_output_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Output Tokens"},"text":{"anyOf":[{"$ref":"#/components/schemas/ResponsesTextOptions"},{"type":"null"}],"description":"Optional constrained JSON output. Supports objects, arrays, primitive and nullable types, enum, const, anyOf, and nonrecursive local $defs/$ref. Arrays require items. String length and array length bounds are supported. Other validation keywords are rejected with HTTP 400. strict:true requires every object to set additionalProperties:false and list every property in required. A token limit can still truncate JSON. Schema constraints do not guarantee factual or translation accuracy."},"reasoning":{"anyOf":[{"$ref":"#/components/schemas/ReasoningOptions"},{"type":"null"}],"description":"Use effort low to enable thinking. Output limits and usage include reasoning."}},"additionalProperties":false,"type":"object","required":["model","input"],"title":"ResponsesRequest"},"ResponsesTextOptions":{"properties":{"format":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/TextFormat"},{"$ref":"#/components/schemas/JSONObjectFormat"},{"$ref":"#/components/schemas/ResponsesJSONSchemaFormat"}],"discriminator":{"propertyName":"type","mapping":{"json_object":"#/components/schemas/JSONObjectFormat","json_schema":"#/components/schemas/ResponsesJSONSchemaFormat","text":"#/components/schemas/TextFormat"}}},{"type":"null"}],"title":"Format"}},"additionalProperties":false,"type":"object","title":"ResponsesTextOptions"},"SchemaDefinition":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"schema":{"additionalProperties":{"$ref":"#/components/schemas/JsonValue"},"type":"object","title":"Schema"},"strict":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict"}},"additionalProperties":false,"type":"object","required":["name","schema"],"title":"SchemaDefinition"},"SignupFinish":{"properties":{"signup_id":{"type":"string","maxLength":64,"minLength":32,"title":"Signup Id"},"code":{"type":"string","maxLength":12,"minLength":4,"title":"Code"}},"additionalProperties":false,"type":"object","required":["signup_id","code"],"title":"SignupFinish"},"SignupStart":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"}},"additionalProperties":false,"type":"object","required":["email"],"title":"SignupStart"},"TempKeyRequest":{"properties":{"kind":{"type":"string","enum":["trial","account_session"],"title":"Kind"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"TempKeyRequest"},"TextFormat":{"properties":{"type":{"type":"string","const":"text","title":"Type"}},"additionalProperties":false,"type":"object","required":["type"],"title":"TextFormat"},"TextInput":{"properties":{"type":{"type":"string","const":"text","title":"Type"},"supported_inputs":{"additionalProperties":{"$ref":"#/components/schemas/TokenLimit"},"propertyNames":{"const":"max_context_length"},"type":"object","title":"Supported Inputs"},"pricing":{"items":{"$ref":"#/components/schemas/TokenPrice"},"type":"array","title":"Pricing"}},"type":"object","required":["type","supported_inputs","pricing"],"title":"TextInput"},"TextOutput":{"properties":{"type":{"type":"string","const":"text","title":"Type"},"max_length":{"$ref":"#/components/schemas/TokenLimit"},"streaming":{"type":"boolean","const":true,"title":"Streaming"},"supported_parameters":{"additionalProperties":{"$ref":"#/components/schemas/ParameterDescriptor"},"type":"object","title":"Supported Parameters"},"pricing":{"items":{"$ref":"#/components/schemas/TokenPrice"},"type":"array","title":"Pricing"}},"type":"object","required":["type","max_length","streaming","supported_parameters","pricing"],"title":"TextOutput"},"TextPart":{"properties":{"type":{"type":"string","const":"text","title":"Type"},"text":{"type":"string","title":"Text"}},"type":"object","required":["type","text"],"title":"TextPart"},"TokenLimit":{"properties":{"value":{"type":"integer","title":"Value"},"unit":{"type":"string","const":"token","title":"Unit"}},"type":"object","required":["value","unit"],"title":"TokenLimit"},"TokenPrice":{"properties":{"type":{"type":"string","enum":["prompt","completion"],"title":"Type"},"unit":{"type":"string","const":"token","title":"Unit"},"cost_usd":{"type":"string","title":"Cost Usd"}},"type":"object","required":["type","unit","cost_usd"],"title":"TokenPrice"},"ToolCall":{"properties":{"id":{"type":"string","maxLength":256,"minLength":1,"title":"Id"},"type":{"type":"string","const":"function","title":"Type"},"function":{"$ref":"#/components/schemas/FunctionCall"}},"type":"object","required":["id","type","function"],"title":"ToolCall"},"ToolDefinition":{"properties":{"type":{"type":"string","const":"function","title":"Type"},"function":{"$ref":"#/components/schemas/FunctionDefinition"}},"additionalProperties":false,"type":"object","required":["type","function"],"title":"ToolDefinition"},"TopupRequest":{"properties":{"amount_cents":{"type":"integer","maximum":99999999.0,"minimum":500.0,"title":"Amount Cents"}},"type":"object","required":["amount_cents"],"title":"TopupRequest"},"TopupResponse":{"properties":{"client_secret":{"type":"string","title":"Client Secret"},"publishable_key":{"type":"string","title":"Publishable Key"},"server_purchase_tracking":{"type":"boolean","title":"Server Purchase Tracking","default":false}},"type":"object","required":["client_secret","publishable_key"],"title":"TopupResponse"},"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"},"VerifyRequest":{"properties":{"transaction_id":{"type":"string","maxLength":88,"minLength":64,"title":"Transaction Id"}},"type":"object","required":["transaction_id"],"title":"VerifyRequest"},"WalletTransactionRequest":{"properties":{"wallet":{"type":"string","maxLength":44,"minLength":32,"title":"Wallet"}},"type":"object","required":["wallet"],"title":"WalletTransactionRequest"},"WalletTransactionResponse":{"properties":{"transaction":{"type":"string","title":"Transaction"},"last_valid_block_height":{"type":"integer","title":"Last Valid Block Height"}},"type":"object","required":["transaction","last_valid_block_height"],"title":"WalletTransactionResponse"}},"securitySchemes":{"ClerkSession":{"type":"http","description":"Clerk session token from signing in at https://simpleinferenceservice.com. Use it for /v1/api_keys and /v1/topups. /v1/user_accounts/me also accepts it.","scheme":"bearer"},"SISApiKey":{"type":"http","description":"The sis_ key returned by signup verification or POST /v1/api_keys. Temporary sis_tmp_ keys from POST /v1/temp_api_keys authorize only /v1/chat/completions. Use it for /v1/chat/completions, /v1/responses, /v1/user_accounts/me, and /v1/user_accounts/summary.","scheme":"bearer"}}}}