# Show which processor connection serves each brand

> The processor_connections.routing.get operation: GET /api/v1/processor_routing in the REST API and the processor_connections_routing_get tool in the MCP server.

Lists the legal entity's brands with their processor routing in the request's mode (spec §15.4): the primary
and the secondary connection, and the connection that takes the brand's new checkouts now, with why
(`servingReason`): its primary; its secondary while the primary is degraded or disconnected; a degraded
connection when nothing better is available; or, when the brand names no connection of this mode, the entity's
only active one. Sessions that already started and subscriptions keep the connection they use.

## At a glance

- **REST:** `GET /api/v1/processor_routing`
- **MCP tool:** `processor_connections_routing_get`
- **Operation ID:** `processor_connections.routing.get`
- **Scope:** Legal entity
- **Permission:** `processors:read`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `processors:read` scope
- **Since:** M13

## Request

### Query parameters

This operation takes no query parameters.

## Response

`200 OK` with a JSON object:

| Field                  | Type                                                                                               | Description |
| ---------------------- | -------------------------------------------------------------------------------------------------- | ----------- |
| `object`               | `"list"`                                                                                           |             |
| `data`                 | array of object                                                                                    |             |
| `data[].object`        | `"processor_routing"`                                                                              |             |
| `data[].brandId`       | `brd_…` ID                                                                                         |             |
| `data[].brandName`     | string                                                                                             |             |
| `data[].livemode`      | boolean                                                                                            |             |
| `data[].primary`       | object or null                                                                                     |             |
| `data[].secondary`     | object or null                                                                                     |             |
| `data[].serving`       | object or null                                                                                     |             |
| `data[].servingReason` | one of `primary`, `secondary`, `degraded_primary`, `degraded_secondary`, `only_connection` or null |             |

## Examples

### A brand failed over to its secondary

```http
GET /api/v1/processor_routing
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "object": "list",
  "data": [
    {
      "object": "processor_routing",
      "brandId": "brd_01m4ttwd3veh9apbewxhfbgr1a",
      "brandName": "Acme",
      "livemode": false,
      "primary": {
        "id": "pcon_01m4vyt4mxe0s9zzk90373z6p6",
        "label": "Stripe",
        "processor": "stripe",
        "status": "degraded",
        "statusReason": "Marked degraded automatically after 5 failed requests in a row to the processor (last: api_error)."
      },
      "secondary": {
        "id": "pcon_01m4vyt4mxe0s9zzk90373z6p9",
        "label": "Mollie",
        "processor": "mollie",
        "status": "active",
        "statusReason": null
      },
      "serving": {
        "id": "pcon_01m4vyt4mxe0s9zzk90373z6p9",
        "label": "Mollie",
        "processor": "mollie",
        "status": "active",
        "statusReason": null
      },
      "servingReason": "secondary"
    }
  ]
}
```

## Errors

| Code                                                                                   | HTTP status | When                                      | What to do                                                                                                                                         |
| -------------------------------------------------------------------------------------- | ----------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`scope_required`](https://ownrecord.io/docs/reference/errors.md#scope_required)       | 400         | The request names no legal entity.        | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (`details.required_scope`). |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied) | 403         | You can't see processor connections here. | Ask an organization owner or admin for a role or scope that allows this action.                                                                    |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed), [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
