Routing Policies
fallback/weighted/latency/auto + 오케스트레이터(cascade/parallel) 정책의 생성·조회·수정·삭제. 호출은 model:"orch/<slug>"(policy/<slug> 호환).
라우팅 정책 관리 엔드포인트는 대시보드 세션 토큰(로그인한 JWT)으로 인증합니다 — Authorization: Bearer <JWT>. 대시보드 관리용 API이며 SDK 호환 엔드포인트가 아닙니다. 정책의 동작 방식은 라우팅 정책 기능 문서를 참고하세요.
이 CRUD API는 항상 동작하지만,
orch/<slug>(policy/<slug>) 호출은 운영 게이트가 켜져 있어야 합니다 — 기존 4종은 routing.policies_enabled(기본 on),cascade·parallel은 routing.orchestrators_enabled(베타, 기본 off). 게이트가 꺼진 상태의 호출은 400을 반환합니다.목록 조회 · 생성#
GET/v1/routing-policies
POST/v1/routing-policies
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| slug | string | 필수 | 호출 식별자. 패턴 ^[a-z0-9][a-z0-9-]{0,62}$. "policy/<slug>" 형태로 사용됩니다. 사용자별 고유(중복 시 409). |
| display_name | string | 필수 | 표시 이름. 1~100자. |
| policy_type | string | 필수 | fallback · weighted · latency · auto · cascade · parallel 중 하나. auto는 등록한 풀 안에서 의도(분야)별 벤치마크 최상위 모델을 자동 선택합니다(selected_smart). cascade·parallel은 오케스트레이터(베타) — 자세한 동작은 기능 문서 참고. |
| entries | array | 필수 | 모델 엔트리 1~10개. 필드는 아래 표 참고. cascade에서는 저가→고가 티어 순서, parallel에서는 병렬 워커 풀입니다. |
| config | object | 선택 | 오케스트레이션 파라미터(JSON DSL). cascade(hard_categories·judge_model·response_check), parallel(deep_categories·synthesis), 공통 routing_prefs·limits. 구조는 기능 문서 참고. |
| org_id | string | 선택 | 조직 공유 — 본인이 멤버인 조직의 UUID. 설정 시 같은 조직 멤버가 호출 가능하고 수정·삭제는 작성자와 조직 owner/admin. 미지정(또는 빈 문자열)이면 개인용. |
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| model | string | 필수 | 라우팅할 모델 ID. 실제 활성 모델이어야 합니다(1~100자). |
| weight | integer | 선택 | 가중치 1~10000. weighted 타입에서만 의미가 있습니다. |
| retries | integer | 선택 | 같은 엔트리 반복 횟수 0~3(기본 0). fallback·cascade 타입에서만 의미가 있습니다. |
엔트리에는 단가가 있는 실제 활성 leaf 모델만 허용됩니다. 다른 정책(policy/…), 현재 라우팅 부모(benchmark_smart·analytics_smart·perfect), 단종 부모(pleum-smart·pleum-perfect)는 400으로 거부되며, 존재하지 않거나 비활성인 모델도 400입니다.
POST는 성공 시 201을 반환합니다. 같은 슬러그가 이미 있으면 409. GET /v1/routing-policies는 {items: [...], total: n}을 반환합니다(최신 생성순).
create policy
curl https://apirouter.pleum.ai/v1/routing-policies \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{
"slug": "prod-chat",
"display_name": "Prod Chat",
"policy_type": "fallback",
"entries": [
{"model": "claude-sonnet-4-6", "retries": 1},
{"model": "gpt-4o", "retries": 0},
{"model": "gpt-4o-mini", "retries": 0}
]
}'response
{
"id": "1f0a4c2e-...",
"slug": "prod-chat",
"display_name": "Prod Chat",
"policy_type": "fallback",
"entries": [
{"model": "claude-sonnet-4-6", "retries": 1},
{"model": "gpt-4o", "retries": 0},
{"model": "gpt-4o-mini", "retries": 0}
],
"is_active": true,
"created_at": "2026-07-01T09:00:00Z",
"updated_at": "2026-07-01T09:00:00Z"
}수정 · 삭제#
PATCH/v1/routing-policies/{policy_id}
DELETE/v1/routing-policies/{policy_id}
PATCH는 보낸 필드만 수정합니다(display_name·policy_type·entries·is_active). slug는 변경할 수 없습니다. 내 소유가 아니거나 없는 정책은 404. DELETE는 {"ok": true}를 반환합니다. is_active: false로 끄면 삭제 없이 호출만 막을 수 있습니다.
deactivate policy
curl -X PATCH https://apirouter.pleum.ai/v1/routing-policies/1f0a4c2e-... \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{"is_active": false}'