---
title: "Dry-run a routing decision"
method: POST
path: "/v1/ai/routes:explain"
tags: ["AI Policy"]
---

# Dry-run a routing decision

`POST /v1/ai/routes:explain`

## Request

- Base URL: `https://api.talonic.com`
- URL: `https://api.talonic.com/v1/ai/routes:explain`
- Auth: HTTP bearer

Answer "what would this operation route to right now" without spending
a model call. The question runs through the same resolver that serves
live traffic, so the answer is evidence rather than a forecast: the
ordered candidate chain that would serve the operation, and every
candidate the policy discarded with the constraint that discarded it.

When the policy permits no route, the response is still 201 with
`routable: false` and a plain-language explanation. A policy that
permits no route is a valid configuration whose consequence is that
the live call fails closed rather than reaching a provider the policy
forbids.

`model` pins a specific logical model instead of letting the
operation's class choose; `class` pins a specific model class. Both
are optional.

## Request body

- object
  - `operation_type` string, required: The operation to route, for example extraction or classification.
  - `model` string: Optional. Pin a specific logical model.
  - `class` string: Optional. Pin a specific model class.

## Response `201`

The routing plan, or a fail-closed explanation when nothing is routable.

## Other responses

- `400`: The request body is invalid or the key is not workspace-scoped.
- `401`: Missing or invalid API key.
- `429`: Daily rate limit exceeded.

---

[API](https://skmtc.dev/talonic/apis/talonic-api.md) · [All operations](https://skmtc.dev/talonic/apis/talonic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/talonic/apis/talonic-api/revisions/678fe5f8c9c3?raw)
