{
  "info": {
    "name": "DIP Clustering Phase A",
    "_postman_id": "5d5f3a8f-1c0c-4f7a-9e14-4d6f2c6d8f3a",
    "description": "Sample Postman collection for DIP clustering Phase A endpoints.\n\nVariables:\n- baseUrl: Spring Boot base URL\n- runId: cluster run id returned by create run\n\nThis collection contains example requests for TED notice embeddings and Leitstand TIME entry embeddings.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost:8080"
    },
    {
      "key": "runId",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Selection",
      "item": [
        {
          "name": "Count TED selection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/selection/count",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "selection",
                "count"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentTypes\": [\n    \"TED_NOTICE\"\n  ],\n  \"representationTypes\": [\n    \"SEMANTIC_TEXT\"\n  ],\n  \"embeddingStatuses\": [\n    \"COMPLETED\"\n  ],\n  \"primaryRepresentationOnly\": true\n}"
            },
            "description": "Counts the number of completed TED_NOTICE embeddings eligible for clustering."
          },
          "response": []
        },
        {
          "name": "Count Leitstand TIME selection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/selection/count",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "selection",
                "count"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentTypes\": [\n    \"TIME_ENTRY\"\n  ],\n  \"builderKeys\": [\n    \"time-entry-structured-text\"\n  ],\n  \"embeddingStatuses\": [\n    \"COMPLETED\"\n  ],\n  \"primaryRepresentationOnly\": true\n}"
            },
            "description": "Counts the number of completed Leitstand TIME_ENTRY embeddings eligible for clustering."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Runs",
      "item": [
        {
          "name": "Create TED KMeans run",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"TED notices KMeans run 1\",\n  \"algorithm\": \"KMEANS\",\n  \"selection\": {\n    \"documentTypes\": [\n      \"TED_NOTICE\"\n    ],\n    \"representationTypes\": [\n      \"SEMANTIC_TEXT\"\n    ],\n    \"embeddingStatuses\": [\n      \"COMPLETED\"\n    ],\n    \"primaryRepresentationOnly\": true\n  },\n  \"k\": 25\n}"
            },
            "description": "Creates a cluster run for TED notice embeddings. Copy the returned id into the Postman variable runId."
          },
          "response": []
        },
        {
          "name": "Create Leitstand TIME KMeans run",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Leitstand TIME KMeans run 1\",\n  \"algorithm\": \"KMEANS\",\n  \"selection\": {\n    \"documentTypes\": [\n      \"TIME_ENTRY\"\n    ],\n    \"builderKeys\": [\n      \"time-entry-structured-text\"\n    ],\n    \"embeddingStatuses\": [\n      \"COMPLETED\"\n    ],\n    \"primaryRepresentationOnly\": true\n  },\n  \"k\": 15\n}"
            },
            "description": "Creates a cluster run for Leitstand TIME_ENTRY embeddings. Copy the returned id into the Postman variable runId."
          },
          "response": []
        },
        {
          "name": "Start run",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs/{{runId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs",
                "{{runId}}",
                "start"
              ]
            },
            "description": "Starts clustering for the run stored in the runId variable."
          },
          "response": []
        },
        {
          "name": "Get run",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs/{{runId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs",
                "{{runId}}"
              ]
            },
            "description": "Returns run metadata and status."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Results",
      "item": [
        {
          "name": "Get clusters for run",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs/{{runId}}/clusters",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs",
                "{{runId}}",
                "clusters"
              ]
            },
            "description": "Lists clusters discovered in the run."
          },
          "response": []
        },
        {
          "name": "Get assignments for run",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/dip/clustering/runs/{{runId}}/assignments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "dip",
                "clustering",
                "runs",
                "{{runId}}",
                "assignments"
              ]
            },
            "description": "Lists embedding-to-cluster assignments for the run."
          },
          "response": []
        }
      ]
    }
  ]
}