openapi: 3.2.0
info:
title: Chili Piper Concierge API
version: '1.0'
description: 'Operations tagged concierge across 6 of this provider''s published API definitions: chili-piper-concierge-debugger-openapi.yaml, chili-piper-concierge-router-builder-openapi.yaml, chili-piper-concierge-router-configuration-openapi.yaml, chili-piper-meeting-inspector-openapi.yaml, chili-piper-no-show-analyzer-openapi.yaml, chili-piper-routing-audit-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: concierge
paths:
/v1/org/concierge/routers/concierge/list:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- concierge
summary: Lists all concierge routers
description: "[operation: concierge-list-routers]\n\n\n\nREAD-ONLY\n\n\n\nReturns all Concierge routers in the org. A router evaluates inbound lead data and routes to teams/users via rules.\n\n- workspaceId (opt): restrict to one workspace\n\n→\n\n {routers: [{router: {id (routerId), name, slug, formMapping, settings, routing, meta}, dataFields: [...], workspaceId}]}\n\n Note: routerId is at routers[N].router.id; slug is at routers[N].router.slug\n\nsee: concierge-logs (audit decisions, needs routerId+workspaceId), concierge-route-by-slug (execute routing, needs slug)"
operationId: conciergeListRouters
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/ConciergeRoutersListResponse'
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:
- concierge.read
/v1/org/concierge/logs:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- concierge
summary: Reads Concierge Logs
description: '[operation: concierge-logs]
READ-ONLY
Fetches aggregated Concierge routing decision logs for a router in a time window (parallelism=4). Max window: 30 days.
- workspaceId (req): query param; use workspace-list or concierge-list-routers
- routerId (req): query param; use concierge-list-routers (routers[N].router.id)
- start, end (req): query params; ISO-8601; max 30-day span
→ array of log entries, each with fields: id, status, trigger, assignments, triggeredAt, crmUrl, guestEmail, actionsStatus, sourceUrl, meetingId, routing, matchedPath (payload structure may change)
see: concierge-list-routers (find routerId+workspaceId)'
operationId: conciergeLogs
parameters:
- name: workspaceId
in: query
description: Id of the workspace
required: true
schema:
type: string
pattern: '[^\s\\/]+'
- name: routerId
in: query
description: Concierge Router Id
required: true
schema:
type: string
format: uuid
- name: start
in: query
description: time of start such as 2025-01-08T13:46:18.681Z (ISO8601 format)
required: true
schema:
type: string
format: date-time
- name: end
in: query
description: time of end such as 2025-01-14T13:46:18.681Z (ISO8601 format)
required: true
schema:
type: string
format: date-time
responses:
'200':
description: Concierge logs. Payload structure might change.
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: {}
'400':
description: 'Invalid value for: query parameter workspaceId, Invalid value for: query parameter routerId, Invalid value for: query parameter start, Invalid value for: query parameter end'
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/concierge/routers/concierge:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
post:
tags:
- concierge
summary: Create concierge router
description: "[operation: concierge-router-create]\n\n\n\nMUTATING\n\n\n\nCreates a Concierge router and publishes it live in one step — there is no unpublished-draft state via the API. workspaceId must be a team workspace of this tenant (400 otherwise). The URL slug is derived from name on publish (there is no separate slug field). Triggers are a PRODUCT of optional kinds — set any combination of form (the Chili webform), inAppButton, and routerLink; supplying NONE auto-generates a minimal email-only Chili webform. A routerLink is what gives the router a shareable Router Link URL. branding and localizations are optional.\n\n- routing (req): ordered rules evaluated top-down, plus a mandatory catch-all fallback. Each row's rule, when it matches, runs that row's `outcome`; the catch-all `outcome` runs when no row matches:\n\n {routes: [{ruleId, outcome}], catchAll: outcome}\n\n outcome (one of):\n\n {type: \"Schedule\", assignment, meetingTypeId, timeout?, crmActions?}\n {type: \"Redirect\", url}\n\n Schedule assigns the lead and books a meeting type. assignment is {type: \"Distribution\", distributionId} (round-robin / ownership / whatever the distribution does) or {type: \"User\", userId} (a specific host). timeout (opt) {minutes, onTimeout} sets the no-show fallback; onTimeout is {type: \"Landing\"} or {type: \"Url\", url}; omit timeout for the default (10 min → Landing). crmActions (opt) is an ordered post-booking chain, each {type: \"ConvertLead\"} or {type: \"Notify\", slackChannel?} (omit slackChannel to notify the assigned host instead of a named channel). Redirect sends the lead to a URL instead of booking. ruleId is required on every row; an always-match route is the catchAll. routes may be empty (then only the catchAll applies).\n\n- form (opt): the Chili-hosted guest form fields the lead fills in; MUST include the email field (PersonEmail) or the create is rejected. Omit for a default email-only form:\n\n [{dataField, label, description?, required?, hidden?}]\n\n Note: dataField is a CRM data-field reference — a default field name (e.g. PersonEmail, PersonFirstName) or a custom-field UUID; a made-up name is rejected (400). label is the field's display name; required toggles whether the guest must fill it. hidden (opt) is a PREFILLED value (a string) stored on the field but NOT shown to the guest — it is a value, not a show/hide flag; omit it for a normal visible field.\n\n- inAppButton (opt): an in-app-button trigger — the data fields the button collects; MUST include the email field (PersonEmail):\n\n [{dataField}]\n\n- routerLink (opt): a router-link trigger — gives the router a shareable Router Link URL; the fields its form collects; MUST include the email field (PersonEmail):\n\n [{dataField, label, required?, hidden?}]\n\n Note: dataField/label/required/hidden are as for form. A router-link field's enrichment waterfall is not settable via the API (preserved if already configured in the Concierge app).\n\n- branding (opt): the booking page's cover/heading/language — {coverImage?, headingText?, language?}\n\n- localizations (opt): per-language text overrides — {\"<lang-tag>\": {\"<key>\": \"<text>\"}}\n\n→\n\n {id, workspaceId, name?, slug?, routing: {known, representable, rows: [{ruleId?, ruleType?, outcome}], catchAll?: {outcome}}, form?, inAppButton?, routerLink?, branding?, localizations?}\n\n Note: the returned routing is the lossy per-row summary (same shape as concierge-router-get), not the matrix you sent; form/inAppButton/routerLink/branding/localizations echo the created config (same shape as concierge-router-get)\n\n⚠ if the final publish step fails the router is left behind as an UNPUBLISHED draft (typed 422); retrying the create mints ANOTHER draft — fix or delete the leftover in the Concierge app\n\nsee: concierge-list-routers (find a workspaceId), rule-list (find ruleIds), distribution-list (find distributionIds), user-find (find userIds), meeting-type-list (find meetingTypeIds), concierge-router-update (replace config afterwards)"
operationId: conciergeRouterCreate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ConciergeRouterCreate'
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/ConciergeRouter'
'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:
type: string
errorMessage:
type: string
arguments:
$ref: '#/components/schemas/Map_String'
security:
- apiKeyAuth: []
X-Chili-Required-Permissions:
- concierge.create
/v1/org/concierge/routers/concierge/{routerId}:
servers:
- url: https://fire.chilipiper.com/api/fire-edge
description: Production
get:
tags:
- concierge
summary: Get concierge router
description: "[operation: concierge-router-get]\n\n\n\nREAD-ONLY\n\n\n\nFetches one Concierge router: its identity, a lossy per-row summary of its routing, and its full-config dimensions (guest form, branding/cover, localizations). Call this before concierge-router-update to check routing.representable and form.representable — they tell you whether an update would be accepted or rejected as unrepresentable.\n\n→\n\n {id, workspaceId, name?, slug?, routing: {known, representable, rows: [{ruleId?, ruleType?, outcome}], catchAll?: {outcome}}, form?, inAppButton?, routerLink?, branding?, localizations?}\n outcome (one of): {type: \"Schedule\", distributionId?, userId?, meetingTypeId?} | {type: \"Redirect\", url?} | {type: \"OwnerAssign\"} | {type: \"ContactOptions\"} | {type: \"CrmAction\"} | {type: \"Other\", kind}\n form: {representable, fields: [{dataField, label, description?, required, hidden?}], readOnlyTriggers: [string]}\n inAppButton: {fields: [{dataField}]}\n routerLink: {fields: [{dataField, label, required, hidden?}]}\n branding: {coverImage?, headingText?, language?}\n localizations: {\"<lang-tag>\": {\"<key>\": \"<text>\"}}\n\n Note: the routing summary is lossy by design — it NAMES each row's outcome (including ones Edge can't itself produce, e.g. Redirect/CrmAction) so you can see what the router does even when it was built in the app\n\n Note: routing.representable is true only when the current routing — both the draft tree and the published tree — is exactly what Edge's create/update would have produced; when false, an update with a new routing may be rejected (edit it in the Concierge app instead). A router that has no routing tree yet also reports representable=false, but an update setting routing on it is still accepted (nothing is destroyed).\n\n Note: form.representable is true only when the router's webform is a Chili form (or absent) — only then is a form update accepted. form.fields lists the editable Chili-form fields; form.readOnlyTriggers names trigger kinds Edge doesn't edit here (only ThirdPartyForm — a third-party webform). inAppButton/routerLink (when present) are the router's in-app-button / router-link triggers and ARE editable via concierge-router-update. branding/localizations are absent when unset.\n\nsee: concierge-list-routers (browse to find a routerId), concierge-router-update (replace routing/form/branding/localizations)"
operationId: conciergeRouterGet
parameters:
- name: routerId
in: path
required: true
schema:
type: string
format: uuid
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/ConciergeRouter'
'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:
- concierge.read
put:
tags:
- concierge
summary: Update concierge router
description: "[operation: concierge-router-update]\n\n\n\nMUTATING — IDEMPOTENT\n\n\n\nEdits a Concierge router and republishes it live. Only the fields you supply change; omitted fields (and config dimensions Edge doesn't model, e.g. third-party webforms, router-link enrichment waterfalls, and CRM-upsert settings) are preserved. Supplying name re-derives the URL slug. Each dimension you send is a full replace, except branding which merges per sub-field (see below). Triggers are a product of optional kinds: form (Chili webform), inAppButton, and routerLink each replace only their own kind — writing one never destroys the others. Call concierge-router-get first to check routing.representable / form.representable.\n\n- routing (opt): when present, fully REPLACES the routing matrix (not a partial merge); when omitted, the current routing is kept. Each row's rule, when it matches, runs that row's `outcome`; the catch-all `outcome` runs when no row matches:\n\n {routes: [{ruleId, outcome}], catchAll: outcome}\n\n outcome (one of):\n\n {type: \"Schedule\", assignment, meetingTypeId, timeout?, crmActions?}\n {type: \"Redirect\", url}\n\n Schedule assigns the lead and books a meeting type. assignment is {type: \"Distribution\", distributionId} or {type: \"User\", userId}. timeout (opt) {minutes, onTimeout} sets the no-show fallback; onTimeout is {type: \"Landing\"} or {type: \"Url\", url}; omit timeout for the default (10 min → Landing). crmActions (opt) is an ordered post-booking chain, each {type: \"ConvertLead\"} or {type: \"Notify\", slackChannel?} (omit slackChannel to notify the assigned host instead of a named channel). Redirect sends the lead to a URL instead of booking. ruleId is required on every row; an always-match route is the catchAll. routes may be empty (then only the catchAll applies).\n\n- form (opt): when present, fully REPLACES the guest form with a Chili form built from these fields (the in-app-button / router-link triggers, if any, are preserved); MUST include the email field (PersonEmail). Omit to keep the current form:\n\n [{dataField, label, description?, required?, hidden?}]\n\n Note: dataField is a CRM data-field reference — a default field name (e.g. PersonEmail, PersonFirstName) or a custom-field UUID; a made-up name is rejected (400). label is the field's display name; required toggles whether the guest must fill it. hidden (opt) is a PREFILLED value (a string) stored on the field but NOT shown to the guest — it is a value, not a show/hide flag; omit it for a normal visible field.\n\n- inAppButton (opt): when present, fully REPLACES the in-app-button trigger's fields (the form/router-link triggers, if any, are preserved); MUST include the email field (PersonEmail). Omit to keep the current button:\n\n [{dataField}]\n\n- routerLink (opt): when present, fully REPLACES the router-link trigger's fields (the form/in-app-button triggers, if any, are preserved); MUST include the email field (PersonEmail). Omit to keep the current link:\n\n [{dataField, label, required?, hidden?}]\n\n Note: a router-link field's enrichment waterfall is not settable via the API; an existing one is preserved (matched by dataField) across the replace.\n\n- branding (opt): the cover/heading/language. Merged PER SUB-FIELD: a sub-field you supply is replaced; one you omit is PRESERVED (so a partial {headingText} does not wipe coverImage/language). localizations are preserved. To clear a sub-field entirely, edit the router in the Concierge app. — {coverImage?, headingText?, language?}\n\n- localizations (opt): when present, fully REPLACES the per-language overrides (preserving branding) — {\"<lang-tag>\": {\"<key>\": \"<text>\"}}\n\n→\n\n {id, workspaceId, name?, slug?, routing: {known, representable, rows: [{ruleId?, ruleType?, outcome}], catchAll?: {outcome}}, form?, inAppButton?, routerLink?, branding?, localizations?}\n\n Note: the returned routing is the lossy per-row summary (same shape as concierge-router-get), not the matrix you sent\n\n⚠ full-replace + publishes live immediately: supplying routing/form/inAppButton/routerLink/localizations replaces that ENTIRE dimension, not a partial merge (branding is the exception — it merges per sub-field, see above)\n\n⚠ routing REJECTED (409) when the router's existing routing — its DRAFT tree or its PUBLISHED tree — isn't representable in this simplified model (advanced routing built in the Concierge app — owner-assign, contact-options / multiple-choice, call-rep, multiple assignees per row, CRM actions beyond convert-lead / Slack-notify, enrichment or spam-check steps, etc.) — to avoid silently destroying it, edit those routers in the Concierge app instead. Check routing.representable via concierge-router-get first.\n\n⚠ form REJECTED (409) when the router's current webform is a third-party form (not a Chili form) — replacing it would destroy that mapping; check form.representable via concierge-router-get first. branding/localizations are always accepted. A name-only update always succeeds.\n\n⚠ every update publishes the router's current DRAFT — if the draft carries unpublished edits made in the Concierge app, those go live as a side effect, even on a name-only patch\n\n⚠ if the final publish step fails, the changes are saved on an UNPUBLISHED draft and a typed 422 error is returned — fix or delete the draft in the Concierge app\n\nsee: concierge-router-get (check routing.representable / form.representable before replacing), rule-list (find ruleIds), distribution-list (find distributionIds), user-find (find userIds), meeting-type-list (find meetingTypeIds)"
operationId: conciergeRouterUpdate
parameters:
- name: routerId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ConciergeRouterUpdate'
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/ConciergeRouter'
'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:
- concierge.modify
delete:
tags:
- concierge
summary: Remove concierge router
description: '[operation: concierge-router-delete]
MUTATING — DESTRUCTIVE
Deletes a Concierge router by id.
- routerId (req): the router''s id (path)
⚠ irreversible via API; any embeds or links pointing at this router stop working
see: concierge-list-routers or concierge-router-get (confirm the id before deleting)'
operationId: conciergeRouterDelete
parameters:
- name: routerId
in: path
required: true
schema:
type: string
format: uuid
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:
- concierge.remove
components:
schemas:
CreateLead:
title: CreateLead
type: object
required:
- type
properties:
type:
type: string
const: CreateLead
ProcessedRouterLinkMapping:
title: ProcessedRouterLinkMapping
type: object
required:
- dataField
- label
- required
properties:
dataField:
$ref: '#/components/schemas/DataFieldRef'
label:
type: string
minLength: 1
required:
type: boolean
hidden:
type: string
waterfallId:
type: string
pattern: '[^\s\\/]+'
CallSucceededActions:
title: CallSucceededActions
type: object
required:
- redirect
properties:
redirect:
$ref: '#/components/schemas/CallSucceededRedirect'
actions:
type: array
items:
$ref: '#/components/schemas/ExecutableAction'
DisplayContactSettings:
title: DisplayContactSettings
type: object
required:
- call
- meeting
- timeoutDuration
- type
properties:
call:
$ref: '#/components/schemas/CallRepSettings1'
meeting:
$ref: '#/components/schemas/SchedulingSettings'
timeoutDuration:
type: string
type:
type: string
const: DisplayContactSettings
AnotherDistributionV2:
title: AnotherDistributionV2
type: object
required:
- id
- type
properties:
id:
$ref: '#/components/schemas/DistributionId'
type:
type: string
const: AnotherDistributionV2
CrmAction_Notify:
title: CrmAction_Notify
type: object
required:
- type
properties:
slackChannel:
type: string
type:
type: string
const: Notify
ConciergeRouterSettings:
title: ConciergeRouterSettings
type: object
properties:
headerImage:
type: string
headingText:
type: string
minLength: 1
language:
type: string
minLength: 1
localizations:
$ref: '#/components/schemas/Map_Locale_Map_String_String'
Assignee1:
title: Assignee
type: object
required:
- type
properties:
type:
type: string
const: Assignee
InternalDataFieldId:
title: InternalDataFieldId
type: string
enum:
- Timezone
- RecentPageViewed
BookerInvitedIfExist:
title: BookerInvitedIfExist
deprecated: true
type: object
required:
- autoDeclineOnBookersBehalf
- required
- type
properties:
autoDeclineOnBookersBehalf:
type: boolean
required:
type: boolean
type:
type: string
const: BookerInvitedIfExist
SchedulingSettings1:
title: SchedulingSettings
type: object
required:
- assignments
- meetingTypeIds
- meetingHost
- scheduling
- timeout
- type
properties:
assignments:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Assignment'
meetingTypeIds:
type: array
minItems: 1
items:
$ref: '#/components/schemas/MeetingTypeId'
meetingCreatedTarget:
$ref: '#/components/schemas/MeetingCreatedTarget'
bookerInviteSettings:
$ref: '#/components/schemas/BookerInviteSettings'
meetingHost:
$ref: '#/components/schemas/MeetingHost'
additionalAttendees:
type: array
uniqueItems: true
items:
$ref: '#/components/schemas/AdditionalAttendee'
additionalNotificationRecipients:
type: array
minItems: 1
items:
type: string
pattern: '[^\s\\/]+'
scheduling:
$ref: '#/components/schemas/SchedulingActions'
timeout:
$ref: '#/components/schemas/TimeoutActions'
type:
type: string
const: SchedulingSettings
WorkspaceId:
title: WorkspaceId
examples:
- b7263a5d-89cb-4f50-a532-ea4aff74688e
type: string
pattern: '[^\s\\/]+'
ProcessedChiliFormTrigger:
title: ProcessedChiliFormTrigger
type: object
required:
- mapping
- email
- type
properties:
mapping:
type: array
minItems: 1
items:
$ref: '#/components/schemas/ProcessedChiliFormMapping'
email:
$ref: '#/components/schemas/DataFieldRef'
phone:
type: string
pattern: '[^\s\\/]+'
type:
type: string
const: ProcessedChiliFormTrigger
ConciergeRouterId:
title: ConciergeRouterId
examples:
- a2b9c4d5-e8f7-4b2a-9c3d-5e6f7a8b9c0d
type: string
format: uuid
CrmUpdateContactFieldTarget:
title: CrmUpdateContactFieldTarget
type: string
enum:
- Contact
- Account
- Opportunity
- Case
ProcessedInAppButtonTrigger:
title: ProcessedInAppButtonTrigger
type: object
required:
- mapping
- email
- type
properties:
mapping:
type: array
minItems: 1
items:
$ref: '#/components/schemas/ProcessedInAppButtonMapping'
email:
$ref: '#/components/schemas/DataFieldRef'
phone:
type: string
pattern: '[^\s\\/]+'
type:
type: string
const: ProcessedInAppButtonTrigger
ProcessedRouterTrigger:
title: ProcessedRouterTrigger
oneOf:
- $ref: '#/components/schemas/ProcessedChiliFormTrigger'
- $ref: '#/components/schemas/ProcessedInAppButtonTrigger'
- $ref: '#/components/schemas/ProcessedRouterLinkTrigger'
- $ref: '#/components/schemas/ProcessedThirdPartyFormTrigger'
discriminator:
propertyName: type
mapping:
ProcessedChiliFormTrigger: '#/components/schemas/ProcessedChiliFormTrigger'
ProcessedInAppButtonTrigger: '#/components/schemas/ProcessedInAppButtonTrigger'
ProcessedRouterLinkTrigger: '#/components/schemas/ProcessedRouterLinkTrigger'
ProcessedThirdPartyFormTrigger: '#/components/schemas/ProcessedThirdPartyFormTrigger'
WhenMatchBehaviour:
title: WhenM
# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/chili-piper/refs/heads/main/openapi/chili-piper-concierge-api-openapi.yml