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

# Set this agent's system prompt

> Set or edit the agent's system prompt. A new version only if it changed.

Always 200 on success — callers read `action`, not the status code.

`action: "unchanged"` is the most important field in this API. The whole
reason Phase 3c exists is that the same edit through the manifest hashed
identically, deduped, and returned 200 having discarded the write. A no-op
that reports itself is fine; a change that reports success and does nothing
is the failure mode.

`pinned_warning` does the same job for the pin case: editing while pinned
writes the version, KEEPS the pin, and says so — rather than silently
un-pinning (breaking version stability) or silently no-op'ing.



## OpenAPI

````yaml /openapi.json put /api/v1/agents/{agent_name}/prompt
openapi: 3.1.0
info:
  title: DecimalAI Platform
  description: Agent Dataset Lifecycle Platform — Backend API
  version: 0.1.0
servers:
  - url: https://api.decimal.ai
    description: Production
security:
  - BearerAuth: []
tags:
  - name: traces
    description: >-
      Ingest, search, and inspect agent execution traces. A trace is the atomic
      unit of the platform — every other feature (evaluation, compatibility
      scoring, dataset building) operates on traces. Each trace is auto-tagged
      with the manifest hash of the agent that produced it.
  - name: eval-scores
    description: >-
      Push, fetch, and aggregate per-trace evaluation scores. Scores carry
      source provenance (built-in, DeepEval, LangSmith, custom) and feed the
      unified decision engine, which produces a keep / repair / replay / drop
      verdict per trace.
  - name: skills
    description: >-
      Manage reusable instruction blocks (SKILL.md files) that modify agent
      behavior. Skills are first-class manifest components — changes to a skill
      appear in your regression-check impact reports. Use these endpoints to
      create, version, fork, and sync skills with your local SKILL.md files.
  - name: manifests
    description: >-
      Register and inspect manifest versions. A manifest is a snapshot of your
      agent's structural identity (tools, prompts, models, skills) at a point in
      time. The SDK registers manifests automatically; these endpoints expose
      the underlying records.
  - name: datasets
    description: >-
      Build versioned SFT/DPO training datasets from manifest-classified,
      eval-scored traces. Datasets are reproducible — each version locks the
      manifest and filter set used to build it. Export as JSONL, Parquet, or
      push to HuggingFace Hub.
  - name: replay
    description: >-
      Re-execute historical traces against a new manifest version. Replay is the
      deferred-future capability for behavioral verification of agent changes.
      The SDK creates a replay batch, your worker executes each task, then
      submits results back here for eval scoring.
  - name: registry
    description: >-
      Browse and install published skills from the public skills registry. Each
      registry skill carries a SkillScore — an evidence-tiered quality composite
      computed from real-world evals, benchmarks, and ratings across
      organizations. Installing creates a fork in your org — edits don't affect
      the public version.
  - name: agents
    description: >-
      List and inspect agents, plus their multi-agent topology (orchestrator →
      sub-agent edges discovered from traces). Agents are identified by a stable
      agent_name string set in your SDK init() call.
  - name: import
    description: >-
      Bulk-import historical traces from another observability platform or a
      JSONL backup. Useful for migrating from LangSmith / Braintrust / Langfuse.
      Duplicate trace IDs are silently skipped — re-running an import is safe.
paths:
  /api/v1/agents/{agent_name}/prompt:
    put:
      tags:
        - agents
      summary: Set this agent's system prompt
      description: >-
        Set or edit the agent's system prompt. A new version only if it changed.


        Always 200 on success — callers read `action`, not the status code.


        `action: "unchanged"` is the most important field in this API. The whole

        reason Phase 3c exists is that the same edit through the manifest hashed

        identically, deduped, and returned 200 having discarded the write. A
        no-op

        that reports itself is fine; a change that reports success and does
        nothing

        is the failure mode.


        `pinned_warning` does the same job for the pin case: editing while
        pinned

        writes the version, KEEPS the pin, and says so — rather than silently

        un-pinning (breaking version stability) or silently no-op'ing.
      operationId: set_agent_prompt_api_v1_agents__agent_name__prompt_put
      parameters:
        - name: agent_name
          in: path
          required: true
          schema:
            type: string
            title: Agent Name
        - name: Authorization
          in: header
          required: false
          schema:
            type: string
            title: Authorization
        - name: X-Workspace-Id
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: X-Workspace-Id
        - name: decimal_session
          in: cookie
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Decimal Session
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetAgentPromptRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: >-
                  Response Set Agent Prompt Api V1 Agents  Agent Name  Prompt
                  Put
        '400':
          description: Empty, whitespace-only, or oversized prompt.
        '404':
          description: No such agent in this org.
        '409':
          description: if_match_content_hash did not match (prompt_stale).
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    SetAgentPromptRequest:
      properties:
        system_prompt:
          anyOf:
            - type: string
            - type: 'null'
          title: System Prompt
          description: >-
            The agent's system prompt. A byte-identical write is accepted and
            reported as `action: "unchanged"` rather than creating a version.
        label:
          anyOf:
            - type: string
              maxLength: 200
            - type: 'null'
          title: Label
          description: Optional note on this version, e.g. 'tightened refund wording'.
        if_match_content_hash:
          anyOf:
            - type: string
            - type: 'null'
          title: If Match Content Hash
          description: >-
            Optimistic concurrency. Supply the `content_hash` you last read and
            the write is refused with 409 if someone else has since changed the
            prompt. Omit for last-write-wins.
      type: object
      title: SetAgentPromptRequest
      description: >-
        Body of ``PUT /api/v1/agents/{agent_name}/prompt``.


        ``system_prompt`` is Optional[str] here despite being REQUIRED, for the
        same

        reason ``CreateAgentRequest.agent_name`` is (:517-524): declaring it
        ``str``

        would make an ABSENT field a 422 while an EMPTY one is a 400, so a
        caller

        would have to handle two error shapes for one mistake. Optional plus an

        explicit check routes absent, empty and whitespace-only through one 400.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: Enter your API key (e.g. dai_sk_test_key_001)

````