Chili Piper Concierge API

The concierge API from Chili Piper — 4 operation(s) for concierge.

OpenAPI Specification

chili-piper-concierge-api-openapi.yml Raw ↑
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