> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Release 4.10

> Release 4.10 unifies API key management, separates the AI Gateway with a rebuilt Model Garden, introduces a unified Review screen, ships Evaluator Studio, and adds Agent Schedules.

<Update label="AI Gateway and Model Garden revamp" description="v4.10.0">
  The **AI Gateway** is now its own dedicated area of the product, separate from the studio, and the **Model Garden** has been rebuilt from the ground up. Finding, comparing, and enabling models is faster and clearer.

  <img src="https://mintcdn.com/orqai/et_-hcHypJZayN7-/images/model_garden_4_10_changelog.png?fit=max&auto=format&n=et_-hcHypJZayN7-&q=85&s=80ca13ec1b87a9ea3e1d4fd0126234d7" alt="Model Garden listing models in a table with columns for status, price, capabilities, token limits, owner, and location, next to a filter sidebar" width="1994" height="1254" data-path="images/model_garden_4_10_changelog.png" />

  * **[Dedicated AI Gateway](/docs/ai-gateway/get-started/introduction)**: Workspaces on the router tier now land directly in the **AI Gateway**, with observability and routing pages available from its sidebar.
  * **Rebuilt [Model Overview](https://docs.orq.ai/docs/router/using-the-router)**: A rebuilt layout with repositioned filters for model owner, provider, location, features, and context length. Sort on the **release date** column to surface the newest models first.
  * **[BYOK](https://docs.orq.ai/docs/router/providers-overview) tab**: The **Providers** tab is now the **BYOK** tab, where bring-your-own-key credentials are managed, with a filter to show only the models that have a custom key added.

  <Note>
    Browse and enable models from the [AI Gateway overview](/docs/ai-gateway/get-started/introduction).
  </Note>
</Update>

<Update label="Unified API key management" description="v4.10.0">
  API keys used to come in three separate flavors, each with its own rules: workspace keys, project keys, and AI Router keys. Release 4.10 is the first step to bring them together under one model, so every key behaves the same way and is easier to reason about.

  <img src="https://mintcdn.com/orqai/1v8h1yptZZCiNu_O/images/unified_api_4_10_changelog.png?fit=max&auto=format&n=1v8h1yptZZCiNu_O&q=85&s=98233c4f50ba3344e735c6eb1082535a" alt="Create new secret key panel with Restricted permissions selected, showing per-resource read, write, and no-access toggles for areas such as Agents, Deployments, and Evaluators, over the API Keys list" width="1994" height="1254" data-path="images/unified_api_4_10_changelog.png" />

  * **One permission model**: Every new key now uses the same access levels. Pick **All** for full access, **Read-only** to view without changing anything, or **Restricted** to scope a key to specific areas.
  * **[Restricted keys](https://docs.orq.ai/docs/ai-studio/organization/api-keys#permissions)**: Restricted keys give granular control. Decide, per endpoint and capability, whether a key has **read**, **write**, or no access at all, so a key can do exactly what it is meant to and nothing more.
  * **More secure tokens**: New keys are issued in a new token format, and the full key is shown only once at creation. **Existing keys continue to function** with no action needed.
  * **[Service Account Keys](https://docs.orq.ai/docs/ai-studio/organization/api-keys#service-account-keys)**: Only admins can create Service Account Keys, which are not tied to an individual user. Use these for production systems, since a standard user key is automatically disabled when that user no longer exists in the workspace.
  * **Project-scoped keys**: Every new key is scoped to a single project. Workspace-wide keys are no longer created.
    * When working across projects with the **[Orq.ai MCP](https://docs.orq.ai/docs/ai-studio/get-started/orq-mcp)**, switch the API key to match the project being worked on.

  <Note>
    Learn how to create and scope keys in the [API Keys documentation](https://docs.orq.ai/docs/ai-studio/organization/api-keys).
  </Note>
</Update>

<Update label="Reporting API" description="v4.10.0">
  The new **Reporting API** gives programmatic access to AI usage, cost, latency, token, **Evaluator**, and guardrail analytics, broken down by any dimension. A single `POST` returns time-series data sliced by model, provider, project, identity, and more, ready to power cost dashboards, per-customer billing breakdowns, latency monitoring, and **Evaluator** quality reports without exporting from the UI.

  * **One endpoint**: Query every metric from `POST https://api.orq.ai/v2/reporting`, scoped to the workspace and project derived from the API key.
  * **Group by any dimension**: Break results down by model, provider, project, identity, API key, credential type, or product entities such as **Agent**, **Tool**, and **Deployment**.
  * **Usage, quality, and guardrails**: Track cost and token usage, monitor p50, p95, and p99 latency, quantify **Evaluator** pass rates and scores, and measure guardrail block rates.
  * **Consistent, ready-to-use results**: Every query returns the numbers in the same simple structure, grouped by time period and the categories requested. This makes it straightforward to feed the data into dashboards, billing reports, or spreadsheets without extra cleanup.

  <CodeGroup>
    ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
    curl -X POST "https://api.orq.ai/v2/reporting" \
      -H "Authorization: Bearer $ORQ_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "metric": "genai.usage",
        "from": "2026-05-01T00:00:00Z",
        "to":   "2026-05-15T00:00:00Z",
        "grain": "day",
        "group_by": ["model"],
        "include_totals": true
      }'
    ```

    ```typescript TypeScript (orq SDK) theme={"theme":{"light":"github-light","dark":"github-dark"}}
    import { Orq } from "@orq-ai/node";

    const orq = new Orq({ apiKey: process.env.ORQ_API_KEY! });

    const report = await orq.reporting.query({
      metric: "genai.usage",
      from: new Date("2026-05-01T00:00:00Z"),
      to: new Date("2026-05-15T00:00:00Z"),
      grain: "day",
      groupBy: ["model"],
      includeTotals: true,
    });

    for (const row of report.data) {
      console.log(
        row.dimensions.model,
        row.metrics.total_cost,
        row.metrics.request_count,
      );
    }
    ```

    ```python Python (orq SDK) theme={"theme":{"light":"github-light","dark":"github-dark"}}
    import os

    from orq_ai_sdk import Orq

    orq = Orq(api_key=os.environ.get("ORQ_API_KEY"))

    report = orq.reporting.query(
        metric="genai.usage",
        from_="2026-05-01T00:00:00Z",
        to="2026-05-15T00:00:00Z",
        grain="day",
        group_by=["model"],
        include_totals=True,
    )

    for row in report.data:
        print(
            row.dimensions["model"],
            row.metrics["total_cost"],
            row.metrics["request_count"],
        )
    ```
  </CodeGroup>

  <Note>
    See the full metric catalog, dimensions, schema, and [examples by use case](https://docs.orq.ai/docs/reporting/api#examples-by-use-case) in the [Reporting API guide](https://docs.orq.ai/docs/reporting/api).
  </Note>
</Update>

<Update label="Agent Schedules" description="v4.10.0">
  **Agents** can now run on a recurring schedule, with no need to keep a connection open or trigger them by hand. A scheduled run is identical to a normal agent call: same execution, tracing, and billing, just fired by the scheduler.

  <img src="https://mintcdn.com/orqai/rD_VWKXwlH5Tkpe7/images/agent_schedules_4_10.png?fit=max&auto=format&n=rD_VWKXwlH5Tkpe7&q=85&s=fe1573252a7a636eedb2df0ad2a8eb3b" alt="Agent Schedules tab listing recurring schedules next to an Edit schedule panel with frequency, time, input, variables, and metadata fields" width="2991" height="1881" data-path="images/agent_schedules_4_10.png" />

  * **Recurring runs**: Run an agent hourly, daily, or weekly, for example a morning briefing or a daily ticket summary.
  * **Per-run payload**: Configure each run's input, template variables, and **metadata** that is attached to every response the schedule generates.
  * **Full control**: Create, list, update, pause, resume, and delete schedules, or trigger a run on demand.
  * **Fully observable**: Each scheduled run appears in **Traces** like any other agent run.

  Create a schedule with a `POST` to the target agent's `schedules` endpoint, replacing `{YOUR_AGENT_KEY}` with the agent's key:

  ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl -X POST https://api.orq.ai/v3/agents/{YOUR_AGENT_KEY}/schedules \
    -H "Authorization: Bearer $ORQ_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "type": "cron",
      "expression": "0 0 9 * * *",
      "payload": {
        "input": "Summarize new tickets from the last 24 hours"
      }
    }'
  ```

  <Note>
    See cadence rules and the full API in the [Agent run guide](/docs/agents/run).
  </Note>
</Update>

<Update label="Unified Review screen" description="v4.10.0">
  Reviewing model output now happens on one shared Review screen, available across **Experiments** and **Annotation Queues**. The same scoring and annotation tools work the same way wherever review happens.

  <img src="https://mintcdn.com/orqai/1v8h1yptZZCiNu_O/images/unified_review_4_10_changelog.png?fit=max&auto=format&n=1v8h1yptZZCiNu_O&q=85&s=dc9c3019a11cf3ff2aecf8c33b86a73b" alt="Unified Review screen on an experiment response, with inputs and expected output on the left, the model conversation in the center, and a human review panel with evaluator results on the right" width="1994" height="1254" data-path="images/unified_review_4_10_changelog.png" />

  * **[Review in Annotation Queues](https://docs.orq.ai/docs/observability/annotations#use-annotation-queues)**: Annotations submitted in a queue are written back to the underlying **trace**, where they can be analyzed through the **Orq.ai MCP** and filtered on in the UI.
  * **[Review in Experiments](https://docs.orq.ai/docs/observability/annotations#annotations-in-experiments)**: The same screen now renders multi-turn, tool-calling runs clearly, showing each tool call and its result so reasoning across steps is easy to follow.

  <Note>
    See how reviews and queues fit together in the [Annotations guide](https://docs.orq.ai/docs/observability/annotations#use-annotation-queues).
  </Note>
</Update>

<Update label="Evaluator Studio" description="v4.10.0">
  Building **Evaluators** has been redesigned into Evaluator Studio: a cleaner workspace for writing an evaluator, choosing its judge model, and testing it before it goes live.

  <img src="https://mintcdn.com/orqai/kdU_l1awfyvKVIn9/images/evaluator_studio_4_10_changelog.png?fit=max&auto=format&n=kdU_l1awfyvKVIn9&q=85&s=b4389cbaf1ba1f7eb56768a0cefafd70" alt="Evaluator Studio with the evaluator settings and prompt in the center and a Playground testing panel on the right offering Editor and Dataset tabs with a Run test action" width="2991" height="1881" data-path="images/evaluator_studio_4_10_changelog.png" />

  * **[Editor and Dataset testing for LLM-as-a-judge](https://docs.orq.ai/docs/evaluators/build#testing)**: Test an LLM-as-a-judge evaluator by filling in values by hand in the **Editor** tab, or run it against rows from a real dataset in the **Dataset** tab.
  * **HTTP and JSON evaluators replaced by Python**: HTTP and JSON evaluators can no longer be created. Existing ones keep working, but new use cases move to **[Python Evaluators](https://docs.orq.ai/docs/evaluators/build)**, which now include the `requests` library for HTTP calls and `pydantic` for JSON schema validation.

  ```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  def evaluate(log):
      output_size = len(log["output"])
      reference_size = len(log["reference"])
      return abs(output_size - reference_size)
  ```

  <Note>
    Start building in the [Create Evaluators guide](https://docs.orq.ai/docs/evaluators/build).
  </Note>
</Update>

<Update label="New features" description="v4.10.0">
  * **Broader framework tracing**: Tracing across popular agent frameworks is more accurate and complete this release. [Google ADK](https://docs.orq.ai/docs/proxy/frameworks/google-ai) gains broader span coverage, corrected parent-child relationships, and richer step attributes, and coverage improved for [LangGraph](https://docs.orq.ai/docs/proxy/frameworks/langgraph), [Vercel AI SDK](https://docs.orq.ai/docs/proxy/frameworks/vercel-ai), [Pydantic AI](https://docs.orq.ai/docs/proxy/frameworks/pydantic-ai), [Mastra](https://docs.orq.ai/docs/proxy/frameworks/mastra), [Agno](https://docs.orq.ai/docs/proxy/frameworks/agno), and the [Claude](https://docs.orq.ai/docs/proxy/frameworks/claude-agent-sdk) and Anthropic SDKs.
  * **invoke\_model MCP tool**: The [`invoke_model`](https://docs.orq.ai/docs/ai-studio/get-started/orq-mcp) tool now exposes `reasoning` and `include` options, so MCP clients can use reasoning-capable models and request extra response details.
</Update>

<Update label="Improvements" description="v4.10.0">
  * **Refreshed pages**: Several pages moved to the new design system for a more consistent look. In the **AI Gateway**, this covers Policies, Routing Rules, Guardrails, the home dashboard, and Recents. In the Studio, **Identities** is the first page refreshed, with the remaining pages to follow in a future release.
  * **Reliable JSON output for Claude**: JSON schema is now enforced for a set of Claude models on Bedrock and Vertex that previously did not honor it, so structured output stays consistent across providers.
</Update>

<Update label="Bug fixes" description="v4.10.0">
  * **Reasoning effort on scheduled and API-created Agents**: Reasoning effort set on **Agents** created through the Responses API was dropped when the agent ran. The setting is now kept end to end.
  * **Evaluator result links in Experiments**: Opening a trace from an evaluator result row in an **Experiment** no longer hangs.
  * **Images in Experiment annotations**: Image attachments in **Experiment** row annotations now display correctly instead of showing `[object Object]`.
  * **[Knowledge](https://docs.orq.ai/docs/knowledge/overview) Chunks API**: Four fixes shipped together. Bulk delete now reports the real deleted count and lists any failures, list pagination reports the correct next-page state, chunks that are not yet indexed are no longer dropped from list results, and enabling or disabling a chunk no longer errors when it has no search index entry.
  * **Empty chunk text rejected**: The Knowledge Chunks API now rejects empty text, preventing zero-length chunks from entering the index.
  * **Dataset ID validation**: Dataset paths now reject malformed IDs instead of silently routing the request somewhere unexpected.
  * **Identities page loading**: The **Identities** page now loads reliably.
  * **PDF attachments to Claude**: PDFs sent to Claude models are now passed through correctly instead of being silently dropped on some requests.
  * **Project-scoped key isolation**: Project-scoped API keys can no longer read entities from other projects.
</Update>

<Update label="New models" description="v4.10.0">
  New additions to the **Model Garden** across **Alibaba**, **Anthropic**, **AWS Bedrock**, **Google Vertex**, **Google AI**, **Minimax**, **Tensorix**, and **Together AI**. Browse details on the [Supported Models](https://docs.orq.ai/docs/proxy/supported-models) page.

  | Provider          | Models                                                                                                              |
  | ----------------- | ------------------------------------------------------------------------------------------------------------------- |
  | **Alibaba**       | `alibaba/kimi-k2.6`                                                                                                 |
  | **Anthropic**     | `anthropic/claude-opus-4-8`                                                                                         |
  | **AWS Bedrock**   | `aws/eu.anthropic.claude-opus-4-8` (EU), `aws/global.anthropic.claude-opus-4-8`, `aws/us.anthropic.claude-opus-4-8` |
  | **Google Vertex** | `google/claude-opus-4-8` (EU), `google/gemini-3.5-flash`                                                            |
  | **Google AI**     | `google-ai/gemini-3.5-flash`                                                                                        |
  | **Minimax**       | `minimax/MiniMax-M3`                                                                                                |
  | **Tensorix**      | `tensorix/moonshotai/Kimi-K2.6` (EU)                                                                                |
  | **Together AI**   | `togetherai/moonshotai/Kimi-K2.6`                                                                                   |

  <Note>
    On **AWS Bedrock**, **Claude Opus 4.8** ships as EU, US, and global region variants, so inference can stay in the EU region for workloads that require it.
  </Note>
</Update>
