> ## 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.

# Enable Agent Picks schedule

> Enable or change the cadence: daily at midnight UTC, weekly on Monday, or monthly on the first. Quote with schedule set to the same cadence first, then pass cadence, its quote_token and max_credits, the most one scheduled run may reserve. Saving uses the token in the same transaction, so it works once: reusing it is refused as 409 quote_token_used, also after the schedule is turned off or the setup is cleared and recreated. Refusals carry a reason: 400 quote_token_invalid (another credential, project, purpose or cadence), quote_token_expired, unpriced_model (a saved model has lost its price since the quote; choose models again), setup_required and the quote refusals; 403 forbidden or paused; 409 estimate_changed, over_max_credits or quote_token_used. The confirmed high estimate is saved. Each run reserves its fresh quote at or below it, or skips as estimate_changed until re-confirmed. Insufficient credits skip that period and email the owner. Never auto-charges. When enabled, periods more than one cadence interval overdue advance without a catch-up test. The OAuth member, or the member who created the API key, needs devtune.manage on the account and edit rights on the project. Requires Agent Picks. Not available in MCP code mode. A body that is not valid JSON, or an empty body, is refused with 400 bad_request and no reason.



## OpenAPI

````yaml /openapi.json put /projects/{projectId}/agent-picks/schedule
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}/agent-picks/schedule:
    put:
      summary: Enable Agent Picks schedule
      description: >-
        Enable or change the cadence: daily at midnight UTC, weekly on Monday,
        or monthly on the first. Quote with schedule set to the same cadence
        first, then pass cadence, its quote_token and max_credits, the most one
        scheduled run may reserve. Saving uses the token in the same
        transaction, so it works once: reusing it is refused as 409
        quote_token_used, also after the schedule is turned off or the setup is
        cleared and recreated. Refusals carry a reason: 400 quote_token_invalid
        (another credential, project, purpose or cadence), quote_token_expired,
        unpriced_model (a saved model has lost its price since the quote; choose
        models again), setup_required and the quote refusals; 403 forbidden or
        paused; 409 estimate_changed, over_max_credits or quote_token_used. The
        confirmed high estimate is saved. Each run reserves its fresh quote at
        or below it, or skips as estimate_changed until re-confirmed.
        Insufficient credits skip that period and email the owner. Never
        auto-charges. When enabled, periods more than one cadence interval
        overdue advance without a catch-up test. The OAuth member, or the member
        who created the API key, needs devtune.manage on the account and edit
        rights on the project. Requires Agent Picks. Not available in MCP code
        mode. A body that is not valid JSON, or an empty body, is refused with
        400 bad_request and no reason.
      operationId: enableAgentPicksSchedule
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                cadence:
                  type: string
                  enum:
                    - daily
                    - weekly
                    - monthly
                quote_token:
                  type: string
                  maxLength: 4096
                max_credits:
                  type: integer
                  minimum: 1
              required:
                - cadence
                - quote_token
                - max_credits
      responses:
        '200':
          description: Saved schedule
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AgentPicksSavedScheduleData'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '409':
          $ref: '#/components/responses/ConflictError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
components:
  schemas:
    AgentPicksSavedScheduleData:
      type: object
      required:
        - cadence
        - next_run_at
      properties:
        cadence:
          type: string
          enum:
            - 'off'
            - daily
            - weekly
            - monthly
        next_run_at:
          type:
            - string
            - 'null'
          format: date-time
    Meta:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        projectId:
          type: string
          format: uuid
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        reason:
          type: string
          description: >-
            Why the request was refused, for an error with more than one cause,
            such as a refused content-draft start.
        details:
          type: object
          additionalProperties: true
          description: >-
            Machine-readable facts about the refusal, such as shortfall_credits
            when an Agent Picks start is refused for insufficient_credits.
        status:
          type: integer
      required:
        - error
        - message
        - status
  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'
    ConflictError:
      description: Request conflicts with current resource state
      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'
  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.

````

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