{
  "openapi": "3.1.0",
  "info": {
    "title": "DataFocus website knowledge workflow — not the product API",
    "version": "1.1.0",
    "description": "Revision-specific consent, two independent reviews, public-only batch publication, immediate withdrawal and editorial feedback. No account, permission or payment effects in the DataFocus product. Deployment approval and verified releases are still required."
  },
  "servers": [
    {
      "url": "/api/ecosystem/v1"
    }
  ],
  "paths": {
    "/cases/{caseId}/knowledge-candidates": {
      "get": {
        "operationId": "listCaseKnowledge",
        "summary": "listCaseKnowledge",
        "security": [
          {
            "SessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "caseId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Explicit public or authorized private projection; never a raw source-case row.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    },
    "/knowledge-candidates/{candidateId}": {
      "get": {
        "operationId": "getKnowledgeCandidate",
        "summary": "getKnowledgeCandidate",
        "security": [
          {
            "SessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "candidateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Explicit public or authorized private projection; never a raw source-case row.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    },
    "/knowledge-candidates/{candidateId}/commands": {
      "post": {
        "operationId": "commandKnowledgeCandidate",
        "summary": "commandKnowledgeCandidate",
        "security": [
          {
            "SessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "candidateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[1-9][0-9]*\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 128
            }
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/X_KnowledgeCommand"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Persisted workflow state. QUEUED is not a completed publication.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    },
    "/knowledge": {
      "get": {
        "operationId": "knowledgeIndex",
        "summary": "knowledgeIndex",
        "security": [],
        "parameters": [
          {
            "name": "locale",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "release",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "deployment",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Explicit public or authorized private projection; never a raw source-case row.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    },
    "/knowledge/search": {
      "get": {
        "operationId": "knowledgeSearch",
        "summary": "knowledgeSearch",
        "security": [],
        "parameters": [
          {
            "name": "locale",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "release",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "deployment",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Explicit public or authorized private projection; never a raw source-case row.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    },
    "/knowledge/{release}/{section}/{slug}": {
      "get": {
        "operationId": "getKnowledgeArticle",
        "summary": "getKnowledgeArticle",
        "security": [],
        "parameters": [
          {
            "name": "release",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 96
            }
          },
          {
            "name": "section",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 96
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 96
            }
          },
          {
            "name": "locale",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "zh",
                "en"
              ],
              "default": "zh"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Explicit public or authorized private projection; never a raw source-case row.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Authentication required"
          },
          "403": {
            "description": "Operation not permitted or CSRF validation failed"
          },
          "404": {
            "description": "No accessible resource"
          },
          "409": {
            "description": "Revision, consent, review or state conflict"
          },
          "412": {
            "description": "ETag changed"
          },
          "422": {
            "description": "Unknown fields or invalid request"
          },
          "428": {
            "description": "If-Match required"
          },
          "503": {
            "description": "Required dependency or deployment approval unavailable"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "SessionCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Host-df_helpdesk"
      }
    },
    "schemas": {
      "X_KnowledgeCommand": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "command": {
            "enum": [
              "REQUEST_CONSENT",
              "CONSENT",
              "APPROVE",
              "SECURITY_APPROVE",
              "PUBLISH",
              "REJECT",
              "WITHDRAW",
              "WITHDRAW_CONSENT"
            ]
          },
          "sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "confirmed": {
            "const": true
          }
        },
        "required": [
          "command",
          "sha256",
          "confirmed"
        ]
      }
    }
  }
}
