---
title: "Apply a config bundle"
method: POST
path: "/v1/config/apply"
tags: ["Config"]
---

# Apply a config bundle

`POST /v1/config/apply`

Reconcile a config-as-code bundle into the project. Submit the full desired set of resources; resources already managed by config are updated, new ones created, and (unless prune is false) config-managed resources absent from the bundle are deleted. Identity is by name — no ids in the bundle.

## Request body

- ConfigBundle
  - `resources` union[], required
    - union
      - AgentConfig
        - `kind` 'agent', required
        - `name` string, required
        - `description` string, nullable
        - `customId` string, nullable
        - `endpoints` object[]
          - `name` string, required
          - `value` string, required
          - `direction` 'INCOMING' | 'OUTGOING' | 'INCOMING_AND_OUTGOING', required
          - `environment` string
      - PersonaConfig
        - `kind` 'persona', required
        - `name` string, required
        - `displayName` string
        - `description` string, nullable
        - `language` 'EN' | 'ES' | 'DE' | 'HI' | 'FR' | 'NL' | 'AR' | 'EL' | 'IT' | 'ID' | 'TH' | 'JA' | 'TL' | 'MS' | 'ZH' | 'TR' | 'PT' | 'HE', required
        - `secondaryLanguage` 'EN', nullable
        - `understoodLanguages` string[]
        - `accent` 'US' | 'US_X_SOUTH' | 'GB' | 'ES' | 'DE' | 'IN' | 'FR' | 'NL' | 'SA' | 'GR' | 'AU' | 'IT' | 'ID' | 'TH' | 'JP' | 'NZ' | 'PH' | 'SG' | 'MY' | 'HK' | 'TR' | 'PT' | 'IL', required
        - `age` 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY'
        - `gender` 'MALE' | 'FEMALE', required
        - `backgroundNoise` 'NONE' | 'AIRPORT' | 'CHILDREN_PLAYING' | 'CITY' | 'COFFEE_SHOP' | 'DRIVING' | 'OFFICE' | 'THUNDERSTORM'
        - `speechPace` 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST'
        - `speechClarity` 'CLEAR' | 'VAGUE' | 'RAMBLING'
        - `hasDisfluencies` boolean
        - `baseEmotion` 'NEUTRAL' | 'CHEERFUL' | 'CONFUSED' | 'FRUSTRATED' | 'SKEPTICAL' | 'RUSHED' | 'DISTRACTED'
        - `intentClarity` 'CLEAR' | 'INDIRECT' | 'VAGUE'
        - `confirmationStyle` 'EXPLICIT' | 'VAGUE'
        - `memoryReliability` 'HIGH' | 'LOW'
        - `responseTiming` 'RELAXED' | 'NORMAL' | 'QUICK'
        - `backstoryPrompt` string, nullable
        - `idleMessages` string[], nullable
        - `idleTimeoutSeconds` integer
        - `idleMessageMaxSpokenCount` integer
        - `idleMessageResetCountOnUserSpeechEnabled` boolean
        - `properties` object
      - ImprovFlowConfig
        - `kind` 'flow', required
        - `type` 'improv', required
        - `name` string, required
        - `title` string
        - `description` string, nullable
        - `agents` string[], required
        - `expectations` string[]
        - `happyPath` object, required
          - `persona` string, required
          - `environment` string, required
          - `prompt` string
          - `expectations` string[]
          - `title` string
        - `edgeCases` object[]
          - `persona` string
          - `environment` string
          - `prompt` string
          - `expectations` string[]
          - `name` string, required
          - `title` string
      - ScriptedFlowConfig
        - `kind` 'flow', required
        - `type` 'scripted', required
        - `name` string, required
        - `title` string
        - `description` string, nullable
        - `agents` string[]
        - `branchingMode` 'DETERMINISTIC' | 'ADAPTIVE'
        - `expectations` string[]
        - `graph` ConfigFlowStep[], required
          - `ref` string
          - `type` 'AGENT_TURN' | 'CUSTOMER_TURN' | 'CUSTOMER_FIRST_MESSAGE' | 'CUSTOMER_SILENCE' | 'CUSTOMER_DTMF' | 'VOICEMAIL' | 'SCENARIO_LINK', required
          - `content` string
          - `silenceDurationSeconds` integer
          - `dtmfDigits` string
          - `flow` string
          - `mergeInto` string[]
          - `steps` ConfigFlowStep[]
      - CollectorConfig
        - `kind` 'collector', required
        - `name` string, required
        - `modality` 'call' | 'chat', required
        - `status` 'ACTIVE' | 'INACTIVE'
        - `metrics` string[], required
        - `filters` object[]
          - `conditions` object[], required
            - `type` 'AGENT' | 'CALL_SOURCE' | 'CALL_PROPERTY' | 'INTEGRATION', required
            - `key` string, required
            - `operator` 'EQUALS' | 'NOT_EQUALS' | 'CONTAINS' | 'STARTS_WITH' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_THAN_OR_EQUALS' | 'LESS_THAN_OR_EQUALS'
            - `value` string
      - MetricConfig
        - `kind` 'metric', required
        - `name` string, required
        - `displayName` string
        - `type` 'BOOLEAN' | 'SCALE' | 'NUMERIC' | 'TEXT' | 'CLASSIFICATION', required
        - `prompt` string, required
        - `scope` 'GLOBAL' | 'PER_PARTICIPANT'
        - `participantRole` 'AGENT' | 'CUSTOMER'
        - `contexts` string[]
        - `trueLabel` string
        - `falseLabel` string
        - `scaleMin` integer
        - `scaleMax` integer
        - `scaleLabels` object[]
          - `rangeMin` number, required
          - `rangeMax` number, required
          - `label` string, required
          - `description` string
          - `displayOrder` integer, required
          - `colorHex` string
        - `options` object[]
          - `label` string, required
          - `description` string
          - `displayOrder` integer, required
        - `maxSelections` integer
  - `prune` boolean

## Response `200`

The applied changes

- object
  - `data` ConfigApplyResponse, required
    - `changes` ConfigApplyChange[], required
      - `configKey` string, required
      - `kind` 'agent' | 'persona' | 'flow' | 'collector' | 'metric', required
      - `name` string, required
      - `op` 'create' | 'update' | 'delete' | 'noop', required
      - `detail` string
    - `summary` ConfigApplySummary, required
      - `create` integer, required
      - `update` integer, required
      - `delete` integer, required
      - `noop` integer, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `429` — Too Many Requests
- `500` — Internal Server Error

## Changes

- **2026-08-26** `b4a59c7057ca` — 1 breaking, 1 info
  - removed `subschema #2` from the `resources/items/` request property `anyOf` list
  - added `#/components/schemas/PersonaConfig` to the `resources/items/` request property `anyOf` list
- **2026-08-24** `9d1dbe616930` — 4 info
  - added `#/components/schemas/ConfigDiffChange` to the `data/changes/items/` response property `allOf` list for the response status `200`
  - added `#/components/schemas/ConfigDiffSummary` to the `data/summary` response property `allOf` list for the response status `200`
  - removed `#/components/schemas/ConfigPlanChange` from the `data/changes/items/` response property `allOf` list for the response status `200`
  - removed `#/components/schemas/ConfigPlanSummary` from the `data/summary` response property `allOf` list for the response status `200`
- **2026-08-24** `7fa0ac65b2d3` — 10 breaking, 1 warning, 2 info
  - the `data/changes/items/` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - the `data/summary` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - removed the required property `data/changes/items/configKey` from the response with the `200` status
  - removed the required property `data/changes/items/kind` from the response with the `200` status
  - …9 more
- …earlier changes not shown

[Full history](https://skmtc.dev/roarkhq/apis/roark-analytics-api/changes/v1/config/apply/post.md)

---

[API](https://skmtc.dev/roarkhq/apis/roark-analytics-api.md) · [All operations](https://skmtc.dev/roarkhq/apis/roark-analytics-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/roarkhq/roark-analytics-api/revisions/1d61b68e9429/schema)
