{
  "info": {
    "name": "Konduit Public API",
    "description": "Hand-authored Postman collection for the Konduit public REST API. Set `api_key`, `base_url`, and the resource IDs in the **Variables** tab before running.\n\nFull docs: https://docs.konduit.work/api/",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_postman_id": "konduit-public-api-v1"
  },

  "variable": [
    { "key": "base_url", "value": "https://api.konduit.work/v1", "description": "API base URL" },
    { "key": "api_key", "value": "kdt_REPLACE_WITH_YOUR_KEY", "description": "Workspace API key — Workspace Settings → API Keys" },
    { "key": "table_id", "value": "REPLACE_WITH_DATATABLE_ID" },
    { "key": "list_id", "value": "REPLACE_WITH_LIST_ID" },
    { "key": "task_id", "value": "REPLACE_WITH_TASK_ID" },
    { "key": "row_id", "value": "REPLACE_WITH_ROW_ID" },
    { "key": "job_id", "value": "REPLACE_WITH_JOB_ID" }
  ],

  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{api_key}}", "type": "string" }]
  },

  "item": [
    {
      "name": "Workspace",
      "item": [
        {
          "name": "GET /me — identify the workspace",
          "request": {
            "method": "GET",
            "header": [],
            "url": { "raw": "{{base_url}}/me", "host": ["{{base_url}}"], "path": ["me"] }
          }
        }
      ]
    },

    {
      "name": "DataTables",
      "item": [
        {
          "name": "GET /datatables — list all tables",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/datatables", "host": ["{{base_url}}"], "path": ["datatables"] } }
        },
        {
          "name": "GET /datatables/{tableId}/schema",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/datatables/{{table_id}}/schema", "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "schema"] } }
        },
        {
          "name": "GET /datatables/{tableId}/rows — list rows",
          "request": {
            "method": "GET", "header": [],
            "url": {
              "raw": "{{base_url}}/datatables/{{table_id}}/rows?limit=50",
              "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "rows"],
              "query": [
                { "key": "limit", "value": "50" },
                { "key": "page", "value": "1", "disabled": true },
                { "key": "sort", "value": "Created:desc", "disabled": true },
                { "key": "select", "value": "Name,Email,Revenue", "disabled": true }
              ]
            }
          }
        },
        {
          "name": "POST /datatables/{tableId}/rows — insert one row",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"data\": {\n    \"col_REPLACE\": \"Acme Corp\",\n    \"col_REPLACE_STATUS\": \"active\",\n    \"col_REPLACE_REVENUE\": 50000\n  }\n}"
            },
            "url": { "raw": "{{base_url}}/datatables/{{table_id}}/rows", "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "rows"] }
          }
        },
        {
          "name": "PATCH /datatables/{tableId}/rows/{rowId} — update one row",
          "request": {
            "method": "PATCH",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"data\": {\n    \"col_REPLACE_STATUS\": \"churned\"\n  }\n}" },
            "url": { "raw": "{{base_url}}/datatables/{{table_id}}/rows/{{row_id}}", "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "rows", "{{row_id}}"] }
          }
        },
        {
          "name": "POST /datatables/{tableId}/rows/bulk — sync bulk insert (≤250 rows)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"rows\": [\n    { \"col_REPLACE\": \"Row 1\" },\n    { \"col_REPLACE\": \"Row 2\" }\n  ]\n}" },
            "url": { "raw": "{{base_url}}/datatables/{{table_id}}/rows/bulk", "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "rows", "bulk"] }
          }
        }
      ]
    },

    {
      "name": "Async Bulk Jobs",
      "item": [
        {
          "name": "POST /datatables/{tableId}/jobs/insert — async bulk (up to 50k rows)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"rows\": [\n    { \"col_REPLACE\": \"Bulk row 1\" },\n    { \"col_REPLACE\": \"Bulk row 2\" }\n  ]\n}" },
            "url": { "raw": "{{base_url}}/datatables/{{table_id}}/jobs/insert", "host": ["{{base_url}}"], "path": ["datatables", "{{table_id}}", "jobs", "insert"] }
          }
        },
        {
          "name": "GET /jobs/{jobId} — poll job status",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/jobs/{{job_id}}", "host": ["{{base_url}}"], "path": ["jobs", "{{job_id}}"] } }
        }
      ]
    },

    {
      "name": "Spaces & Lists",
      "item": [
        {
          "name": "GET /spaces — list spaces with their lists",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/spaces", "host": ["{{base_url}}"], "path": ["spaces"] } }
        },
        {
          "name": "GET /lists — list all lists in the workspace",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/lists", "host": ["{{base_url}}"], "path": ["lists"] } }
        },
        {
          "name": "GET /lists/{listId}/schema — statuses + custom fields",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/lists/{{list_id}}/schema", "host": ["{{base_url}}"], "path": ["lists", "{{list_id}}", "schema"] } }
        }
      ]
    },

    {
      "name": "Tasks",
      "item": [
        {
          "name": "GET /lists/{listId}/tasks — list tasks",
          "request": {
            "method": "GET", "header": [],
            "url": {
              "raw": "{{base_url}}/lists/{{list_id}}/tasks?limit=50",
              "host": ["{{base_url}}"], "path": ["lists", "{{list_id}}", "tasks"],
              "query": [
                { "key": "limit", "value": "50" },
                { "key": "status", "value": "STATUS_ID", "disabled": true },
                { "key": "q", "value": "search-text", "disabled": true }
              ]
            }
          }
        },
        {
          "name": "POST /lists/{listId}/tasks — create a task (JSON)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"title\": \"Follow up on lead\",\n  \"priority\": \"high\",\n  \"due_date\": 1778400000\n}" },
            "url": { "raw": "{{base_url}}/lists/{{list_id}}/tasks", "host": ["{{base_url}}"], "path": ["lists", "{{list_id}}", "tasks"] }
          }
        },
        {
          "name": "POST /lists/{listId}/tasks — create a task WITH attachments (multipart)",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                { "key": "data", "value": "{\"title\":\"Bug report from customer\",\"priority\":\"high\"}", "type": "text" },
                { "key": "file", "type": "file", "src": [], "description": "Replace with one or more files" }
              ]
            },
            "url": { "raw": "{{base_url}}/lists/{{list_id}}/tasks", "host": ["{{base_url}}"], "path": ["lists", "{{list_id}}", "tasks"] }
          }
        },
        {
          "name": "GET /tasks/{taskId}",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/tasks/{{task_id}}", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}"] } }
        },
        {
          "name": "PATCH /tasks/{taskId} — update a task",
          "request": {
            "method": "PATCH",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"priority\": \"urgent\",\n  \"due_date\": 1778450000\n}" },
            "url": { "raw": "{{base_url}}/tasks/{{task_id}}", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}"] }
          }
        },
        {
          "name": "DELETE /tasks/{taskId} — soft-delete (recoverable for 30 days)",
          "request": { "method": "DELETE", "header": [], "url": { "raw": "{{base_url}}/tasks/{{task_id}}", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}"] } }
        }
      ]
    },

    {
      "name": "Comments",
      "item": [
        {
          "name": "POST /tasks/{taskId}/comments",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"content\": \"Reaching out to the customer's CTO this afternoon.\"\n}" },
            "url": { "raw": "{{base_url}}/tasks/{{task_id}}/comments", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}", "comments"] }
          }
        }
      ]
    },

    {
      "name": "Time Entries",
      "item": [
        {
          "name": "POST /tasks/{taskId}/time-entries — manual entry",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"action\": \"manual\",\n  \"duration\": 1800,\n  \"billable\": true,\n  \"note\": \"design work\"\n}" },
            "url": { "raw": "{{base_url}}/tasks/{{task_id}}/time-entries", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}", "time-entries"] }
          }
        },
        {
          "name": "POST /tasks/{taskId}/time-entries — start timer",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{ \"action\": \"start\" }" },
            "url": { "raw": "{{base_url}}/tasks/{{task_id}}/time-entries", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}", "time-entries"] }
          }
        },
        {
          "name": "POST /tasks/{taskId}/time-entries — stop timer",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{ \"action\": \"stop\" }" },
            "url": { "raw": "{{base_url}}/tasks/{{task_id}}/time-entries", "host": ["{{base_url}}"], "path": ["tasks", "{{task_id}}", "time-entries"] }
          }
        }
      ]
    },

    {
      "name": "Forms",
      "item": [
        {
          "name": "GET /forms — list",
          "request": { "method": "GET", "header": [], "url": { "raw": "{{base_url}}/forms", "host": ["{{base_url}}"], "path": ["forms"] } }
        }
      ]
    }
  ]
}
