# Register a bring-your-own provider

POST /v1/byo-providers: Register a bring-your-own provider

```http
POST /v1/byo-providers
```

|  |  |
|---|---|
| Operation id | `createByoProvider` |
| Key scope | `admin`: admin keys only |
| Section | [BYO providers](https://docs.kaab.ist/reference/api#byo-providers) |

## Request body

| Field | Type | Required | Description |
|---|---|---|---|
| `kind` | `"proxy"` | yes |  |
| `name` | string | yes | min length 1 · max length 64 |
| `config` | object | yes |  |
| `config.type` | `"static"`, `"list"`, `"gateway"` | yes |  |
| `config.vendor` | `"brightdata"`, `"oxylabs"`, `"decodo"`, `"iproyal"`, `"webshare"` |  |  |
| `config.url` | string |  | min length 1 · max length 2048 · pattern `^(https?\|socks5h?):\/\/[^\s]+$` |
| `config.urls` | string[] |  | min items 1 · max items 1000 |
| `config.api_key` | string |  | min length 1 · max length 512 |
| `config.pool` | `"datacenter"`, `"residential"`, `"mobile"` |  | default `"datacenter"` |
| `config.country` | string |  | pattern `^[A-Z]{2}$` |
| `config.base_url` | string (uri) |  |  |
| `config.model` | string | yes | min length 1 · max length 128 |

## Example request

```bash
curl -X POST "https://api.kaab.ist/v1/byo-providers" \
  -H "Authorization: Bearer $KAAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"proxy","name":"my-bright-data","config":{"type":"gateway","url":"http://user:pass@gw.brightdata.test:22225","pool":"residential","country":"DE"}}'
```

## Responses

### 201

Provider

[ByoProvider](https://docs.kaab.ist/reference/api/schemas/byo-provider)

```json
{
  "id": "byo_01j9zqk3q7m4n5p6r7s8t9v0wx",
  "object": "byo_provider",
  "kind": "proxy",
  "name": "my-bright-data",
  "status": "healthy",
  "last_health_at": "2026-09-18T10:00:00Z",
  "config_public": {
    "vendor": "brightdata",
    "pool": "residential"
  },
  "created_at": "2026-09-18T10:00:00Z"
}
```

## Errors

Every error answers with the [error envelope](https://docs.kaab.ist/reference/api/schemas/error-response); its `code` is one of the [error codes](https://docs.kaab.ist/reference/codes#errors).

| Status | When |
|---|---|
| 400 | `request_invalid`: request validation failed |
| 401 | Missing or invalid API key |
| 402 | `insufficient_credits`: top up to continue |
| 403 | The key's scope does not cover this operation |
| 409 | Conflicting state (see `error.code`) |
| 422 | Semantically invalid request (see `error.code`) |
| 429 | Rate limited; see `Retry-After` |
| 500 | `internal`: unexpected server error |
