> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cekura.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Agent v3

> Create an agent and return it once it is ready. Takes the same fields as Create Agent (`POST /v2/aiagents/`). With `provider.configure_from_provider: true` the agent is first imported from its cloud provider, usually within 2 minutes; 409 when that assistant is already imported into the project.



## OpenAPI

````yaml post /test_framework/v3/aiagents/
openapi: 3.1.0
info:
  title: Cekura API
  version: v1
  description: >-
    Complete API documentation for the Cekura platform. This API provides
    endpoints for testing, observing, and evaluating AI voice agents — including
    managing agents, running evaluators, defining metrics, and analyzing call
    quality.
servers:
  - url: https://api.cekura.ai
security: []
paths:
  /test_framework/v3/aiagents/:
    post:
      tags:
        - test_framework
      summary: Create agent
      description: >-
        Create an agent and return it once it is ready. Takes the same fields as
        Create Agent (`POST /v2/aiagents/`). With
        `provider.configure_from_provider: true` the agent is first imported
        from its cloud provider, usually within 2 minutes; 409 when that
        assistant is already imported into the project.
      operationId: aiagents-v3-create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SchemaPostAIAgentV2'
            examples:
              ImportAVAPIAssistant:
                value:
                  project: 123
                  provider:
                    type: vapi
                    configure_from_provider: true
                    agent_id: asst_abc123
                    credentials:
                      api_key: your-vapi-private-key
                summary: Import a VAPI assistant
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/SchemaPostAIAgentV2'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/SchemaPostAIAgentV2'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - completed
                      - failed
                    description: >-
                      `failed` when the job could not produce its result; see
                      `error` / `errors`.
                  agent_id:
                    type: integer
                  current_stage:
                    type:
                      - string
                      - 'null'
                    description: Null when the agent was created without an import.
                  stages:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                        label:
                          type: string
                        status:
                          type: string
                          enum:
                            - pending
                            - in_progress
                            - completed
                            - failed
                            - skipped
                        detail:
                          type:
                            - string
                            - 'null'
                  error:
                    type:
                      - string
                      - 'null'
                    description: Why the job failed, when it did.
                  agent:
                    type: object
                    description: >-
                      The created agent, as the agents API returns it. When the
                      import failed, it holds what was configured before the
                      failure.
          description: ''
        '201':
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - completed
                      - failed
                    description: >-
                      `failed` when the job could not produce its result; see
                      `error` / `errors`.
                  agent_id:
                    type: integer
                  current_stage:
                    type:
                      - string
                      - 'null'
                    description: Null when the agent was created without an import.
                  stages:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                        label:
                          type: string
                        status:
                          type: string
                          enum:
                            - pending
                            - in_progress
                            - completed
                            - failed
                            - skipped
                        detail:
                          type:
                            - string
                            - 'null'
                  error:
                    type:
                      - string
                      - 'null'
                    description: Why the job failed, when it did.
                  agent:
                    type: object
                    description: >-
                      The created agent, as the agents API returns it. When the
                      import failed, it holds what was configured before the
                      failure.
          description: 'Created without an import: `stages` is empty.'
        '400':
          content:
            application/json:
              schema:
                type: object
                properties:
                  field_name:
                    type: array
                    items:
                      type: string
          description: ''
        '403':
          description: No access to the agent, project, metric or result the job runs on.
        '409':
          description: The assistant is already imported into this project.
        '504':
          description: >-
            The job did not finish within 15 minutes. It may still complete in
            the background.
      security:
        - api_key: []
        - oauth2: []
        - supabase_session: []
components:
  schemas:
    SchemaPostAIAgentV2:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
          description: |-
            Agent ID.
            Example: `2142`
        name:
          type: string
          description: >-
            Agent name. Optional when configure_from_provider is set — it's
            fetched from the provider.
          maxLength: 255
        description:
          type: string
          description: >

            A detailed description of what this agent does and how it should
            interact

            Example: 

            ```text

            AI agent for handling customer support inquiries and resolving
            technical issues

            ```
        project:
          type: integer
          description: The project this agent belongs to
        language:
          enum:
            - af
            - ar
            - bn
            - bg
            - zh
            - cs
            - da
            - nl
            - en
            - et
            - fi
            - fr
            - de
            - el
            - gu
            - hi
            - he
            - hu
            - id
            - it
            - ja
            - kn
            - kk
            - ko
            - ms
            - ml
            - mr
            - multi
            - 'no'
            - pl
            - pa
            - pt
            - ro
            - ru
            - sk
            - es
            - sv
            - th
            - tr
            - tl
            - ta
            - te
            - uk
            - uz
            - vi
          type: string
          x-spec-enum-id: f996e9ef7edb7fea
          default: en
          description: >-

            The primary language this agent uses for communication (e.g. 'en'
            for English)



            * `af` - Afrikaans

            * `ar` - Arabic

            * `bn` - Bengali

            * `bg` - Bulgarian

            * `zh` - Chinese Simplified

            * `cs` - Czech

            * `da` - Danish

            * `nl` - Dutch

            * `en` - English

            * `et` - Estonian

            * `fi` - Finnish

            * `fr` - French

            * `de` - German

            * `el` - Greek

            * `gu` - Gujarati

            * `hi` - Hindi

            * `he` - Hebrew

            * `hu` - Hungarian

            * `id` - Indonesian

            * `it` - Italian

            * `ja` - Japanese

            * `kn` - Kannada

            * `kk` - Kazakh

            * `ko` - Korean

            * `ms` - Malay

            * `ml` - Malayalam

            * `mr` - Marathi

            * `multi` - Multilingual

            * `no` - Norwegian

            * `pl` - Polish

            * `pa` - Punjabi

            * `pt` - Portuguese

            * `ro` - Romanian

            * `ru` - Russian

            * `sk` - Slovak

            * `es` - Spanish

            * `sv` - Swedish

            * `th` - Thai

            * `tr` - Turkish

            * `tl` - Tagalog

            * `ta` - Tamil

            * `te` - Telugu

            * `uk` - Ukrainian

            * `uz` - Uzbek

            * `vi` - Vietnamese
        telephony:
          allOf:
            - $ref: '#/components/schemas/AgentTelephony'
          writeOnly: true
          description: Phone and SIP/websocket channel configuration.
        provider:
          allOf:
            - $ref: '#/components/schemas/SchemaAgentProviderCreate'
          writeOnly: true
          description: >-
            AI platform integration. Nested credentials replace the flat
            {provider}_api_key fields.
        agent_speaks_first:
          type:
            - boolean
            - 'null'
          description: >-
            True = agent speaks first; False = test user speaks first; null =
            auto-detect.
        predefined_metrics:
          writeOnly: true
          description: predefined metrics to use for the agent
        knowledge_base_files:
          type: array
          items:
            $ref: '#/components/schemas/AgentKnowledgeBaseFileWrite'
          writeOnly: true
          description: >-
            Full desired set of knowledge base files. Reference existing by
            `id`; add new ones with `file_name` + `content_base64`. Omitted
            existing files are deleted.
        enabled_personalities:
          type: array
          items:
            type: integer
          readOnly: true
          description: |

            Personality profiles enabled for this agent
            Example: `[1, 2, 3]`
        webhook_url:
          type: string
          format: uri
          description: >-
            Webhook URL for this agent. When set, overrides the project-level
            webhook URL for events from this agent.
        webhook_secret:
          type: string
          writeOnly: true
          description: >-
            Secret sent in X-CEKURA-SECRET header. Applies when agent
            webhook_url is set. Write-only — never returned in API responses.
            Use `webhook_secret_configured` to check whether one is set.
        webhook_secret_configured:
          type: string
          readOnly: true
        mock_tools:
          type: array
          items:
            $ref: '#/components/schemas/AgentMockToolWrite'
          writeOnly: true
          description: >-
            Full desired set of mock tools. Items with `id` (or a matching
            `name`) update existing tools; items without create new ones.
            Omitted existing tools are deleted.
        mock_tools_enabled:
          type: boolean
          description: >-
            Whether mock tools should be selected by default when configuring a
            run.
        mock_tools_provider:
          type:
            - string
            - 'null'
          readOnly: true
          description: >-
            Provider the mock tools were fetched from (vapi, retell, elevenlabs,
            custom). Null until auto-fetch has been run.
        dynamic_variables:
          type: array
          items:
            $ref: '#/components/schemas/AgentDynamicVariableWrite'
          writeOnly: true
          description: >-
            Full desired set of dynamic variable definitions, matched by name.
            Omitted existing variables are deleted.
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: |

            Timestamp when the agent was created
            Example: `"2021-01-01T00:00:00Z"`
        updated_at:
          type: string
          format: date-time
          readOnly: true
          description: |

            Timestamp when the agent was last updated
            Example: `"2021-01-01T00:00:00Z"`
        email_id:
          type:
            - string
            - 'null'
          format: email
          description: >-
            Email address this agent receives at. When set, enables email-based
            test runs.
          maxLength: 254
      required:
        - description
    AgentTelephony:
      type: object
      description: Phone / SIP / websocket voice channel configuration for the agent.
      properties:
        phone_number:
          type: string
          description: >-
            The agent's own E.164 number, not a customer's: Cekura dials it for
            inbound tests, and the agent's outbound calls come from it. E.g.
            +14155551234.
        inbound:
          type: boolean
          default: false
          description: >-
            True = agent receives inbound calls; False = outbound only. A
            property of the agent, not of one run: never flip it to change who
            dials whom. To dial a different number in a run, pass
            `outbound_phone_number` to the run.
        sip_uri:
          type:
            - string
            - 'null'
          description: SIP URI, e.g. sip:user@domain.com.
        sip_originating_region:
          enum:
            - us-east
            - us-west
            - null
          type:
            - string
            - 'null'
          x-spec-enum-id: d4fc86b9d59312c1
          description: >-
            Optional Twilio SIP region for direct SIP runs: us-east uses us1 and
            us-west uses us2. Null keeps Twilio's provider default.


            * `us-east` - US East

            * `us-west` - US West
        sip_auth:
          oneOf:
            - {}
            - type: 'null'
          description: 'SIP credentials: {username, password}.'
        websocket_url:
          type:
            - string
            - 'null'
          description: >-
            Raw-PCM (16kHz 16-bit mono) websocket endpoint Cekura dials to run
            the whole call over a websocket you host, e.g.
            wss://your-host/voice.
        websocket_auth:
          oneOf:
            - {}
            - type: 'null'
          description: >-
            HTTP Basic Auth credentials for the websocket upgrade: {username,
            password}.
        outbound_numbers:
          type: array
          items:
            type: string
          description: >-
            Phone numbers authorized for outbound calls (E.164 format). Example:
            `["+14155551234", "+14155550000"]`
    SchemaAgentProviderCreate:
      type: object
      properties:
        type:
          enum:
            - vapi
            - retell
            - elevenlabs
            - agentforce
            - cisco
            - bland
            - livekit
            - pipecat
            - synthflow
            - agora
            - koreai
            - genesys
            - amazon_connect
            - telnyx
            - gemini_cx
            - assemblyai
            - custom
            - ''
          type: string
          x-spec-enum-id: 8e55ed6a62d00075
          description: >-
            Voice/inbound platform provider type. Valid values: vapi, retell,
            elevenlabs, bland, livekit, cisco, gemini_cx, assemblyai, synthflow,
            koreai, genesys, amazon_connect, pipecat, custom. Use 'custom' (or
            omit) for chat-only agents with no voice provider — the chat channel
            goes in chat_agent_details.type. For a raw-PCM websocket voice agent
            you host yourself, use type='custom' and put the endpoint in
            telephony.websocket_url. Text-only channels (sms, whatsapp,
            agentforce, sierra) belong in chat_agent_details.type, not here.


            * `vapi` - Vapi

            * `retell` - Retell

            * `elevenlabs` - Elevenlabs

            * `agentforce` - Agentforce

            * `cisco` - Cisco

            * `bland` - Bland

            * `livekit` - Livekit

            * `pipecat` - Pipecat

            * `synthflow` - Synthflow

            * `agora` - Agora

            * `koreai` - Koreai

            * `genesys` - Genesys

            * `amazon_connect` - Amazon Connect

            * `telnyx` - Telnyx

            * `gemini_cx` - Gemini Enterprise CX

            * `assemblyai` - AssemblyAI

            * `custom` - Custom (chat-only, no voice provider)
        agent_id:
          type:
            - string
            - 'null'
          description: >-
            Agent ID for voice/inbound runs on the provider's platform. For
            vapi, elevenlabs, retell, synthflow, telnyx, assemblyai, and bland
            this is the voice agent ID (for bland it's the persona_id). Bland's
            pathway_id and retell's chat agent ID go in
            chat_agent_details.config.agent_id.
        credentials:
          oneOf:
            - $ref: '#/components/schemas/AgentCredentials'
            - type: 'null'
        chat_agent_details:
          oneOf:
            - $ref: '#/components/schemas/ChatAgentDetails'
            - type: 'null'
          description: >-
            Optional chat/text-mode configuration. Defines which provider
            handles text-mode test runs. The allowed chat type depends on the
            voice provider.type.
        chat_provider:
          type: string
          readOnly: true
          description: >-
            Read-only. The provider that runs this agent's text-mode
            conversations. Mirrors chat_agent_details.type when that block is
            present, and is also reported for chat-only agents whose chat
            runtime is a voice platform, where chat_agent_details is omitted.
            Set the chat provider via chat_agent_details.
        auto_dial_outbound:
          type:
            - boolean
            - 'null'
          description: >-
            Auto-dial the outbound number when running outbound scenarios.
            Supported for: vapi, retell, elevenlabs, bland, livekit.
        auto_import_calls:
          type:
            - boolean
            - 'null'
          description: >-
            Auto-import calls from the provider every 30s. Supported for: vapi,
            retell, elevenlabs.
        auto_sync_prompt:
          type:
            - boolean
            - 'null'
          description: >-
            Enable one-way prompt sync from the provider to Cekura on a
            schedule. Cekura re-fetches the provider prompt and updates the
            agent description; it does not push Cekura description changes back
            to the provider. Supported for: vapi, retell, elevenlabs, synthflow,
            telnyx, bland.
        send_post_conversation_metadata:
          type:
            - boolean
            - 'null'
          description: >-
            Enable Cekura to accept call transcripts pushed by your agent via
            POST /custom-provider-webhook/. Only for self-hosted (custom)
            providers.
        redact_fields:
          type:
            - array
            - 'null'
          items:
            enum:
              - person_name
              - age
              - phone_number
              - email_address
              - date
              - time
              - location
              - origin
              - gender_sexuality
              - physical_attribute
              - occupation
              - username
              - password
              - ip_address
              - url
              - filename
              - event
              - vehicle_id
              - dob
              - healthcare_number
              - medical_professional
              - credit_card
              - account_number
              - bank_account
              - money
              - ssn
              - passport_number
              - driver_license
              - numerical_pii
            type: string
            description: |-
              * `person_name` - person_name
              * `age` - age
              * `phone_number` - phone_number
              * `email_address` - email_address
              * `date` - date
              * `time` - time
              * `location` - location
              * `origin` - origin
              * `gender_sexuality` - gender_sexuality
              * `physical_attribute` - physical_attribute
              * `occupation` - occupation
              * `username` - username
              * `password` - password
              * `ip_address` - ip_address
              * `url` - url
              * `filename` - filename
              * `event` - event
              * `vehicle_id` - vehicle_id
              * `dob` - dob
              * `healthcare_number` - healthcare_number
              * `medical_professional` - medical_professional
              * `credit_card` - credit_card
              * `account_number` - account_number
              * `bank_account` - bank_account
              * `money` - money
              * `ssn` - ssn
              * `passport_number` - passport_number
              * `driver_license` - driver_license
              * `numerical_pii` - numerical_pii
            x-spec-enum-id: 99d2b7efd95189c4
          description: >-
            Sensitive fields removed from the transcript and audio of every call
            ingested for this agent, including auto-imported and webhook calls.
            Empty list disables redaction. Billed at 0.1 credits per call minute
            by default whenever any field is set.
        configure_from_provider:
          type: boolean
          default: false
          description: >-
            When true on create for a cloud provider
            (vapi/retell/elevenlabs/synthflow), Cekura fetches the assistant's
            prompt, settings, phone, tools, dynamic variables and knowledge base
            and configures the agent automatically. Requires agent_id +
            credentials.api_key. The create response includes a progress_id to
            poll import-progress/.
    AgentKnowledgeBaseFileWrite:
      type: object
      description: >-
        One knowledge base file entry in the v2 agent write payload (request
        side of `knowledge_base_files`).
      properties:
        id:
          type: integer
          description: >-
            ID of an existing file to keep. Files omitted from the list are
            deleted.
        file_name:
          type: string
          description: >-
            Name for a new file, including extension (pdf, txt, json, csv, xml,
            md).
        name:
          type: string
          description: Alias for file_name.
        content_base64:
          type: string
          description: >-
            Base64-encoded content for a new file. A data-URI prefix is
            accepted.
    AgentMockToolWrite:
      type: object
      description: >-
        One mock tool entry in the v2 agent write payload (request side of
        `mock_tools`).
      properties:
        id:
          type: integer
          description: >-
            ID of an existing mock tool to update. Omit to create a new tool (or
            update by matching name).
        name:
          type: string
          description: >-
            Tool name. Required for new tools. Alphanumerics, underscores and
            hyphens only; under 64 characters.
          maxLength: 255
        description:
          type: string
          description: What the tool does.
        mock_data:
          description: >-
            List of {input, output, response?} mappings returned when the tool
            is called in mock mode. Optional `response` ({status_code, headers,
            delay_ms}) simulates a failing or slow tool; `headers` apply to
            webhook-style tools only. Optional `match` ("exact"), `state` and
            `then` make a mapping strict or depend on earlier calls in the same
            call; see the tool's `information` field.
        freetext_params:
          type: array
          items:
            type: string
          description: >-
            Parameter names skipped during mock matching because they are
            free-text (e.g. ["notes", "reason"]).
        served_via:
          allOf:
            - $ref: '#/components/schemas/AgentMockToolServedViaWrite'
          description: >-
            How the agent reaches this tool at runtime. Omit for a direct
            per-tool URL; set type='mcp' with a mock_index to group tools under
            a shared MCP endpoint.
    AgentDynamicVariableWrite:
      type: object
      description: >-
        One dynamic variable entry in the v2 agent write payload (request side
        of `dynamic_variables`).
      properties:
        id:
          type: integer
          description: Ignored on write — variables are matched by name.
        name:
          type: string
          description: Variable name exactly as it appears in the agent context.
          maxLength: 255
        description:
          type: string
          description: What the variable represents and its expected format.
      required:
        - description
        - name
    AgentCredentials:
      type: object
      description: Nested credentials block inside the provider object.
      properties:
        api_key:
          type: string
          writeOnly: true
          description: >-
            API key or client secret for the provider (write-only — never
            returned). Required for: vapi, retell, elevenlabs, bland, livekit,
            pipecat, synthflow, telnyx, assemblyai. koreai and genesys use their
            client secret (passed as api_key); cisco only when using a
            customer-owned Service App. Not needed for: self_hosted, gemini_cx
            (Cekura impersonates config.service_account_email; no key).
        config:
          oneOf:
            - $ref: '#/components/schemas/ProviderCredentialsConfig'
            - type: 'null'
    ChatAgentDetails:
      type: object
      description: Chat-mode provider configuration nested inside the provider block.
      properties:
        type:
          enum:
            - retell
            - bland
            - vapi
            - elevenlabs
            - livekit
            - agora
            - pipecat
            - sms
            - whatsapp
            - self_hosted
            - agentforce
            - amazon_connect
            - koreai
            - sierra
            - ''
          type: string
          x-spec-enum-id: b896c086cc3529ef
          description: >-
            Chat provider type. Must be compatible with the voice provider.type.
            Valid values: retell, bland, vapi, elevenlabs, livekit, agora, sms,
            whatsapp, self_hosted, agentforce, amazon_connect, koreai, sierra.
            Pass an empty string "" (or send chat_agent_details: null) to clear
            the chat overlay.


            * `retell` - retell

            * `bland` - bland

            * `vapi` - vapi

            * `elevenlabs` - elevenlabs

            * `livekit` - livekit

            * `agora` - agora

            * `pipecat` - pipecat

            * `sms` - sms

            * `whatsapp` - whatsapp

            * `self_hosted` - self_hosted

            * `agentforce` - agentforce

            * `amazon_connect` - amazon_connect

            * `koreai` - koreai

            * `sierra` - sierra
        config:
          oneOf:
            - $ref: '#/components/schemas/ChatAgentConfig'
            - type: 'null'
    AgentMockToolServedViaWrite:
      type: object
      description: >-
        Runtime routing for a mock tool on write (request side of
        `mock_tools[].served_via`).
      properties:
        type:
          enum:
            - direct
            - mcp
          type: string
          x-spec-enum-id: b34eaed2d733c895
          default: direct
          description: >-
            'direct' = per-tool webhook URL (default). 'mcp' = served through an
            MCP endpoint; requires mock_index.


            * `direct` - direct

            * `mcp` - mcp
        mock_index:
          type: integer
          minimum: 1
          description: >-
            MCP endpoint index (1-based). Tools sharing an index are served by
            the same MCP endpoint. Required when type='mcp'.
    ProviderCredentialsConfig:
      oneOf:
        - $ref: '#/components/schemas/VapiConfig'
        - $ref: '#/components/schemas/RetellConfig'
        - $ref: '#/components/schemas/ElevenLabsConfig'
        - $ref: '#/components/schemas/BlandConfig'
        - $ref: '#/components/schemas/LiveKitConfig'
        - $ref: '#/components/schemas/SynthflowConfig'
        - $ref: '#/components/schemas/KoreAiConfig'
        - $ref: '#/components/schemas/GenesysConfig'
        - $ref: '#/components/schemas/CiscoConfig'
        - $ref: '#/components/schemas/GeminiEnterpriseCxConfig'
        - $ref: '#/components/schemas/AssemblyAIConfig'
        - $ref: '#/components/schemas/PipecatConfig'
        - $ref: '#/components/schemas/SelfHostedConfig'
        - $ref: '#/components/schemas/AmazonConnectConfig'
    ChatAgentConfig:
      oneOf:
        - $ref: '#/components/schemas/RetellChatConfig'
        - $ref: '#/components/schemas/BlandChatConfig'
        - $ref: '#/components/schemas/AgentforceChatConfig'
        - $ref: '#/components/schemas/SelfHostedChatConfig'
        - $ref: '#/components/schemas/AmazonConnectChatConfig'
        - $ref: '#/components/schemas/KoreAiChatConfig'
        - $ref: '#/components/schemas/SierraChatConfig'
    VapiConfig:
      type: object
      description: VAPI provider configuration.
      properties:
        public_key:
          type: string
          description: >-
            VAPI Public Key for WebRTC sessions only. Not required for telephony
            or chat testing.
        trigger_url:
          type: string
          description: URL Cekura calls to create outbound VAPI phone calls.
        trigger_secret:
          type: string
          writeOnly: true
          description: >-
            Optional shared secret sent as the X-CEKURA-SECRET header on trigger
            URL requests, so your endpoint can reject calls it didn't expect.
            Write-only — responses expose trigger_secret_configured instead.
      title: VAPI
    RetellConfig:
      type: object
      description: Retell provider configuration.
      properties:
        trigger_url:
          type: string
          description: URL Cekura calls to create outbound Retell phone calls.
        trigger_secret:
          type: string
          writeOnly: true
          description: >-
            Optional shared secret sent as the X-CEKURA-SECRET header on trigger
            URL requests, so your endpoint can reject calls it didn't expect.
            Write-only — responses expose trigger_secret_configured instead.
      title: Retell
    ElevenLabsConfig:
      type: object
      description: ElevenLabs provider configuration.
      properties:
        trigger_url:
          type: string
          description: URL Cekura calls to create outbound ElevenLabs phone calls.
        trigger_secret:
          type: string
          writeOnly: true
          description: >-
            Optional shared secret sent as the X-CEKURA-SECRET header on trigger
            URL requests, so your endpoint can reject calls it didn't expect.
            Write-only — responses expose trigger_secret_configured instead.
        elevenlabs_region:
          enum:
            - us
            - eu
          type: string
          x-spec-enum-id: 450cf1402ab1a3c6
          description: >-
            ElevenLabs API region. 'us' uses api.elevenlabs.io, 'eu' uses
            api.eu.residency.elevenlabs.io. Defaults to 'us'.


            * `us` - us

            * `eu` - eu
        elevenlabs_base_url_override:
          type: string
          description: >-
            Optional custom base URL for ElevenLabs API. Takes precedence over
            elevenlabs_region if set.
        elevenlabs_environment:
          type: string
          description: >-
            ElevenLabs environment used to resolve the agent's environment
            variables (tool URLs, secrets, headers) on test runs, e.g. test.
            Must match an environment configured in ElevenLabs. Omit or send
            blank to use production.
        elevenlabs_branch_id:
          type: string
          description: >-
            ElevenLabs agent branch to run conversations against. Omit or send
            blank to use the agent's default branch.
      title: ElevenLabs
    BlandConfig:
      type: object
      description: Bland AI provider configuration.
      properties:
        encrypted_key:
          type: string
          description: >-
            Twilio credential bundle for Bland outbound calls. Required when
            using Bland with Twilio telephony.
      title: Bland
    LiveKitConfig:
      type: object
      description: LiveKit provider configuration.
      properties:
        api_secret:
          type: string
          description: LiveKit API secret. Required alongside api_key.
        url:
          type: string
          description: LiveKit server WebSocket URL, e.g. wss://acme.livekit.cloud.
        agent_name:
          type: string
          description: LiveKit agent name to connect to.
        config:
          description: Additional LiveKit configuration as a JSON object.
        tracing_enabled:
          type: boolean
          description: >-
            Enable LiveKit tracing (requires Cekura SDK integrated in your
            LiveKit agent).
        trigger_url:
          type: string
          description: URL Cekura calls to create outbound phone calls.
        trigger_secret:
          type: string
          writeOnly: true
          description: >-
            Optional shared secret sent as the X-CEKURA-SECRET header on trigger
            URL requests, so your endpoint can reject calls it didn't expect.
            Write-only — responses expose trigger_secret_configured instead.
      required:
        - api_secret
        - url
      title: LiveKit
    SynthflowConfig:
      type: object
      description: Synthflow provider configuration.
      properties:
        synthflow_base_url_override:
          type: string
          description: >-
            Optional custom base URL for Synthflow API, e.g. for EU residency.
            Leave empty to use the default endpoint.
      title: Synthflow
    KoreAiConfig:
      type: object
      description: >-
        Kore.ai provider configuration. XO platform (default) uses api_key +
        client_id + bot_id; the Artemis agent platform uses the artemis_* keys.
        Both sets can be stored side by side; platform selects the active one.
      properties:
        platform:
          enum:
            - xo
            - artemis
          type: string
          x-spec-enum-id: b86d1a405f4d0697
          description: |-
            Kore product the agent runs on: "xo" (default) or "artemis".

            * `xo` - xo
            * `artemis` - artemis
        client_id:
          type: string
          description: KoreAI OAuth2 Client ID. XO platform.
        bot_id:
          type: string
          description: KoreAI Bot ID to connect to. XO platform.
        host:
          type: string
          description: KoreAI XO host. Defaults to bots.kore.ai.
        artemis_api_key:
          type: string
          writeOnly: true
          description: >-
            Artemis project-bound x-api-key. Encrypted at rest; returned as
            artemis_api_key_configured.
        artemis_host:
          type: string
          description: Artemis host, e.g. ind-agents.kore.ai.
        artemis_project_id:
          type: string
          description: Artemis project ID the API key is bound to.
      title: Kore.ai
    GenesysConfig:
      type: object
      description: Genesys Cloud provider configuration.
      properties:
        client_id:
          type: string
          description: Genesys Cloud OAuth2 Client ID.
        region:
          type: string
          description: Genesys Cloud region, e.g. us-east-1.
      required:
        - client_id
        - region
      title: Genesys
    CiscoConfig:
      type: object
      description: Cisco Webex Contact Center provider configuration.
      properties:
        org_id:
          type: string
          description: Control Hub organization UUID of the contact center tenant.
        region:
          type: string
          description: Contact Center datacenter, e.g. us1, eu1, anz1. Defaults to us1.
        client_id:
          type: string
          description: >-
            Service App client ID (pair with the client secret and
            refresh_token).
        refresh_token:
          type: string
          writeOnly: true
          description: Service App refresh token; stored encrypted.
      required:
        - org_id
      title: Cisco Webex
    GeminiEnterpriseCxConfig:
      type: object
      description: >-
        Gemini Enterprise CX (Google CX Agent Studio) provider configuration. No
        API key: Cekura impersonates the reader service account.
      properties:
        service_account_email:
          type: string
          description: >-
            Your reader service account (name@project.iam.gserviceaccount.com)
            that Cekura's per-agent identity is allowed to act as.
        project_id:
          type: string
          description: >-
            GCP project that hosts the agent. Defaults to the project named in
            the service-account email.
        location:
          type: string
          description: >-
            Agent region, e.g. us-central1 or global. The CX agent id goes in
            provider.agent_id.
      required:
        - location
        - service_account_email
      title: Gemini Enterprise CX
    AssemblyAIConfig:
      type: object
      description: >-
        AssemblyAI Voice Agent API provider configuration. The API key goes in
        credentials.api_key, the agent id in provider.agent_id.
      properties:
        region:
          enum:
            - us
            - eu
          type: string
          x-spec-enum-id: 450cf1402ab1a3c6
          description: >-
            AssemblyAI deployment the agent lives in. Defaults to us (phone
            agents are US-hosted).


            * `us` - us

            * `eu` - eu
    PipecatConfig:
      type: object
      description: Pipecat provider configuration.
      properties:
        pipecat_agent_name:
          type: string
          description: Name of the Pipecat agent. Required when tracing_enabled is false.
        config:
          description: Additional agent configuration as a JSON object.
        room_properties:
          description: Room properties configuration as a JSON object.
        webhook_url:
          type: string
          description: Webhook URL for Pipecat call events.
        tracing_enabled:
          type: boolean
          description: >-
            Enable Pipecat tracing (requires Cekura SDK integrated in your
            Pipecat agent). When true, pipecat_agent_name is not required.
      title: Pipecat
    SelfHostedConfig:
      type: object
      description: Self-hosted provider configuration.
      properties:
        send_post_conversation_metadata:
          type: boolean
          description: >-
            Enable Cekura to accept call transcripts pushed by your agent via
            POST /custom-provider-webhook/. Set to true when your agent sends
            its own transcripts to Cekura after each call.
        trigger_url:
          type: string
          description: >-
            URL Cekura calls to create outbound phone calls. Required to enable
            auto_dial_outbound for the custom provider; must answer 2xx within
            30s.
        trigger_secret:
          type: string
          writeOnly: true
          description: >-
            Optional shared secret sent as the X-CEKURA-SECRET header on trigger
            URL requests, so your endpoint can reject calls it didn't expect.
            Write-only — responses expose trigger_secret_configured instead.
      title: Self-hosted
    AmazonConnectConfig:
      type: object
      description: Amazon Connect provider configuration.
      properties:
        widget_id:
          type: string
          description: Chat widget UUID from the Amazon Connect console.
        snippet_id:
          type: string
          description: Base64-encoded KMS snippet from your Amazon Connect chat widget.
        connect_host:
          type: string
          description: Amazon Connect instance host, e.g. acme.my.connect.aws.
        region:
          type: string
          description: AWS region for the Connect instance. Defaults to us-east-1.
    RetellChatConfig:
      type: object
      description: Retell chat configuration.
      properties:
        agent_id:
          type: string
          description: >-
            The Retell chat agent ID to use for text-mode test runs. Optional —
            when omitted, a temporary chat agent is cloned from the voice agent
            for each run.
      title: Retell
    BlandChatConfig:
      type: object
      description: Bland chat configuration.
      properties:
        agent_id:
          type: string
          description: The Bland pathway_id to use for text-mode test runs.
      required:
        - agent_id
      title: Bland
    AgentforceChatConfig:
      type: object
      description: Agentforce (Salesforce) chat configuration.
      properties:
        client_secret:
          type: string
          description: OAuth2 client secret for Salesforce authentication.
        client_id:
          type: string
          description: OAuth2 client ID for Salesforce authentication.
        domain:
          type: string
          description: Salesforce domain, e.g. https://example.sandbox.my.salesforce.com.
        agent_id:
          type: string
          description: Agentforce agent ID (0Xx...).
      required:
        - agent_id
        - client_id
        - client_secret
        - domain
      title: Agentforce
    SelfHostedChatConfig:
      type: object
      description: Self-hosted websocket chat configuration.
      properties:
        url:
          type: string
          description: WebSocket endpoint URL (wss://) to connect for text-mode test runs.
        headers:
          type: object
          additionalProperties: {}
          description: >-
            Optional headers to send on the WebSocket upgrade request, e.g.
            {"Authorization": "Bearer token"}.
        websocket_secret:
          type: string
          writeOnly: true
          description: >-
            Secret sent as the X-VOCERA-SECRET header on the WebSocket upgrade
            (write-only — masked in responses).
      required:
        - url
      title: Self-hosted (WebSocket)
    AmazonConnectChatConfig:
      type: object
      description: Amazon Connect chat-widget configuration.
      properties:
        widget_id:
          type: string
          description: Chat-widget UUID from the Amazon Connect console.
        snippet_id:
          type: string
          description: Base64-encoded KMS snippet from your Amazon Connect chat widget.
        connect_host:
          type: string
          description: Amazon Connect instance host, e.g. acme.my.connect.aws.
        region:
          type: string
          description: AWS region for the Connect instance. Defaults to us-east-1.
      required:
        - connect_host
        - snippet_id
        - widget_id
    KoreAiChatConfig:
      type: object
      description: Kore.ai XO chat configuration.
      properties:
        api_secret:
          type: string
          writeOnly: true
          description: Kore XO Web/Mobile Client API key. Encrypted at rest.
        api_secret_configured:
          type: boolean
          readOnly: true
          description: Whether the Kore XO Web/Mobile Client API key is configured.
        host:
          type: string
          description: Kore XO host. Defaults to platform.kore.ai.
        rtm_signing_public_key:
          type: string
          description: >-
            Optional Kore secure-RTM ECDSA P-256 public-key PEM used to verify
            the provider handshake.
        allow_unverified_secure_rtm:
          type: boolean
          description: >-
            Allow secure RTM without a signing-key pin. Defaults to true for
            existing credentials; set false to require rtm_signing_public_key.
    SierraChatConfig:
      type: object
      description: Sierra chat configuration.
      properties:
        agent_token:
          type: string
          description: Sierra Headless API agent token (write-only — masked in responses).
        host:
          type: string
          description: >-
            Sierra API host. Defaults to api.sierra.chat; customer-specific
            hosts differ.
        api_secret:
          type: string
          description: >-
            Bearer API key, only needed when the Sierra org enforces Headless
            API authentication (write-only — masked in responses).
      required:
        - agent_token
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: X-CEKURA-API-KEY
      description: >-
        API Key Authentication. It should be included in the header of each
        request.
    oauth2:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: OAuth access token issued by Cekura for connected apps.
    supabase_session:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Cekura dashboard session token. Not a customer API credential.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.