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

# Start a conformance run

> Queue a conformance run against a registered connection you own, optionally scoped to one suite or module. Returns the run id to poll for the graded report.



## OpenAPI

````yaml /openapi/public-api.json post /testing/runs
openapi: 3.1.0
info:
  title: ChargerDojo public API
  version: 1.0.0
  description: >-
    Automate ChargerDojo with a cdojo_ API key: register partner endpoints, run
    conformance suites and charging journeys, and read the graded reports.
servers:
  - url: https://chargerdojo.com/api/v1
security:
  - apiKey: []
tags:
  - name: Connections
  - name: Testing
  - name: Reports
  - name: Usage
  - name: Journeys
paths:
  /testing/runs:
    post:
      tags:
        - Testing
      summary: Start a conformance run against an owned connection
      description: >-
        Queue a conformance run against a registered connection you own,
        optionally scoped to one suite or module. Returns the run id to poll for
        the graded report.
      operationId: runs_start
      parameters:
        - name: wait
          in: query
          required: false
          description: >-
            Seconds to long-poll before answering. Values above 55 are clamped
            to 55. Omit to answer immediately.
          schema:
            type: integer
            minimum: 1
            maximum: 55
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartRun'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunTerminal'
        '202':
          description: Accepted; the run is active work.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunAccepted'
        '400':
          description: Malformed input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: The plan does not include this capability
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found, or owned by another account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Quota or rate limit reached
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Our runner is unavailable; never a verdict about the target
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - apiKey: []
components:
  schemas:
    StartRun:
      type: object
      required:
        - connectionId
      properties:
        connectionId:
          type: string
        module:
          type: string
        seed:
          type: string
          minLength: 1
          maxLength: 128
          description: >-
            Makes the run repeatable: the ids it creates on your endpoint are
            derived from this, so the same seed sends the same requests. Omit it
            and one is generated and returned.
    RunTerminal:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          type: object
          required:
            - executionId
            - reportId
            - status
          properties:
            executionId:
              type: string
            reportId:
              type: string
            status:
              type: string
              enum:
                - completed
                - failed
                - cancelled
                - interrupted
              description: >-
                Terminal. completed means graded; failed means it stopped early
                and what it graded is real; interrupted means it was never
                graded and says nothing about the target.
            seed:
              type: string
              description: >-
                What this run was seeded with, whether you sent one or we
                generated it. Send it back to repeat the run.
            summary:
              $ref: '#/components/schemas/RunSummary'
            withheldModules:
              type: array
              items:
                type: string
              description: >-
                Modules the plan did not cover. Their checks never ran, so a
                zero in summary.failed is not a pass for these.
            error:
              type: string
        meta:
          type: object
          description: Paging, on the operations that return a list.
          properties:
            limit:
              type: integer
            skip:
              type: integer
            nextCursor:
              type: string
          additionalProperties: true
    RunAccepted:
      type: object
      required:
        - success
        - data
      properties:
        success:
          type: boolean
        data:
          type: object
          required:
            - executionId
            - reportId
            - status
          properties:
            executionId:
              type: string
            reportId:
              type: string
              description: >-
                Poll GET /testing/runs/{reportId} with this. It is the report
                id, not the execution id.
            status:
              type: string
              enum:
                - queued
                - running
            seed:
              type: string
              description: >-
                What this run was seeded with, whether you sent one or we
                generated it. Send it back to repeat the run.
            draining:
              type: boolean
              description: >-
                The process carrying this run is being replaced by a release.
                The run finishes normally; only the answer is slower. Absent
                otherwise.
        meta:
          type: object
          description: Paging, on the operations that return a list.
          properties:
            limit:
              type: integer
            skip:
              type: integer
            nextCursor:
              type: string
          additionalProperties: true
    Error:
      type: object
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          enum:
            - false
        message:
          type: string
        status:
          type: string
          enum:
            - error
        code:
          type: string
        timestamp:
          type: string
          format: date-time
        capability:
          type: string
          enum:
            - external-endpoints
            - ci-handoff
            - saved-presets
            - load-testing
            - direct-payment
            - bookings
            - scheduled-runs
        limit:
          type: object
          required:
            - id
            - used
            - cap
          properties:
            id:
              type: string
              enum:
                - connections
                - run-concurrency
            used:
              type: integer
            cap:
              type: integer
    RunSummary:
      type: object
      description: >-
        Graded counters. Absent on a run that never reached a verdict, such as
        one we interrupted: read status first, because a missing summary is not
        a summary of zeroes.
      properties:
        total:
          type: integer
          description: >-
            passed + failed + unobservable. warned is counted separately and
            overlaps the others, so it is not a fourth bucket.
        passed:
          type: integer
        failed:
          type: integer
        warned:
          type: integer
          description: >-
            Checks that declined something the spec only recommends. Counted
            independently of passed and failed, so a check that breaks a SHALL
            and declines a SHOULD lands in both. Never a reason to fail a build:
            gate on failed.
        unobservable:
          type: integer
          description: >-
            Checks that graded nothing. Neither a pass nor a failure, and what
            turns a verdict into partial coverage.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: A cdojo_... API key created in the app under Settings.

````