---
title: "Link a channel to the strategy"
method: POST
path: "/api/v1/strategies/{strategyId}/channels"
tags: ["strategy-channels"]
---

# Link a channel to the strategy

`POST /api/v1/strategies/{strategyId}/channels`

## Request

- Base URL: `https://oms-api.tenant.krzlabs.io`
- URL: `https://oms-api.tenant.krzlabs.io/api/v1/strategies/{strategyId}/channels`
- Auth: one of:
  - HTTP basic
  - HTTP bearer
- TypeScript: <https://skmtc.dev/kruzer-corp/apis/oms-api/docs/api/v1/strategies/:strategyId/channels/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new strategy channel within the caller account and parent strategy. The parent Strategy and the referenced Channel must already exist in the same account.

## Path parameters

- `strategyId` string, uuid, required

## Request body

- StrategyChannelCreate
  - `price_list_id` string, uuid, nullable
  - `channel_code` string, required
  - `active` boolean
  - `inventory_allocation` InventoryAllocationCreate
    - `type` 'FIXED' | 'PERCENTAGE', required
    - `value` number, required
  - `delivery_promise` DeliveryPromiseCreate
    - `value` number, required
    - `unit` 'MINUTES' | 'HOURS' | 'DAYS', required
  - `metadata` object, nullable

## Response `201`

Strategy channel created.

- StrategyChannelCreateResponse
  - `metadata` object, nullable, required
  - `id` string, required
  - `strategy_id` string, required
  - `channel_code` string, required
  - `active` boolean, required
  - `inventory_allocation` object, required
    - `type` 'FIXED' | 'PERCENTAGE', required
    - `value` number, required
  - `price_list_id` string, nullable, required
  - `delivery_promise` object, required
    - `value` number, required
    - `unit` 'MINUTES' | 'HOURS' | 'DAYS', required
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `400`: Request payload, query string, or path parameter failed validation.
- `401`: Authentication is missing, malformed, expired, or refers to a session that is no longer active.
- `403`: The caller is authenticated but lacks the required permission for this action.
- `404`: One of the referenced resources (Strategy, Channel, PriceList) was not found in the caller account.
- `409`: A strategy channel with the same (strategy, channel) composite key already exists.
- `422`: The payload passed schema validation but breaks a domain invariant — typically an invalid inventory allocation value.
- `500`: Unexpected server error. The response body never leaks internal details.

## Changes

- **2026-07-07** `a3b4750a505f`: 2 breaking, 13 info
  - added the new required request property `channel_code`
  - the `price_list_id` request property type changed from `object` to `string`
  - added the new optional request property `active`
  - added the new optional request property `delivery_promise`
  - …11 more
- **2026-07-07** `84194c31ab85`: 9 breaking, 6 warning, 1 info
  - removed the required property `active` from the response with the `201` status
  - removed the required property `channel_code` from the response with the `201` status
  - removed the required property `created_at` from the response with the `201` status
  - removed the required property `delivery_promise` from the response with the `201` status
  - …12 more

[Operation history](https://skmtc.dev/kruzer-corp/apis/oms-api/changes/api/v1/strategies/:strategyId/channels/post.md)

---

[API](https://skmtc.dev/kruzer-corp/apis/oms-api.md) - [All operations](https://skmtc.dev/kruzer-corp/apis/oms-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kruzer-corp/apis/oms-api/revisions/38ef6e16a7a8?raw)
