<!-- source: https://modelux.ai/docs/api/management-routing -->

> Create and manage routing configs, versions, and test them.

# Routing Configs API

Routing configs define how requests are dispatched to providers. Every config
has a stable `@slug` your app calls instead of raw model names.

## List routing configs

```
GET /manage/v1/routing-configs
```

**Query parameters**

| Name | Type | Description |
|---|---|---|
| `project_id` | string | Filter to configs in one project |
| `cursor` | string | Pagination cursor |
| `limit` | integer | Max items per page |

## Get a routing config

```
GET /manage/v1/routing-configs/{config_id}
```

Returns the current active version. To fetch a specific version, use the
versions endpoint below.

## Create a routing config

```
POST /manage/v1/routing-configs
```

**Request body**

```json
{
  "project_id": "proj_01HXY...",
  "name": "production",
  "slug": "production",
  "strategy": "fallback",
  "config": {
    "attempts": [
      { "model": "claude-haiku-4-5", "timeout_ms": 2000 },
      { "model": "gpt-4o-mini", "timeout_ms": 3000 }
    ],
    "retry_on": ["429", "5xx", "timeout"]
  }
}
```

Valid strategies: `single`, `fallback`, `cost_optimized`, `latency_optimized`,
`ensemble`, `ab_test`, `cascade`, `custom_rules`.

## Update a routing config

```
PATCH /manage/v1/routing-configs/{config_id}
```

Any update creates a new version. The previous version stays queryable for
rollback.

## Versions

```
GET  /manage/v1/routing-configs/{config_id}/versions
GET  /manage/v1/routing-configs/{config_id}/versions/{version_id}
POST /manage/v1/routing-configs/{config_id}/versions/{version_id}/restore
```

`restore` promotes an old version back to the active version (creating a new
version that matches).

## Test a routing config

```
POST /manage/v1/routing-configs/{config_id}/test
```

**Request body**

```json
{
  "messages": [{ "role": "user", "content": "Hello" }],
  "dry_run": true
}
```

Returns the routing decision that would be made, without actually calling the
provider. With `dry_run: false`, runs the request end-to-end for verification.

## Delete a routing config

```
DELETE /manage/v1/routing-configs/{config_id}
```

Soft-delete. The slug becomes reusable immediately for new configs.

## MCP tools

| Tool | Maps to |
|---|---|
| `list_routing_configs` | `GET /manage/v1/routing-configs` |
| `get_routing_config` | `GET /manage/v1/routing-configs/{id}` |
| `create_routing_config` | `POST /manage/v1/routing-configs` |
| `update_routing_config` | `PATCH /manage/v1/routing-configs/{id}` |
| `delete_routing_config` | `DELETE /manage/v1/routing-configs/{id}` |
| `list_routing_config_versions` | `GET /manage/v1/routing-configs/{id}/versions` |
| `get_routing_config_version` | `GET /manage/v1/routing-configs/{id}/versions/{version}` |
| `restore_routing_config_version` | `POST /manage/v1/routing-configs/{id}/versions/{version}/restore` |
| `test_routing_config` | `POST /manage/v1/routing-configs/{id}/test` |

## See also

- [Routing (concept)](/docs/concepts/routing)
- [Fallback chain guide](/docs/guides/fallback-chain)
- [A/B testing guide](/docs/guides/ab-testing)
