# List recognised clients

Source: https://immiscible.fly.dev/docs/api/get-v1-clients

`GET /v1/clients`

The clients Immiscible recognises from their User-Agent (Claude Code, Cursor, Cline and others), with each one's default task class.

## Authentication

Public. No credential. Public routes are rate limited per address.

## Request

curl:

```bash
curl "https://immiscible.fly.dev/v1/clients"
```

Node:

```ts
const res = await fetch('https://immiscible.fly.dev/v1/clients', {
});
const data = await res.json();
console.log(res.status, data);
```

Python:

```python
import requests

res = requests.get(
    "https://immiscible.fly.dev/v1/clients",
)
print(res.status_code, res.json())
```

## Response

```json
{
  "coverage": {
    "total": 14,
    "inline": 11,
    "hybrid": 1,
    "ingest": 2,
    "statement": "11 of 14 supported clients can be governed in path; 1 partially; 2 are hosted services where Immiscible reconciles usage but cannot enforce before the spend."
  },
  "data": [
    {
      "id": "claude-code",
      "name": "Claude Code",
      "vendor": "Anthropic",
      "category": "coding agent",
      "mode": "inline",
      "protocol": "anthropic",
      "endpoint": "/anthropic/v1/messages",
      "defaultTaskClass": "code.feature",
      "sessionConcept": "session",
      "outcomeSignal": "commit or merged PR in the session working tree",
      "config": [
        "export ANTHROPIC_BASE_URL=https://immiscible.internal/anthropic"
      ],
      "notes": "Long sessions, heavy caching. Cache-read tokens are reported separately by the Messages API and Immiscible bills them at the cache rate, so the numbers reconcil",
      "capabilities": {
        "id": "inline",
        "label": "In path",
        "routing": true,
        "preflightEnforcement": true,
        "evidence": "full Art. 12 record per inference"
      }
    }
  ]
}
```
