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

# Start or retry prompt-set analysis

> Obtain human approval of the current estimate before calling. Requires a user-attributed API key whose creator still has devtune.manage. Reserves estimated credits and settles completed usage; failed analyses release the reservation without charging. Reuses queued/running analyses and safely requeues orphaned queued runs. Does not apply proposals. Repeating after a terminal run starts a new billable analysis.



## OpenAPI

````yaml /openapi.json post /projects/{projectId}/prompt-set-analysis
openapi: 3.1.0
info:
  title: DevTune API
  version: 2.0.0
  description: >-
    API for programmatic access to your AI visibility data, webhook
    subscriptions, and automation workflows. Use this API to integrate DevTune
    data into CI/CD pipelines, BI tools, AI agents, and operational systems.
servers:
  - url: https://devtune.ai/api/v2
    description: Production
security:
  - bearerAuth: []
paths:
  /projects/{projectId}/prompt-set-analysis:
    post:
      summary: Start or retry prompt-set analysis
      description: >-
        Obtain human approval of the current estimate before calling. Requires a
        user-attributed API key whose creator still has devtune.manage. Reserves
        estimated credits and settles completed usage; failed analyses release
        the reservation without charging. Reuses queued/running analyses and
        safely requeues orphaned queued runs. Does not apply proposals.
        Repeating after a terminal run starts a new billable analysis.
      operationId: startPromptSetAnalysis
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - humanApproved
                - approvedEstimatedCredits
              properties:
                approvedEstimatedCredits:
                  type: number
                  minimum: 0
                  description: >-
                    The exact creditState.estimatedCredits value approved by the
                    human. A changed estimate returns 409 and requires renewed
                    approval.
                humanApproved:
                  type: boolean
                  const: true
                  description: >-
                    Attests to explicit approval from the human; agents must not
                    supply this on their own authority.
      responses:
        '200':
          description: Started or reused run.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      run:
                        type: object
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '402':
          description: Insufficient agent credits.
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '409':
          description: >-
            The approved credit estimate has changed. Read the current estimate
            and obtain human approval again.
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
components:
  responses:
    BadRequestError:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFoundError:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimitExceededError:
      description: Rate limit exceeded
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        status:
          type: integer
      required:
        - error
        - message
        - status
  headers:
    X-RateLimit-Limit:
      description: Maximum requests per window
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests remaining in current window
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Unix timestamp when the window resets
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key with dtk_live_ prefix. Obtain it from API Keys in the account
        sidebar. New keys start with all supported scopes selected for the
        chosen project, and you can narrow them to specific read/write scopes as
        needed.

````