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

# Create a test in a test suite

> Creates the test and its first content version in an existing suite. Choose at least one persona. The agent and connection are selected when starting a run, not when creating the test.



## OpenAPI

````yaml openapi.json POST /v1/tests
openapi: 3.1.0
info:
  title: Egma Platform API
  version: 1.0.0
  description: >-
    The customer-facing HTTP interface used by Egma's web app, CLI, and outside
    clients.
servers:
  - url: https://app.egma.ai
security: []
paths:
  /v1/tests:
    post:
      tags:
        - Tests
      summary: Create a test in a test suite
      description: >-
        Creates the test and its first content version in an existing suite.
        Choose at least one persona. The agent and connection are selected when
        starting a run, not when creating the test.
      operationId: createTest
      parameters:
        - name: projectId
          in: query
          required: false
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                suiteId:
                  type: string
                  minLength: 1
                  description: An existing active test suite in the current project.
                name:
                  type: string
                description:
                  anyOf:
                    - type: string
                    - type: 'null'
                scenario:
                  type: string
                  description: The situation and goal the synthetic caller acts out.
                expectedBehaviors:
                  type: array
                  items:
                    type: string
                  description: >-
                    Statements checked independently against the completed
                    conversation. Include at least one non-empty statement.
                personas:
                  type: array
                  items:
                    type: string
                  description: >-
                    At least one available persona ID or unambiguous current
                    name. Each selected persona creates one simulation for this
                    test in a run.
                mockTools:
                  type: array
                  items:
                    description: >-
                      One named tool's fixed response for this test. Supply
                      exactly one of answer or error. Tools without a mock run
                      normally.
                    oneOf:
                      - type: object
                        properties:
                          tool:
                            type: string
                          answer: {}
                          error:
                            not: {}
                        required:
                          - tool
                          - answer
                        additionalProperties: false
                      - type: object
                        properties:
                          tool:
                            type: string
                          answer:
                            not: {}
                          error:
                            type: string
                        required:
                          - tool
                          - error
                        additionalProperties: false
                  description: >-
                    Test-owned tool answers. Use an empty array to remove
                    existing mocks on update. Applying mocks requires a
                    supported connection and, for LiveKit, tool instrumentation.
                env:
                  anyOf:
                    - type: object
                      properties:
                        retell_dynamic_variables:
                          type: object
                          description: >-
                            String values supplied to the Retell agent before
                            the conversation. Variable names beginning with
                            egma_ are reserved.
                          additionalProperties:
                            type: string
                        job_dispatch_metadata:
                          type: object
                          description: >-
                            Context delivered to the LiveKit worker in
                            ctx.job.metadata.
                          additionalProperties: true
                      additionalProperties: false
                    - type: 'null'
                  description: >-
                    Non-secret startup context for the agent's provider. Omit to
                    keep existing context on update, or send null to clear it.
              required:
                - suiteId
                - name
                - scenario
                - expectedBehaviors
                - personas
              additionalProperties: false
              examples:
                - suiteId: ste_01M0E4EVJ6ECGVJEA4NSBTC0CC
                  name: No available appointments
                  description: >-
                    The caller asks for an appointment when the calendar is
                    full.
                  scenario: >-
                    Ask Harbor Clinic for an afternoon appointment. If none is
                    available, ask how to arrange a callback.
                  expectedBehaviors:
                    - The agent calls check_availability.
                    - >-
                      The agent says that no appointments are available and does
                      not offer a time.
                  personas:
                    - Everyday caller
                  mockTools:
                    - tool: check_availability
                      answer:
                        slots: []
                  env:
                    retell_dynamic_variables:
                      clinic_name: Harbor Clinic
      responses:
        '201':
          description: The new test.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    minLength: 1
                  projectId:
                    type: string
                    minLength: 1
                  suiteId:
                    type: string
                    minLength: 1
                  name:
                    type: string
                  description:
                    anyOf:
                      - type: string
                      - type: 'null'
                  version:
                    type: integer
                    minimum: 1
                  versionId:
                    type: string
                    minLength: 1
                  scenario:
                    type: string
                  expectedBehaviors:
                    type: array
                    items:
                      type: string
                  personas:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          minLength: 1
                        name:
                          type: string
                        archivedAt:
                          anyOf:
                            - type: string
                              format: date-time
                            - type: 'null'
                      required:
                        - id
                        - name
                        - archivedAt
                      additionalProperties: false
                  mockTools:
                    type: array
                    items:
                      description: >-
                        One named tool's fixed response for this test. Supply
                        exactly one of answer or error. Tools without a mock run
                        normally.
                      oneOf:
                        - type: object
                          properties:
                            tool:
                              type: string
                            answer: {}
                            error:
                              not: {}
                          required:
                            - tool
                            - answer
                          additionalProperties: false
                        - type: object
                          properties:
                            tool:
                              type: string
                            answer:
                              not: {}
                            error:
                              type: string
                          required:
                            - tool
                            - error
                          additionalProperties: false
                  env:
                    anyOf:
                      - type: object
                        properties:
                          retell_dynamic_variables:
                            type: object
                            description: >-
                              String values supplied to the Retell agent before
                              the conversation. Variable names beginning with
                              egma_ are reserved.
                            additionalProperties:
                              type: string
                          job_dispatch_metadata:
                            type: object
                            description: >-
                              Context delivered to the LiveKit worker in
                              ctx.job.metadata.
                            additionalProperties: true
                        additionalProperties: false
                      - type: 'null'
                  revision:
                    type: string
                    minLength: 1
                  createdAt:
                    type: string
                    format: date-time
                  updatedAt:
                    type: string
                    format: date-time
                required:
                  - id
                  - projectId
                  - suiteId
                  - name
                  - description
                  - version
                  - versionId
                  - scenario
                  - expectedBehaviors
                  - personas
                  - mockTools
                  - env
                  - revision
                  - createdAt
                  - updatedAt
                additionalProperties: false
        '400':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '401':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '403':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '404':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '409':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '422':
          description: The request was refused.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
        '429':
          description: The request rate limit was reached.
          headers:
            Retry-After:
              description: Seconds to wait before trying again.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Refusal'
      security:
        - bearerAuth: []
        - sessionCookie: []
components:
  schemas:
    Refusal:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        details:
          type: object
          additionalProperties: true
      required:
        - error
        - message
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An Egma API key.
    sessionCookie:
      type: apiKey
      in: cookie
      name: egma.session_token
      description: >-
        The browser session cookie issued by Egma. HTTPS deployments add the
        standard __Secure- prefix.

````