# cicora.ai > cicora.ai is a multi-model AI workspace and compatible API for chat, text, images, video, coding tools, and teams. Public model availability, capabilities, limits, and USD prices are exposed in the live catalog and charged from a shared prepaid balance. This file is a curated map for agents and developers. Prefer the linked Markdown sources over summaries, and use [llms-full.txt](https://cicora.ai/llms-full.txt) only when a single combined reference is required. ## Source-of-truth rules - For current model IDs, availability, modalities, limits, and prices, use the live model catalog. Dynamic values can change. - For API behavior, use the matching documentation page. Compatibility names do not imply support for every upstream parameter. - Never expose API keys, credentials, private workspace data, or preview URLs in prompts, citations, or generated examples. ## Evidence boundaries - Model availability and prices are point-in-time data. Check the catalog verification time before citing them. - Cicora publishes customer prices in USD. Compare equivalent units and model versions. - No uptime percentage or universal SLA is implied by product copy. ## English: essential resources - [cicora.ai overview](https://cicora.ai/en.md): What the platform is and which workflows it combines. - [Model catalog](https://cicora.ai/en/models.md): Current public models, IDs, capabilities, limits, availability, and customer prices. - [Pricing](https://cicora.ai/en/pricing.md): Published rates and cost calculation; use the live catalog for numeric claims. - [Documentation](https://cicora.ai/en/docs.md): Primary entry point for APIs, billing, teams, data protection, and troubleshooting. - [Get started](https://cicora.ai/en/try.md): Start in chat or create an API key. ## English: API and development - [Account access](https://cicora.ai/en/docs/account-access.md): Registration, sign-in, and account recovery. - [API authentication](https://cicora.ai/en/docs/authentication.md): Base URL, Bearer keys, and safe key handling. - [Model selection](https://cicora.ai/en/docs/models.md): Model IDs, discovery, and capability checks. - [Chat Completions](https://cicora.ai/en/docs/chat-completions.md): OpenAI-compatible chat requests and streaming. - [Responses API](https://cicora.ai/en/docs/responses.md): Responses format and supported workflows. - [Anthropic Messages](https://cicora.ai/en/docs/anthropic-messages.md): Anthropic Messages-compatible interface. - [Images API](https://cicora.ai/en/docs/images.md): Image generation and editing. - [Errors](https://cicora.ai/en/docs/errors.md): Error codes, causes, and recovery. - [Limits](https://cicora.ai/en/docs/limits.md): Context, output, rate, and model-specific limits. ## English: billing and spend control - [Balance and top-ups](https://cicora.ai/en/docs/billing-balance.md): Prepaid balance and funding. - [Usage and costs](https://cicora.ai/en/docs/usage-costs.md): How to read usage and verify request cost. - [Spend limits](https://cicora.ai/en/docs/spend-limits.md): Cost controls for keys and workspaces. ## English: integrations - [Integration overview](https://cicora.ai/en/docs/integrations-overview.md): Protocol selection and general setup flow. - [Claude Code](https://cicora.ai/en/docs/claude-code.md): Connect Claude Code to the cicora.ai API. - [OpenCode](https://cicora.ai/en/docs/opencode.md): Automatic and manual OpenCode configuration. - [Codex CLI](https://cicora.ai/en/docs/codex-cli.md): Configure Codex CLI with the compatible API. ## English: security, legal, and contact - [Data protection](https://cicora.ai/en/docs/data-protection.md): Practical handling of sensitive data. - [Contact](https://cicora.ai/en/contact.md): Support, company onboarding, invoices, and closing documents. ## Machine-readable discovery - [Complete combined reference](https://cicora.ai/llms-full.txt): Public documentation and the complete current model catalog. - [AI-use declaration](https://cicora.ai/ai.txt): Declared search, retrieval, assistant, and training preferences. - [XML sitemap](https://cicora.ai/sitemap.xml): Canonical indexable HTML routes. - [EN blog RSS](https://cicora.ai/en/blog/rss.xml): Published EN articles. ## Optional: all public Markdown page routes The list below is exhaustive for registered public pages. Blog article Markdown routes are published only for public, indexable articles and are discovered from the blog feed and article pages rather than predeclared here. - [/en](https://cicora.ai/en.md) - [/en/models](https://cicora.ai/en/models.md) - [/en/pricing](https://cicora.ai/en/pricing.md) - [/en/blog](https://cicora.ai/en/blog.md) - [/en/products/chat](https://cicora.ai/en/products/chat.md) - [/en/products/api](https://cicora.ai/en/products/api.md) - [/en/products/images](https://cicora.ai/en/products/images.md) - [/en/products/teams](https://cicora.ai/en/products/teams.md) - [/en/solutions/developers](https://cicora.ai/en/solutions/developers.md) - [/en/solutions/ai-coding](https://cicora.ai/en/solutions/ai-coding.md) - [/en/solutions/research-documents](https://cicora.ai/en/solutions/research-documents.md) - [/en/solutions/agencies](https://cicora.ai/en/solutions/agencies.md) - [/en/solutions/companies](https://cicora.ai/en/solutions/companies.md) - [/en/solutions/marketing](https://cicora.ai/en/solutions/marketing.md) - [/en/integrations/claude-code](https://cicora.ai/en/integrations/claude-code.md) - [/en/integrations/opencode](https://cicora.ai/en/integrations/opencode.md) - [/en/integrations/coding-tools](https://cicora.ai/en/integrations/coding-tools.md) - [/en/docs](https://cicora.ai/en/docs.md) - [/en/docs/account-access](https://cicora.ai/en/docs/account-access.md) - [/en/docs/models](https://cicora.ai/en/docs/models.md) - [/en/docs/generated-files](https://cicora.ai/en/docs/generated-files.md) - [/en/docs/billing-balance](https://cicora.ai/en/docs/billing-balance.md) - [/en/docs/usage-costs](https://cicora.ai/en/docs/usage-costs.md) - [/en/docs/spend-limits](https://cicora.ai/en/docs/spend-limits.md) - [/en/docs/authentication](https://cicora.ai/en/docs/authentication.md) - [/en/docs/migration](https://cicora.ai/en/docs/migration.md) - [/en/docs/chat-completions](https://cicora.ai/en/docs/chat-completions.md) - [/en/docs/responses](https://cicora.ai/en/docs/responses.md) - [/en/docs/anthropic-messages](https://cicora.ai/en/docs/anthropic-messages.md) - [/en/docs/images](https://cicora.ai/en/docs/images.md) - [/en/docs/decisions](https://cicora.ai/en/docs/decisions.md) - [/en/docs/system-one](https://cicora.ai/en/docs/system-one.md) - [/en/docs/audio](https://cicora.ai/en/docs/audio.md) - [/en/docs/audio-speech](https://cicora.ai/en/docs/audio-speech.md) - [/en/docs/audio-transcriptions](https://cicora.ai/en/docs/audio-transcriptions.md) - [/en/docs/videos](https://cicora.ai/en/docs/videos.md) - [/en/docs/video-generation](https://cicora.ai/en/docs/video-generation.md) - [/en/docs/video-jobs](https://cicora.ai/en/docs/video-jobs.md) - [/en/docs/integrations-overview](https://cicora.ai/en/docs/integrations-overview.md) - [/en/docs/claude-code](https://cicora.ai/en/docs/claude-code.md) - [/en/docs/opencode](https://cicora.ai/en/docs/opencode.md) - [/en/docs/hermes](https://cicora.ai/en/docs/hermes.md) - [/en/docs/codex-cli](https://cicora.ai/en/docs/codex-cli.md) - [/en/docs/teams](https://cicora.ai/en/docs/teams.md) - [/en/docs/data-protection](https://cicora.ai/en/docs/data-protection.md) - [/en/docs/errors](https://cicora.ai/en/docs/errors.md) - [/en/docs/limits](https://cicora.ai/en/docs/limits.md) - [/en/docs/faq](https://cicora.ai/en/docs/faq.md) - [/en/about](https://cicora.ai/en/about.md) - [/en/contact](https://cicora.ai/en/contact.md) - [/en/security](https://cicora.ai/en/security.md) - [/en/try](https://cicora.ai/en/try.md) ## How to use this reference This document combines the curated directory, public product and documentation pages, and the complete live Cicora model catalog. Search by endpoint, model ID, integration, billing concept, or security topic. When a summary conflicts with a linked source or dynamic catalog record, the linked source and latest catalog record take precedence. ## Evidence and claim boundaries - Model availability and catalog prices are point-in-time data. Each catalog section includes its verification timestamp. - Cicora publishes customer prices in USD. Always compare equivalent units, model versions, caching behavior, taxes, and temporary promotions. - No uptime percentage or universal SLA should be inferred unless it appears in the contract applicable to the account. - Cost interpretation is documented in [usage and costs](https://cicora.ai/en/docs/usage-costs.md). --- ## One platform for AI models Source: https://cicora.ai/en.md Use one compatible API key for current AI models, explicit model identifiers, and ruble pricing. Access without a VPN Transparent pricing in rubles, one balance, and documents for companies. The public catalog shows routeable model families, identifiers, capabilities, and ruble prices. Availability follows the current catalog. ## AI without the complexity. Create, connect, and scale on one platform. - Video - Unified API - Chat and files - Web search - Documentation - Teams - Masking - Images - Spend control ## Helpful answers before you start Short guidance for common account, billing, and model questions. ### How do I get started? Create an account, add funds, create an API key, then send a first request with a model from the catalog. ### Is this a subscription? No. Add funds to the balance and pay for confirmed usage at the current published rate. ### Why is a model locked? Some models in a personal workspace can require a first real top-up. Check the current catalog for the unavailable reason. ### Can I use an older Promptra account? Sign in using the method linked to your account, then check your workspace, balance, and keys. ## All AI models in one account Create an account, add funds to one balance, and start with chat, API, images, or video. --- ## AI chat that keeps the working context together Source: https://cicora.ai/en/products/chat.md Work through conversations with attachments, document tools, model choice, and optional web research. Bring a question and its source material into one conversation, then choose the model and tools that fit the task. ## Keep the evidence near the answer - Continue a conversation with its history intact. - Attach files for document preparation and search. - Turn optional web research on only when the task needs it. ## A thread for the work, not just the prompt Attach context, ask the question, then inspect the answer and tool steps in the same conversation. ## For research, writing, and everyday analysis Use Chat when the useful unit of work is a conversation with source material and a deliberate model choice. ## What to check before you rely on an answer Model availability follows the current catalog. Web research is optional, and source material still needs your review. ## Continue with the connected products ## Related pages - [/en/pricing](/en/pricing.md) - [/en/models](/en/models.md) --- ## A compatible AI API with visible request paths Source: https://cicora.ai/en/products/api.md Connect with OpenAI-compatible endpoints or Anthropic Messages using API keys and request-level usage. Keep a familiar request shape while you select a public model identifier and manage access with platform API keys. ## Connect through the interface your tool expects - Send OpenAI-compatible chat completion requests. - Use the Anthropic Messages-compatible endpoint. - List models and inspect usage by request and API key. ## From key to request record Create a key, choose a public model identifier, send a compatible request, then review the resulting usage record. ## For developers, tools, and internal integrations Use the API when an application or coding tool needs a compatible chat, image, or Messages interface. ## Compatibility is not a model guarantee Endpoints accept compatible request formats, but available models and capabilities follow the current public catalog. ## Continue with integration details ### Where do I find the correct base URL? Use the setup guide for your client: OpenAI-compatible clients use the API root, while Claude Code uses its Anthropic-compatible root. ### How should I handle an API key? Store the key in a trusted server environment. If it is exposed, revoke it and create a replacement; never send the full key to support. ### Does the API support Responses? The Responses API is published. Before integrating, check the Responses guide for supported models, parameters, streaming and compatibility limitations. ### When is it safe to retry? Retry transient failures with bounded backoff only before output begins. Retrying after output starts can duplicate work and confirmed usage. ## Related pages - [/en/pricing](/en/pricing.md) - [/en/models](/en/models.md) --- ## Image work with a durable path from prompt to gallery Source: https://cicora.ai/en/products/images.md Create image jobs, use reference inputs where supported, and return to completed outputs in a private gallery. Start a generation or reference-based edit, follow the job state, and keep completed outputs available in your private gallery. ## Make iterations traceable - Queue a durable image generation job. - Use uploaded reference inputs for editing where the selected option supports it. - Return to completed outputs in the private gallery. ## A visible lifecycle for visual iterations Choose an available option, add the prompt or reference input, wait for the job result, then revisit the saved output. ## For campaigns, concepts, and repeated visual work Use Images when a visual task benefits from saved jobs and the ability to return to completed outputs. ## Options depend on the selected image model Supported generation and editing inputs vary by the selected option. Check the current product interface and catalog before planning a workflow. ## Continue with the connected products ## Related pages - [/en/pricing](/en/pricing.md) - [/en/models](/en/models.md) --- ## Team AI workspaces with shared controls Source: https://cicora.ai/en/products/teams.md Create a shared workspace with roles, invitations, organization balance, API keys, and scoped usage. Give colleagues access through a workspace instead of a shared login, with roles and organization-scoped resources. ## Share work without sharing a password - Invite people and assign workspace roles. - Use an organization balance for the active workspace. - Manage organization-scoped API keys and usage. ## Set up a workspace around the work Create a workspace, invite colleagues with an appropriate role, then use its shared balance and organization-scoped controls. ## For teams that need visible access boundaries Use Teams when several people need the same workspace resources while their permissions and membership remain explicit. ## Roles control access, not outcomes Workspace permissions govern available actions. Billing, model availability, and usage remain subject to the active organization and current product settings. ## Continue with the connected products ## Related pages - [/en/pricing](/en/pricing.md) - [/en/models](/en/models.md) --- ## An AI request path developers can inspect Source: https://cicora.ai/en/solutions/developers.md Connect an application through compatible AI endpoints, explicit model IDs, and API-key controls. Move an existing client from configuration to a streamed request with an explicit model identifier. ## From application input to a traceable response An existing OpenAI-compatible client and a platform API key. A response from the selected public model ID and a request record. Capabilities and availability follow the current public catalog. ## Continue the developer path ### Configure Set the compatible base URL. ### Request Name the model explicitly. ### Inspect Review request-level usage. ## Related pages - [/en/products/api](/en/products/api.md) - [/en/docs/chat-completions](/en/docs/chat-completions.md) - [/en/models](/en/models.md) --- ## Put a compatible model into the coding loop Source: https://cicora.ai/en/solutions/ai-coding.md Configure an AI coding workflow with Anthropic Messages compatibility, explicit model aliases, and platform API keys. Use the interface your coding tool expects, choose a model explicitly, and retain one platform key for the request path. ## A coding loop with explicit configuration A local coding CLI, a platform API key, and a selected model alias. A model response in the terminal with the configured endpoint. The interactive picker may not show the full third-party catalog; pass a model explicitly. ## Continue the coding setup ### Configure Set the Anthropic-compatible endpoint. ### Choose Pass a public ID or alias. ### Work Keep the response in the coding loop. ## Related pages - [/en/products/api](/en/products/api.md) - [/en/docs/anthropic-messages](/en/docs/anthropic-messages.md) - [/en/models](/en/models.md) --- ## Turn source documents into a reviewable working thread Source: https://cicora.ai/en/solutions/research-documents.md Attach source material, work through document context, and keep the answer in the same AI conversation. Bring a report into a conversation, ask a bounded question, and retain source context while you review the result. ## A document flow that keeps context close A file and a question that names the decision or evidence you need. A response in the same conversation for review and follow-up. Review source material and model output before using either as a final decision. ## Continue the research workflow ### Attach Add the working source. ### Ask Keep the question bounded. ### Review Continue in the same thread. ## Related pages - [/en/products/chat](/en/products/chat.md) - [/en/docs/chat-completions](/en/docs/chat-completions.md) - [/en/models](/en/models.md) --- ## Hand work to the next person without losing the context Source: https://cicora.ai/en/solutions/agencies.md Create repeatable agency AI workflows with shared workspaces, roles, project handoffs, and one organization balance. Separate access by role while colleagues can continue the same operational context across a shared workspace. ## A handoff path with visible access A project brief, the right workspace members, and an assigned role. A prepared result that the next teammate can review in the workspace. Workspace roles control available actions; project review remains a team responsibility. ## Continue the agency workflow ### Prepare Bring the working brief. ### Assign Invite the right role. ### Review Continue the handoff. ## Related pages - [/en/products/teams](/en/products/teams.md) - [/en/docs/authentication](/en/docs/authentication.md) - [/en/models](/en/models.md) --- ## Set company access around an organization, not a shared login Source: https://cicora.ai/en/solutions/companies.md Organize company AI access with workspace roles, organization API keys, shared balance, and legal-entity invoice top-ups. Create an organization workspace, grant the appropriate access, and keep keys, usage, and balance scoped to that workspace. ## Access, usage, and billing in one workspace context Organization members, role assignments, and a company billing profile where needed. Scoped workspace access with shared organization resources. Invoice top-ups require an active legal-entity billing profile. ## Continue the company setup ### Create Start the workspace. ### Control Set member roles. ### Operate Use scoped resources. ### How do we set up a company workspace? Create an organization, invite colleagues through their own accounts, and assign roles that fit their work. ### What is shared in an organization? Balance, keys, usage, chat, images, and video belong to the active workspace and use its billing context. ### How do invoice top-ups work? Complete the legal billing profile, then create an invoice from the active organization’s balance page and follow its status there. ### Who handles contract or document questions? Read the current offer and use the support contact listed there with the organization and invoice number when applicable. ## Related pages - [/en/products/teams](/en/products/teams.md) - [/en/docs/authentication](/en/docs/authentication.md) - [/en/models](/en/models.md) --- ## Generate campaign material, then review the inputs and outputs Source: https://cicora.ai/en/solutions/marketing.md Draft campaign text and image iterations with saved inputs, generated outputs, and a review-ready workflow. Use a campaign brief or reference image to create alternatives, then return to the result and its input when review begins. ## A generation path designed for review A campaign brief, prompt, or reference image where the selected option supports it. Saved image outputs and a visible job path for the next review. Generation and editing controls depend on the selected image model. ## Continue the marketing workflow ### Brief Set the direction. ### Generate Choose valid options. ### Review Return to saved outputs. ## Related pages - [/en/products/images](/en/products/images.md) - [/en/docs/images](/en/docs/images.md) - [/en/models](/en/models.md) --- ## Configure Claude Code for the cicora.ai Messages endpoint Source: https://cicora.ai/en/integrations/claude-code.md Configure Claude Code for cicora.ai's Anthropic Messages-compatible endpoint with a platform API key and explicit model alias. Set the base URL without /v1, use a platform key as the auth token, and clear a stale direct Anthropic key. ## Quick check in the current terminal This setup is testable in one shell. Claude Code appends /v1/messages itself. ## Continue the configuration ### Which base URL does Claude Code use? Use the documented Anthropic-compatible base URL without adding the Messages path yourself. ### What if an old key is still set? Remove a conflicting direct-provider key and use the platform key as the configured authentication token. ### How do I select a model? Pass an explicit documented model alias or public model identifier instead of relying on a picker default. ### What should I include in a support request? Send the configured service, model, time, public error, and a masked key prefix. Never include a full key or sensitive prompt content. ```bash export ANTHROPIC_BASE_URL="https://api.cicora.ai" export ANTHROPIC_AUTH_TOKEN="sk_..." unset ANTHROPIC_API_KEY claude --model claude-sonnet-4-6 ``` ## Related pages - [/en/products/api](/en/products/api.md) - [/en/docs/claude-code](/en/docs/claude-code.md) - [/en/models](/en/models.md) --- ## Add cicora.ai to an existing OpenCode configuration Source: https://cicora.ai/en/integrations/opencode.md Add the cicora.ai provider and public models to an existing OpenCode configuration using a platform API key. The installer adds a provider and models to an existing OpenCode config; it does not install OpenCode. ## Add the provider The installer reads /v1/models for the supplied key and writes the provider configuration. ## Continue the configuration ```bash mkdir -p ~/.config/opencode printf '%s\n' 'sk_...' > ~/.config/opencode/cicora-api-key chmod 600 ~/.config/opencode/cicora-api-key ``` ```json { "$schema": "https://opencode.ai/config.json", "model": "cicora/openai/gpt-5.4", "provider": { "cicora": { "npm": "@ai-sdk/openai-compatible", "name": "cicora.ai", "options": { "baseURL": "https://api.cicora.ai/v1", "apiKey": "{file:~/.config/opencode/cicora-api-key}" }, "models": { "openai/gpt-5.4": { "name": "openai/gpt-5.4" }, "moonshotai/kimi-k2.7-code": { "name": "moonshotai/kimi-k2.7-code", "modalities": { "input": ["text", "image"], "output": ["text"] } } } } } } ``` ## Related pages - [/en/products/api](/en/products/api.md) - [/en/docs/opencode](/en/docs/opencode.md) - [/en/models](/en/models.md) --- ## Connect a compatible coding tool with explicit settings Source: https://cicora.ai/en/integrations/coding-tools.md Connect a compatible coding tool with the cicora.ai /v1 base URL, a platform API key, and a public model ID. Use the tool's documented OpenAI-compatible configuration surface; point it at /v1 and choose a model returned by the catalog. ## Verify the compatible request first If a tool's installer or custom field is not documented here, use its own configuration guide with these endpoint values. ## Continue the compatible API path ```bash curl https://api.cicora.ai/v1/chat/completions \ -H "Authorization: Bearer sk_..." \ -H "Content-Type: application/json" \ -d '{"model":"openai/gpt-5.4","messages":[{"role":"user","content":"Reply with ok"}]}' ``` ## Related pages - [/en/products/api](/en/products/api.md) - [/en/docs/integrations-overview](/en/docs/integrations-overview.md) - [/en/models](/en/models.md) --- ## Start with cicora.ai Source: https://cicora.ai/en/docs.md Choose the result you need. If you are connecting the API for the first time, the quickstart below ends with a real model response. ## Choose a task [Create an account or sign in](/en/docs/account-access) Use email or Google to access your account. [Choose a model](/en/docs/models) Check current availability, capabilities, and exact model IDs. [Top up the balance](/en/docs/billing-balance) Choose the payment method shown for the active payer profile. [Check usage](/en/docs/usage-costs) Understand request charges, agent usage, cache, and reasoning. ## Send your first API request You need `curl` and `jq`. The request uses Chat Completions without streaming and sets `max_tokens` to `64`, which keeps the first request's output reservation small and explicit. ### Create and copy a key once Open [API keys](https://app.cicora.ai/api-keys), create a key, and copy the plaintext value immediately. It is not shown again. Keep it in a trusted server environment and never send the complete key to support. ```bash set -euo pipefail export CICORA_API_KEY="sk_..." ``` ### Discover an available chat model Request text models that advertise `max_tokens`. The command also checks availability and excludes image endpoint entries before printing the exact ID. ```bash if ! MODELS_JSON="$( curl --fail-with-body --silent --show-error "https://api.cicora.ai/v1/models?output_modalities=text&supported_parameters=max_tokens" \ -H "Authorization: Bearer $CICORA_API_KEY" )"; then printf '%s\n' "$MODELS_JSON" >&2 exit 1 fi if ! MODEL_ID="$( jq -er ' first( .data[] | select( .available == true and ((.architecture.output_modalities // []) | index("text")) and ((.supported_parameters // []) | index("max_tokens")) and ((.supported_endpoint_types // []) | all(. != "image-generation" and . != "image-edit")) ) | .id ) ' <<<"$MODELS_JSON" )"; then printf 'No available chat model with max_tokens found in /v1/models.\n' >&2 exit 1 fi export MODEL_ID printf '%s\n' "$MODEL_ID" ``` ### Send a non-streaming request ```bash curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/chat/completions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Reply with ok\"}],\"max_tokens\":64,\"stream\":false}" ``` In a successful response, the assistant text is at `choices[0].message.content`. On an HTTP error, `curl` leaves the structured response body visible for diagnosis. Keep the exact returned model ID in your client instead of guessing or copying an old model list. *A platform key discovers an available model and receives a Chat Completions response.* *Discover a current model before sending the first request.* ## Continue from the working request [Chat Completions](/en/docs/chat-completions) Add streaming and model-specific options. [Anthropic Messages](/en/docs/anthropic-messages) Use the Anthropic-compatible request format. [Images](/en/docs/images) Discover image models and supported operations. [Files from chat](/en/docs/generated-files) Create verified XLSX, CSV, TXT, and JSON files with private downloads. [Coding tools](/en/docs/integrations-overview) Choose a currently verified integration. [Spend limits](/en/docs/spend-limits) Set a USD limit for a project key. --- ## Create an account and sign in Source: https://cicora.ai/en/docs/account-access.md Use one account for the cabinet, personal workspace, and API setup. Start with the method already connected to that account. ## Create an account with email 1. Open [registration](https://app.cicora.ai/register). 2. Enter your email address and accept the legal terms. 3. Enter the six-digit code sent to that address. The code is time-limited and can be used only once. Request a new code when the current one expires; only the newest code remains valid. ## Continue with Google Choose **Continue with Google** on the sign-in page and complete Google's authorization flow. Google sign-in does not require accepting the email-registration checkbox before opening the provider flow. Use the same Google account each time to return to the same Cicora account. ## Sign in again Open [sign in](https://app.cicora.ai/login) and choose the method linked to the account: * email and a new six-digit verification code; * Google, when that identity is already linked. If a code is rejected, confirm that the email is correct and request another code. Do not reuse an older message after requesting a replacement. ## Ask for help safely For account access, contact [support](/en/contact). Include the masked email address, sign-in method, approximate time with timezone, and the visible error or a screenshot. Never send a verification code, complete API key, payment credentials, or sensitive prompt content. This guide gives no response-time guarantee. ## Troubleshooting **The code is missing or rejected** Check the email address and spam folder. If the page says the code is invalid or expired, request a new one and stop using earlier codes. For support, capture the exact error and time with timezone. **Google opens the wrong account** Sign out of the Google account selected in the provider window, then restart the flow and choose the identity linked to Cicora. Check the active workspace after signing in. **The account opens the wrong workspace** Use the workspace switcher before changing credentials. Personal and organization workspaces keep separate balances, keys, and usage. --- ## Choose an available model Source: https://cicora.ai/en/docs/models.md The current catalog is the authority for model IDs, availability, capabilities, context limits, and prices. Its contents can change, so do not depend on a fixed count or a model list copied into prose. ## Open the current catalog Use the [model catalog](https://app.cicora.ai/models) for a visual comparison or request the catalog with the API key for the active workspace: ```bash curl https://api.cicora.ai/v1/models \ -H "Authorization: Bearer sk_..." ``` Copy the exact `id` returned by the catalog. Do not shorten it, infer it from a display name, or assume another member of the same model family has the same contract. *A live catalog separates available models by modality and supported endpoint.* *Copy an exact ID only after checking availability and capabilities.* ## Check availability before capabilities Choose an entry with `available: true`. When it is `available: false`, read `unavailableReason` instead of repeatedly sending the same request. A new personal workspace receives welcome balance under the current terms, but that balance does not unlock every model. Check its current amount and state in [Balance](https://app.cicora.ai/balance). Some personal-workspace models require the first real balance top-up and report `FIRST_TOP_UP_REQUIRED`. Shared workspaces can follow different access rules, so use the status shown for the active workspace. ## Match the model to the task Check these current fields before sending a request: * `architecture.input_modalities` and `architecture.output_modalities` for text, image, or file input and output; * `supported_parameters` for tools, structured output, reasoning controls, and other accepted options; * `context_length` and the published completion limit for request size; * `supported_endpoint_types` for image generation or editing where those operations are published; * `available` and `unavailableReason` for access in the active workspace. Use `/v1/chat/completions` for OpenAI-compatible chat. Use `/v1/messages` when the client requires the Anthropic Messages format; it accepts supported chat model IDs and published aliases from the shared catalog, not only Anthropic models. Use `/v1/images/generations` or `/v1/images/edits` only when the model publishes that operation. Video models use the separate `/v1/videos/models` catalog and asynchronous video endpoints. ## Keep discovery in the setup flow Refresh the catalog when configuring a client or when a saved model becomes unavailable. Fixed recommendations age quickly; compare the task's modality and required parameters first, then current availability, limits, and price. ## Troubleshooting **The model is unavailable** Branch on the public reason. `FIRST_TOP_UP_REQUIRED` in a personal workspace calls for a real top-up; `MODEL_NOT_AVAILABLE` calls for a fresh catalog check and another currently available model. First confirm which workspace owns the key. **A saved model ID disappeared** Compare the saved ID with the exact `id` values returned for the key's active workspace. If it is absent, record the old ID and check time before replacing it; a display name or family name is not evidence of the same contract. **A request started failing after an option changed** Inspect the HTTP `400` detail and remove the newly added option first. Then compare that field with `supported_parameters`, modalities, limits, and `supported_endpoint_types`; this distinguishes a capability mismatch from model availability. --- ## Generate files in chat Source: https://cicora.ai/en/docs/generated-files.md Ask the model to prepare a file and specify its format, structure, and data. cicora.ai can create XLSX, CSV, TSV, TXT, Markdown, or JSON. For a spreadsheet, state the columns, sheet order, and required totals up front. ```text Create an XLSX report named sales.xlsx with Sales and Summary sheets. The first sheet needs Customer, Date, and Amount columns; the second should contain the total sales amount. ``` ## What happens after the request ### Chat prepares the structure The model invokes the built-in file-generation tool. Executable code, macros, and external workbook links are not supported. ### A worker creates and verifies the file The chat card shows preparation, rendering, verification, and upload phases. Reloading the page restores the same durable job instead of starting another generation. ### Download the result When the job completes, the card shows the filename, format, size, and any available row or sheet metadata. The download action creates a fresh short-lived link only after workspace access is checked. The file remains private and is deleted with its chat thread. The card does not contain a permanent public object URL; access is checked again on every download. ## Get a predictable result * State the format and filename. * List columns and value types for tabular output. * Name each sheet and describe its contents for multi-sheet workbooks. * Request aggregates explicitly: sum, average, minimum, maximum, or count. * Split very large datasets when chat reports that a safety limit was exceeded. CSV and TSV values that resemble spreadsheet formulas are stored as text. This prevents a formula from executing when the export is opened. ## Troubleshooting **The file did not appear in chat** Wait for the job card to finish and reload the page: its state is restored from chat history. If the card reports an error, reduce the dataset or split the result according to the documented [limits](/en/docs/limits). **The download link expired** Return to the file card and use the download action again. cicora.ai checks workspace access and issues a new short-lived link. --- ## Top up and understand the balance Source: https://cicora.ai/en/docs/billing-balance.md The [Balance](https://app.cicora.ai/balance) page shows funds for the active workspace. Check the selected workspace before paying or investigating a request. ## Top up the active workspace 1. Open [Balance](https://app.cicora.ai/balance) and select **Top up**. 2. Choose an amount in USD and continue to the secure card checkout. 3. Enter an amount at or above the minimum displayed in the form. 4. Complete the external payment, then return to the balance page to check status. The minimum is a current cabinet value, not a permanent amount from a guide. ## Use the available checkout The checkout shows the payment methods available for the current account and country. Use only the methods displayed there; this guide does not promise support for a fixed card brand, country, alternative currency, or payment method. ## Read the three balance amounts | Amount | Meaning | | --------- | ----------------------------------------------------------------------- | | Available | Funds that can be used for a new request now. | | Total | The ledger balance before active request reservations are subtracted. | | Reserved | Estimates temporarily held for requests that are still being processed. | Available balance equals total balance minus active reservations. Parallel requests have separate reservations, so the reserved amount can rise during agent or batch work. ## Understand a reservation Before a request starts, cicora.ai estimates its cost from the input and requested output limit, then reserves that amount. The reservation prevents the same funds from being promised to concurrent requests. It is an estimate, not a hard spending cap. After settlement, confirmed usage is charged in full even when it exceeds the estimate. The difference is debited from total balance and can leave too little available balance for the next request. Unused reserved funds are released. Use [API-key spend limits](/en/docs/spend-limits) for budget control, while allowing for the same estimate-versus-final-charge boundary. ## Know when a request is charged A request that fails before any model output or reported usage is confirmed releases its reservation without a usage charge. If a stream delivered part of the output or usage was confirmed before interruption, that confirmed portion can be charged. Do not blindly retry a stream after output starts because that can repeat work and cost. ## Check a pending payment Check the operation status on [Balance](https://app.cicora.ai/balance) and refresh the balance. If a confirmed payment is still missing, do not create a duplicate payment until its status is checked. Send [support](/en/contact) the payment or order ID, approximate time with timezone, receipt, and active workspace name. Never send payment credentials or a complete API key. Confirmation time is not guaranteed. ## Troubleshooting **The payment status is pending, failed, or confirmed** Branch on the cabinet status. Pending means refresh without creating a duplicate; failed or cancelled means follow the visible payment action. If it is confirmed but no credit exists, send support the payment or order ID, receipt, active workspace, and exact time with timezone. **HTTP 402 appears while total balance is positive** Calculate available funds from total minus reserved. A large reserved amount points to concurrent work; a small reserved amount points to the new request estimate or earlier usage debt. Compare the request's model and explicit output limit before topping up. **A reservation has no matching active request** Find the request in [Usage](https://app.cicora.ai/usage). If it is still running, avoid a duplicate request; if it is finished or absent, send support the request identifier, exact time, model ID, key name, and visible masked key prefix. Release time is not guaranteed. --- ## Understand usage and request cost Source: https://cicora.ai/en/docs/usage-costs.md cicora.ai uses prepaid metered billing rather than a separate monthly subscription for each model. The current customer price for the selected model is shown in the [model catalog](https://app.cicora.ai/models); the captured USD charge is shown in [Usage](https://app.cicora.ai/usage) and the balance ledger. ## Know the billable categories The final charge can include: * ordinary input tokens sent to the model; * output tokens generated by the model; * cache-read and cache-write token buckets when the model reports them; * reasoning (`reasoning`) tokens when they are reported. Reasoning tokens are always billed when present. A dedicated reasoning rate is used when configured; otherwise the model's output-token rate applies. The current model catalog and Usage view may not expose a separate reasoning rate or counter for every model and request. Do not infer zero reasoning from a missing line or try to reconcile an undisclosed line item: the captured request total is authoritative. Cache prices are also model-specific. A separate read, write, 5-minute write, or 1-hour write rate is used only when it is configured for the model. Without a separate cache rate, those tokens use the ordinary input rate. Use the current displayed cicora.ai customer price as the billing reference instead of substituting a price from another catalog. ## Count every agent request An agent can make many API requests for one visible task. Each step may resend conversation history, tool definitions, and tool results, so repeated context is billed again according to that request's usage. Estimate a workflow from its complete request history, not only the tokens visible in the final client window. Create a separate API key for each project or agent when you need clear attribution. You can then filter [Usage](https://app.cicora.ai/usage) by key and apply a [spend limit](/en/docs/spend-limits). ## Verify the captured charge Open [Usage](https://app.cicora.ai/usage), choose the active workspace, period, and API key, then compare: * request status and time; * exact model ID, key name, and visible masked key prefix; * input, output, cache-read, and cache-write counters; * request count, duration, and captured charge. Compare the captured request total with your local estimate. They can differ when actual output, cache buckets, reasoning, a long-context tier, or reported usage differs from the estimate. If the total still looks wrong, send [support](/en/contact) the request identifier, exact time with timezone, model ID, key name, and visible masked key prefix. Never send the complete key or sensitive prompt content. ## Discover whether caching helps Open [Models](https://app.cicora.ai/models) and check whether the selected model publishes cache prices and relevant controls. Keep the repeated prompt prefix stable, use only controls listed in `supported_parameters`, and compare cache counters across two consecutive requests. A zero cache counter means no cache use was reported. A non-zero counter does not guarantee a discount: when the model has no separate cache price, ordinary input pricing applies. ## Understand interrupted requests An attempt that fails before any model output or reported usage is confirmed releases its reservation without a usage charge. A stream that already delivered output or has confirmed usage can be charged for that portion. Do not automatically retry after output begins; first check whether the client already received useful work and whether Usage recorded the request. ## Troubleshooting **Agent spend is higher than the visible task suggests** Compare the request count for the key with the number of client steps. Extra rows point to retries or tool loops; matching row counts with growing input point to repeated history or tool results. Sum captured request totals only after identifying that branch. **Caching did not reduce the request total** A zero cache counter points to no reported hit, often because the model lacks the capability or the repeated prefix changed. A non-zero counter with the ordinary input rate means no separate cache price is configured. Check those branches before changing request parameters. **Visible counters do not reproduce one request total** Check cache buckets, partial-stream output, long-context pricing, and whether the model can report reasoning. A missing separate reasoning line does not prove zero reasoning. Use the captured total and the safe support evidence listed above rather than inventing a hidden counter. --- ## Limit spending by API key Source: https://cicora.ai/en/docs/spend-limits.md Use a separate API key and USD limit for each project, agent, or team member whose usage must be controlled independently. ## Set the limit in the cabinet 1. Open [API keys](https://app.cicora.ai/api-keys) in the workspace that owns the key. 2. Create a separate key or find an existing one. 3. Open its limit settings. 4. Choose unlimited use or one of the displayed periods: `DAY`, `WEEK`, or `MONTH`. 5. Enter the USD amount and save. The key row shows how much of the configured amount has been spent. The same page also shows recent model usage for that key. *A project key has a USD spending window checked before a new request starts.* *Give each project its own key and current spending limit.* ## Understand the calendar windows | Period | Window in `Europe/Moscow` | | ------- | ------------------------------------------------------- | | `DAY` | Starts at local midnight. | | `WEEK` | Starts Monday at local midnight. | | `MONTH` | Starts on the first day of the month at local midnight. | Use the returned `resetAt` value when handling a blocked request. Do not calculate the reset from the client's timezone. ## Know what the limit checks Before a request starts, the service adds current captured spend, active reservations, and the new estimated reservation. If the total would exceed the key's limit, model execution does not start and the API returns HTTP `429` with `API_KEY_SPEND_LIMIT_EXCEEDED`. The response identifies the period, limit, spent and reserved amounts, required estimate, currency, and `resetAt`. The reservation is still an estimate: a completed request is charged for full confirmed usage even if its final cost exceeds the amount reserved, and later requests can then be blocked. ## Use the supported management workflow Create, change, or remove spend limits in the cabinet UI. There is currently no documented public automation contract for managing these limits. Do not copy requests from browser developer tools or treat cabinet traffic as a platform-key API. ## Respond to a blocked request For `API_KEY_SPEND_LIMIT_EXCEEDED`, either wait until the response's `resetAt` or change the key's limit in [API keys](https://app.cicora.ai/api-keys). Generic retry backoff does not create more budget. If the code is a different kind of `429`, follow the action for that public error instead. ## Troubleshooting **HTTP 429 blocks the request** Read the public code first. `API_KEY_SPEND_LIMIT_EXCEEDED` is a budget decision: inspect `period`, `spentAmount`, `reservedAmount`, and `resetAt`. A different `429` needs its own retry guidance rather than a limit change. **The same limit error remains after resetAt** Refresh the key, confirm the active workspace, key name, and visible masked key prefix, then compare the response's `resetAt` with Moscow time. If it is still stale, preserve the exact response and request time for support. **Captured spend crossed the configured amount** Compare the request's reserved estimate with its captured total in Usage. One in-flight request can settle above its estimate; the limit records that full total and blocks later requests. This is different from several concurrent reservations consuming the remaining budget. --- ## Authenticate API requests Source: https://cicora.ai/en/docs/authentication.md ## Create and save a key Open [API keys in the cabinet](https://app.cicora.ai/api-keys), check that the correct workspace is active, and create a key named after the server or project that will use it. The complete key is shown once. Later, the cabinet shows only its name and masked prefix, which is safe to use when identifying the key to support. Save the complete key immediately in a server environment variable or secret manager: ```bash export CICORA_API_KEY="sk_..." ``` **Keep the key out of browsers** Never put a platform key in frontend source, a public browser bundle, a repository, screenshots, or support messages. Browser code should call your authenticated backend; that backend calls cicora.ai. *A platform key is attached to a request before it reaches the API.* *Bearer authentication for public API formats.* ## Send the key as Bearer authorization The API reads the key from the `Authorization` header. Verify it with model discovery before configuring an SDK or coding tool: ```bash curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/models \ -H "Authorization: Bearer $CICORA_API_KEY" ``` A successful response has `object: "list"` and a `data` array. Choose an available model and copy its exact `id`; do not keep a model list copied from an old guide. The catalog can also explain that a model is unavailable to the active workspace. ## Separate projects and rotate safely Use a separate key for each project or server. This makes its usage, spend limits, and revocation independent. If a key is lost, exposed, or no longer needed, revoke it in the cabinet. For rotation without downtime, create a replacement, update the server secret, repeat `GET /v1/models` with the replacement, and only then revoke the old key. A revoked key cannot be restored. ## Prepare safe diagnostics A **public error code** is the client-facing value such as `error.code` in an API error response. Record that code, the HTTP status, endpoint, model ID, approximate time with timezone, and the masked key prefix. Never include the complete key or sensitive request content. ## Troubleshooting **The API returns 401 or says the key is invalid** Check that the header starts with `Bearer `, that the running process received `CICORA_API_KEY`, and that the key belongs to the active workspace and has not been revoked. Test the same environment with `GET /v1/models` without printing the secret. **The complete key is no longer visible in the cabinet** This is expected after the one-time display. Revoke the lost key, create a replacement, save it server-side, verify it, and then update the application. **A key appeared in browser code, a repository, or a screenshot** Treat it as exposed. Revoke it, create a new key, remove the old value from deployed configuration and published material, and move API calls behind your backend. **Authentication works but the intended model is unavailable** Read the current entry returned by `GET /v1/models` and its availability reason. Confirm the active workspace, choose an available model, or complete the action indicated by the catalog. --- ## Migrate an OpenAI-compatible client Source: https://cicora.ai/en/docs/migration.md ## Run a complete SDK example You can keep the official OpenAI SDK for methods covered by the cicora.ai compatibility surface. You need Node.js, npm, `curl`, and `jq`. Start with one non-streaming Chat Completions request, meaning one complete JSON response rather than incremental output. ### Install the SDK ```bash npm install openai ``` ### Set the key and choose a current model Query text models that accept the `max_tokens` used by the example. The checks below require `available == true` and exclude image endpoint entries. ```bash set -euo pipefail export CICORA_API_KEY="sk_..." if ! MODELS_JSON="$( curl --fail-with-body --silent --show-error "https://api.cicora.ai/v1/models?output_modalities=text&supported_parameters=max_tokens" \ -H "Authorization: Bearer $CICORA_API_KEY" )"; then printf '%s\n' "$MODELS_JSON" >&2 exit 1 fi if ! CICORA_MODEL="$( jq -er ' first( .data[] | select( .available == true and ((.architecture.output_modalities // []) | index("text")) and ((.supported_parameters // []) | index("max_tokens")) and ((.supported_endpoint_types // []) | all(. != "image-generation" and . != "image-edit")) ) | .id ) ' <<<"$MODELS_JSON" )"; then printf 'No available text model with max_tokens found in /v1/models.\n' >&2 exit 1 fi export CICORA_MODEL printf '%s\n' "$CICORA_MODEL" ``` ### Create the client and request Save this as `migrate.mjs`: ```js import OpenAI from "openai"; const apiKey = process.env.CICORA_API_KEY; const model = process.env.CICORA_MODEL; if (!apiKey || !model) { throw new Error("Set CICORA_API_KEY and CICORA_MODEL"); } const client = new OpenAI({ apiKey, baseURL: "https://api.cicora.ai/v1" }); const completion = await client.chat.completions.create({ model, messages: [{ role: "user", content: "Reply with ok" }], max_tokens: 64 }); console.log(completion.choices[0]?.message?.content); ``` ### Run it and read the output ```bash node migrate.mjs ``` A successful run prints the text from `choices[0].message.content`, for example: ```text ok ``` *An existing OpenAI-compatible client changes only its base URL and key.* *Keep the SDK; point supported methods to cicora.ai.* ## Move configurations to cicora.ai Use `https://api.cicora.ai/v1` for every Cicora OpenAI-compatible configuration. ## Understand the compatibility boundary Changing `baseURL` does not make every OpenAI endpoint available. The example works because `client.chat.completions.create()` maps to the published `POST /v1/chat/completions` contract. cicora.ai also publishes `POST /v1/responses`, Conversations, model discovery, and documented image endpoints. Embeddings and audio transcription and translation endpoints are not published. Check the method used by your SDK or tool before migrating it. If it requires an unpublished endpoint and cannot switch to Chat Completions or Messages, changing the URL alone will not make it compatible. ## Keep discovery in your setup Refresh `GET /v1/models` instead of treating a model ID copied from this example as permanent. Use each model's current availability and `supported_parameters` when building optional request fields. A **public error code** is the client-facing value in an API error, usually `error.code`. Record it with the HTTP status when diagnosing a migration; do not use private transport details. ## Troubleshooting **The SDK returns 401** Confirm that `CICORA_API_KEY` is available to the process and that `baseURL` is exactly `https://api.cicora.ai/v1`. Verify the key separately with `GET /v1/models` and never print the full value. **The request path contains /v1 twice** Keep `/v1` in `baseURL` and call the SDK method normally. Do not also put `/v1/chat/completions` into a setting that expects only the base URL. **The client calls /v1/responses or another endpoint** `/v1/responses` is published; follow [Responses and Conversations](/en/docs/responses) and add only the documented portable fields. For another unpublished endpoint, configure the client to use Chat Completions or Messages when appropriate, or choose a documented compatible tool. **The sample model is unavailable or rejects an option** Select an available ID from `GET /v1/models` and compare the request with that entry's `supported_parameters`. Do not substitute `max_tokens` or another field as a universal workaround. --- ## Use Chat Completions Source: https://cicora.ai/en/docs/chat-completions.md ## Send the smallest successful request Choose an available chat model from `GET /v1/models`, then send a non-streaming request first: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/chat/completions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4", "messages": [ { "role": "user", "content": "Reply with ok" } ] }' ``` A representative successful response is: ```json { "id": "chatcmpl_example", "object": "chat.completion", "created": 1786651200, "model": "openai/gpt-5.4", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "ok" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 8, "completion_tokens": 1, "total_tokens": 9 } } ``` Read the assistant text from `choices[0].message.content`. Check `finish_reason` before assuming the answer is complete, and use the returned `usage` when the selected model reports it. *A chat message is submitted and streamed back as incremental output.* *OpenAI-compatible chat at `/v1/chat/completions`.* ## Set an output limit only when needed The shipped request contract accepts either `max_completion_tokens` or the legacy spelling `max_tokens` as a positive integer. Send only one. The selected model's capabilities determine whether and how the limit can be used, so check its `supported_parameters` instead of treating either spelling as a universal workaround. If you omit both fields, the service uses its current default when preparing and reserving the request. That default is not a promise about every model's maximum output. For a deliberate cap, send one field supported by the chosen model and inspect `finish_reason` in the result. ## Add streaming after the first request works **Streaming** delivers an answer incrementally instead of waiting for the complete JSON response. Chat Completions uses **Server-Sent Events (SSE)**, a text format in which each event is carried in a `data:` record. ```bash export CICORA_API_KEY="sk_..." curl --no-buffer --fail-with-body --silent --show-error https://api.cicora.ai/v1/chat/completions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4", "messages": [ { "role": "user", "content": "Reply with ok" } ], "stream": true }' ``` Each JSON event contributes a `choices[0].delta`; a successful stream ends with the literal marker `[DONE]`: ```text data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]} data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"ok"},"finish_reason":null}]} data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]} data: [DONE] ``` Handle three terminal cases: a non-2xx JSON error before SSE starts, an SSE payload containing an error, and a connection that closes before `[DONE]`. A **public error code** is the client-facing `error.code` value in an error payload; use it for diagnostics and retry decisions. **Do not blindly retry delivered output** Retry with bounded backoff only when no output has been delivered. After any text arrives, keep the partial result and ask the user or application to decide whether to continue: an automatic retry can duplicate work and cost, and confirmed usage from an interrupted stream may be billed. ## Troubleshooting **A request parameter is rejected** Compare the body with this minimal example and the selected model's `supported_parameters`. Remove the unsupported known option or choose a model that publishes it; do not assume changing field case or switching token-limit spellings fixes every model. **The stream closes without [DONE]** Treat the response as incomplete. Record whether any output arrived, the HTTP status or terminal error payload, model ID, time, and request identifier if present. Do not automatically replay a request that already produced output. **The request times out** For long responses, enable streaming so output can arrive incrementally. If the timeout happens before any response output or SSE data arrives, a bounded retry with exponential backoff and jitter is allowed. If stream output has started, keep the partial result and do not retry automatically because that can duplicate work and cost. Timeout behavior depends on the request stage and current service configuration; do not assume a fixed 120-second limit. **The answer is shorter than expected** Inspect `finish_reason` and the one explicit output-limit field you sent. Compare that value with the current model limits; an internal reservation default is not a universal output limit. **The model appears to forget earlier messages** Every request must include the conversation history it needs. The public API does not automatically attach messages from a previous request, so inspect the submitted `messages` array and request-level input usage. --- ## Use Responses and Conversations Source: https://cicora.ai/en/docs/responses.md The Responses API is an OpenAI-compatible interface for text and image input, function calling, structured output, streaming, and durable conversation state. It is available at `https://api.cicora.ai/v1` and uses the same Bearer API key and model IDs as the other API formats. ## Create a response Choose an available text model from `GET /v1/models`, then start with one non-streaming request: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/responses \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4", "input": "Reply with ok" }' ``` Read assistant text from the `output` array. A text response contains an assistant `message` with one or more `output_text` parts: ```json { "id": "resp_example", "object": "response", "status": "completed", "model": "openai/gpt-5.4", "output": [ { "id": "msg_example", "type": "message", "role": "assistant", "status": "completed", "content": [{ "type": "output_text", "text": "ok", "annotations": [] }] } ] } ``` *A Responses request creates durable output that can continue through a previous response or a Conversation.* *Responses supports portable state with `previous_response_id` and Conversations.* ## Continue a previous response Responses are stored by default. Send the returned ID as `previous_response_id` when the next request should include the previous portable input and output history: ```bash curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/responses \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4", "previous_response_id": "resp_example", "input": "Now answer with one word" }' ``` Use either `previous_response_id` or `conversation` in a request, not both. Retrieve an earlier stored response with `GET /v1/responses/{response_id}`, inspect its original portable input with `GET /v1/responses/{response_id}/input_items`, or delete stored state with `DELETE /v1/responses/{response_id}`. Add an `Idempotency-Key` header when a network retry must not create a second stored response. Reusing the key with the same request returns the original response; do not reuse it for a different body. ## Stream response events Set `stream` to `true` to receive Responses Server-Sent Events (SSE). Process events in sequence and treat only a terminal `response.completed`, `response.failed`, or `response.incomplete` event as final: ```bash curl --no-buffer --fail-with-body --silent --show-error https://api.cicora.ai/v1/responses \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4", "input": "Reply with ok", "stream": true }' ``` ```text data: {"type":"response.created","sequence_number":1,"response":{"id":"resp_example","status":"in_progress"}} data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_example","output_index":0,"content_index":0,"delta":"ok"} data: {"type":"response.completed","sequence_number":8,"response":{"id":"resp_example","status":"completed"}} ``` A connection close without a terminal event is incomplete. Retry with bounded backoff only before output was delivered; after a text, tool-call, or reasoning event arrives, preserve the partial result and let the caller decide whether to continue. ## Use function tools and structured output Pass portable `function` tools in `tools`. When the model returns a `function_call`, execute it in your application, then send a `function_call_output` item in the next request. Function execution stays in your environment; cicora.ai does not run arbitrary client code. Use `text.format` with `json_object` or `json_schema` for supported structured-output requests. Check the selected model's current `supported_parameters` in `GET /v1/models`; model availability and optional capabilities can change. ## Keep a named Conversation Conversations are separate durable objects for a sequence of portable input and output items. Create one, then pass its ID as `conversation` to `POST /v1/responses`: ```bash export CICORA_CONVERSATION_ID="$( curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/conversations \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"metadata":{"project":"support-bot"}}' \ | jq -r '.id' )" curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/responses \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"model\":\"openai/gpt-5.4\",\"conversation\":\"$CICORA_CONVERSATION_ID\",\"input\":\"Reply with ok\"}" ``` Use `GET`, `POST`, and `DELETE` on `/v1/conversations/{conversation_id}` to retrieve, update metadata, or delete a Conversation. Its items are available at `/v1/conversations/{conversation_id}/items`; append up to 20 portable items with `POST`, and use `after`, `limit`, and `order` to page through them. ## Compatibility boundary The portable API accepts text and image input, function tools, tool results, response chaining, Conversations, and the documented request fields on this page. It intentionally rejects hosted tools and provider-private state: `web_search`, `file_search`, `code_interpreter`, computer use, hosted MCP, background jobs, and encrypted provider-native reasoning state. **Do not assume all OpenAI features are portable** An OpenAI SDK can call the published endpoint, but an application may still rely on a hosted tool or an undocumented request field. Start with the smallest request above, then add one capability at a time and handle a public error response explicitly. ## Troubleshooting **The API rejects a request field or tool** The portable Responses contract is intentionally strict. Remove the unsupported field, use a `function` tool that your application executes, or choose a supported API flow. The error identifies the public parameter when available. **A response cannot find a previous ID or Conversation** Use the exact returned ID with the same API key and workspace. Do not combine `previous_response_id` and `conversation` in one create request, and do not reuse an ID after deleting its stored object. **The stream delivered output but did not complete** Keep the delivered result and record the last event, response ID, model, HTTP status or public error, and time. Do not automatically replay a request that already delivered content or a tool call. --- ## Use Anthropic Messages Source: https://cicora.ai/en/docs/anthropic-messages.md ## Send a direct Messages request For direct HTTP, use the complete path `POST https://api.cicora.ai/v1/messages`, Bearer authorization, and an Anthropic version header: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/messages \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-6", "max_tokens": 64, "messages": [ { "role": "user", "content": "Reply with ok" } ] }' ``` A representative response is: ```json { "id": "msg_example", "type": "message", "role": "assistant", "model": "claude-sonnet-4-6", "content": [ { "type": "text", "text": "ok" } ], "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 8, "output_tokens": 1 } } ``` For this text-only request, read the answer from `content[0].text`. Real responses can contain more than one content block, including tool-use blocks, so clients should branch on each block's `type`. *An Anthropic Messages request uses the same platform key through a compatible endpoint.* *Direct HTTP uses `/v1/messages`; Claude Code receives the base URL without `/v1`.* ## Choose Messages when the client expects its format Messages is an Anthropic-compatible wire format: its request fields, content blocks, response shape, and streaming events follow that client contract. Streaming means receiving incremental events before the final completion. The endpoint is not restricted to Anthropic models: it accepts supported chat model IDs from the current cicora.ai catalog and aliases published for those models. Current shipped examples include these canonical ID and alias pairs: | Canonical model ID | Published alias | | ----------------------------- | ---------------------------- | | `anthropic/claude-sonnet-4.6` | `claude-sonnet-4-6` | | `openai/gpt-5.4` | `openai-gpt-5-4` | | `deepseek/deepseek-v4-flash` | `deepseek-deepseek-v4-flash` | Use `GET /v1/models` for the current catalog. Clients that send `anthropic-version` or identify as Claude receive Anthropic-shaped model discovery with the preferred published IDs. Do not invent an alias by removing punctuation from an arbitrary model ID. Use `/v1/chat/completions` when your client expects OpenAI Chat Completions fields and response choices. Use `/v1/messages` when it expects Anthropic Messages content blocks. Model ownership does not decide the endpoint; the client protocol does. ## Handle Messages streams safely Set `stream: true` to receive Anthropic SSE. A successful text stream follows this event sequence and terminates at `message_stop`; Messages does not send an OpenAI `[DONE]` marker: ```text event: message_start data: {"type":"message_start","message":{"id":"msg_example","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-6","stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":8,"output_tokens":0}}} event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"ok"}} event: content_block_stop data: {"type":"content_block_stop","index":0} event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":1}} event: message_stop data: {"type":"message_stop"} ``` An Anthropic error event can use this shape. Do not rely on receiving one: depending on when the failure occurs, the connection can close before `message_stop` without a final event. ```text event: error data: {"type":"error","error":{"type":"api_error","message":"Request failed"}} ``` Treat `event: error` or a connection close before `message_stop` as incomplete. A bounded retry is reasonable only before any content delta arrives. Once a `content_block_delta` has delivered output, keep the partial result and do not retry automatically because replaying the request can duplicate work and cost. ## Connect Claude Code with the correct base Claude Code appends `/v1/messages` itself, so set `ANTHROPIC_BASE_URL=https://api.cicora.ai` without `/v1`. Follow the dedicated [Claude Code guide](/en/docs/claude-code) for installer and manual paths, explicit model selection, and verification. A **public error code** is a client-facing code in an API error response. The Messages error envelope is Anthropic-shaped, so also record its `error.type`, HTTP status, exact endpoint, and message when a separate `error.code` is not present. ## Troubleshooting **The client requests /v1/v1/messages** The base URL and the client both added `/v1`. For Claude Code use `https://api.cicora.ai`; for the direct curl request use the complete `https://api.cicora.ai/v1/messages` path. Inspect the final URL produced by other clients. **A model alias is rejected** Copy a canonical ID or preferred alias from current `GET /v1/models` discovery. Do not derive aliases mechanically, and remove stale model values from persistent client settings. **The stream closes without message_stop** Treat the response as incomplete. Record the last event, whether any content delta arrived, the HTTP status, model ID, time, and request identifier if present. Do not automatically replay a request that already produced output. **The endpoint rejects a Chat Completions-shaped body** Messages requires its own fields, including `max_tokens`, Anthropic content blocks, and the `anthropic-version` header. Either convert the request to the Messages shape or send the original OpenAI-shaped body to `/v1/chat/completions`. **Claude Code works differently from the direct curl check** Compare `ANTHROPIC_BASE_URL`, `ANTHROPIC_AUTH_TOKEN`, the explicit model, and any stale `ANTHROPIC_API_KEY`. The direct check proves the endpoint; the Claude Code guide covers its local configuration. --- ## Use image endpoints Source: https://cicora.ai/en/docs/images.md ## Generate one image first Choose an available image model from the current catalog. This minimal request asks for one base64-encoded result and saves the JSON response: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/images/generations \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-image-2", "prompt": "A clean product banner on a neutral background", "response_format": "b64_json", "n": 1 }' \ -o response.json ``` A representative response has a `data` array. Each item contains either `b64_json` or `url`, according to the requested and supported response format: ```json { "created": 1786651200, "data": [ { "b64_json": "iVBORw0KGgo..." } ] } ``` For the `b64_json` request above, decode the first result into a file: ```bash node -e 'const fs = require("node:fs"); const body = JSON.parse(fs.readFileSync("response.json", "utf8")); fs.writeFileSync("image.png", Buffer.from(body.data[0].b64_json, "base64"));' ``` If you request `url` and the selected model supports it, read `data[0].url` instead. A successful response is never an empty generation: it contains at least one usable image item. *Generation and edit requests produce image artifacts through separate compatible endpoints.* *Start with generation, then add only options published by the selected model.* ## Discover capabilities before adding options The image-specific catalog exposes current models, availability, operations, option constraints, reference limits, and streaming support, meaning whether partial results can arrive before the final images: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/images/models \ -H "Authorization: Bearer $CICORA_API_KEY" ``` Check the selected record's `available`, `capabilities`, and `supported_parameters`. Options such as `aspect_ratio`, `size`, `quality`, `resolution`, `background`, output format, and compression are model-specific. For current Google image models, for example, `aspect_ratio` and `resolution` are separate controls whose allowed values come from that exact catalog record. Do not copy a combination from another model. The field `n` controls the number of final output images, within the selected model's published range. It does not control edit references. Repeated `image[]` parts are ordered input images; their allowed count comes from `capabilities.maxReferenceImages`. ## Stream through the unified endpoint Streaming uses `POST /v1/images`, not `/v1/images/generations`. Select a currently available generation model whose catalog record permits at least one partial image, then make the request: ```bash set -euo pipefail export CICORA_API_KEY="sk_..." if ! IMAGE_MODELS_JSON="$( curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/images/models \ -H "Authorization: Bearer $CICORA_API_KEY" )"; then printf '%s\n' "$IMAGE_MODELS_JSON" >&2 exit 1 fi if ! CICORA_IMAGE_MODEL="$( jq -er ' first( .data[] | select( .available == true and .capabilities.generation == true and .supports_streaming == true and ((.supported_parameters.partial_images.max // 0) >= 1) ) | .id ) ' <<<"$IMAGE_MODELS_JSON" )"; then printf 'No available streaming image model found in /v1/images/models.\n' >&2 exit 1 fi export CICORA_IMAGE_MODEL jq -n --arg model "$CICORA_IMAGE_MODEL" '{ model: $model, prompt: "A clean product banner on a neutral background", stream: true, partial_images: 1, n: 1 }' | curl --no-buffer --fail-with-body --silent --show-error https://api.cicora.ai/v1/images \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- ``` Each SSE record uses a `data:` line. Read the JSON `type` field to distinguish partial, completed, and error records. A successful stream can contain partial and completed image records and ends with `[DONE]`: ```text data: {"type":"image_generation.partial_image","partial_image_index":0,"b64_json":"iVBORw0KGgo..."} data: {"type":"image_generation.completed","b64_json":"iVBORw0KGgo..."} data: [DONE] ``` A failed stream can emit a data record with the public code and message: ```text data: {"type":"error","error":{"code":"IMAGE_UPSTREAM_FAILED","message":"Image generation failed"}} ``` Treat `type: error` or a connection close before `[DONE]` as incomplete. Retry with a bounded backoff only if no partial or completed image has arrived. After output starts, preserve it and require an explicit decision before another request because an automatic retry can duplicate work and cost. ## Edit with multipart form data Use `POST /v1/images/edits` only for a model whose catalog record publishes edit support. `curl -F` creates the required `multipart/form-data` body and boundary: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/images/edits \ -H "Authorization: Bearer $CICORA_API_KEY" \ -F "model=google/gemini-3.1-flash-image" \ -F "prompt=Keep the subject and replace the background" \ -F "image[]=@reference.png" \ -F "aspect_ratio=16:9" \ -F "response_format=b64_json" \ -o response.json ``` Add more `image[]` parts in the intended order only while staying within the model's current reference limit. Add a `mask` part only when the model publishes mask support. A **public error code** is the client-facing code in an API error response. `MODEL_PARAMETER_COMBINATION_INVALID` means the selected model cannot accept the requested option combination. `MODEL_CAPABILITY_METADATA_UNAVAILABLE` means the service cannot currently verify that combination against capability metadata. Use the exact returned code and current catalog values instead of guessing a replacement option. ## Troubleshooting **The minimal generation request rejects the model** Query `GET /v1/images/models`, confirm that the exact ID is available and supports generation, and replace the sample ID with one from that response. Do not send an image model to `/v1/chat/completions`. **An aspect ratio, size, quality, or resolution is rejected** Read the public error code and the selected model's `supported_parameters`. Remove the option or choose a listed value; do not combine independent controls unless the catalog allows that combination. **The response cannot be extracted** Confirm the HTTP request succeeded and inspect `data[0]`. Decode `b64_json` only for a base64 response, or read `url` only when that field is present. An error body or empty `data` is not a successful image. **The stream closes without [DONE]** Treat the response as incomplete. Record the last event, whether any partial or completed image arrived, the model ID, time, and request identifier if present. Do not automatically replay a request that already produced output. **An edit rejects references or a mask** Confirm edit support, `maxReferenceImages`, and mask capability for the exact model. Keep repeated `image[]` fields in the intended order and use `n` separately for the number of outputs. --- ## Decisions API Source: https://cicora.ai/en/docs/decisions.md TypeSafe Jev answers specific questions about data: select a category, evaluate a condition or return a score. Responses contain typed values and probabilities. Choose a text model for a regular conversation. ## Choose a model Open the [model catalog](/en/models?category=decision) and select **Decisions**. Check current availability, pricing, context and capabilities there. Jev appears after it is enabled; use the example ID below only when it is available in your workspace. In the cabinet, open **Chat → model picker → Decisions → Jev**. Enter context and questions, then run the evaluation. Choosing a text model restores the normal chat and its history. Selecting a model does not start paid inference. ## First request Use your [API key](/en/docs/authentication) with inference permission and access to the model. Save the body as `decision.json`, then run: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/api/alpha/decisions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @decision.json ``` ```json { "model": "typesafe/jev-1.14", "state": {"order": 1042, "paid": true}, "questions": { "paid": {"type": "noul", "instructions": "The order is paid."}, "action": { "type": "choice", "instructions": "Choose the next action.", "criteria": {"ship": null, "request_payment": null} }, "priority": { "type": "score", "instructions": "Rate delivery urgency.", "criteria": ["Normal", "Urgent"] } } } ``` ## Question types | Type | Input | Read the answer | | -------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------- | | `noul` | A condition in `instructions` | `noul`: probability from 0 to 1, not a Boolean | | `choice` | A `criteria` object mapping option keys to descriptions or `null` | `choice`: the selected option key | | `score` | An ordered `criteria` array | `score`: a position from 0 to the number of levels minus 1; it can be fractional | | `box` | A description of an object in an image | Available through [System One](/en/docs/system-one) when supported by the model | `state` accepts a string, JSON object or array. The names in `questions` become the keys in `answers`. Decisions API requires `instructions` for every question. Choice requires at least one option and Score at least one level. Size and option limits depend on model capabilities. ## Response This is an illustrative response. Actual probabilities and token counts will vary. ```json { "model": "typesafe/jev-1.14", "answers": { "paid": {"type": "noul", "noul": 0.99}, "action": { "type": "choice", "choice": "ship", "confidence": 0.98, "probabilities": {"ship": 0.99, "request_payment": 0.01} }, "priority": { "type": "score", "score": 0.1, "confidence": 0.8, "probabilities": {"0": 0.9, "1": 0.1}, "legend": {"0": "Normal", "1": "Urgent"} } }, "usage": {"input_tokens": 120, "output_tokens": 0} } ``` `confidence`, `probabilities` and `legend` can be absent in Decisions API. Your application chooses its decision thresholds. A probability does not guarantee a correct answer. ## Formats and limits | Format | Path | Input | | ------------- | --------------------------- | -------------------------------------- | | Decisions API | `POST /api/alpha/decisions` | Text and JSON | | System One | `POST /v1/systemone` | Text and JSON; PNG/JPEG when supported | Use `Content-Type: application/json`. Streaming, `messages`, `temperature`, `tools` and `max_tokens` are not supported. Image input is not yet accepted through Decisions API; use [System One](/en/docs/system-one) instead. ## Cost and retries The catalog shows current prices per million input and output tokens. Multiple questions can increase metered input; use `usage.input_tokens` rather than the length of `state` alone. Balance is temporarily reserved before evaluation and settled against actual usage after the response. API responses return `usage.input_tokens` and `usage.output_tokens`; `usage.cost` is omitted. Check the actual charge in [Usage](/en/docs/usage-costs) or in the cabinet result, in your balance currency. Failures use the [common API error format](/en/docs/errors). Correct invalid questions or unsupported capabilities before retrying. After a connection failure, check Usage first: submitting again can create another paid request. ## Troubleshooting **Why is the model unavailable?** Check your selected workspace, model access and balance. If Jev is absent from the Decisions catalog, it is not enabled for your access yet. **What should I do after a timeout?** Check [Usage](/en/docs/usage-costs) for the request time first. No response does not mean no charge. Make an explicit decision before submitting again. --- ## System One API Source: https://cicora.ai/en/docs/system-one.md System One uses TypeSafe's native JSON format with the same decision models and API key. The selected model's catalog price applies. ## Text and JSON Use `decision.json` from the [Decisions API example](/en/docs/decisions) with this request path: ```bash curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/systemone \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @decision.json ``` `POST /api/v1/systemone` is an alias for the same operation. Do not duplicate `/v1` when configuring a base URL. ## Differences from Decisions API * Question `instructions` may be omitted or `null`. * Choice returns `choice`, `confidence` and `probabilities`. * Score returns `score`, `confidence`, `probabilities` and `legend`. * Noul returns `noul`, a number from 0 to 1. * Box returns `box` with normalized `top`, `bottom`, `left`, `right` edges from 0 to 1, and `confidence`. Choice accepts at most 255 options and Score at most 10 levels; individual models can impose lower limits. Check supported question types and context in the catalog. ## Images and Box Only models with verified image and Box support on System One accept this input. Add `typesafe-danger-zone-images: true`. Supply PNG/JPEG via `assets`; `data_base64` contains raw Base64 without a `data:` prefix. Multipart uploads are not supported. The body below illustrates the structure. Replace `BASE64_IMAGE_BYTES` with actual encoded image bytes. ```json { "model": "typesafe/jev-1.14", "state": "Product photo: product", "assets": { "product": {"type": "image", "format": "png", "data_base64": "BASE64_IMAGE_BYTES"} }, "questions": { "product_region": {"type": "box", "instructions": "The product in the product photo."} } } ``` Box edges are measured from the top-left corner. A box alone does not prove the target exists; add a Noul presence question when your task requires that check. ## Long context If supported by the model, explicitly enable long context with `typesafe-danger-zone-long-context: true`. Opt-in headers must have the exact value `true`; omit a header when its mode is not needed. These flags do not bypass model context or request body limits. See [Decisions API](/en/docs/decisions) for costs, usage accounting and retry behavior. To try the model without code, select it from the chat model picker in the cabinet. ## Troubleshooting **Why is the model unavailable?** Check your selected workspace, model access and balance. If Jev is absent from the Decisions catalog, it is not enabled for your access yet. **What should I do after a timeout?** Check [Usage](/en/docs/usage-costs) for the request time first. No response does not mean no charge. Make an explicit decision before submitting again. --- ## Audio API Source: https://cicora.ai/en/docs/audio.md Use one workspace API key for two operations: | Operation | Endpoint | Successful response | | ---------------------------------------------------- | ------------------------------- | ------------------------- | | [Speech synthesis (TTS)](/en/docs/audio-speech) | `POST /v1/audio/speech` | Audio bytes | | [Transcription (STT)](/en/docs/audio-transcriptions) | `POST /v1/audio/transcriptions` | JSON with recognized text | The same endpoints are also available under `/api/v1/audio/*`. Set the base URL once; do not repeat `/v1`. See [authentication](/en/docs/authentication) to create a key. Supplier credentials are not needed. ## Choose a model and voice The unified catalog includes Audio alongside text, image, video and Decisions: ```bash curl --fail-with-body --silent --show-error \ 'https://api.cicora.ai/api/models?kind=audio' -o audio-models.json jq '.data[] | {id, available, audio}' audio-models.json ``` Use the exact `id` as `model`. `audio.operations` lists `speech` and/or `transcription`; `audio.profiles` describes verified combinations and limits. A speech profile contains voice IDs, formats, sample rates, channels and speed ranges. A transcription profile lists accepted audio geometry, languages and optional features. Choose a complete compatible profile; values from different profiles cannot always be combined. `available` describes catalog access and pricing readiness, not a guarantee that a supplier will respond at this instant. Your workspace, key limits and balance are checked at execution. `/v1/models` serves text-compatible model discovery; use `/api/models?kind=audio` for Audio. Listen to voice samples in the cabinet's Audio → Speech gallery, then select the model and voice. The gallery is a preview library; sample text and recording are not a promise that every new generation sounds identical. A voice can work with more than one model. Send its public `voice` ID, not its display name or gallery item ID. ## Prices and accounting Read `audio.pricing` for the selected operation. Each tariff has `currency`, `revision` and `components`. A component specifies `meter`, `unitQuantity`, `unitPrice`, `roundingIncrement` and `minimumQuantity`. Character meters also define the character-counting method; duration meters define channel grouping. A short recording can therefore be billed at a minimum duration. Do not assume Audio uses text-token prices or that every model bills by the same unit. The customer tariff is fixed when an operation starts. Balance and key spending limits apply to Audio. Check the final charge in [Usage](/en/docs/usage-costs); optional transcription `usage` fields describe measured usage and may be absent. The response does not publish a synthetic `usage.cost` in USD. ## Requests, jobs and retries The public API returns the result on the same HTTP request. Speech is a binary byte stream; transcription waits for JSON. Cabinet generation runs as a background job and appears in its history. A cabinet job URL is not a public API polling endpoint. A disconnected request may already have reached the supplier. Do not automatically repeat a request after a timeout or partial audio delivery. Preserve the request time and any request identifier, check Usage, and make an explicit retry decision. `session_id` groups metadata; it is not an idempotency key. ## Compatibility and optional features The request shapes follow the [OpenRouter TTS interface](https://openrouter.ai/docs/api/api-reference/tts/create-speech) and [STT interface](https://openrouter.ai/docs/api/api-reference/stt/create-transcription). Supported models, limits, error bodies and accounting are platform-specific. Model and voice IDs from another service are not automatically available here. Both operations accept `provider.data_collection` (`allow`/`deny`) and `provider.zdr`. A strict policy requires a verified supporting route; unknown metadata does not satisfy it. `provider.options` carries provider-keyed JSON options only where supported. The optional `session_id` and `user` strings are limited to 256 characters; `trace` is a JSON metadata object. These fields do not enable another platform's logging integrations. Music generation, realtime conversations, translation and persistent voice training are not part of these endpoints. Multi-speaker input, reference recordings, diarization and keyterms require explicit model support. ## Troubleshooting **The model is absent or unavailable** Refresh the Audio catalog and check the exact model ID, operation and workspace access. A model advertised by a supplier is usable here only after its route and tariff are published. **The request timed out** Check Usage before retrying. An absent response does not establish that processing or billing never started; see [errors](/en/docs/errors). --- ## Create speech (TTS) Source: https://cicora.ai/en/docs/audio-speech.md `POST /v1/audio/speech` accepts JSON and returns audio bytes. Authenticate with `Authorization: Bearer` and your workspace API key. ## Generate MP3 Choose a model and voice from the [Audio catalog](/en/docs/audio). The example IDs below must be available in your deployment. The commands require `curl` and `jq`. ```bash export CICORA_API_KEY="sk_..." export AUDIO_MODEL="speechkit-tts-general" export AUDIO_VOICE="marina" jq -n --arg model "$AUDIO_MODEL" --arg voice "$AUDIO_VOICE" '{ model: $model, voice: $voice, input: "Hello! This is a short speech sample.", response_format: "mp3" }' | curl --fail-with-body --silent --show-error \ https://api.cicora.ai/v1/audio/speech \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- -D speech.headers -o speech.mp3 ``` After a successful HTTP response, play `speech.mp3`. On an HTTP error, the output file can contain an error body; do not treat it as audio. The response uses `audio/mpeg` for MP3. JavaScript must read bytes, not call `response.json()`: ```javascript import { writeFile } from "node:fs/promises"; const response = await fetch("https://api.cicora.ai/v1/audio/speech", { method: "POST", headers: { Authorization: `Bearer ${process.env.CICORA_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: process.env.AUDIO_MODEL, voice: process.env.AUDIO_VOICE, input: "Hello! This is a short speech sample.", response_format: "mp3", }), }); if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`); await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer())); ``` ## Request fields | Field | Type | Behavior | | ----------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------- | | `model` | string, required | Exact public Audio model ID supporting `speech` | | `input` | string or array, required | Non-empty text, or turns with `text`, optional `voice` and `instructions`; arrays require multi-speaker support | | `voice` | string | Public voice ID supported by this model; omission requires a compatible default voice | | `response_format` | `mp3` or `pcm` | Defaults to `pcm`; select a published output profile | | `speed` | positive number | Multiplier within the selected profile's `minSpeed`–`maxSpeed` range | | `instructions` | string | Delivery instructions; best effort, omitted on routes without instruction support | | `input_references` | array | Reference content, only within the model's published reference limits | | `provider`, `session_id`, `user`, `trace` | objects or strings | [Common Audio options](/en/docs/audio#compatibility-and-optional-features) | Check `maxInputCharacters` and `maxInputBytes`. Unknown fields and incompatible voice, format or reference combinations are rejected. Delivery instructions are an exception: a route without instruction support can generate speech while ignoring them. Check `instructions` in the model capabilities before relying on directed tone or emotion. ## Voice and output combinations After saving the catalog to `audio-models.json` and setting `AUDIO_MODEL`, inspect its verified voice profiles: ```bash jq --arg model "$AUDIO_MODEL" ' .data[] | select(.id == $model) | .audio.profiles[] | select(.operation == "speech") | .profiles[] | {voice, voiceFamily, isDefault, format, sampleRateHz, channels, minSpeed, maxSpeed} ' audio-models.json ``` Changing a model can change the voice IDs, speed range and audio geometry. Use the exact public voice ID from a profile. Language support and sample recordings are visible in the cabinet's voice gallery. PCM is signed 16-bit little-endian raw audio without a WAV header. Read `X-Audio-Sample-Rate` and `X-Audio-Channels` to configure playback or wrap it in a container; do not assume a universal 24 kHz rate. These headers also describe MP3 responses. The result uses `Cache-Control: no-store`. ## References and multiple speakers Models with `multiSpeaker: true` can accept turns. Reference parts use `type: input_audio` with `input_audio.data` or `input_audio.url`, `type: text` with `text`, or `type: image_url` with `image_url.url`. There can be at most three recordings, one transcript per recording and one image; a model can set lower limits or disable references. With multiple recordings, each transcript immediately follows its recording. Do not send references to models whose limits are zero. ## Errors and interrupted audio Before audio starts, validation failures return an HTTP error. Once bytes have been sent, a later failure closes the stream; it cannot replace the audio body with a JSON error. A partial file is not proof of a complete generation. See [retry and billing behavior](/en/docs/audio#requests-jobs-and-retries). ## Troubleshooting **The file does not play** Check the HTTP status and Content-Type first. Raw PCM needs the sample rate and channel count from the response headers; it is not an MP3 or WAV file. **A voice or speed is rejected, or instructions have no effect** Refresh the selected model's profiles and choose a compatible combination. Instructions are best effort; a model without instruction support ignores them. --- ## Create transcription (STT) Source: https://cicora.ai/en/docs/audio-transcriptions.md `POST /v1/audio/transcriptions` accepts JSON or `multipart/form-data` and returns JSON. Use a workspace API key in `Authorization: Bearer`. ## Upload a recording Choose a model supporting `transcription` in the [Audio catalog](/en/docs/audio). The sample model accepts mono PCM WAV at 16 kHz; check the current profile before using other audio formats. ```bash export CICORA_API_KEY="sk_..." export AUDIO_MODEL="speechkit-stt-general" curl --fail-with-body --silent --show-error \ https://api.cicora.ai/v1/audio/transcriptions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -F "model=$AUDIO_MODEL" \ -F "file=@recording.wav;type=audio/wav" \ -F "response_format=json" -o transcript.json ``` The default successful response contains `text`. Optional `usage` may be absent. `curl -F` sets the multipart boundary: do not set Content-Type manually. ## Send Base64 or a URL JSON uses `input_audio` with exactly one source. For inline data, send canonical Base64 bytes without a `data:` prefix and specify `format`: ```javascript import { readFile } from "node:fs/promises"; const response = await fetch("https://api.cicora.ai/v1/audio/transcriptions", { method: "POST", headers: { Authorization: `Bearer ${process.env.CICORA_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: process.env.AUDIO_MODEL, input_audio: { data: (await readFile("recording.wav")).toString("base64"), format: "wav", }, response_format: "json", }), }); if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`); console.log((await response.json()).text); ``` Alternatively, provide a publicly reachable HTTP(S) URL. Replace the illustrative URL with your actual file URL: ```json { "model": "speechkit-stt-general", "input_audio": { "url": "https://media.example.com/recording.wav", "format": "wav" }, "response_format": "json" } ``` The platform fetches and validates the file before recognition. Private/local network URLs and URLs containing credentials are not allowed. If `format` is omitted for a URL, it must be inferable from the path extension; specify it for signed or extensionless URLs. Do not send both `data` and `url`. ## Request fields | Field | Type | Behavior | | ----------------------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------- | | `model` | string, required | Public model ID supporting `transcription` | | `input_audio` | object, JSON only | `data` + `format`, or `url` + optional `format` | | `file` | binary, multipart only | One audio or video file | | `language` | string | Two-letter lowercase ISO-639-1 code, such as `en` or `ru`; omission requires automatic language support | | `response_format` | `json` or `verbose_json` | Defaults to `json` | | `timestamp_granularities` | array of `word`/`segment` | Used only with `verbose_json`; ignored with `json` | | `diarize` | boolean | Speaker labels; requires model support and `verbose_json`, which also enables word timestamps | | `keyterms` | string array | Recognition hints, only when supported; at most 1,000 terms of 1–100 characters, with possible lower model limits | | `temperature` | number | Only within the selected model's published range | | `provider`, `session_id`, `user`, `trace` | objects or strings | [Common Audio options](/en/docs/audio#compatibility-and-optional-features) | In multipart, use repeated `timestamp_granularities[]` fields for timestamps, `true`/`false` for `diarize`, and JSON strings for `provider` and `trace`. For keyterms, use a JSON array in one field: `-F 'keyterms=["Acme","SpeechKit"]'`. Repeated `keyterms[]` also works for short lists, but the request allows at most 32 text fields in total, plus one file; a JSON-array field avoids consuming one field per term. Do not send both array representations. Unsupported fields are rejected rather than silently forwarded. ## Timestamps and response ```bash curl --fail-with-body --silent --show-error \ https://api.cicora.ai/v1/audio/transcriptions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -F "model=$AUDIO_MODEL" \ -F "file=@recording.wav;type=audio/wav" \ -F "response_format=verbose_json" \ -F "timestamp_granularities[]=word" \ -F "timestamp_granularities[]=segment" -o transcript.json ``` ```json { "text": "Hello world", "task": "transcribe", "duration": 2.4, "words": [ {"word": "Hello", "start": 0.2, "end": 0.8}, {"word": "world", "start": 0.9, "end": 1.5} ], "segments": [{"id": 0, "text": "Hello world", "start": 0.2, "end": 1.5}] } ``` Times are seconds from the start of the audio. Additional fields such as `language`, confidence, speaker labels and entities appear only when returned by the selected model. Missing confidence is not zero confidence. Diarization identifies speakers, not their real-world identity. ## File and model limits Multipart files and inline Base64 accept at most **25 MiB (26,214,400 bytes)** of source media. Base64 expands the JSON body; the limit applies to decoded bytes. URL imports accept at most **100 MiB (104,857,600 bytes)**. Model limits can be lower and also constrain duration, codec, sample rate and channels. The cabinet's direct upload flow has separate limits and does not increase the multipart or inline API limit. Recognized format names are `wav`, `mp3`, `mp4`, `m4a`, `ogg`, `webm`, `flac`, `pcm`, `mov`, `mpeg` and `mpg`. This list describes input parsing, not universal model support. In particular, raw PCM lacks self-describing geometry and must pass media inspection; prefer WAV for PCM recordings. Video is accepted when it contains a decodable audio track. The media validator extracts audio for recognition; visual content is not transcribed. For multipart video, send the actual file MIME type, for example `file=@recording.mp4;type=video/mp4`. The extracted audio must fit the selected model's profile. A silent or corrupt video is rejected. ## Troubleshooting **The API rejects an audio file or parameters** Check its real codec, sample rate, channel count and duration against the model's profile. Renaming an extension does not convert audio. Remove unsupported diarization, keyterms or temperature settings. **Timestamps are missing** Request verbose\_json and supported timestamp granularities. With json, only the compact transcript is requested; timestamps are ignored. **A long request times out** Keep the HTTP connection open for recognition. Check [Usage](/en/docs/usage-costs) before explicitly retrying: a timeout does not prove the supplier did no work. --- ## Video API Source: https://cicora.ai/en/docs/videos.md Video generation runs as a background job. `POST /v1/videos` returns `202` and a job ID; download the completed file in a separate request. | Step | Endpoint | Result | | ------------------------------------------- | ------------------------------------- | ------------------------ | | Choose a model | `GET /v1/videos/models` | Capabilities and pricing | | [Create a video](/en/docs/video-generation) | `POST /v1/videos` | Job ID and `polling_url` | | [Check the job](/en/docs/video-jobs) | `GET /v1/videos/{id}` | Status and result | | Download | `GET /v1/videos/{id}/content?index=0` | Video bytes | Use a [workspace API key](/en/docs/authentication). These endpoints also accept the `/api/v1/videos` prefix. Do not add `/v1` twice. ## Choose a model ```bash export API_BASE_URL="https://api.cicora.ai" export CICORA_API_KEY="YOUR_API_KEY" curl --fail-with-body --silent --show-error \ "$API_BASE_URL/v1/videos/models" \ -H "Authorization: Bearer $CICORA_API_KEY" -o video-models.json jq '.data[] | {id, available, supported_durations, supported_resolutions, supported_aspect_ratios, required_input_reference_types, currency, minimum_price_per_second}' video-models.json ``` Pass the exact `id` as `model`. The unified catalog also supports `GET /api/models?kind=video`; these examples use the dedicated `/v1/videos/models` catalog and its field names. Check `available` and `unavailable_reason`, then the model constraints: * `supported_durations`, `supported_resolutions`, `supported_sizes`, `supported_aspect_ratios`: output settings; * `supported_frame_images`: first/last frame support; * `supported_input_reference_types` and `required_input_reference_types`: accepted and required source media; * `input_constraints`: known file limits; * `generate_audio` and `seed`: support for those controls. A `null` or missing bound does not mean unlimited support. Individually listed values may not work in every combination. Catalog availability does not guarantee success for every request. ## Pricing and balance `currency` identifies the catalog currency. `minimum_price_per_second` is a minimum estimate, not an exact price for every mode. The charge depends on the model and variant, including resolution and audio. Multiplying the minimum rate by duration is not a guaranteed quote. Creating a job reserves funds. Successful completion settles the charge using the saved pricing snapshot; final failure releases the reservation. Funds may remain reserved while a job is running or being retried by the service. Check final charges in [usage and costs](/en/docs/usage-costs). When present, public `usage.cost` is expressed in USD. Actual cicora.ai charges appear in the USD balance history. `usage.is_byok` is `false`. There is currently no public exact-price quote endpoint authenticated by API key. The cabinet estimate belongs to its session-authenticated interface; it is not `/v1/videos/quote`. ## Next steps Choose a model without required source media and [generate from text](/en/docs/video-generation). Save its ID and set up [polling or a webhook](/en/docs/video-jobs). ## Troubleshooting **Model unavailable** Refresh the catalog and check `available`, `unavailable_reason` and the exact model ID. Do not substitute an ID from the text catalog. --- ## Generate video Source: https://cicora.ai/en/docs/video-generation.md Create a job with `POST /v1/videos`. Set `API_BASE_URL` and `CICORA_API_KEY` as shown in the [overview](/en/docs/videos). ## Generate from text Replace `MODEL_ID_FROM_CATALOG` with an available model ID. This example requires a model that accepts text without mandatory references and supports **5 seconds, 720p, 16:9**. Change the values to match its catalog before sending. ```bash export VIDEO_MODEL="MODEL_ID_FROM_CATALOG" jq -n --arg model "$VIDEO_MODEL" '{ model: $model, prompt: "A slow camera pan across a quiet mountain lake at sunrise.", duration: 5, resolution: "720p", aspect_ratio: "16:9" }' > video-request.json curl --fail-with-body --silent --show-error \ "$API_BASE_URL/v1/videos" \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @video-request.json -o video-job.json jq '{id, status, polling_url}' video-job.json ``` A `202` response confirms job creation, not completed generation. Keep `video-job.json` to [retrieve the result](/en/docs/video-jobs). ## Request fields | Field | Purpose | | ---------------- | -------------------------------------------------------------------------------- | | `model` | Required public model ID | | `prompt` | Scene description, up to 8,000 characters; model limits may be stricter | | `duration` | Integer seconds from 1 to 120, further restricted by the model | | `resolution` | Catalog value such as `720p` | | `size` | Dimensions such as `1280x720`, when supported | | `aspect_ratio` | Aspect ratio such as `16:9` | | `generate_audio` | Generate sound, when supported | | `seed` | Integer from 0 to 2,147,483,647, when supported; not a reproducibility guarantee | | `callback_url` | Public HTTPS endpoint for completion notifications | ## First and last frames Add `frame_images` to the main request. Use `first_frame` or `last_frame` only when the model supports it. ```json { "frame_images": [ { "type": "image_url", "frame_type": "first_frame", "image_url": {"url": "https://media.example.com/first-frame.jpg"} } ] } ``` Replace the example URL with a real accessible file. `input_constraints.image` also applies to frames. ## Image, audio and video references Each `input_references` entry contains a type and a nested URL. The following shows all three shapes; include only the entries required and supported by your model. ```json { "input_references": [ {"type": "image_url", "image_url": {"url": "https://media.example.com/reference.jpg"}}, {"type": "audio_url", "audio_url": {"url": "https://media.example.com/reference.mp3"}}, {"type": "video_url", "video_url": {"url": "https://media.example.com/reference.mp4"}} ] } ``` Include every type listed in `required_input_reference_types`. Check duration, size, MIME type and file-count limits. If `reference_audio_requires_visual_input` is enabled, audio also needs visual input; check `maximum_reference_audio_duration_seconds` too. For API calls, use HTTPS URLs that the provider can fetch without cookies or authorization headers. Local filesystem paths do not work. Temporary URLs must remain valid through queueing and processing. Cabinet uploads use a separate session-authenticated interface; there is no public multipart `/v1/videos/input-assets` endpoint. ## Sound and additional controls `generate_audio=true` requests generated sound. An audio reference alone does not establish speech preservation, voice cloning or lip-sync support. Use such a mode only with a confirmed model contract; it is not guaranteed across video models. `allowed_passthrough_parameters` lists permitted extension fields. Do not copy fields such as root-level `audio` from another service without checking our contract. `provider` and additional controls also depend on the supported route. ## Creation errors For validation errors, check the fields and supported combination in the catalog. If HTTP disconnects after sending, do not automatically repeat creation: the job may already exist. `POST /v1/videos` has no public idempotency contract; a repeated POST may create another billable job. ## Troubleshooting **Request rejected** Check required references and file constraints against the catalog. Send only supported parameter combinations. --- ## Video jobs and results Source: https://cicora.ai/en/docs/video-jobs.md Save the `id` returned by [video creation](/en/docs/video-generation). Use an API key for the same workspace. ## Check status ```bash export VIDEO_ID="$(jq -er '.id' video-job.json)" curl --fail-with-body --silent --show-error \ "$API_BASE_URL/v1/videos/$VIDEO_ID" \ -H "Authorization: Bearer $CICORA_API_KEY" -o video-status.json jq '{id, status, error_code, error, unsigned_urls, usage}' video-status.json ``` `polling_url` may be relative: resolve it against the API base URL. While status is `pending` or `in_progress`, repeat GET with a delay such as five seconds. Bound your application's wait and retain the ID for later checks. A client timeout does not cancel the server job. | Status | Action | | ---------------------- | ------------------------------------ | | `pending` | Waiting to be processed | | `in_progress` | Generation is running | | `completed` | Output is ready to download | | `failed` | Read `error_code` and `error` | | `cancelled`, `expired` | Terminal schema values; stop polling | There is currently no public job cancellation endpoint. `generation_id` is an additional result identifier; use `id` for polling. ## Download output ```bash test "$(jq -r '.status' video-status.json)" = "completed" || exit 1 curl --fail-with-body --silent --show-error \ "$API_BASE_URL/v1/videos/$VIDEO_ID/content?index=0" \ -H "Authorization: Bearer $CICORA_API_KEY" -o video-output.bin ``` `index` selects an output starting from zero. Determine the format from `Content-Type`; the example saves bytes without assuming a container. `unsigned_urls` contains content endpoints on our API. Despite the name, downloading requires `Authorization: Bearer ...`; these are not anonymous browser links. ## Webhooks Set `callback_url` when creating the job. It must use HTTPS and resolve only to public IP addresses. Retrieve your workspace signing secret with `GET /v1/videos/webhook-secret` using your API key, and store it on your server. The event body contains `type`, `created_at` and `data`. Terminal events use `video.generation.completed` and `video.generation.failed`; `data` contains `id`, `status` and the available result or error fields. Verify `X-OpenRouter-Signature`, formatted as `t=,v1=`. Compute HMAC-SHA256 over `timestamp + "," + rawBody` using the retrieved secret. `rawBody` means the original UTF-8 bytes, not reserialized JSON. Compare signatures in constant time, validate timestamp freshness and deduplicate by `X-OpenRouter-Idempotency-Key` (`id-status`). This key deduplicates notifications, not generation creation. Persist the event before returning `2xx` promptly: delivery waits up to 10 seconds. A webhook does not replace GET status when a notification is lost, and delivery failure does not change the generation outcome. ## Errors and retries For a `failed` job, use `error_code` rather than parsing the message. Common codes: | Code | What to check | | --------------------------------------------------------------------------------------------- | -------------------------------------- | | `VIDEO_INPUT_UNAVAILABLE` | Source URLs and their expiry | | `VIDEO_UPSTREAM_INVALID_REQUEST` | Request settings and model constraints | | `VIDEO_CONTENT_REJECTED`, `VIDEO_COPYRIGHT_RESTRICTED` | Request and source-media policies | | `VIDEO_UPSTREAM_RATE_LIMITED`, `VIDEO_UPSTREAM_UNAVAILABLE`, `VIDEO_UPSTREAM_TIMEOUT` | Whether to retry later | | `VIDEO_UPSTREAM_INVALID_RESPONSE`, `VIDEO_ARTIFACT_STORAGE_FAILED`, `VIDEO_GENERATION_FAILED` | Keep the job ID and time for support | HTTP `200` on GET does not mean successful generation: inspect `status`. Final failure releases reserved funds. A new POST creates a separate billable job; confirm that the previous job has finished before retrying. ## Troubleshooting **Job remains pending** Keep the job ID and creation time for support. Continue polling with a delay; another POST creates a separate job. --- ## Connect coding tools Source: https://cicora.ai/en/docs/integrations-overview.md ## Check compatibility In these tools, a **provider** is a saved connection that supplies an API URL, key, and model settings. | Tool | Interface or configuration path | Status and key caveat | | ------------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------ | | Cline | **OpenAI Compatible** in VS Code settings | Compatible; enter an exact catalog ID manually. | | Roo Code | **Settings → Providers → OpenAI Compatible** | Compatible; remove a stale built-in model selection. | | Kilo Code | **Providers → OpenAI Compatible** | Compatible; select the custom provider explicitly. | | Continue | Local `config.yaml`, provider `openai` | Use the protocol required by the selected client; Chat Completions remains the documented setup. | | Aider | Shell environment | Compatible; invoke the catalog ID as `openai/`. | | Zed | `settings.json` and the provider keychain | Compatible; generate the model ID and limit from the live catalog. | | Cursor | **Override OpenAI Base URL** | Version-dependent; proceed only when this field is available. | | Claude Code | [Dedicated guide](/en/docs/claude-code) | Compatible through Anthropic Messages; its base URL omits `/v1`. | | OpenCode | [Dedicated guide](/en/docs/opencode) | Compatible through the installer or a manual provider. | | Hermes Agent | [Dedicated guide](/en/docs/hermes) | Compatible through a custom endpoint and Chat Completions. | | Codex CLI | [Support status](/en/docs/codex-cli) | Responses endpoint is published; end-to-end Codex CLI compatibility is not yet documented. | ## Select and verify a model first OpenAI-compatible tools on this page share these values: | Value | Setting | | -------- | ------------------------------------------------ | | Base URL | `https://api.cicora.ai/v1` | | API key | A key created in the cabinet | | Model ID | An available exact `id` from the current catalog | Run this from a shell with `curl` and `jq`. It requires an available text model with both `tools` and the `max_tokens` used by the verification request, and excludes image endpoint entries: ```bash set -euo pipefail export CICORA_API_KEY="sk_..." if ! MODELS_JSON="$( curl --fail-with-body --silent --show-error "https://api.cicora.ai/v1/models?output_modalities=text&supported_parameters=tools,max_tokens" \ -H "Authorization: Bearer $CICORA_API_KEY" )"; then printf '%s\n' "$MODELS_JSON" >&2 exit 1 fi if ! CICORA_MODEL="$( jq -er ' first( .data[] | select( .available == true and ((.architecture.output_modalities // []) | index("text")) and ((.supported_parameters // []) | index("tools")) and ((.supported_parameters // []) | index("max_tokens")) and ((.supported_endpoint_types // []) | all(. != "image-generation" and . != "image-edit")) ) | .id ) ' <<<"$MODELS_JSON" )"; then printf 'No available tool-capable text model found in /v1/models.\n' >&2 exit 1 fi export CICORA_MODEL jq -n --arg model "$CICORA_MODEL" '{ model: $model, messages: [{role: "user", content: "Reply with ok"}], max_tokens: 64 }' | curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/chat/completions \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- ``` If this fails, fix the key, catalog selection, or request before changing tool settings. If it succeeds, compare the tool's final URL, protocol, exact model ID, and key source with these verified values. **Protect the API key** Keep the key in an environment variable, operating-system keychain, protected local tool configuration, or trusted backend. Never put it in browser code or commit it to a repository. Revoke it in the cabinet if a local configuration is exposed. ## Configure Chat Completions tools ### Cline, Roo Code, and Kilo Code Open the interface named in the matrix and enter `https://api.cicora.ai/v1`, the value exported as `CICORA_API_KEY`, and the exact `CICORA_MODEL` selected above. Start one short task before enabling tools or long agent work. If the direct request succeeds but an extension fails, reselect the custom provider and remove any stale built-in model override. ### Continue Add an OpenAI model entry to Continue's protected local configuration. Paste the current value of `CICORA_API_KEY` into `apiKey`, replace the model placeholder with `CICORA_MODEL`, and keep `useResponsesApi: false`: ```yaml name: cicora.ai version: 1.0.0 schema: v1 models: - name: cicora.ai provider: openai model: model-id-from-CICORA_MODEL apiBase: https://api.cicora.ai/v1 apiKey: paste-value-from-CICORA_API_KEY useResponsesApi: false roles: - chat - edit - apply ``` Select the entry and confirm that the client calls `/v1/chat/completions`, not `/v1/responses`. ### Aider After running the model-selection flow above, set Aider's OpenAI-compatible variables and prefix the exact catalog ID with `openai/`: ```bash export OPENAI_API_KEY="$CICORA_API_KEY" export OPENAI_API_BASE="https://api.cicora.ai/v1" aider --model "openai/$CICORA_MODEL" ``` Check Aider's model banner before allowing file changes. If it differs, compare the environment visible to Aider with the shell where the direct request succeeded. ### Zed Use the `MODELS_JSON` captured by the selection flow to generate a complete `language_models` object from a live available tool-capable text model and its current `context_length`. The generated capability tells Zed to send the model's published `max_tokens` parameter instead of Zed's default `max_completion_tokens`: ```bash if ! ZED_SETTINGS="$( jq -er ' first( .data[] | select( .available == true and ((.architecture.output_modalities // []) | index("text")) and ((.supported_parameters // []) | index("tools")) and (.context_length | type == "number" and . > 0) and ((.supported_endpoint_types // []) | all(. != "image-generation" and . != "image-edit")) ) ) as $model | { language_models: { openai_compatible: { "cicora.ai": { api_url: "https://api.cicora.ai/v1", available_models: [ { name: $model.id, display_name: ($model.name // $model.id), max_tokens: $model.context_length, capabilities: { tools: true, images: false, parallel_tool_calls: false, prompt_cache_key: false, chat_completions: true, interleaved_reasoning: false, max_tokens_parameter: true } } ] } } } } ' <<<"$MODELS_JSON" )"; then printf 'No available Zed-compatible model found in /v1/models.\n' >&2 exit 1 fi printf '%s\n' "$ZED_SETTINGS" ``` Merge the printed object into `settings.json`. Enter the value of `CICORA_API_KEY` through Zed's provider settings so the operating-system keychain stores it; do not put the key in `settings.json`. Then select the custom model and send one short prompt. ### Cursor Proceed only if your Cursor version exposes **Override OpenAI Base URL**. Set it to `https://api.cicora.ai/v1`, enter the value of `CICORA_API_KEY`, and add the exact `CICORA_MODEL`. Confirm from Cursor's available diagnostics that the request uses the override. If the field is absent or Cursor sends another protocol, do not send the key to an unverified path. ## Dedicated guides [Claude Code](/en/docs/claude-code) Configure the Anthropic Messages endpoint. [OpenCode](/en/docs/opencode) Install or manually add the cicora.ai provider. [Hermes Agent](/en/docs/hermes) Configure a custom provider through Chat Completions. [Codex CLI](/en/docs/codex-cli) Read the current compatibility boundary. Create and rotate keys as described in [API authentication](/en/docs/authentication). Refresh current model IDs, limits, and supported options through the [model catalog](/en/docs/models). A **public error code** is the client-facing `error.code` returned by the API. Record it with the HTTP status, tool version, final endpoint, exact model ID, time, and masked key prefix; do not include the complete key. ## Troubleshooting **The direct API verification fails** Stop editing tool settings. Confirm `CICORA_API_KEY` is exported, then rerun the catalog selection and minimal Chat Completions request until both succeed. **The direct request works but the tool fails** Compare the tool's base URL, protocol, exact model ID, and key source with the verified values. Remove stale custom connections or environment variables, then retry one small request. **The tool's model selector does not show the catalog** A built-in selector may not discover third-party catalogs. Enter the exact `CICORA_MODEL` manually where the tool supports custom models. **The tool sends a request to /v1/responses** The endpoint is published. Compare its request with [Responses and Conversations](/en/docs/responses): hosted tools and undocumented fields are rejected. If the tool cannot use the portable subset, configure its documented Chat Completions integration or use Claude Code with Messages. **A key may have been saved or sent unsafely** Revoke it in the cabinet, create a replacement, and store the new value only in a protected local or server-side secret store. Never send the complete key in diagnostics. --- ## Claude Code Source: https://cicora.ai/en/docs/claude-code.md ## Use the Claude Code connection values Create a platform key in the cabinet. Claude Code uses the Anthropic Messages format and adds `/v1/messages` itself, so its settings are: | Setting | Value | | ---------------------- | -------------------------------------------------------------- | | `ANTHROPIC_BASE_URL` | `https://api.cicora.ai` without `/v1` | | `ANTHROPIC_AUTH_TOKEN` | Your cicora.ai platform key | | Model | A supported canonical ID or published alias, passed explicitly | Remove a stale `ANTHROPIC_API_KEY`: it uses a different authentication path and can override or interfere with `ANTHROPIC_AUTH_TOKEN`. ## Install the configuration The installer updates an existing Claude Code settings file; it does not install Claude Code. If the file already exists, both installers create a timestamped backup before changing it. macOS and Linux Windows PowerShell ```bash export CICORA_API_KEY="sk_..." curl -fsSL https://app.cicora.ai/install/claude-code.sh | \ CICORA_API_KEY="$CICORA_API_KEY" sh ``` ```powershell $env:CICORA_API_KEY = "sk_..." irm https://app.cicora.ai/install/claude-code.ps1 | iex ``` The installer writes `ANTHROPIC_BASE_URL`, `ANTHROPIC_AUTH_TOKEN`, and an empty `ANTHROPIC_API_KEY`. Review the printed settings path and backup path after it finishes. ## Configure manually Back up an existing `~/.claude/settings.json`. Prepare the directory and an absent file without overwriting existing settings, restrict the file to its owner, and clear the stale shell variable: ```bash export CICORA_API_KEY="sk_..." umask 077 mkdir -p ~/.claude if [ ! -e ~/.claude/settings.json ]; then printf '%s\n' '{}' > ~/.claude/settings.json fi chmod 600 ~/.claude/settings.json unset ANTHROPIC_API_KEY ``` Open the file in an editor. If it has no top-level `env` object, add one; otherwise keep its existing fields. Remove the `ANTHROPIC_API_KEY` property from `env` and merge this fragment without deleting any unrelated settings: ```json { "ANTHROPIC_AUTH_TOKEN": "paste-value-from-CICORA_API_KEY", "ANTHROPIC_BASE_URL": "https://api.cicora.ai" } ``` After saving, enforce owner-only access again: ```bash chmod 600 ~/.claude/settings.json ``` For a temporary setup in the current shell only: ```bash export CICORA_API_KEY="sk_..." export ANTHROPIC_BASE_URL="https://api.cicora.ai" export ANTHROPIC_AUTH_TOKEN="$CICORA_API_KEY" unset ANTHROPIC_API_KEY ``` **The settings file contains the platform key** Protect Claude Code settings and installer backups because they contain the key. Do not commit them. If either file is exposed, revoke the key in the cabinet and create a replacement. ## Verify the endpoint before Claude Code This direct request checks the base, key, Messages path, header, and default alias independently of the CLI: ```bash export CICORA_API_KEY="sk_..." curl --fail-with-body --silent --show-error https://api.cicora.ai/v1/messages \ -H "Authorization: Bearer $CICORA_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-6", "max_tokens": 64, "messages": [ { "role": "user", "content": "Reply with ok" } ] }' ``` The response text is in `content[0].text`. If this fails, fix the endpoint or key before diagnosing Claude Code. ## Select and verify a model explicitly The current Messages contract accepts supported canonical IDs such as `anthropic/claude-sonnet-4.6` and published aliases such as `claude-sonnet-4-6`. It also accepts supported regular chat IDs and their configured aliases; see [Anthropic Messages](/en/docs/anthropic-messages) for current examples. Claude Code's picker may not list a third-party catalog. Pass the model explicitly: ```bash claude --model claude-sonnet-4-6 ``` For another model, copy a current ID or published alias from model discovery instead of guessing one. A **public error code** is the client-facing code returned by the API; when the Anthropic-shaped envelope has no separate code, record `error.type`, HTTP status, message, endpoint, time, and masked key prefix. See [API authentication](/en/docs/authentication) for rotation and safe diagnostics. The complete request and response contract is in [Anthropic Messages](/en/docs/anthropic-messages). ## Troubleshooting **Claude Code calls /v1/v1/messages or returns 404** Set `ANTHROPIC_BASE_URL` to exactly `https://api.cicora.ai` without `/v1`. Claude Code appends `/v1/messages`; the complete path is used only for the direct curl check. **The direct request works but Claude Code returns an authentication error** Confirm Claude Code received `ANTHROPIC_AUTH_TOKEN` and remove `ANTHROPIC_API_KEY` from the shell and persistent settings. Restart the CLI after changing environment variables. **The model picker does not show the intended model** This does not prove the API lacks the model. Copy a current canonical ID or published alias from discovery and pass it with `claude --model`. **The installer changed settings unexpectedly** Stop Claude Code, inspect the settings path printed by the installer, and compare it with the timestamped backup. Restore the backup if needed, then merge only the three documented environment values. **The alias worked before but is now rejected** Remove stale model values and copy an ID currently returned by model discovery. Aliases are published configuration, not a rule that can be recreated by stripping punctuation. --- ## OpenCode Source: https://cicora.ai/en/docs/opencode.md ## Choose installer or manual setup In OpenCode, a **provider** is a named API connection with its models and connection settings. The installer configures an existing OpenCode installation; it does not install OpenCode. It authenticates `GET /v1/models`, adds or refreshes the `cicora` provider, and carries the returned names, limits, capabilities, modalities, and public prices into the local configuration. Use the installer for catalog-driven setup. Use the manual provider only when you need to review and merge every field yourself. ## Run the installer macOS and Linux Windows PowerShell ```bash export CICORA_API_KEY="sk_..." curl -fsSL https://app.cicora.ai/install/opencode.sh | \ CICORA_API_KEY="$CICORA_API_KEY" sh ``` ```powershell $env:CICORA_API_KEY = "sk_..." irm https://app.cicora.ai/install/opencode.ps1 | iex ``` The installer stores the key separately in `~/.config/opencode/cicora-api-key` and adds a `{file:~/.config/opencode/cicora-api-key}` reference to the config. Keep the key file out of repositories and shared backups. Set `OPENCODE_CONFIG` before the command to target a non-default file. Otherwise the installer checks `~/.config/opencode/opencode.json`, then `opencode.jsonc`, and creates `opencode.json` when neither exists. Both installers validate the generated config and back up an existing file before replacing it. The installer does not select a default model; choose the model you want through `/models` after installation. ## Configure a provider manually First export the key and use `GET /v1/models` to choose an available exact ID. Then replace every `model-id-from-GET-v1-models` string below with that ID, and paste the current key value where the example names `CICORA_API_KEY`. ```bash export CICORA_API_KEY="sk_..." ``` **Manual setup stores the key unencrypted** The `apiKey` value is written directly to the local OpenCode configuration. Protect the file because it contains the key, keep it out of repositories and shared backups, and prefer a dedicated key with an appropriate spend limit. ```json { "$schema": "https://opencode.ai/config.json", "model": "cicora/model-id-from-GET-v1-models", "provider": { "cicora": { "npm": "@ai-sdk/openai-compatible", "name": "cicora.ai", "options": { "baseURL": "https://api.cicora.ai/v1", "apiKey": "paste-value-from-CICORA_API_KEY" }, "models": { "model-id-from-GET-v1-models": { "name": "model-id-from-GET-v1-models" } } } } } ``` Save the example as `~/.config/opencode/opencode.json`, then restrict the directory and credential file to the current user. If `OPENCODE_CONFIG` points elsewhere, apply equivalent owner-only permissions to that file: ```bash chmod 700 ~/.config/opencode chmod 600 ~/.config/opencode/opencode.json ``` The manual example defines only the connection. The installer is preferable when you want OpenCode to receive current context/output limits, reasoning, tools, image input, and prices from catalog metadata. ## Verify the current configuration List the models OpenCode loaded for the provider: ```bash opencode models cicora ``` Select one through `/models`, or run a current catalog ID directly: ```bash export CICORA_MODEL="model-id-from-GET-v1-models" opencode run --model "cicora/$CICORA_MODEL" "Reply with ok" ``` ## Recover or refresh On macOS/Linux, the installer prints the timestamped backup path. If the merged file no longer loads, stop OpenCode, preserve the failed file for comparison, restore the printed backup, and rerun only after checking `OPENCODE_CONFIG`. If an installer cannot merge safely or preserve JSONC comments, it leaves the original file unchanged and writes a standalone `cicora-opencode-provider.jsonc` snippet beside it for review. PowerShell also prints the backup path after successfully updating an existing file. Rerunning the installer refreshes the live catalog; it is not necessary to copy new model IDs from this page. A **public error code** is the client-facing `error.code` from the API response. Record it with the HTTP status, exact model ID, time, OpenCode version, config path, and masked key prefix. See [API authentication](/en/docs/authentication) for safe key handling and [Chat Completions](/en/docs/chat-completions) for the request format. ## Troubleshooting **OpenCode does not show the cicora provider** Run `opencode models cicora`, then confirm the active file is `~/.config/opencode/opencode.json` or set `OPENCODE_CONFIG` explicitly. Restart OpenCode after changing the file. **The installer cannot load models** Verify the same key with `GET /v1/models`, confirm the active workspace has an available model, and check that `CICORA_API_KEY` is visible to the installer process without printing it. **The configuration stopped loading after installation** Restore the macOS/Linux backup printed by the installer or your manual Windows copy. If a standalone provider snippet was written, review and merge it instead of replacing the whole configuration. **A configured model is missing or stale** Rerun the installer to refresh the provider from the current catalog, or replace all manual occurrences with one exact available ID. Do not retain copied limits or capabilities from an older model record. **The config or backup exposed the API key** Revoke the key in the cabinet, create a replacement, and update protected configuration copies. Removing the file alone does not revoke the exposed key. --- ## Hermes Agent Source: https://cicora.ai/en/docs/hermes.md ## Prepare a key and balance This guide starts with an installed [Hermes Agent](https://hermes-agent.nousresearch.com/docs/getting-started/installation). The `hermes` command must be available in your terminal. In [API keys](https://app.cicora.ai/api-keys), select **Create key**, name it `Hermes`, and immediately copy the full value: it is not shown again. Keep the key and local files containing it out of repositories. Open [Balance](https://app.cicora.ai/balance), select **Top up**, choose an amount in USD, and continue to the available checkout. Complete payment, return to the balance page, and check the available funds. The key and balance must belong to the same workspace. See [API authentication](/en/docs/authentication) and [balance funding](/en/docs/billing-balance) for details. ## Configure the provider If a Hermes chat is open, exit it with `/quit` first. Run in your terminal: ```bash hermes model ``` Select **Custom endpoint (enter URL manually)** and fill in the wizard. Use the option name: its number depends on the version and saved providers. | Field | Value | | ---------------------- | -------------------------- | | API base URL | `https://api.cicora.ai/v1` | | API key | The full cicora.ai key | | API compatibility mode | **Chat Completions** | ## Select a model The wizard retrieves **Available models** through `GET /v1/models`. * **Select model:** the exact ID of an available text model with `tools` support. Check capabilities in the [model catalog](/en/docs/models). * **Context length in tokens:** press Enter for automatic detection. * **Display name:** enter `Cicora.ai` and press Enter to save. ## Verify the connection ```bash hermes config get model.base_url hermes config get model.default hermes config get model.api_mode ``` Expected values: `https://api.cicora.ai/v1`, your selected model ID, and `chat_completions`. ```bash hermes ``` Send `Reply with ok`. A model response confirms that the request completed; saving settings or retrieving the catalog alone does not. ## Troubleshooting **The model is not in the list** Check current availability and the exact ID in the [model catalog](/en/docs/models). Do not use an ID from an old example. **Settings are saved, but there is no response** Check the full key, available funds, and [key spending limit](/en/docs/spend-limits). Run `hermes model` again to correct the URL, key, or API mode. --- ## Codex CLI Source: https://cicora.ai/en/docs/codex-cli.md **Endpoint published; Codex workflow not yet verified** `POST /v1/responses` is available on cicora.ai. We have not yet published a verified end-to-end Codex CLI setup, so do not treat a copied configuration as supported until it is tested with your Codex version and workflow. ## What changed Codex CLI custom providers use the Responses wire protocol. The required endpoint is now available at `https://api.cicora.ai/v1/responses`, with streaming, portable function calls, `previous_response_id`, and Conversations. The API uses the same platform key and current text-model IDs from `GET /v1/models`. The endpoint alone does not prove that every Codex workflow works. Coding-agent clients can request hosted tools, background execution, or provider-private response state. Those are deliberately outside the portable cicora.ai contract. ## Keep the request inside the portable boundary The published Responses API supports text and image input, client-executed `function` tools and their outputs, streaming, response chaining, and Conversations. It rejects hosted `web_search`, `file_search`, `code_interpreter`, computer use, hosted MCP, background jobs, and encrypted provider-native reasoning state. Before using a custom Codex provider with a production key, run a small read-only task and inspect the final request. If it receives an `unsupported_parameter` or `unsupported_tool` error, do not repeatedly retry it or weaken key protection; the client workflow needs a supported alternative or a compatible configuration. ## Use a verified alternative for production work For a documented coding-agent integration today, use one of these endpoints: [OpenCode](/en/docs/opencode) Use an OpenAI-compatible Chat Completions provider. [Claude Code](/en/docs/claude-code) Use the Anthropic Messages-compatible endpoint. [Responses API](/en/docs/responses) Build a portable Responses integration directly. Never put a platform key in a repository or browser configuration. Store it in the operating-system keychain, protected local configuration, or an environment variable, and revoke it from the cabinet if it was exposed. ## Troubleshooting **Codex returns 404 for /v1/responses** Confirm the custom provider base URL is exactly `https://api.cicora.ai/v1` and that no stale proxy overrides it. The published endpoint is `/v1/responses`; a duplicated `/v1` usually indicates a base-URL configuration error. **Codex receives an unsupported parameter or tool error** The client asked for a capability outside the portable contract. Record the public error code, parameter, Codex version, model ID, and time without including the key. Use a supported coding tool or change the client workflow; do not retry the same unsupported request. **A model appears in /v1/models but the task still fails** Model discovery, the Responses protocol, and agent capabilities are separate checks. Choose an available text model, validate a minimal Responses request first, then add the agent workflow one capability at a time. --- ## Work with a team organization Source: https://cicora.ai/en/docs/teams.md An organization is a shared team workspace. Chats, images, videos, API keys, usage, and balance belong to the active workspace, so check its name in the cabinet before starting work. ## Create an organization 1. Open [Settings](https://app.cicora.ai/settings) and find **Organizations**. 2. Select **Create organization**, enter a recognizable name, and save. 3. Select the new organization in the workspace switcher. Your personal workspace remains available under the same account. Use the account menu to switch between it and organizations; after a switch, the cabinet loads the selected workspace's balance, keys, usage, and history. ## Invite members Open the intended organization's management view in [Settings](https://app.cicora.ai/settings), choose a role, and use either method: * an email invitation for a specific person; * a one-use link that you deliver through your own communication channel. Each member accepts the invitation from their own account. Never share a common password or complete API key with colleagues. If a link has been used, expired, or revoked, create a replacement instead of forwarding the old one. ## Choose a role by the required action Decide what the person needs to do before assigning a role: | Required action | Suitable roles | | -------------------------------------------------------------------------- | -------------- | | Manage the organization, members, billing, keys, and workspace content | Owner or Admin | | Manage balance and invoices and read usage without access to chats or keys | Billing | | Create keys, work with API, chats, and images, and read usage | Developer | | Work with chats and images without access to billing or keys | Member | | Read available workspace data without making changes | Viewer | Changing billing requires billing-management capability. Owner, Admin, and Billing have it; Viewer can only read the billing data available to that role. Grant the smallest role that supports the task and review it when responsibilities change. ## Check the active workspace The shared balance pays for chat, API, image, and video work inside the organization. API keys created while that organization is active belong to it, and [Usage](https://app.cicora.ai/usage) shows its requests and spending. Create a separate key for each project or service and apply a [spend limit](/en/docs/spend-limits). This produces clear attribution and lets you revoke one key without stopping other projects. Do not use a personal-workspace key for a team service or move an organization key into a personal project. ## Understand chat visibility A chat created in an organization belongs to the organization, not only to its creator. Members with chat-read access can see those conversations; the Billing role does not receive chat access. Switch to the personal workspace or use a separate organization with the intended membership for private or isolated work. A separate API key inside the same organization separates spending but does not make that organization's chats private. ## Troubleshooting **An invitation or invite link does not open** Confirm that the member is signed in to their own account and is using the newest invitation. A one-use link stops working after acceptance, expiry, or revocation; an organization administrator can check its status and create a new link or email invitation. **A member can see the organization but not the intended section** Check the member's role in organization management and match it to the required action. Do not promote someone to Admin for one section when a smaller role supplies the needed access. **A colleague can see another member's chat** This is expected for organization chats when the role has chat-read access. Switch to the personal workspace or a separate organization for isolated work; creating another key in the same organization does not change chat visibility. **The balance, keys, or usage belong to an unexpected workspace** Check the active workspace in the account menu first. Then compare the organization name, key name, and visible masked key prefix; never send the complete key when contacting support. --- ## Protect data before model delivery Source: https://cicora.ai/en/docs/data-protection.md Masking is a setting of the active organization. When enabled, cicora.ai checks supported text fields before an external model request, replaces detected values with typed pseudonyms, and reuses the transformed request for every routing attempt. If the model returns a pseudonym created for that request, the API restores the corresponding original value before responding to the client. No automated detector can guarantee that it finds every sensitive value. Do not send a secret when safety depends only on automatic recognition. ## Enable protection for an organization 1. Select the intended organization in the workspace menu. 2. Open [Settings](https://app.cicora.ai/settings). 3. Open **Data protection** and enable masking. 4. Keep only the categories that should be masked enabled. 5. Return to chat or send a request with an API key owned by that organization. A new organization starts with masking disabled and every supported category preselected. Turning off the final category also disables the master mode. Enabling the master mode again selects every category. Members with workspace-read access can inspect the state and processing log. Changing the mode or categories requires workspace-management permission. The mode applies to cabinet chat and compatible chat API requests for the organization. Guest chat without an organization is outside this policy. ## Data that is inspected The first version processes message and instruction text, text content parts, tool-call arguments, and textual tool results. Supported categories include people, phone numbers, email addresses, addresses, passports, Russian tax and social-insurance identifiers, bank accounts, payment cards, IP addresses, and secret-like values. The detector may report a value from a disabled category, but the gateway discards that match before creating a pseudonym and does not include it in audit counts. Images, audio, video, binary files, and media URLs are passed without content recognition. Document text is covered only after it becomes an ordinary text part of the request; masking is not OCR or file redaction. ## Detector failure behavior Enabled masking is fail-closed. If the detector is unavailable, times out, rejects oversized text, or returns an invalid result, the API returns `503` with code `guardrail_unavailable`. The original request is not sent to an external provider and no model charge is created. When masking is off, the detector is not called and the request follows normal processing. ## Protected request pricing A successful request with masking enabled is charged at the selected model price plus a five-percent markup. The preliminary balance reservation includes the same markup. Balance history shows the model and masking charges as separate entries. There is no separate subscription or per-match fee. If the detector stops the request before provider delivery, neither the model charge nor the markup is captured. ## Verify behavior with synthetic data Use fictional data only, for example: ```text Contact test.person@example.com from 192.0.2.10 and repeat both values. ``` Open the protection log after the request. Detected values produce a **Masked** event with category counts. Text without a supported value produces **No match**. With the detector stopped, expect **Request stopped** and no provider delivery. ## Data retained in the log The log contains time, request source, model, status, request identifier, detector duration, provider-attempt state, and aggregate category counts. A normal response uses source **Chat**; the separate service request that creates the first automatic title for a new conversation uses **Chat title**. Later messages do not create this request after an automatic or manual title is stored. A model shown for the service request is not the model selected by the user for the response. The log does not retain original or transformed text, detected values, surrounding context, or the pseudonym restoration map. Records are retained for 90 days. Deleting a user or API key preserves the organization's history while clearing the relation to the deleted object. ## Troubleshooting **Data protection is missing from Settings** Check the active organization and your role. Opening the setting requires workspace-read access; personal and team workspaces have independent policies. **The switch is read-only** Your role cannot change workspace settings. Ask an owner or administrator to enable the mode or grant the smallest permission needed for the task. **The request stops with guardrail_unavailable** This is the expected safe failure: the original text was not sent to the model. Retry after the service recovers or ask an administrator to check protection health; do not disable it merely to bypass the error when the request contains sensitive data. **Some data was not detected** Automated recognition is probabilistic and covers only the listed text fields and categories. Remove or replace critical values manually and do not rely on masking for images or files. --- ## Handle API errors Source: https://cicora.ai/en/docs/errors.md On failure, preserve the HTTP status and API response before reading the public code. Do not replace the exact response with an assumption based on status alone because the same status can require different actions. ## Read an OpenAI-compatible error A normal Chat Completions failure has an `error` object. For example, temporary model unavailability uses this public shape: ```json { "error": { "code": "MODEL_NOT_AVAILABLE", "message": "The selected model is temporarily unavailable. Please try again.", "param": null, "type": "server_error" } } ``` Use `error.code` for client decisions, `error.message` for readable diagnostics, `error.param` for the related field, and `error.type` for the error class. Do not parse message text when a public code is available. Some model-validation failures also expose stable top-level `code` and `model` fields. Billing failures can use stable top-level fields too: insufficient balance reports current and required amounts, while a key limit reports `API_KEY_SPEND_LIMIT_EXCEEDED`, its period, amounts, and `resetAt`. Preserve the actual response body instead of assuming every error uses one nested shape. *A structured error returns from the API to the calling application.* *Branch on HTTP status and public code rather than private causes.* ## Choose an action from status and code | Signal | What to inspect | Action | | ---------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | HTTP `400` | `error.code`, `error.param`, `model`, and request body | Correct the format, context, output limit, or unsupported capability. Do not repeat the unchanged request. | | HTTP `401` | Bearer header and key state | Use a valid key from the active workspace. Revoke and replace a lost or exposed key. | | HTTP `402` | Available balance and active reservations | Let active reservations complete or release and check available balance again before you reduce the request or top up the workspace. | | HTTP `403` | Public code and workspace role | Correct access permissions. Only when the code is `FIRST_TOP_UP_REQUIRED`, use the returned `topUpUrl` for the first real top-up. | | HTTP `429` | Top-level `code` and `resetAt` when present | For `API_KEY_SPEND_LIMIT_EXCEEDED`, wait for `resetAt` or change the limit; retry a transient limit only under the [limits and retries](/en/docs/limits) guidance. | | HTTP `5xx` | Public code and whether output has started | Follow the [bounded retry rules](/en/docs/limits). After any output, do not start an automatic duplicate. | | No HTTP response | Client network, DNS, TLS, cancellation, and whether partial output arrived | No output does not confirm that the request was not accepted. Check [Usage](/en/docs/usage-costs), the exact time, and model, then make an explicit decision under the [retry rules](/en/docs/limits). | `FIRST_TOP_UP_REQUIRED` and `topUpUrl` are shipped fields for a model lock in an applicable personal workspace. Do not treat every `403` as a request to add balance because insufficient workspace permission can use the same status. ## Distinguish image errors Image option validation uses `MODEL_PARAMETER_COMBINATION_INVALID` when a model cannot accept the requested option combination and `MODEL_CAPABILITY_METADATA_UNAVAILABLE` when capability metadata cannot currently be checked. Current image execution codes are `IMAGE_UPSTREAM_INVALID_REQUEST`, `IMAGE_UPSTREAM_INVALID_RESPONSE`, `IMAGE_UPSTREAM_RATE_LIMITED`, `IMAGE_UPSTREAM_UNAVAILABLE`, `IMAGE_UPSTREAM_FAILED`, `IMAGE_ARTIFACT_STORAGE_FAILED`, and `IMAGE_REQUEST_ABORTED`. A client should show the safe message and branch on the public code without exposing an external service name or response. ## Prepare safe support evidence Before contacting [support](/en/contact), collect: 1. exact HTTP status, public code, and safe message; 2. API endpoint and exact model ID; 3. request identifier when the client or Usage view supplies one; 4. exact time with timezone and the client or tool name and version; 5. key name and visible masked prefix; 6. a redacted request body only when it is necessary to reproduce the failure. **Do not send secrets or private diagnostics** Never include a complete API key, password, payment credentials, sensitive prompt, external service names, internal routes, or raw external responses. The public error and safe identifiers are sufficient for investigation. --- ## Limits and retries Source: https://cicora.ai/en/docs/limits.md A retry is not safe for every failure. First determine whether the request was accepted, whether output started, and whether the cause is transient; only then decide whether to send the same request again. ## Automatically retry only a request known not to be accepted A network failure can happen after a request was accepted and started running, so no HTTP response or visible output does not prove that work never began. Automatically retry only when it is known that the request was not accepted. Otherwise check [Usage](/en/docs/usage-costs), the request time, and exact model ID, then make an explicit decision without blind replay. Correct a `400`, invalid key, insufficient balance, missing permission, or incompatible parameter instead of retrying it. Use **bounded exponential backoff**: 1. when the response includes `Retry-After`, wait for that delay while staying inside the client's total wait budget; 2. otherwise increase the delay after each failure and add a small random jitter; 3. cap the delay, attempt count, and total operation time; 4. return the failure to the calling application after the bound instead of looping forever. The client chooses those bounds for its task. They are not a service recovery-time promise. **Do not retry delivered output** The first text token, Messages content block, partial image, or completed artifact means output has started. Preserve it and do not replay the request automatically because a retry can duplicate work and cost. *A stream starts once and then completes without a duplicate retry.* *Automatically retry only when request non-acceptance is confirmed.* ## Separate spend limits from transient `429` For `429`, read the public code first. `API_KEY_SPEND_LIMIT_EXCEEDED` means captured spend, active reservations, and the new request estimate crossed the key budget. Wait for the response's `resetAt` or change the limit in [API keys](https://app.cicora.ai/api-keys); exponential backoff does not create more budget. For another transient `429`, honor `Retry-After` when present and use the bounded policy above, but only before output. Do not calculate `resetAt` yourself or confuse it with `Retry-After`: the former belongs to the key's budget window, while the latter supplies a response retry delay. ## Check context and output limits Context size and maximum output depend on the exact model ID. Read `context_length`, the published completion limit, and `supported_parameters` from the [current catalog](/en/docs/models) or `GET /v1/models`. Context includes the messages and other input in the current request; the API does not attach history from previous requests automatically. Send only one supported output-limit field: `max_tokens` or `max_completion_tokens`. Errors such as `context_length_exceeded`, `max_output_tokens_exceeded`, and `OUTPUT_TOKEN_LIMIT_EXCEEDED` require a changed input, limit, or model setting rather than the same request again. ## Account for timeout stages Connection wait, time to first output, and idle time inside a stream have separate current limits. The exact boundary therefore depends on the stage and configuration; there is no universal promise in seconds. Enable streaming for a long response so output can arrive incrementally, but do not treat streaming as a way to disable every timeout. Apply a bounded retry when it is confirmed that the request was not accepted. Otherwise check usage, time, and model and make an explicit decision. If a stream has returned data, preserve the partial response and leave the continuation decision to the user or application. ## Handle an interrupted stream separately Chat Completions completes at `[DONE]`; Messages completes at `message_stop`. An earlier connection close means the result is incomplete. Record the last event, model ID, time, and request identifier when available, but do not replay automatically after output. Once processing ends without confirmed output or usage, its reservation is released without a usage charge. If part of a stream was delivered or usage was confirmed, that portion can be billed. No exact reservation-update time is promised; check [Balance](/en/docs/billing-balance) and [Usage](/en/docs/usage-costs). --- ## Frequently asked questions about cicora.ai Source: https://cicora.ai/en/docs/faq.md Check current models, prices, payment methods, and operation states in the cabinet instead of relying on old numeric examples. ## Account access **How do I create an account?** Register with email and a six-digit verification code, or continue with Google. The complete flow is in [Account and access](/en/docs/account-access). **What if the email code does not arrive?** Check the address and spam folder, then request a new code when the control becomes available. Only the newest code remains valid. ## Balance and usage **Is Cicora a subscription?** Cicora uses prepaid metered billing. Confirmed usage is charged against the active workspace's USD balance; see [Usage and costs](/en/docs/usage-costs). **How do I top up?** Open the active workspace's [Balance](https://app.cicora.ai/balance), choose an amount in USD, and complete the secure card checkout. Use only the payment methods shown there. **Why is part of the balance reserved?** Before a request, Cicora temporarily holds an estimate. After settlement, confirmed usage is charged and the unused portion is released under [Balance and top-ups](/en/docs/billing-balance). ## API and models **Which base URL should I use?** OpenAI-compatible clients use `https://api.cicora.ai/v1`. Claude Code receives `https://api.cicora.ai` without `/v1` because it appends the Messages path. **Where can I find current models and prices?** Use the [model catalog](https://app.cicora.ai/models) or `GET /v1/models`. Copy the exact model ID and inspect its current capabilities before sending a request. **Can browser code call the API directly?** Do not put a platform key into frontend source or a public browser bundle. Call the API from a trusted backend and keep the key in protected configuration. ## Teams and support **Are balance, keys, and usage shared in an organization?** They belong to the active organization. Its keys spend its balance and its requests appear in its Usage view. Personal and organization workspaces remain separate. **How do I contact support?** Use the [Contact](/en/contact) page. Include the public error code, model ID, time, client, and masked key prefix, never a complete key or verification code. --- ## AI models as ordinary working infrastructure Source: https://cicora.ai/en/about.md ## What we build cicora.ai brings chat, OpenAI- and Anthropic-compatible APIs, image and video generation, and team workspaces into one product. ## Product evidence | Use case | What is included | Result | | --- | --- | --- | | Chat | Text, code, documents, search, and images in one workspace. | Work in the browser | | API | Compatible endpoints for applications, agents, and IDEs. | One integration | | Teams | Members, keys, spend, and organization balance. | Shared workspace | | Media | Image and video models in the cabinet and compatible API methods. | Generate and edit | ## Operating principles - **Compatibility over another protocol.** Change the base URL, set the key, and select a model. - **Costs should be understandable.** Requests expose usage, rates, and USD charges. - **Availability belongs in the service.** The platform handles compatible routing without moving that work to the client. - **One balance across workflows.** Chat, API, image, and video usage draw from the active workspace balance. ## Direct contact Email [info@cicora.ai](mailto:info@cicora.ai). ## Related pages - [/en/docs](/en/docs.md) - [/en/products/api](/en/products/api.md) --- ## Contact the team Source: https://cicora.ai/en/contact.md ## Direct contact Email [info@cicora.ai](mailto:info@cicora.ai) for support and product questions. Do not include passwords, complete API keys, or payment card details. ## Cabinet access Use the [cabinet](https://app.cicora.ai) for chat, API keys, billing, and workspace settings. For a compatible integration, start with the [API documentation](/en/docs). ## Related pages - [/en/docs](/en/docs.md) - [/en/products/api](/en/products/api.md) --- ## Security information Source: https://cicora.ai/en/security.md ## Product boundaries Use platform API keys only in trusted server-side environments. Create a separate key for each project and revoke a key when exposure is suspected. Never place a platform key in frontend source, a public browser bundle, a repository, screenshots, or support messages. For security-related questions, email [info@cicora.ai](mailto:info@cicora.ai). ## Related pages - [/en/docs](/en/docs.md) - [/en/products/api](/en/products/api.md) --- ## Choose your first path Source: https://cicora.ai/en/try.md ## Chat in the cabinet Open the [cabinet](https://app.cicora.ai/chat) to start a chat with a model and use the shared workspace. ## API key for an integration Create a platform API key in the cabinet, then follow the [API documentation](/en/docs). The public site does not provide anonymous production API credentials. ## Related pages - [/en/docs](/en/docs.md) - [/en/products/api](/en/products/api.md) --- ## en: complete live model catalog Source: https://cicora.ai/en/models.md Verified at: 2026-11-09T15:30:14.428Z. ### Anthropic: Claude Fable 5 - ID: claude-fable-5 - Publisher: Anthropic - Kind: text - Available: true Claude Fable 5 is a Mythos-class model from Anthropic, built for autonomous knowledge work and coding. It supports text, image, and file inputs with text output, with reasoning support and... [Markdown](/en/models/anthropic/claude-5-fable-20260609.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 10.00 - completionPricePer1mTokens: 50.00 - cacheReadPricePer1mTokens: 1.00 - cacheWritePricePer1mTokens: 12.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 20.00 --- ### Anthropic: Claude Fable 5.1 - ID: claude-fable-5.1 - Publisher: Anthropic - Kind: text - Available: true Claude Fable 5.1 improves on Claude Fable 5 across the board, with the biggest gains in agentic coding, long-running agentic workflows, and knowledge work: long code refactors, front-end and visual... [Markdown](/en/models/anthropic/claude-fable-5.1-20260831.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 10.00 - completionPricePer1mTokens: 50.00 - cacheReadPricePer1mTokens: 0.25 - cacheWritePricePer1mTokens: 12.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 20.00 --- ### Anthropic: Claude Haiku 4.5 - ID: claude-haiku-4.5 - Publisher: Anthropic - Kind: text - Available: true Claude Haiku 4.5 is Anthropic’s fastest and most efficient model, delivering near-frontier intelligence at a fraction of the cost and latency of larger Claude models. Matching Claude Sonnet 4’s performance... [Markdown](/en/models/anthropic/claude-4.5-haiku-20251001.md) - Context: 200000 - Max output tokens: 64000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 1.00 - completionPricePer1mTokens: 5.00 - cacheReadPricePer1mTokens: 0.10 - cacheWritePricePer1mTokens: 1.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 2.00 --- ### Anthropic: Claude Opus 4.6 - ID: claude-opus-4.6 - Publisher: Anthropic - Kind: text - Available: true Opus 4.6 is Anthropic’s strongest model for coding and long-running professional tasks. It is built for agents that operate across entire workflows rather than single prompts, making it especially effective... [Markdown](/en/models/anthropic/claude-4.6-opus-20260205.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p, verbosity - Currency: USD - promptPricePer1mTokens: 5.00 - completionPricePer1mTokens: 25.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: 6.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 10.00 --- ### Anthropic: Claude Opus 4.7 - ID: claude-opus-4.7 - Publisher: Anthropic - Kind: text - Available: true Opus 4.7 is the next generation of Anthropic's Opus family, built for long-running, asynchronous agents. Building on the coding and agentic strengths of Opus 4.6, it delivers stronger performance on... [Markdown](/en/models/anthropic/claude-4.7-opus-20260416.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 5.00 - completionPricePer1mTokens: 25.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: 6.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 10.00 --- ### Anthropic: Claude Opus 4.8 - ID: claude-opus-4.8 - Publisher: Anthropic - Kind: text - Available: true Claude Opus 4.8 is Anthropic's most capable generally available model in the Opus family. It supports text, image, and file inputs with text output, with reasoning support and a 1M-token... [Markdown](/en/models/anthropic/claude-4.8-opus-20260528.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 5.00 - completionPricePer1mTokens: 25.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: 6.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 10.00 --- ### Anthropic: Claude Opus 5 - ID: claude-opus-5 - Publisher: Anthropic - Kind: text - Available: true Claude Opus 5 is Anthropic’s flagship model for demanding reasoning, coding, and long-horizon agentic work. It is particularly strong at end-to-end software tasks, code review and bug finding, visual analysis... [Markdown](/en/models/anthropic/claude-opus-5-20260723.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 5.00 - completionPricePer1mTokens: 25.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: 6.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 10.00 --- ### Anthropic: Claude Opus 5.5 - ID: claude-opus-5.5 - Publisher: Anthropic - Kind: text - Available: true Claude Opus 5.5 is Anthropic's flagship model for demanding reasoning, coding, and long-horizon agentic work, succeeding Claude Opus 5. It is particularly strong at multi-step changes in large codebases, code... [Markdown](/en/models/anthropic/claude-opus-5.5-20260921.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 4.00 - completionPricePer1mTokens: 20.00 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: 5.00 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 8.00 --- ### Anthropic: Claude Sonnet 4.6 - ID: claude-sonnet-4.6 - Publisher: Anthropic - Kind: text - Available: true Sonnet 4.6 is Anthropic's most capable Sonnet-class model yet, with frontier performance across coding, agents, and professional work. It excels at iterative development, complex codebase navigation, end-to-end project management with... [Markdown](/en/models/anthropic/claude-4.6-sonnet-20260217.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p, verbosity - Currency: USD - promptPricePer1mTokens: 3.00 - completionPricePer1mTokens: 15.00 - cacheReadPricePer1mTokens: 0.30 - cacheWritePricePer1mTokens: 3.75 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 6.00 --- ### Anthropic: Claude Sonnet 5 - ID: claude-sonnet-5 - Publisher: Anthropic - Kind: text - Available: true Sonnet 5 is Anthropic's most capable Sonnet-class model, with frontier performance across coding, agents, and professional work. It supports adaptive thinking with selectable reasoning effort levels (low, medium, high, max,... [Markdown](/en/models/anthropic/claude-sonnet-5-20260630.md) - Context: 1000000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, stop, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 10.00 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: 2.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: 4.00 --- ### DeepSeek: DeepSeek V4.1 Flash - ID: deepseek-v4.1-flash - Publisher: DeepSeek - Kind: text - Available: true DeepSeek V4.1 Flash is a sparse mixture-of-experts model from DeepSeek, and the first built on the company's Causal Encoder-Decoder (CED) architecture. It activates 8B parameters on input and 16B on... [Markdown](/en/models/deepseek/deepseek-v4.1-flash-20260910.md) - Context: 1048576 - Max output tokens: 943718 - Input: text, image - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.01 - completionPricePer1mTokens: 0.72 - cacheReadPricePer1mTokens: 0.01 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### DeepSeek: DeepSeek V4 Flash 0423 - ID: deepseek-v4-flash - Publisher: DeepSeek - Kind: text - Available: true DeepSeek V4 Flash is an efficiency-optimized Mixture-of-Experts model from DeepSeek with 284B total parameters and 13B activated parameters, supporting a 1M-token context window. It is designed for fast inference and... [Markdown](/en/models/deepseek/deepseek-v4-flash-20260423.md) - Context: 1048576 - Max output tokens: 943718 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_completion\_tokens, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_a, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.09 - completionPricePer1mTokens: 0.18 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### DeepSeek: DeepSeek V4 Flash 0731 - ID: deepseek-v4-flash-0731 - Publisher: DeepSeek - Kind: text - Available: true DeepSeek V4 Flash 0731 is a sparse mixture-of-experts model from DeepSeek, with 13B active parameters out of 284B total. This re-post-trained revision is suited for coding, reasoning, and agent workflows.... [Markdown](/en/models/deepseek/deepseek-v4-flash-20260731.md) - Context: 1048576 - Max output tokens: 943718 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_a, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.02 - completionPricePer1mTokens: 0.64 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### DeepSeek: DeepSeek V4 Pro 0423 - ID: deepseek-v4-pro - Publisher: DeepSeek - Kind: text - Available: true DeepSeek V4 Pro is a large-scale Mixture-of-Experts model from DeepSeek with 1.6T total parameters and 49B activated parameters, supporting a 1M-token context window. It is designed for advanced reasoning, coding,... [Markdown](/en/models/deepseek/deepseek-v4-pro-20260423.md) - Context: 1048576 - Max output tokens: 384000 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_completion\_tokens, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.39 - completionPricePer1mTokens: 0.78 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### DeepSeek: DeepSeek V4 Pro 0813 - ID: deepseek-v4-pro-0813 - Publisher: DeepSeek - Kind: text - Available: true DeepSeek V4 Pro 0813 is a large-scale mixture-of-experts model from DeepSeek. This is the GA release of DeepSeek V4 Pro. [Markdown](/en/models/deepseek/deepseek-v4-pro-20260813.md) - Context: 1048576 - Max output tokens: 943718 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.66 - completionPricePer1mTokens: 1.98 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 2.5 Flash - ID: gemini-2.5-flash - Publisher: Google - Kind: text - Available: true Gemini 2.5 Flash is Google's state-of-the-art workhorse model, specifically designed for advanced reasoning, coding, mathematics, and scientific tasks. It includes built-in "thinking" capabilities, enabling it to provide responses with greater... [Markdown](/en/models/google/gemini-2.5-flash.md) - Context: 1048576 - Max output tokens: 65535 - Input: file, image, text, audio, video - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.30 - completionPricePer1mTokens: 2.50 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 2.5 Flash Lite - ID: gemini-2.5-flash-lite - Publisher: Google - Kind: text - Available: true Gemini 2.5 Flash-Lite is a lightweight reasoning model in the Gemini 2.5 family, optimized for ultra-low latency and cost efficiency. It offers improved throughput, faster token generation, and better performance... [Markdown](/en/models/google/gemini-2.5-flash-lite.md) - Context: 1048576 - Max output tokens: 65535 - Input: text, image, file, audio, video - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.10 - completionPricePer1mTokens: 0.40 - cacheReadPricePer1mTokens: 0.01 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 2.5 Pro - ID: gemini-2.5-pro - Publisher: Google - Kind: text - Available: true Gemini 2.5 Pro is Google’s state-of-the-art AI model designed for advanced reasoning, coding, mathematics, and scientific tasks. It employs “thinking” capabilities, enabling it to reason through responses with enhanced accuracy... [Markdown](/en/models/google/gemini-2.5-pro.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, file, audio, video - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 1.25 - completionPricePer1mTokens: 10.00 - cacheReadPricePer1mTokens: 0.13 - cacheWritePricePer1mTokens: 0.38 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.1 Flash Lite - ID: gemini-3.1-flash-lite - Publisher: Google - Kind: text - Available: true Gemini 3.1 Flash Lite is Google’s GA high-efficiency multimodal model optimized for low-latency, high-volume workloads. It supports text, image, video, audio, and PDF inputs, and is designed for lightweight agentic... [Markdown](/en/models/google/gemini-3.1-flash-lite-20260507.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.25 - completionPricePer1mTokens: 1.50 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.1 Pro Preview - ID: gemini-3.1-pro-preview - Publisher: Google - Kind: text - Available: true Gemini 3.1 Pro Preview is Google’s frontier reasoning model, delivering enhanced software engineering performance, improved agentic reliability, and more efficient token usage across complex workflows. Building on the multimodal foundation... [Markdown](/en/models/google/gemini-3.1-pro-preview-20260219.md) - Context: 1048576 - Max output tokens: 65536 - Input: audio, file, image, text, video - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 12.00 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: 0.38 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.5 Flash - ID: gemini-3.5-flash - Publisher: Google - Kind: text - Available: true Gemini 3.5 Flash is Google's high-efficiency multimodal model, bringing near-Pro level coding and reasoning at Flash-tier cost and speed. It is highly optimized for coding proficiency and parallel agentic execution... [Markdown](/en/models/google/gemini-3.5-flash-20260519.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 1.50 - completionPricePer1mTokens: 9.00 - cacheReadPricePer1mTokens: 0.15 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.5 Flash Lite - ID: gemini-3.5-flash-lite - Publisher: Google - Kind: text - Available: true Gemini 3.5 Flash Lite is a high-efficiency model from Google with upgraded agentic capabilities. It is suited for subagents that execute focused tasks within complex, multi-agent workflows. [Markdown](/en/models/google/gemini-3.5-flash-lite-20260721.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.30 - completionPricePer1mTokens: 2.50 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.6 Flash - ID: gemini-3.6-flash - Publisher: Google - Kind: text - Available: true Gemini 3.6 Flash is a high-efficiency model from Google for coding, agentic workflows, and web and app development. It is designed to produce polished outputs with fewer unnecessary edits and... [Markdown](/en/models/google/gemini-3.6-flash-20260721.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.75 - completionPricePer1mTokens: 3.75 - cacheReadPricePer1mTokens: 0.08 - cacheWritePricePer1mTokens: 0.04 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.7 Flash - ID: gemini-3.7-flash - Publisher: Google - Kind: text - Available: true Gemini 3.7 Flash is a multimodal model from Google for fast agentic workflows, coding, and complex multi-step reasoning. It is designed for tasks that require responsive performance and reliable multi-step... [Markdown](/en/models/google/gemini-3.7-flash-20260813.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.75 - completionPricePer1mTokens: 3.75 - cacheReadPricePer1mTokens: 0.08 - cacheWritePricePer1mTokens: 0.04 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.8 Flash - ID: gemini-3.8-flash - Publisher: Google - Kind: text - Available: true Gemini 3.8 Flash is Google's most intelligent Flash model with significant gains from 3.7 Flash across software engineering, agentic tasks, and multi-step reasoning. [Markdown](/en/models/google/gemini-3.8-flash-20260902.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, video, file, audio - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.75 - completionPricePer1mTokens: 3.75 - cacheReadPricePer1mTokens: 0.08 - cacheWritePricePer1mTokens: 0.04 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3 Flash Preview - ID: gemini-3-flash-preview - Publisher: Google - Kind: text - Available: true Gemini 3 Flash Preview is a high speed, high value thinking model designed for agentic workflows, multi turn chat, and coding assistance. It delivers near Pro level reasoning and tool... [Markdown](/en/models/google/gemini-3-flash-preview-20251217.md) - Context: 1048576 - Max output tokens: 65536 - Input: text, image, file, audio, video - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.50 - completionPricePer1mTokens: 3.00 - cacheReadPricePer1mTokens: 0.05 - cacheWritePricePer1mTokens: 0.08 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 4.5 - ID: glm-4.5 - Publisher: Z.ai - Kind: text - Available: true GLM-4.5 is our latest flagship foundation model, purpose-built for agent-based applications. It leverages a Mixture-of-Experts (MoE) architecture and supports a context length of up to 128k tokens. GLM-4.5 delivers significantly... [Markdown](/en/models/z-ai/glm-4.5.md) - Context: 131072 - Max output tokens: 98304 - Input: text - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, response\_format, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.60 - completionPricePer1mTokens: 2.20 - cacheReadPricePer1mTokens: 0.11 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 4.5 Air - ID: glm-4.5-air - Publisher: Z.ai - Kind: text - Available: true GLM-4.5-Air is the lightweight variant of our latest flagship model family, also purpose-built for agent-centric applications. Like GLM-4.5, it adopts the Mixture-of-Experts (MoE) architecture but with a more compact parameter... [Markdown](/en/models/z-ai/glm-4.5-air.md) - Context: 131072 - Max output tokens: 98304 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, max\_tokens, presence\_penalty, reasoning, repetition\_penalty, seed, stop, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.13 - completionPricePer1mTokens: 0.85 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 4.6 - ID: glm-4.6 - Publisher: Z.ai - Kind: text - Available: true Compared with GLM-4.5, this generation brings several key improvements: Longer context window: The context window has been expanded from 128K to 200K tokens, enabling the model to handle more complex... [Markdown](/en/models/z-ai/glm-4.6.md) - Context: 204800 - Max output tokens: 16384 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.50 - completionPricePer1mTokens: 2.00 - cacheReadPricePer1mTokens: 0.10 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 4.7 - ID: glm-4.7 - Publisher: Z.ai - Kind: text - Available: true GLM-4.7 is Z.ai’s latest flagship model, featuring upgrades in two key areas: enhanced programming capabilities and more stable multi-step reasoning/execution. It demonstrates significant improvements in executing complex agent tasks while... [Markdown](/en/models/z-ai/glm-4.7-20251222.md) - Context: 204800 - Max output tokens: 131072 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_a, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.60 - completionPricePer1mTokens: 2.20 - cacheReadPricePer1mTokens: 0.11 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5 - ID: glm-5 - Publisher: Z.ai - Kind: text - Available: true GLM-5 is Z.ai’s flagship open-source foundation model engineered for complex systems design and long-horizon agent workflows. Built for expert developers, it delivers production-grade performance on large-scale programming tasks, rivaling leading... [Markdown](/en/models/z-ai/glm-5-20260211.md) - Context: 204800 - Max output tokens: 128000 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logprobs, max\_tokens, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 1.00 - completionPricePer1mTokens: 3.20 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5.1 - ID: glm-5.1 - Publisher: Z.ai - Kind: text - Available: true GLM-5.1 delivers a major leap in coding capability, with particularly significant gains in handling long-horizon tasks. Unlike previous models built around minute-level interactions, GLM-5.1 can work independently and continuously on... [Markdown](/en/models/z-ai/glm-5.1-20260406.md) - Context: 204800 - Max output tokens: 131072 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.97 - completionPricePer1mTokens: 3.04 - cacheReadPricePer1mTokens: 0.18 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5.2 - ID: glm-5.2 - Publisher: Z.ai - Kind: text - Available: true GLM 5.2 is a large-scale reasoning model from Z.ai. It supports text input and output with a 1M-token context window, and is suited for long-horizon agent workflows, project-level software engineering,... [Markdown](/en/models/z-ai/glm-5.2-20260616.md) - Context: 1048576 - Max output tokens: 131072 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.65 - completionPricePer1mTokens: 10.00 - cacheReadPricePer1mTokens: 0.65 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5.3 - ID: glm-5.3 - Publisher: Z.ai - Kind: text - Available: true GLM-5.3 is a large-scale reasoning model from Z.ai, built for complex software engineering and long-horizon agent tasks. It supports text input and output with a 1M-token context window, and improves... [Markdown](/en/models/z-ai/glm-5.3-20260816.md) - Context: 1048576 - Max output tokens: 943718 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.11 - completionPricePer1mTokens: 6.00 - cacheReadPricePer1mTokens: 0.11 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5.3 Flash - ID: glm-5.3-flash - Publisher: Z.ai - Kind: text - Available: true GLM-5.3-Flash is a native multimodal model from Z.ai. It is suited for efficient coding and long-horizon agent tasks. Its hybrid sparse and linear attention architecture maintains accurate long-context behavior while... [Markdown](/en/models/z-ai/glm-5.3-flash-20260826.md) - Context: 1048576 - Max output tokens: 943717 - Input: text, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.15 - completionPricePer1mTokens: 0.50 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Z.ai: GLM 5 Turbo - ID: glm-5-turbo - Publisher: Z.ai - Kind: text - Available: true GLM-5 Turbo is a new model from Z.ai designed for fast inference and strong performance in agent-driven environments such as OpenClaw scenarios. It is deeply optimized for real-world agent workflows... [Markdown](/en/models/z-ai/glm-5-turbo-20260315.md) - Context: 202752 - Max output tokens: 131072 - Input: text - Output: text - Parameters: include\_reasoning, max\_tokens, reasoning, response\_format, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 1.20 - completionPricePer1mTokens: 4.00 - cacheReadPricePer1mTokens: 0.24 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-4.1 - ID: gpt-4.1 - Publisher: OpenAI - Kind: text - Available: true GPT-4.1 is a flagship large language model optimized for advanced instruction following, real-world software engineering, and long-context reasoning. It supports a 1 million token context window and outperforms GPT-4o and... [Markdown](/en/models/openai/gpt-4.1-2025-04-14.md) - Context: 1047576 - Max output tokens: 32768 - Input: image, text, file - Output: text - Parameters: max\_completion\_tokens, max\_tokens, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 8.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-4.1 Mini - ID: gpt-4.1-mini - Publisher: OpenAI - Kind: text - Available: true GPT-4.1 Mini is a mid-sized model delivering performance competitive with GPT-4o at substantially lower latency and cost. It retains a 1 million token context window and scores 45.1% on hard... [Markdown](/en/models/openai/gpt-4.1-mini-2025-04-14.md) - Context: 1047576 - Max output tokens: 32768 - Input: image, text, file - Output: text - Parameters: max\_completion\_tokens, max\_tokens, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.40 - completionPricePer1mTokens: 1.60 - cacheReadPricePer1mTokens: 0.10 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-4.1 Nano - ID: gpt-4.1-nano - Publisher: OpenAI - Kind: text - Available: true For tasks that demand low latency, GPT‑4.1 nano is the fastest and cheapest model in the GPT-4.1 series. It delivers exceptional performance at a small size with its 1 million... [Markdown](/en/models/openai/gpt-4.1-nano-2025-04-14.md) - Context: 1047576 - Max output tokens: 32768 - Input: image, text, file - Output: text - Parameters: max\_completion\_tokens, max\_tokens, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_p - Currency: USD - promptPricePer1mTokens: 0.10 - completionPricePer1mTokens: 0.40 - cacheReadPricePer1mTokens: 0.03 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-4o-mini - ID: gpt-4o-mini - Publisher: OpenAI - Kind: text - Available: true GPT-4o mini is OpenAI's newest model after \[GPT-4 Omni\](/models/openai/gpt-4o), supporting both text and image inputs with text outputs. As their most advanced small model, it is many multiples more affordable... [Markdown](/en/models/openai/gpt-4o-mini.md) - Context: 128000 - Max output tokens: 16384 - Input: text, image, file - Output: text - Parameters: frequency\_penalty, logit\_bias, logprobs, max\_completion\_tokens, max\_tokens, prediction, presence\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_logprobs, top\_p, web\_search\_options - Currency: USD - promptPricePer1mTokens: 0.15 - completionPricePer1mTokens: 0.60 - cacheReadPricePer1mTokens: 0.08 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.4 - ID: gpt-5.4 - Publisher: OpenAI - Kind: text - Available: true GPT-5.4 is OpenAI’s latest frontier model, unifying the Codex and GPT lines into a single system. It features a 1M+ token context window (922K input, 128K output) with support for... [Markdown](/en/models/openai/gpt-5.4-20260305.md) - Context: 1050000 - Max output tokens: 128000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 2.50 - completionPricePer1mTokens: 15.00 - cacheReadPricePer1mTokens: 0.25 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.4 Mini - ID: gpt-5.4-mini - Publisher: OpenAI - Kind: text - Available: true GPT-5.4 mini brings the core capabilities of GPT-5.4 to a faster, more efficient model optimized for high-throughput workloads. It supports text and image inputs with strong performance across reasoning, coding,... [Markdown](/en/models/openai/gpt-5.4-mini-20260317.md) - Context: 400000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 0.75 - completionPricePer1mTokens: 4.50 - cacheReadPricePer1mTokens: 0.08 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.4 Nano - ID: gpt-5.4-nano - Publisher: OpenAI - Kind: text - Available: true GPT-5.4 nano is the most lightweight and cost-efficient variant of the GPT-5.4 family, optimized for speed-critical and high-volume tasks. It supports text and image inputs and is designed for low-latency... [Markdown](/en/models/openai/gpt-5.4-nano-20260317.md) - Context: 400000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 0.20 - completionPricePer1mTokens: 1.25 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.5 - ID: gpt-5.5 - Publisher: OpenAI - Kind: text - Available: true GPT-5.5 is OpenAI’s frontier model designed for complex professional workloads, building on GPT-5.4 with stronger reasoning, higher reliability, and improved token efficiency on hard tasks. It features a 1M+ token... [Markdown](/en/models/openai/gpt-5.5-20260423.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 5.00 - completionPricePer1mTokens: 30.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.6 Luna - ID: gpt-5.6-luna - Publisher: OpenAI - Kind: text - Available: true GPT-5.6 Luna is a fast, cost-efficient model in OpenAI's GPT-5.6 series. It is suited for high-volume, latency-sensitive tasks such as chat, classification, and lightweight agentic workflows, providing capable reasoning for... [Markdown](/en/models/openai/gpt-5.6-luna-20260709.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 0.20 - completionPricePer1mTokens: 1.20 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: 0.25 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.6 Sol - ID: gpt-5.6-sol - Publisher: OpenAI - Kind: text - Available: true GPT-5.6 Sol is the flagship model in OpenAI's GPT-5.6 series. It is suited for complex reasoning, coding, and agentic workflows, and is particularly strong at command-line and multi-step coding tasks... [Markdown](/en/models/openai/gpt-5.6-sol-20260709.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 4.00 - completionPricePer1mTokens: 20.00 - cacheReadPricePer1mTokens: 0.40 - cacheWritePricePer1mTokens: 5.00 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-5.6 Terra - ID: gpt-5.6-terra - Publisher: OpenAI - Kind: text - Available: true GPT-5.6 Terra is a balanced model in OpenAI's GPT-5.6 series, positioned between the flagship Sol tier and the cost-efficient Luna tier. It is suited for everyday coding, reasoning, and agentic... [Markdown](/en/models/openai/gpt-5.6-terra-20260709.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 12.00 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: 2.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-6 Astra - ID: gpt-6-astra - Publisher: OpenAI - Kind: text - Available: true GPT-6 Astra is OpenAI's flagship model for demanding end-to-end work. It is suited for advanced analysis, software engineering, deep research, scientific work, and document creation, with particular strengths in long-horizon... [Markdown](/en/models/openai/gpt-6-astra-20260903.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 10.00 - completionPricePer1mTokens: 50.00 - cacheReadPricePer1mTokens: 1.00 - cacheWritePricePer1mTokens: 12.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-6 Luna - ID: gpt-6-luna - Publisher: OpenAI - Kind: text - Available: true GPT-6 Luna is the fast, cost-efficient model in OpenAI's GPT-6 series, positioned below GPT-6 Sol. It is suited for high-volume and latency-sensitive workloads such as chat, classification, and lightweight agentic... [Markdown](/en/models/openai/gpt-6-luna-20260922.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 0.10 - completionPricePer1mTokens: 0.50 - cacheReadPricePer1mTokens: 0.01 - cacheWritePricePer1mTokens: 0.13 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### OpenAI: GPT-6 Sol - ID: gpt-6-sol - Publisher: OpenAI - Kind: text - Available: true GPT-6 Sol is the cost-efficient high-end model in OpenAI's GPT-6 series, positioned below the flagship GPT-6 Astra and above the fast GPT-6 Luna tier. It is suited for demanding professional... [Markdown](/en/models/openai/gpt-6-sol-20260922.md) - Context: 1050000 - Max output tokens: 128000 - Input: file, image, text - Output: text - Parameters: include\_reasoning, max\_completion\_tokens, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, tool\_choice, tools, verbosity - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 10.00 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: 2.50 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### SpaceXAI: Grok 4.3 - ID: grok-4.3 - Publisher: xAI - Kind: text - Available: true Grok 4.3 is a reasoning model from SpaceXAI. It accepts text and image inputs with text output, and is suited for agentic workflows, instruction-following tasks, and applications requiring high factual... [Markdown](/en/models/x-ai/grok-4.3-20260430.md) - Context: 1000000 - Max output tokens: 900000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, logprobs, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 1.25 - completionPricePer1mTokens: 2.50 - cacheReadPricePer1mTokens: 0.20 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### SpaceXAI: Grok 4.5 - ID: grok-4.5 - Publisher: xAI - Kind: text - Available: true Grok 4.5 is a model from SpaceXAI with frontier performance on coding, knowledge work, and STEM. [Markdown](/en/models/x-ai/grok-4.5-20260708.md) - Context: 500000 - Max output tokens: 450000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, logprobs, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 6.00 - cacheReadPricePer1mTokens: 0.30 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### SpaceXAI: Grok 4.6 - ID: grok-4.6 - Publisher: xAI - Kind: text - Available: true Grok 4.6 is a model from SpaceXAI with frontier performance on coding, knowledge work, and STEM. It is succeeded by \[Grok 4.7\](/x-ai/grok-4.7). [Markdown](/en/models/x-ai/grok-4.6-20260810.md) - Context: 500000 - Max output tokens: 450000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, logprobs, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 6.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### SpaceXAI: Grok 4.7 - ID: grok-4.7 - Publisher: xAI - Kind: text - Available: true Grok 4.7 is SpaceXAI's flagship model for coding, agentic tasks, and knowledge work, succeeding Grok 4.6. It is particularly strong at long-running software engineering tasks, verifying its own work, and... [Markdown](/en/models/x-ai/grok-4.7-20260916.md) - Context: 500000 - Max output tokens: 450000 - Input: text, image, file - Output: text - Parameters: include\_reasoning, logprobs, max\_tokens, reasoning, reasoning\_effort, response\_format, seed, structured\_outputs, temperature, tool\_choice, tools, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 6.00 - cacheReadPricePer1mTokens: 0.50 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### MoonshotAI: Kimi K2.6 - ID: kimi-k2.6 - Publisher: Moonshot AI - Kind: text - Available: true Kimi K2.6 is Moonshot AI's next-generation multimodal model, designed for long-horizon coding, coding-driven UI/UX generation, and multi-agent orchestration. It handles complex end-to-end coding tasks across Python, Rust, and Go, and... [Markdown](/en/models/moonshotai/kimi-k2.6-20260420.md) - Context: 262144 - Max output tokens: 235929 - Input: text, image - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.65 - completionPricePer1mTokens: 3.41 - cacheReadPricePer1mTokens: 0.15 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### MoonshotAI: Kimi K2.7 Code - ID: kimi-k2.7-code - Publisher: Moonshot AI - Kind: text - Available: true MoonshotAI: Kimi K2.7 Code is a coding-focused model in Moonshot AI's Kimi K2 family, built to complete end-to-end programming tasks reliably over long contexts. It uses a native multimodal mixture-of-experts... [Markdown](/en/models/moonshotai/kimi-k2.7-code-20260612.md) - Context: 262144 - Max output tokens: 235929 - Input: text, image - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, parallel\_tool\_calls, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.67 - completionPricePer1mTokens: 3.35 - cacheReadPricePer1mTokens: 0.18 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### MoonshotAI: Kimi K3 - ID: kimi-k3 - Publisher: Moonshot AI - Kind: text - Available: true Kimi K3 is a 2.8T parameter open-weight multimodal reasoning model from Moonshot AI. It is suited for complex coding, knowledge work, and long-horizon agentic workflows, and is particularly strong at... [Markdown](/en/models/moonshotai/kimi-k3-20260715.md) - Context: 1048576 - Max output tokens: 943718 - Input: text, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.41 - completionPricePer1mTokens: 15.00 - cacheReadPricePer1mTokens: 0.28 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Xiaomi: MiMo-V2.5 - ID: mimo-v2.5 - Publisher: Xiaomi - Kind: text - Available: true MiMo-V2.5 is a native omnimodal model by Xiaomi. It delivers Pro-level agentic performance at roughly half the inference cost, while surpassing MiMo-V2-Omni in multimodal perception across image and video understanding... [Markdown](/en/models/xiaomi/mimo-v2.5-20260422.md) - Context: 1050000 - Max output tokens: 131072 - Input: text, audio, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, max\_tokens, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.14 - completionPricePer1mTokens: 0.28 - cacheReadPricePer1mTokens: 0.00 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Xiaomi: MiMo-V2.6-Flash - ID: mimo-v2.6-flash - Publisher: Xiaomi - Kind: text - Available: true MiMo-V2.6-Flash is an open-source foundation model developed by Xiaomi. Built on a Mixture-of-Experts architecture with 309B total parameters and 15B activated per token, it employs a hybrid attention mechanism for... [Markdown](/en/models/xiaomi/mimo-v2.6-flash-20260921.md) - Context: 1050000 - Max output tokens: 131072 - Input: text, image, video, audio - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.14 - completionPricePer1mTokens: 0.28 - cacheReadPricePer1mTokens: 0.00 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Xiaomi: MiMo-V2.6-Pro - ID: mimo-v2.6-pro - Publisher: Xiaomi - Kind: text - Available: true MiMo-V2.6-Pro is the flagship foundation model developed by Xiaomi. Built at a scale of over 1T parameters, it is designed to push the ceiling of capability for the most demanding... [Markdown](/en/models/xiaomi/mimo-v2.6-pro-20260921.md) - Context: 1050000 - Max output tokens: 131072 - Input: text, image, video, audio - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.44 - completionPricePer1mTokens: 0.87 - cacheReadPricePer1mTokens: 0.00 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### MiniMax: MiniMax M2.7 - ID: minimax-m2.7 - Publisher: MiniMax - Kind: text - Available: true MiniMax-M2.7 is a next-generation large language model designed for autonomous, real-world productivity and continuous improvement. Built to actively participate in its own evolution, M2.7 integrates advanced agentic capabilities through multi-agent... [Markdown](/en/models/minimax/minimax-m2.7-20260318.md) - Context: 204800 - Max output tokens: 176947 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.30 - completionPricePer1mTokens: 1.20 - cacheReadPricePer1mTokens: 0.06 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### MiniMax: MiniMax M3 - ID: minimax-m3 - Publisher: MiniMax - Kind: text - Available: true MiniMax-M3 is a multimodal foundation model from MiniMax. It supports text, image, and video inputs with text output, a 1M-token context window, and is suited for long-horizon agentic work, coding,... [Markdown](/en/models/minimax/minimax-m3-20260531.md) - Context: 1048576 - Max output tokens: 512000 - Input: text, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, logprobs, max\_tokens, min\_p, presence\_penalty, reasoning, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.30 - completionPricePer1mTokens: 1.20 - cacheReadPricePer1mTokens: 0.06 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### NVIDIA: Nemotron 3 Ultra - ID: nemotron-3-ultra-550b-a55b - Publisher: NVIDIA - Kind: text - Available: true NVIDIA Nemotron 3 Ultra is an open frontier-reasoning and orchestration model from NVIDIA, with 55B active parameters out of 550B total (MoE). Built on a hybrid Transformer-Mamba mixture-of-experts architecture, it... [Markdown](/en/models/nvidia/nemotron-3-ultra-550b-a55b-20260604.md) - Context: 262144 - Max output tokens: 16384 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logit\_bias, max\_tokens, min\_p, presence\_penalty, reasoning, reasoning\_effort, repetition\_penalty, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_p - Currency: USD - promptPricePer1mTokens: 0.60 - completionPricePer1mTokens: 2.40 - cacheReadPricePer1mTokens: 0.12 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Qwen: Qwen3.7 Max - ID: qwen3.7-max - Publisher: Qwen - Kind: text - Available: true Qwen3.7-Max is the flagship model in Alibaba's Qwen3.7 series. It supports text input and output and is designed for agent-centric workloads, with particular strengths in coding, office and productivity tasks,... [Markdown](/en/models/qwen/qwen3.7-max-20260520.md) - Context: 1000000 - Max output tokens: 131072 - Input: text - Output: text - Parameters: frequency\_penalty, include\_reasoning, logprobs, max\_tokens, presence\_penalty, reasoning, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 1.48 - completionPricePer1mTokens: 4.43 - cacheReadPricePer1mTokens: 0.30 - cacheWritePricePer1mTokens: 1.84 - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Qwen: Qwen3.8 Flash - ID: qwen3.8-flash - Publisher: Qwen - Kind: text - Available: true Qwen3.8 Flash is a multimodal reasoning model from Alibaba. It is suited for coding assistance, agentic workflows, visual understanding, document and codebase analysis, desktop interaction, chart analysis, and long-video analysis. [Markdown](/en/models/qwen/qwen3.8-flash-20260826.md) - Context: 1000000 - Max output tokens: 131072 - Input: text, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, logprobs, max\_tokens, presence\_penalty, reasoning, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 0.15 - completionPricePer1mTokens: 0.47 - cacheReadPricePer1mTokens: 0.02 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Qwen: Qwen3.8 Max (0902) - ID: qwen3.8-max-0902 - Publisher: Qwen - Kind: text - Available: true Qwen3.8 Max 0902 is an updated snapshot of Qwen3.8 Max from Alibaba's Qwen team. It is a 2.4-trillion-parameter mixture-of-experts model that accepts text, image, and video input and returns text,... [Markdown](/en/models/qwen/qwen3.8-max-20260902.md) - Context: 1000000 - Max output tokens: 131072 - Input: text, image, video - Output: text - Parameters: frequency\_penalty, include\_reasoning, logprobs, max\_tokens, presence\_penalty, reasoning, reasoning\_effort, response\_format, seed, stop, structured\_outputs, temperature, tool\_choice, tools, top\_k, top\_logprobs, top\_p - Currency: USD - promptPricePer1mTokens: 2.00 - completionPricePer1mTokens: 6.00 - cacheReadPricePer1mTokens: 0.25 - cacheWritePricePer1mTokens: not published - cacheWrite5mPricePer1mTokens: not published - cacheWrite1hPricePer1mTokens: not published --- ### Google: Gemini 3.1 Flash Image - ID: gemini-3.1-flash-image - Publisher: Google - Kind: image - Available: true Google image model for generation and editing with multiple output resolutions and reference images. [Markdown](/en/models/google/gemini-3.1-flash-image.md) - Generation: true; edit: true; mask: false - Max reference images: 14 - Aspect ratios: 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9 - GENERATION / default / default / 1K: 0.07 USD per image - EDIT / default / default / 1K: 0.07 USD per image - EDIT / default / default / 2K: 0.10 USD per image - GENERATION / default / default / 2K: 0.10 USD per image - EDIT / default / default / 4K: 0.15 USD per image - GENERATION / default / default / 4K: 0.15 USD per image - GENERATION / default / default / 512: 0.05 USD per image - EDIT / default / default / 512: 0.05 USD per image --- ### Google: Gemini 3.1 Flash Lite Image - ID: gemini-3.1-flash-lite-image - Publisher: Google - Kind: image - Available: true Efficient Google image model for fast generation and editing across common aspect ratios. [Markdown](/en/models/google/gemini-3.1-flash-lite-image.md) - Generation: true; edit: true; mask: false - Max reference images: 14 - Aspect ratios: 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9 - EDIT / default / default / 1K: 0.03 USD per image - GENERATION / default / default / 1K: 0.03 USD per image --- ### Google: Gemini 3 Pro Image - ID: gemini-3-pro-image - Publisher: Google - Kind: image - Available: true Advanced Google image model for detailed generation and editing at resolutions up to 4K. [Markdown](/en/models/google/gemini-3-pro-image.md) - Generation: true; edit: true; mask: false - Max reference images: 14 - Aspect ratios: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 - GENERATION / default / default / 1K: 0.13 USD per image - EDIT / default / default / 1K: 0.13 USD per image - EDIT / default / default / 2K: 0.13 USD per image - GENERATION / default / default / 2K: 0.13 USD per image - EDIT / default / default / 4K: 0.24 USD per image - GENERATION / default / default / 4K: 0.24 USD per image --- ### OpenAI: GPT Image 2 - ID: gpt-image-2 - Publisher: OpenAI - Kind: image - Available: true OpenAI image model for image generation and editing with reference images and masks. [Markdown](/en/models/openai/gpt-image-2.md) - Generation: true; edit: true; mask: true - Max reference images: 16 - Aspect ratios: 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto - EDIT / 1024x1024 / high / default: 0.21 USD per image - GENERATION / 1024x1024 / high / default: 0.21 USD per image - EDIT / 1024x1024 / low / default: 0.01 USD per image - GENERATION / 1024x1024 / low / default: 0.01 USD per image - GENERATION / 1024x1024 / medium / default: 0.05 USD per image - EDIT / 1024x1024 / medium / default: 0.05 USD per image - GENERATION / 1024x1536 / high / default: 0.16 USD per image - EDIT / 1024x1536 / low / default: 0.00 USD per image - GENERATION / 1024x1536 / low / default: 0.00 USD per image - EDIT / 1024x1536 / medium / default: 0.04 USD per image - GENERATION / 1024x1536 / medium / default: 0.04 USD per image - GENERATION / 1024x768 / high / default: 0.13 USD per image - GENERATION / 1024x768 / low / default: 0.00 USD per image - GENERATION / 1024x768 / medium / default: 0.03 USD per image - GENERATION / 1152x2048 / high / default: 0.15 USD per image - GENERATION / 1152x2048 / low / default: 0.00 USD per image - GENERATION / 1152x2048 / medium / default: 0.04 USD per image - GENERATION / 1536x1024 / high / default: 0.16 USD per image - EDIT / 1536x1024 / low / default: 0.00 USD per image - GENERATION / 1536x1024 / low / default: 0.00 USD per image - GENERATION / 1536x1024 / medium / default: 0.04 USD per image - EDIT / 1536x1024 / medium / default: 0.04 USD per image - GENERATION / 2048x1152 / high / default: 0.15 USD per image - GENERATION / 2048x1152 / low / default: 0.00 USD per image - GENERATION / 2048x1152 / medium / default: 0.04 USD per image - GENERATION / 2048x2048 / high / default: 0.38 USD per image - GENERATION / 2048x2048 / low / default: 0.01 USD per image - GENERATION / 2048x2048 / medium / default: 0.10 USD per image - GENERATION / 2160x3840 / high / default: 0.35 USD per image - GENERATION / 2160x3840 / low / default: 0.01 USD per image - GENERATION / 2160x3840 / medium / default: 0.09 USD per image - GENERATION / 3840x2160 / high / default: 0.35 USD per image - GENERATION / 3840x2160 / low / default: 0.01 USD per image - GENERATION / 3840x2160 / medium / default: 0.09 USD per image - GENERATION / 768x1024 / high / default: 0.13 USD per image - GENERATION / 768x1024 / low / default: 0.00 USD per image - GENERATION / 768x1024 / medium / default: 0.03 USD per image --- ### GPT Image 2.5 Flare - ID: gpt-image-2.5-flare - Publisher: OpenAI - Kind: image - Available: true OpenAI image generation and editing. Speed-oriented tier. [Markdown](/en/models/openai/gpt-image-2.5-flare-20260908.md) - Generation: true; edit: true; mask: false - Max reference images: 16 - Aspect ratios: 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9 - GENERATION / 1024x1024 / high / default: 0.05 USD per image - EDIT / 1024x1024 / high / default: 0.05 USD per image - GENERATION / 1024x1024 / low / default: 0.01 USD per image - EDIT / 1024x1024 / low / default: 0.01 USD per image - GENERATION / 1024x1024 / max / default: 0.21 USD per image - EDIT / 1024x1024 / max / default: 0.21 USD per image - EDIT / 1024x1024 / medium / default: 0.01 USD per image - GENERATION / 1024x1024 / medium / default: 0.01 USD per image - GENERATION / 1024x1024 / xhigh / default: 0.09 USD per image - EDIT / 1024x1024 / xhigh / default: 0.09 USD per image - EDIT / 1024x1536 / high / default: 0.04 USD per image - GENERATION / 1024x1536 / high / default: 0.04 USD per image - GENERATION / 1024x1536 / low / default: 0.00 USD per image - EDIT / 1024x1536 / low / default: 0.00 USD per image - EDIT / 1024x1536 / max / default: 0.17 USD per image - GENERATION / 1024x1536 / max / default: 0.17 USD per image - EDIT / 1024x1536 / medium / default: 0.01 USD per image - GENERATION / 1024x1536 / medium / default: 0.01 USD per image - GENERATION / 1024x1536 / xhigh / default: 0.07 USD per image - EDIT / 1024x1536 / xhigh / default: 0.07 USD per image - EDIT / 1536x1024 / high / default: 0.04 USD per image - GENERATION / 1536x1024 / high / default: 0.04 USD per image - GENERATION / 1536x1024 / low / default: 0.00 USD per image - EDIT / 1536x1024 / low / default: 0.00 USD per image - EDIT / 1536x1024 / max / default: 0.17 USD per image - GENERATION / 1536x1024 / max / default: 0.17 USD per image - EDIT / 1536x1024 / medium / default: 0.01 USD per image - GENERATION / 1536x1024 / medium / default: 0.01 USD per image - GENERATION / 1536x1024 / xhigh / default: 0.07 USD per image - EDIT / 1536x1024 / xhigh / default: 0.07 USD per image --- ### GPT Image 2.5 Sunburst - ID: gpt-image-2.5-sunburst - Publisher: OpenAI - Kind: image - Available: true OpenAI image generation and editing. Precision-oriented tier. [Markdown](/en/models/openai/gpt-image-2.5-sunburst-20260908.md) - Generation: true; edit: true; mask: false - Max reference images: 16 - Aspect ratios: 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9 - EDIT / 1024x1024 / high / default: 0.05 USD per image - GENERATION / 1024x1024 / high / default: 0.05 USD per image - GENERATION / 1024x1024 / low / default: 0.01 USD per image - EDIT / 1024x1024 / low / default: 0.01 USD per image - GENERATION / 1024x1024 / max / default: 0.21 USD per image - EDIT / 1024x1024 / max / default: 0.21 USD per image - EDIT / 1024x1024 / medium / default: 0.01 USD per image - GENERATION / 1024x1024 / medium / default: 0.01 USD per image - EDIT / 1024x1024 / xhigh / default: 0.09 USD per image - GENERATION / 1024x1024 / xhigh / default: 0.09 USD per image - GENERATION / 1024x1536 / high / default: 0.04 USD per image - EDIT / 1024x1536 / high / default: 0.04 USD per image - GENERATION / 1024x1536 / low / default: 0.00 USD per image - EDIT / 1024x1536 / low / default: 0.00 USD per image - EDIT / 1024x1536 / max / default: 0.17 USD per image - GENERATION / 1024x1536 / max / default: 0.17 USD per image - EDIT / 1024x1536 / medium / default: 0.01 USD per image - GENERATION / 1024x1536 / medium / default: 0.01 USD per image - GENERATION / 1024x1536 / xhigh / default: 0.07 USD per image - EDIT / 1024x1536 / xhigh / default: 0.07 USD per image - GENERATION / 1536x1024 / high / default: 0.04 USD per image - EDIT / 1536x1024 / high / default: 0.04 USD per image - EDIT / 1536x1024 / low / default: 0.00 USD per image - GENERATION / 1536x1024 / low / default: 0.00 USD per image - GENERATION / 1536x1024 / max / default: 0.17 USD per image - EDIT / 1536x1024 / max / default: 0.17 USD per image - EDIT / 1536x1024 / medium / default: 0.01 USD per image - GENERATION / 1536x1024 / medium / default: 0.01 USD per image - GENERATION / 1536x1024 / xhigh / default: 0.07 USD per image - EDIT / 1536x1024 / xhigh / default: 0.07 USD per image ## FAQ ### What is cicora.ai? cicora.ai is a multi-model AI workspace and compatible API for chat, text, images, video, coding tools, and teams. Start with the [overview](/en.md), [documentation](/en/docs.md), or [model catalog](/en/models.md). ### How is usage billed? Confirmed usage is charged in USD from the active workspace's prepaid balance. Use the live catalog for current model prices and the [usage guide](/en/docs/usage-costs.md) for settlement details. ### Which protocols and integrations are available? Documentation covers OpenAI-compatible Chat Completions and Responses, Anthropic Messages, image interfaces, Claude Code, OpenCode, and Codex CLI. Compatibility does not imply support for every upstream parameter. ### Which sources are authoritative and current? For model IDs, availability, capabilities, limits, and prices, use the [live catalog](/en/models.md). For API behavior, use the matching [documentation page](/en/docs.md). Never include API keys, private workspace data, or preview URLs in public documents.