openapi: 3.2.0
info:
title: Chili Piper Distro API
version: '1.0'
description: 'Operations tagged distro across 2 of this provider''s published API definitions: chili-piper-distro-debugger-openapi.yaml, chili-piper-distro-router-configuration-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
security:
- apiKeyAuth: []
tags:
- name: distro
paths:
/v1/org/distro/logs:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- distro
summary: List distro logs
description: "[operation: distro-logs]\n\n\n\nREAD-ONLY\n\n\n\nReturns paginated distro logs (record-level audit trail of router flow runs) for a workspace, with optional filtering.\n\n- workspaceId (req): workspace to query logs for; use distro-list-routers to find workspaceId\n\n- page (opt, default 0), pageSize (opt, default 10): pagination\n\n- body (req; send `{}` for no filtering): filter with optional fields:\n\n - userIds (opt): filter by assignee user IDs\n\n - status (opt): flow lifecycle outcome; one of: \"NotTriggered\" | \"NotMatchedEntryRule\" | \"DelayInProgress\" | \"WorkingHours\" | \"SlaInProgress\" | \"NotRouted\" | \"Finished\" | \"SlaFinished\" | \"Error\"\n\n - distributionMethod (opt): how the user was picked (a distribution-level decision, not a distro-level state); one of: \"FromOwnershipArs\" | \"RoundRobinEvaluationSuccess\" | \"EvaluatedFromRoundRobinArs\" | \"FallbackTeam\" | \"FallbackUser\" | \"DuplicateMatchOwner\" | \"NoDistribution\" | \"NoUserAvailable\" | \"ClientError\"\n\n - search (opt): text search\n\n - from (opt): start time (ISO8601 with zone, e.g. \"2024-01-01T00:00:00Z\")\n\n - to (opt): end time (ISO8601 with zone)\n\n→\n\n {results: [{log: {id, workspaceId, routerId, status, assignments: [{userId, distributionId?, method}], trigger?: {entityId, entityType, eventType}, createdAt, updatedAt}, router: {id, name, workspaceId}}], total, page, pageSize}\n\nsee: distro-list-routers (find routers and their workspaceId)"
operationId: distroLogs
parameters:
- name: page
in: query
description: Page number. First page has index 0.
required: false
schema:
default: 0
type: integer
format: int64
minimum: 0
example: 0
- name: pageSize
in: query
description: Number of items per page. Maximum is 50
required: false
schema:
default: 10
type: integer
format: int64
exclusiveMinimum: 0
example: 10
- name: workspaceId
in: query
description: Id of the workspace
required: true
schema:
type: string
pattern: '[^\s\\/]+'
requestBody:
description: Filter criteria; body is required (all fields optional — send `{}` for no filtering).
content:
application/json:
schema:
$ref: '#/components/schemas/DistroLogsFilter'
required: true
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResult_DistroLogEntry'
'400':
description: 'Invalid value for: query parameter page, Invalid value for: query parameter pageSize, Invalid value for: query parameter workspaceId, Invalid value for: body'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- logs.read
/v1/org/distro/logs/{logId}:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
get:
tags:
- distro
summary: Get distro log evaluation trace
description: "[operation: distro-log-get]\n\n\n\nREAD-ONLY\n\n\n\nReturns the per-record evaluation trace for a single distro log — the in-app log drill-down that answers \"why did this record route here / why didn't it route\".\n\n- logId (req): log id, as returned by distro-logs (log.id)\n\n- routerId (req): router the log belongs to, as returned by distro-logs (log.routerId)\n\n→\n\n {log: {id, workspaceId, routerId, status, assignments, trigger?, createdAt, updatedAt}, events: [{stage, status, trigger?, triggerValidation?, changeEvaluation?, entryRule?, route?, slaRules, enrichments, assignments, error?, createdAt, updatedAt}]}\n\n Note: stage is the internal processing-stage name of the event (e.g. \"ActionsSuccessful\", \"RuleEvalFailedV2\"); entryRule, route.rules and slaRules entries are rule evaluations: {ruleId?, ruleName?, matched, logic?, conditions: [{index, conditionId?, kind, field?, recordId?, resolvedValue?, operator?, expectedValue?, expectedField?, matched, owners, error?}]}.\n\n Note: each condition shows the data-source field as source.object.field with the rule-builder source code (e.g. \"SF.Lead.Email\" for Salesforce), the resolved record id and value, the expected value(s) and whether it matched; logic combines condition indexes, e.g. \"(1 and 2) or 3\". Enrichment steps list per-field existing vs enriched values; route.matchers and route.duplicateMatches cover path matching and duplicate-match ownership.\n\nsee: distro-logs (list logs to obtain logId and routerId)"
operationId: distroLogGet
parameters:
- name: logId
in: path
description: Log id, as returned by the distro logs list endpoint.
required: true
schema:
type: string
- name: routerId
in: query
description: Router the log belongs to, as returned by the distro logs list endpoint.
required: true
schema:
type: string
pattern: '[^\s\\/]+'
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/DistroLogDetail'
'400':
description: 'Invalid value for: query parameter routerId'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- logs.read
/v1/org/distro/routers/list:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- distro
summary: Lists all distro routers
description: "[operation: distro-list-routers]\n\n\n\nREAD-ONLY\n\n\n\nBrowse every Distro router to find routerIds, status and triggers.\n\n\n\nBrowses every Distro router in the org to discover routerIds, activation status, and triggers. A Distro router routes CRM records (leads) to users via distributions, driven by a trigger.\n\n→\n\n {routers: [{id, name, status, trigger: {objectType, eventTypes: [{type, ...}], evaluation, delay}}]}\n\n Note: status is the router's activation state — one of {type:\"Active\"} | {type:\"Inactive\"} | {type:\"Activating\"} | {type:\"Deactivating\"} | {type:\"Error\", message}. A router created via the API is Inactive until distro-router-activate is called.\n\n Note: when an entry of trigger.eventTypes has type=Scheduled it carries schedulerId — that is the resourceSchedulerId expected by resource-scheduler-run.\n\nsee: resource-scheduler-run (run a scheduled router on demand using schedulerId from a Scheduled trigger), distro-router-activate / distro-router-deactivate (toggle a router's status)"
operationId: distroListRouters
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRoutersListResponse'
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- distro.read
/v1/org/distro/routers/{routerId}:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
get:
tags:
- distro
summary: Get distro router
description: "[operation: distro-router-get]\n\n\n\nREAD-ONLY\n\n\n\nFetch one Distro router's identity, activation status and routing summary.\n\n\n\nFetches one Distro router: its identity, activation status, and a lossy per-row summary of its lead-routing. Call this before distro-router-update to read back the current routing (update overlays your changes onto it — matching rows by ruleId — and preserves advanced config it can't show you) and to check status. (Implemented by filtering the router list — there is no internal get-by-id endpoint.)\n\n→\n\n {id, workspaceId, name?, description?, status, routing: {known, representable, rows: [{ruleId?, outcome}], catchAll?: outcome, routingSteps: [routingStep]}}\n status (one of): {type: \"Active\"} | {type: \"Inactive\"} | {type: \"Activating\"} | {type: \"Deactivating\"} | {type: \"Error\", message}\n outcome (one of): {type: \"Route\", distributionId?, actions: [action]} | {type: \"Unrepresentable\", kind}\n action (one of): {type: \"ReassignRecord\"} | {type: \"UpdateOwnership\", respectWorkingHours?, sendSlackNotification?, sendEmailNotification?, matchBy?} | {type: \"UpdateField\", field, value?, objectType?} | {type: \"UpdateFieldDynamic\", field, value: dynamicValue, objectType?} | {type: \"SendSlackToAssignee\"} | {type: \"SendEmailReminderToAssignee\"}\n dynamicValue (one of): {type: \"RelativeDate\", unit: \"Day\"|\"Week\"|\"Month\"|\"Quarter\"|\"Year\", offset?, timeZone?} | {type: \"TemplateText\", text} | {type: \"VariableField\", variableId, field, relation?}\n routingStep (one of): {type: \"Enrichment\", id?, fieldMappings: [{variableId, field, waterfallId, overwriteExisting?, relation?}]} | {type: \"SpamCheck\", id?, salesforceWrite: {type: \"Off\"} | {type: \"Enabled\", scoreField?, otherFields: [{objectType, field, value?}]}} | {type: \"Unrepresentable\", kind}\n\n Note: a Route outcome carries the distribution (who) and the CRM actions performed on the chosen assignee (what); it round-trips into distro-router-update. Unrepresentable rows use app-only features (SLAs, matchers, non-round-robin distributions, app-only actions) and carry a short kind, not the detail — but an update still edits them safely: the overlay changes only the distribution + actions you send for a matched ruleId and leaves that advanced config untouched\n\n Note: routingSteps are the pre-distribution steps (enrichment, spam-check) the router runs before the rows; they round-trip into distro-router-update. A routing step Edge cannot model reads back as {type:\"Unrepresentable\", kind}\n\n Note: routing.representable indicates only whether this lossy summary round-trips EXACTLY (every row, the catch-all AND every routing step representable); it is advisory — an update is accepted either way, because the overlay preserves advanced config rather than replacing it\n\n Note: status is the router's activation state; a router created via the API is Inactive until distro-router-activate is called, and must be Inactive to be deleted\n\nsee: distro-list-routers (browse to find a routerId), distro-router-update (overlay routing), distro-router-activate / distro-router-deactivate (toggle status)"
operationId: distroRouterGet
parameters:
- name: routerId
in: path
required: true
schema:
type: string
pattern: '[^\s\\/]+'
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRouterView'
'400':
description: 'Invalid value for: path parameter routerId'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- distro.read
put:
tags:
- distro
summary: Update distro router
description: "[operation: distro-router-update]\n\n\n\nMUTATING — IDEMPOTENT\n\n\n\nEdit a Distro router and republish it, preserving activation.\n\n\n\nEdits a Distro router and republishes it, preserving its activation — an active router stays active with the new config live immediately, an inactive one stays inactive (use distro-router-activate / distro-router-deactivate to change activation deliberately). routing is REQUIRED; it is OVERLAID onto the router's current routing (routes matched by ruleId), NOT a blind full-replace — advanced config Edge can't model (SLAs, matchers, duplicate-matching, non-round-robin distributions, app-only actions) is preserved, so ANY router can be edited (there is no longer a not-representable rejection). To change only name/description, resend the current routing (from distro-router-get) alongside them.\n\n- name (opt): new display name\n\n- description (opt): new description\n\n- routing (req): the lead-routing matrix, applied as an OVERLAY. The trigger and routing steps are replaced from what you send; each route/catch-all is matched to the router's existing routing by ruleId (catch-all to catch-all) and only its distribution (who) + CRM actions (what) are swapped in — matchers, SLAs, campaign addition, lead-to-contact conversion, send-to-routers, duplicate-matching and any app-only actions on that route are PRESERVED. A row whose ruleId matches nothing is appended as a new route. Distro still requires at least one action per route AND on the catch-all to publish (a matched route keeps its existing actions, so supply actions only where you change them or on new rows):\n\n {trigger: {objectType, eventTypes: [{type, ...}], evaluation?, delay?}, routes: [{ruleId, distributionId, actions: [action]}], catchAll: {distributionId, actions: [action]}, routingSteps?: [routingStep]}\n action (one of): {type: \"ReassignRecord\"} | {type: \"UpdateOwnership\", respectWorkingHours?, sendSlackNotification?, sendEmailNotification?, matchBy?} | {type: \"UpdateField\", field, value?, objectType?} | {type: \"UpdateFieldDynamic\", field, value: dynamicValue, objectType?} | {type: \"SendSlackToAssignee\"} | {type: \"SendEmailReminderToAssignee\"}\n dynamicValue (one of): {type: \"RelativeDate\", unit: \"Day\"|\"Week\"|\"Month\"|\"Quarter\"|\"Year\", offset?, timeZone?} | {type: \"TemplateText\", text} | {type: \"VariableField\", variableId, field, relation?}\n routingStep (one of): {type: \"Enrichment\", id?, fieldMappings: [{variableId, field, waterfallId, overwriteExisting?, relation?}]} | {type: \"SpamCheck\", id?, salesforceWrite: {type: \"Off\"} | {type: \"Enabled\", scoreField?, otherFields: [{objectType, field, value?}]}}\n\n trigger.objectType is the CRM object (Lead, Contact, Account, Opportunity, …); trigger.eventTypes is a non-empty list of trigger events ({type:\"NewRecord\"}, {type:\"UpdateField\", expression}, {type:\"Signal\"}, {type:\"Scheduled\", schedulerId}). Each route row: if its rule matches, route via that distribution and run its actions. ruleId is required on every row; an always-match route is the catchAll. routes may be empty (then only the catchAll applies). No meeting type — Distro routes leads. trigger.evaluation (opt) is a ruleId used as the router's entry rule (records that fail it are not routed); trigger.delay (opt) delays evaluation — {type:\"AfterRecordEval\"|\"BeforeRecordEval\", duration}.\n\n The distribution picks WHO; actions decide WHAT (assign owner, set a field, notify the assignee). At least one action per route AND on the catch-all is required — an actionless route fails to publish. See distro-router-create for the action and routing-step catalogue.\n\n routingSteps (opt) within routing REPLACE the router's pre-distribution steps (enrichment, spam-check); an empty/absent list within routing CLEARS them, so to keep existing steps read them from distro-router-get first and send them back. Carry each step's id to keep it (and any variables that reference it) stable.\n\n→\n\n {id, workspaceId, name?, description?, status, routing: {known, representable, rows: [{ruleId?, outcome}], catchAll?: outcome, routingSteps: [routingStep]}}\n\n Note: status reflects the PRESERVED activation (an update never silently flips it); the returned routing is the per-row summary (same shape as distro-router-get) — representable rows echo back the distribution + actions and the routing steps, not necessarily the exact matrix object you sent\n\n⚠ routing is REQUIRED (it is how you address rows to overlay, matched by ruleId) — an update without routing is REJECTED (400). The trigger and routing steps ARE replaced from what you send (an empty/absent routingSteps list CLEARS them), while per-route distribution + actions overlay onto existing rows; to change only name/description, resend the current routing (from distro-router-get) alongside them.\n\n⚠ every update overlays onto and republishes the router's current editable DRAFT (Distro resolves the draft, or materializes one from the published router) — unpublished edits made in the Distro app are the base of the overlay (preserved), and the overlaid result goes live on publish\n\n⚠ unlike create, a failed update is NOT rolled back (the router already existed): if the publish step fails the changes are saved on an UNPUBLISHED draft and the prior config stays live; if the router was active and the re-activation fails the new config is published but the router is left INACTIVE — a typed 422 error is returned in both cases; fix or activate the router in the Distro app\n\nsee: distro-router-get (read current routing and status before overlaying), distro-router-activate / distro-router-deactivate (change activation), rule-list (find ruleIds), distribution-list (find distributionIds)"
operationId: distroRouterUpdate
parameters:
- name: routerId
in: path
required: true
schema:
type: string
pattern: '[^\s\\/]+'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRouterUpdate'
required: true
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRouterView'
'400':
description: 'Invalid value for: path parameter routerId, Invalid value for: body'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- distro.modify
delete:
tags:
- distro
summary: Remove distro router
description: '[operation: distro-router-delete]
MUTATING — DESTRUCTIVE
Permanently delete a Distro router.
Permanently deletes a Distro router. The router must be INACTIVE first — deactivate it via distro-router-deactivate and wait until distro-router-get shows Inactive before deleting.
⚠ REJECTED (409) when the router is still active (or mid-transition) — deactivate it first via distro-router-deactivate, then delete once distro-router-get shows status inactive
⚠ irreversible via API; any triggers or links pointing at this router stop working
see: distro-router-deactivate (deactivate before deleting), distro-list-routers or distro-router-get (confirm the id and status before deleting)'
operationId: distroRouterDelete
parameters:
- name: routerId
in: path
required: true
schema:
type: string
pattern: '[^\s\\/]+'
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
'400':
description: 'Invalid value for: path parameter routerId'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- distro.remove
/v1/org/distro/routers:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- distro
summary: Create distro router
description: "[operation: distro-router-create]\n\n\n\nMUTATING\n\n\n\nCreate and publish a Distro router, left inactive until activated.\n\n\n\nCreates a Distro router and publishes it, but leaves it INACTIVE — it routes nothing until you call distro-router-activate. Publish is implicit; activation is a deliberate separate step. Distro routes CRM records (leads), so a router needs a trigger and its routes carry NO meeting type. workspaceId must be a team workspace of this tenant (400 otherwise).\n\n- routing (req): the lead-routing matrix — a trigger, ordered rules evaluated top-down, a mandatory catch-all, plus optional pre-distribution routing steps. Each route/catch-all carries a distribution (who) AND CRM actions (what — at least one is required to publish):\n\n {trigger: {objectType, eventTypes: [{type, ...}], evaluation?, delay?}, routes: [{ruleId, distributionId, actions: [action]}], catchAll: {distributionId, actions: [action]}, routingSteps?: [routingStep]}\n action (one of): {type: \"ReassignRecord\"} | {type: \"UpdateOwnership\", respectWorkingHours?, sendSlackNotification?, sendEmailNotification?, matchBy?} | {type: \"UpdateField\", field, value?, objectType?} | {type: \"UpdateFieldDynamic\", field, value: dynamicValue, objectType?} | {type: \"SendSlackToAssignee\"} | {type: \"SendEmailReminderToAssignee\"}\n dynamicValue (one of): {type: \"RelativeDate\", unit: \"Day\"|\"Week\"|\"Month\"|\"Quarter\"|\"Year\", offset?, timeZone?} | {type: \"TemplateText\", text} | {type: \"VariableField\", variableId, field, relation?}\n routingStep (one of): {type: \"Enrichment\", id?, fieldMappings: [{variableId, field, waterfallId, overwriteExisting?, relation?}]} | {type: \"SpamCheck\", id?, salesforceWrite: {type: \"Off\"} | {type: \"Enabled\", scoreField?, otherFields: [{objectType, field, value?}]}}\n\n trigger.objectType is the CRM object (Lead, Contact, Account, Opportunity, …); trigger.eventTypes is a non-empty list of trigger events (e.g. {type:\"NewRecord\"}, {type:\"UpdateField\", expression}, {type:\"Signal\"}, {type:\"Scheduled\", schedulerId}). Each route row: if its rule matches, route the record via that distribution and run its actions. ruleId is required on every row; an always-match route is the catchAll (used when no row matches). routes may be empty (then only the catchAll applies). No meeting type anywhere — Distro routes leads, it does not book meetings. trigger.evaluation (opt) is a ruleId used as the router's entry rule (records that fail it are not routed); trigger.delay (opt) delays evaluation — {type:\"AfterRecordEval\"|\"BeforeRecordEval\", duration}.\n\n The distribution picks WHO gets the record; actions decide WHAT happens to the chosen assignee. Distro requires at least one action per route AND on the catch-all — an actionless route fails to publish. ReassignRecord (and UpdateOwnership, with optional working-hours / notification / Id-vs-Email match controls) assign the record's owner to the distributed user; UpdateField sets a CRM field to a static value (objectType defaults to the trigger object, omit value to clear it); UpdateFieldDynamic sets a field to a value resolved at routing time — a relative date ({type:\"RelativeDate\", unit, offset}), {!variable.Field} template text, or a variable-field reference; SendSlackToAssignee / SendEmailReminderToAssignee notify the chosen assignee.\n\n routingSteps (opt, default empty) run before the rows: Enrichment writes data-waterfall output to CRM fields (its variableId / waterfallId reference the router's variables & configured waterfalls — passed through, not validated here); SpamCheck scores the record and, when Enabled, writes the score to scoreField plus any otherFields. Supply a step id to keep it stable; omit it to mint a fresh one.\n\n→\n\n {id, workspaceId, name?, description?, status, routing: {known, representable, rows: [{ruleId?, outcome}], catchAll?: outcome, routingSteps: [routingStep]}}\n\n Note: the created router's status is Inactive — it does NOT route records until you call distro-router-activate. The returned routing is the per-row summary (same shape as distro-router-get) — representable rows echo back the distribution + actions, and routingSteps echo back, not necessarily the exact matrix object you sent\n\n⚠ create is all-or-nothing: if any step (configure or publish — e.g. an invalid routing matrix) fails, the partially-created router is rolled back (force-deleted) and a typed 422 error is returned — nothing is left behind, so resolve the cause and retry\n\nsee: distro-router-activate (make the new router live), workspace-list (find a workspaceId), rule-list (find ruleIds), distribution-list (find distributionIds), distro-router-update (replace config afterwards)"
operationId: distroRouterCreate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRouterCreate'
required: true
responses:
'200':
description: ''
headers:
Cache-Control:
required: true
schema:
type: string
X-Robots-Tag:
required: true
schema:
type: string
Pragma:
required: true
schema:
type: string
Expires:
required: true
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/DistroRouterView'
'400':
description: 'Invalid value for: body'
content:
text/plain:
schema:
type: string
default:
description: ''
headers:
Location:
required: false
schema:
type: string
content:
application/json:
schema:
type: object
required:
- errorCode
- errorMessage
properties:
errorCode:
# --- truncated at 32 KB (76 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/chili-piper/refs/heads/main/openapi/chili-piper-distro-api-openapi.yml