# Proxy Discovery

**Page:** api/proxy-discovery

[Download Raw Markdown](./api/proxy-discovery.md)

---

{/* AUTO-GENERATED — Do not edit manually. Regenerate with: npm run docs:api:generate */}



## Proxy Discovery

Use these endpoints to inspect the proxy configuration attached to a container. You can enumerate defined group names, list every service referenced by a permission cell or hook rule, and fetch a merged debug view for a single service.

---

### `GET /api/v1/containers/{id}/proxy/groups`

Returns all defined group names with auth-rule counts.

### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `id` | path | string | Yes | Container ID |



```bash
curl -X GET "https://api.hoody.com/api/v1/containers/cnt_8f3a2b1c4d5e6f70/proxy/groups" \
  -H "Authorization: Bearer <token>"
```


```ts
const { data } = await client.api.proxyDiscovery.listContainerProxyGroups({
  id: "cnt_8f3a2b1c4d5e6f70",
});
```


```json
{
  "statusCode": 200,
  "message": "OK",
  "data": {
    "groups": [
      { "name": "admins", "auth_rule_count": 12 },
      { "name": "developers", "auth_rule_count": 7 },
      { "name": "viewers", "auth_rule_count": 3 }
    ],
    "file_version": 14,
    "etag": "9f2c1a4b3e8d7f60"
  }
}
```



---

### `GET /api/v1/containers/{id}/proxy/services`

Returns all service names referenced by any permission cell or hook rule.

### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `id` | path | string | Yes | Container ID |



```bash
curl -X GET "https://api.hoody.com/api/v1/containers/cnt_8f3a2b1c4d5e6f70/proxy/services" \
  -H "Authorization: Bearer <token>"
```


```ts
const { data } = await client.api.proxyDiscovery.listContainerProxyServices({
  id: "cnt_8f3a2b1c4d5e6f70",
});
```


```json
{
  "statusCode": 200,
  "message": "OK",
  "data": {
    "services": [
      "postgres-primary",
      "redis-cache",
      "object-storage",
      "metrics-exporter"
    ],
    "file_version": 14,
    "etag": "9f2c1a4b3e8d7f60"
  }
}
```



---

### `GET /api/v1/containers/{id}/proxy/services/{service}`

Debug view: `permissions_raw` (per-group access cells for this service) + `hooks` + `effective_default` + `is_reject_listed`. This endpoint is non-authoritative — use `/proxy/permissions/{group}` and `/proxy/hooks/{service}` for authoritative writes.

### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `id` | path | string | Yes | Container ID |
| `service` | path | string | Yes | Service name |



```bash
curl -X GET "https://api.hoody.com/api/v1/containers/cnt_8f3a2b1c4d5e6f70/proxy/services/postgres-primary" \
  -H "Authorization: Bearer <token>"
```


```ts
const { data } = await client.api.proxyDiscovery.getContainerProxyService({
  id: "cnt_8f3a2b1c4d5e6f70",
  service: "postgres-primary",
});
```


```json
{
  "statusCode": 200,
  "message": "OK",
  "data": {
    "service": "postgres-primary",
    "is_reject_listed": false,
    "permissions_raw": {
      "admins": { "read": true, "write": true, "delete": true },
      "developers": { "read": true, "write": true, "delete": false },
      "viewers": { "read": true, "write": false, "delete": false }
    },
    "hooks": [
      {
        "id": "hook_01HXYZ",
        "event": "before_write",
        "action": "audit_log"
      }
    ],
    "effective_default": "deny",
    "file_version": 14,
    "etag": "9f2c1a4b3e8d7f60"
  }
}
```




The `effective_default` field is always one of `"allow"` or `"deny"`, reflecting the merged default policy for the service after group overrides are applied.