{
  "info": {
    "name": "Indagate Platform API",
    "description": "The browser-facing platform uses the Cognito ID token from its PKCE session. Enrolled devices use\ntheir device ID and device secret. Personal agent tokens are currently\naccepted by the read-only MCP service, not by these platform mutation routes.\n\nIndagate software does not replace PLC logic, safety relays, interlocks,\nemergency stops or other safety-rated controls.\n\n\nGenerated from the OpenAPI contract by docs/build-postman.js. Set `baseUrl` and `token` in the collection variables before sending anything. Tokens are tenant-scoped — treat them as credentials.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://platform.indagate.ai/api",
      "type": "string"
    },
    {
      "key": "token",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Account",
      "item": [
        {
          "name": "Get the authenticated tenant user",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ],
              "query": []
            },
            "description": "Get the authenticated tenant user"
          }
        },
        {
          "name": "Submit a structured Platform access request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/invite-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "invite-requests"
              ],
              "query": []
            },
            "description": "Submit a structured Platform access request",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"email\": \"\",\n  \"role\": \"\",\n  \"company\": \"\",\n  \"company_size\": \"1-10\",\n  \"industry\": \"\",\n  \"deployment_stage\": \"evaluation\",\n  \"expected_sites\": \"\",\n  \"expected_devices\": \"\",\n  \"systems\": \"\",\n  \"preferred_region\": \"\",\n  \"intent\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Agent credentials",
      "item": [
        {
          "name": "List personal agent-token metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tokens",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens"
              ],
              "query": []
            },
            "description": "List personal agent-token metadata"
          }
        },
        {
          "name": "Create an expiring read-only MCP token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tokens",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens"
              ],
              "query": []
            },
            "description": "The raw `odd_pat_…` value is returned once and stored only as a SHA-256 digest.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"expires_days\": 90\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Revoke a personal agent token immediately",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tokens/{{tokenId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tokens",
                "{{tokenId}}"
              ],
              "query": []
            },
            "description": "Revoke a personal agent token immediately"
          }
        }
      ]
    },
    {
      "name": "Devices",
      "item": [
        {
          "name": "List tenant devices",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/devices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices"
              ],
              "query": []
            },
            "description": "Returns only devices owned by the authenticated tenant user."
          }
        },
        {
          "name": "Update device display metadata",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/devices/{{deviceId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices",
                "{{deviceId}}"
              ],
              "query": []
            },
            "description": "Update device display metadata",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"location\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Queue, roll back or cancel a Linux OTA deployment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/devices/{{deviceId}}/ota",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "devices",
                "{{deviceId}}",
                "ota"
              ],
              "query": []
            },
            "description": "Schedules an approved, checksum-verified Indagate Edge release. The edge\nruntime receives the directive on its next authenticated heartbeat.\nWindows devices are updated with approved MSI releases instead.\n",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Submit device telemetry and receive an optional OTA directive",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Oddessy-Device-Id",
                "value": "{{X_Oddessy_Device_Id}}",
                "description": ""
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/device/heartbeat",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "device",
                "heartbeat"
              ],
              "query": []
            },
            "description": "Submit device telemetry and receive an optional OTA directive",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"\",\n  \"agent_version\": \"\",\n  \"telemetry\": {},\n  \"ota\": {\n    \"deployment_id\": \"\",\n    \"status\": \"scheduled\",\n    \"progress\": 0,\n    \"message\": \"\",\n    \"current_version\": \"\",\n    \"target_version\": \"\",\n    \"previous_version\": \"\",\n    \"action\": \"install\",\n    \"automatic_rollback\": false,\n    \"reported_at\": \"2026-01-01T00:00:00Z\"\n  },\n  \"determinations\": [\n    {}\n  ],\n  \"camera_preview_request\": {\n    \"sha256\": \"\",\n    \"size_bytes\": 0,\n    \"captured_at\": \"2026-01-01T00:00:00Z\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Enrolment",
      "item": [
        {
          "name": "Create a single-use device enrolment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/enrolments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "enrolments"
              ],
              "query": []
            },
            "description": "The returned enrolment token is displayed once and expires in 30 minutes.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"location\": \"\",\n  \"hardware\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Resolve the approved installer for a one-time enrolment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/device/bootstrap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "device",
                "bootstrap"
              ],
              "query": []
            },
            "description": "Returns a 15-minute signed URL and required SHA-256 without consuming the enrolment token.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Exchange a one-time enrolment token for device credentials",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/device/enrol",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "device",
                "enrol"
              ],
              "query": []
            },
            "description": "Exchange a one-time enrolment token for device credentials",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"\",\n  \"hostname\": \"\",\n  \"hardware\": \"\",\n  \"os\": \"\",\n  \"agent_version\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "IoT integrations",
      "item": [
        {
          "name": "List tenant IoT integrations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/integrations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations"
              ],
              "query": []
            },
            "description": "List tenant IoT integrations"
          }
        },
        {
          "name": "Create an integration and shown-once webhook credential",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/integrations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations"
              ],
              "query": []
            },
            "description": "Create an integration and shown-once webhook credential",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"matter\",\n  \"provider\": \"matter\",\n  \"name\": \"\",\n  \"application_id\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Rename, pause or enable an integration",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/integrations/{{integrationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations",
                "{{integrationId}}"
              ],
              "query": []
            },
            "description": "Rename, pause or enable an integration",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"enabled\": false,\n  \"application_id\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete an integration and reject future events",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/integrations/{{integrationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations",
                "{{integrationId}}"
              ],
              "query": []
            },
            "description": "Delete an integration and reject future events"
          }
        },
        {
          "name": "Rotate and show a new webhook credential once",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/integrations/{{integrationId}}/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations",
                "{{integrationId}}",
                "rotate-secret"
              ],
              "query": []
            },
            "description": "Rotate and show a new webhook credential once"
          }
        },
        {
          "name": "List recent normalized events for a tenant-owned integration",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/integrations/{{integrationId}}/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "integrations",
                "{{integrationId}}",
                "events"
              ],
              "query": []
            },
            "description": "List recent normalized events for a tenant-owned integration"
          }
        },
        {
          "name": "List endpoints discovered from authenticated IoT events",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/iot/devices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "iot",
                "devices"
              ],
              "query": []
            },
            "description": "List endpoints discovered from authenticated IoT events"
          }
        }
      ]
    },
    {
      "name": "Monitoring",
      "item": [
        {
          "name": "List tenant alert monitors and current state",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/monitors",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "monitors"
              ],
              "query": []
            },
            "description": "List tenant alert monitors and current state"
          }
        },
        {
          "name": "Create a device metric or VLM/VLA determination monitor",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/monitors",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "monitors"
              ],
              "query": []
            },
            "description": "Requires workspace administrator or operator access.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"monitor_type\": \"metric\",\n  \"enabled\": true,\n  \"target_id\": \"\",\n  \"metric\": \"cpu_percent\",\n  \"direction\": \"above\",\n  \"warning_threshold\": 0,\n  \"critical_threshold\": 0,\n  \"workload\": \"vlm\",\n  \"determination_field\": \"confidence\",\n  \"operator\": \"above\",\n  \"warning_value\": \"\",\n  \"critical_value\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update or pause a monitor",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/monitors/{{monitorId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "monitors",
                "{{monitorId}}"
              ],
              "query": []
            },
            "description": "Update or pause a monitor",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"monitor_type\": \"metric\",\n  \"enabled\": true,\n  \"target_id\": \"\",\n  \"metric\": \"cpu_percent\",\n  \"direction\": \"above\",\n  \"warning_threshold\": 0,\n  \"critical_threshold\": 0,\n  \"workload\": \"vlm\",\n  \"determination_field\": \"confidence\",\n  \"operator\": \"above\",\n  \"warning_value\": \"\",\n  \"critical_value\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a monitor while retaining alert event history",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/monitors/{{monitorId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "monitors",
                "{{monitorId}}"
              ],
              "query": []
            },
            "description": "Delete a monitor while retaining alert event history"
          }
        },
        {
          "name": "List active alert states and retained transition history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "alerts"
              ],
              "query": []
            },
            "description": "List active alert states and retained transition history"
          }
        },
        {
          "name": "List recent retained VLM/VLA determinations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/determinations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "determinations"
              ],
              "query": []
            },
            "description": "List recent retained VLM/VLA determinations"
          }
        },
        {
          "name": "Submit a normalized VLM/VLA determination for monitor evaluation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/determinations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "determinations"
              ],
              "query": []
            },
            "description": "Requires workspace administrator or operator access. Stable source event IDs are de-duplicated.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workload\": \"vlm\",\n  \"device_id\": \"\",\n  \"camera_id\": \"\",\n  \"source_event_id\": \"\",\n  \"observed_at\": \"2026-01-01T00:00:00Z\",\n  \"source\": \"\",\n  \"result\": {\n    \"confidence\": 0,\n    \"severity\": \"low\",\n    \"event_type\": \"\",\n    \"safety_state\": \"\",\n    \"rule_matched\": false,\n    \"recommended_action\": \"\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Outbound webhooks",
      "item": [
        {
          "name": "List signed outbound event destinations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks"
              ],
              "query": []
            },
            "description": "List signed outbound event destinations"
          }
        },
        {
          "name": "Create a destination and show its signing secret once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks"
              ],
              "query": []
            },
            "description": "Create a destination and show its signing secret once",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Rename, reconfigure, pause or enable a destination",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks/{{endpointId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks",
                "{{endpointId}}"
              ],
              "query": []
            },
            "description": "Rename, reconfigure, pause or enable a destination",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"url\": \"\",\n  \"events\": [],\n  \"enabled\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a destination and stop future delivery",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks/{{endpointId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks",
                "{{endpointId}}"
              ],
              "query": []
            },
            "description": "Delete a destination and stop future delivery"
          }
        },
        {
          "name": "Queue a non-actuating signed test event",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks/{{endpointId}}/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks",
                "{{endpointId}}",
                "test"
              ],
              "query": []
            },
            "description": "Queue a non-actuating signed test event"
          }
        },
        {
          "name": "Rotate and show a destination signing secret once",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks/{{endpointId}}/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks",
                "{{endpointId}}",
                "rotate-secret"
              ],
              "query": []
            },
            "description": "Rotate and show a destination signing secret once"
          }
        },
        {
          "name": "List 30-day signed delivery history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/outbound-webhooks/{{endpointId}}/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "outbound-webhooks",
                "{{endpointId}}",
                "deliveries"
              ],
              "query": []
            },
            "description": "List 30-day signed delivery history"
          }
        }
      ]
    },
    {
      "name": "Releases",
      "item": [
        {
          "name": "List approved release metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/releases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "releases"
              ],
              "query": []
            },
            "description": "List approved release metadata"
          }
        },
        {
          "name": "Create a short-lived release download",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "download"
              ],
              "query": [
                {
                  "key": "key",
                  "value": "",
                  "description": "",
                  "disabled": false
                }
              ]
            },
            "description": "Create a short-lived release download"
          }
        }
      ]
    },
    {
      "name": "Service",
      "item": [
        {
          "name": "Check platform API health",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ],
              "query": []
            },
            "description": "Check platform API health"
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "Ingest a signed generic or Matter-edge JSON event",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{integrationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{integrationId}}"
              ],
              "query": []
            },
            "description": "Ingest a signed generic or Matter-edge JSON event",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Ingest a The Things Stack uplink webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/webhooks/{{integrationId}}/uplink",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "webhooks",
                "{{integrationId}}",
                "uplink"
              ],
              "query": []
            },
            "description": "Ingest a The Things Stack uplink webhook",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    }
  ]
}
