> ## Documentation Index
> Fetch the complete documentation index at: https://docs.poixe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Channel

```bash curl theme={"theme":{"light":"min-light","dark":"min-dark"}}
curl https://sys.poixe.com/api/channels \
  -X POST \
  -H "Authorization: Bearer $POIXE_SYSTEM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "openai_chatgpt",
    "keys": ["enc:v2:k1:ABC...", "enc:v2:k1:DEF..."],
    "price": 0.5,
    "comment": "batch jan"
  }'
```

```json response theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  "task_id": "sys-1731337200000000000-a3b9c2d1",
  "message": "2 key(s) submitted, check status via /api/channel-tasks/sys-...",
  "timestamp": 1731337200
}
```

POST
`https://sys.poixe.com/api/channels`

Asynchronously create one or more channels. Returns a task ID immediately — poll [Task Status](https://docs.poixe.com/en/api-reference/system-api/channel/task.md) for the result.

The `keys` field must contain pre-encrypted ciphertext in `enc:v2:...` format. **Plaintext API Keys are not accepted.** Use the [encryption tools](https://docs.poixe.com/en/docs/vendor/key-security.md#encryption-tools--examples) to encrypt locally first.

## Request Body

**type** `string` *required*

Channel type slug, chosen from the `type` field returned by [Pricing Options](https://docs.poixe.com/en/api-reference/system-api/channel/pricing-options.md).

**All channel types**

| slug | Display name |
| - | - |
| `openai_chatgpt` | OpenAI ChatGPT |
| `azure_chatgpt` | Azure ChatGPT |
| `anthropic_claude` | Anthropic Claude |
| `azure_claude` | Azure Claude |
| `aws_bedrock_claude` | AWS Bedrock Claude |
| `aws_platform_claude` | Claude Platform on AWS |
| `google_aistudio_gemini` | Google AI Studio Gemini |
| `google_vertex_gemini` | Google Vertex Gemini |
| `deepseek_deepseek` | DeepSeek DeepSeek |
| `xai_grok` | xAI Grok |
| `volcengine_deepseek` | Volcengine DeepSeek |
| `volcengine_doubao` | Volcengine Doubao |
| `aliyun_deepseek` | Aliyun DeepSeek |
| `aliyun_qwen` | Aliyun Qwen |
| `aliyun_kimi` | Aliyun Kimi |
| `siliconflow_deepseek` | SiliconFlow DeepSeek |
| `siliconflow_qwen` | SiliconFlow Qwen |
| `siliconflow_kimi` | SiliconFlow Kimi |
| `moonshot_kimi` | Moonshot Kimi |
| `chutes_deepseek` | Chutes DeepSeek |
| `chutes_qwen` | Chutes Qwen |
| `chutes_kimi` | Chutes Kimi |
| `chutes_chatgpt` | Chutes ChatGPT |
| `cerebras_chatgpt` | Cerebras ChatGPT |
| `groq_chatgpt` | Groq ChatGPT |
| `fireworks_chatgpt` | Fireworks ChatGPT |
| `novita_chatgpt` | Novita ChatGPT |
| `together_chatgpt` | Together ChatGPT |
| `nebius_chatgpt` | Nebius ChatGPT |
| `openrouter_chatgpt` | OpenRouter ChatGPT |
| `openrouter_claude` | OpenRouter Claude |
| `openrouter_gemini` | OpenRouter Gemini |

**keys** `array` *required*

List of pre-encrypted API Keys, each an `enc:v2:...` ciphertext string, 1–100 items

**price** `number` *required*

Price multiplier — must be a valid value from the `prices` list returned by `/api/channels/pricing-options`

**comment** `string`

Optional label stored with every channel in this batch

**base\_url** `string`

Required for Azure channel types. Full endpoint URL, must end with `.azure.com`. All keys in a single request must share the same `base_url` — submit separate requests for keys on different Azure endpoints

**aws\_region** `string`

AWS types only. Defaults to `eu-central-1`. Valid values: `eu-central-1` · `eu-west-1` · `eu-west-2` · `us-east-1` · `us-east-2` · `us-west-2`

## Key Format by Type

| Type | Key content |
| - | - |
| Most types | Standard API key string |
| `aws_platform_claude` | `"workspace_id api_key"` (space-separated, encrypted as one string) |
| `google_vertex_gemini` | SA mode: full service account JSON; API key mode: `AIza...` string |

## Response Fields

**task\_id** `string`

Task ID, used to poll [Task Status](https://docs.poixe.com/en/api-reference/system-api/channel/task.md)

**message** `string`

Informational message

**timestamp** `integer`

Response timestamp (Unix seconds)

## Errors

| Condition | HTTP | type |
| - | - | - |
| Invalid type slug | 400 | `invalid_request_error` |
| Key not an `enc:v2:` envelope | 400 | `invalid_request_error` |
| Azure: missing or invalid `base_url` | 400 | `invalid_request_error` |
| AWS: invalid `aws_region` | 400 | `invalid_request_error` |
| Duplicate key detected by egress | 400 | `invalid_request_error` |
| Channel count limit exceeded | 429 | `rate_limit_error` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.