{
  "openapi": "3.0.4",
  "info": {
    "title": "AssTrack.Api",
    "version": "1.0"
  },
  "paths": {
    "/": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/assets": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAssetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/assets/{id}": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAssetRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/devices": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDeviceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/devices/{id}": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDeviceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/devices/{id}/summary": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "ObservationEndpoints"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations/latest/{deviceId}": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations/latest-positions": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations/simulate": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SimulateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations/history": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "deviceId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/geofences": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateGeofenceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/geofences/{id}": {
      "put": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGeofenceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/geofences/breaches": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "unacknowledged",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "deviceId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/geofences/breaches/bulk-acknowledge": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAcknowledgeBreachesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/geofences/breaches/{id}/acknowledge": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AcknowledgeBreachRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/speed-alerts": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "unacknowledged",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "deviceId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/speed-alerts/{id}/acknowledge": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AcknowledgeSpeedAlertRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/speed-alerts/bulk-acknowledge": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAcknowledgeSpeedAlertsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/webhooks/deliveries": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "List webhook delivery logs with optional filtering.",
        "operationId": "GetWebhookDeliveries",
        "parameters": [
          {
            "name": "success",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/webhooks/status": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "Get webhook configuration status and 24-hour delivery statistics.",
        "operationId": "GetWebhookStatus",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/webhooks/test": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "Fire a synthetic test webhook event to verify delivery configuration.",
        "operationId": "TestWebhookFire",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TestWebhookRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/system/status": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "Get sanitized system configuration status.",
        "operationId": "GetSystemStatus",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/system/seed": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "Seed demo data. Use reset=true to wipe and re-seed seeded records only.",
        "operationId": "SeedDemoData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SeedRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/events/token": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "summary": "Issue a short-lived SSE token (TTL configured via SseToken:TtlMinutes)",
        "operationId": "IssueSseToken",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/auth/me": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/alerts/summary": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/health": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/integrations/providers": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/integrations": {
      "get": {
        "tags": [
          "AssTrack.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateIntegrationFeedRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/integrations/{id}": {
      "put": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateIntegrationFeedRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/integrations/{id}/observations": {
      "post": {
        "tags": [
          "AssTrack.Api"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationFeedObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/events": {
      "get": {
        "tags": [
          "EventsEndpoints"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/observations/ingest": {
      "post": {
        "tags": [
          "ObservationEndpoints"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateObservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AcknowledgeBreachRequest": {
        "type": "object",
        "properties": {
          "acknowledgedBy": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AcknowledgeSpeedAlertRequest": {
        "type": "object",
        "properties": {
          "acknowledgedBy": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkAcknowledgeBreachesRequest": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "acknowledgedBy": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkAcknowledgeSpeedAlertsRequest": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "nullable": true
          },
          "acknowledgedBy": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateAssetRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "speedThresholdKmh": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateDeviceRequest": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "protocol": {
            "type": "string",
            "nullable": true
          },
          "assetId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "provider": {
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "string",
            "nullable": true
          },
          "integrationFeedId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateGeofenceRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "centerLatitude": {
            "type": "number",
            "format": "double"
          },
          "centerLongitude": {
            "type": "number",
            "format": "double"
          },
          "radiusMeters": {
            "type": "number",
            "format": "double"
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateIntegrationFeedRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "provider": {
            "type": "string",
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "autoCreateDevices": {
            "type": "boolean"
          },
          "defaultTags": {
            "type": "string",
            "nullable": true
          },
          "configurationJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateObservationRequest": {
        "type": "object",
        "properties": {
          "deviceId": {
            "type": "string",
            "format": "uuid"
          },
          "observedAt": {
            "type": "string",
            "format": "date-time"
          },
          "latitude": {
            "type": "number",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "format": "double"
          },
          "altitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "accuracyMeters": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "speedKmh": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "headingDegrees": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "metadata": {
            "type": "string",
            "nullable": true
          },
          "deviceIdentifier": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "IntegrationFeedObservationRequest": {
        "type": "object",
        "properties": {
          "externalTrackerId": {
            "type": "string",
            "nullable": true
          },
          "observedAt": {
            "type": "string",
            "format": "date-time"
          },
          "latitude": {
            "type": "number",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "format": "double"
          },
          "altitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "accuracyMeters": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "speedKmh": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "headingDegrees": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "assetId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "tags": {
            "type": "string",
            "nullable": true
          },
          "metadata": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SeedRequest": {
        "type": "object",
        "properties": {
          "reset": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SimulateRequest": {
        "type": "object",
        "properties": {
          "preset": {
            "$ref": "#/components/schemas/SimulationPreset"
          },
          "deviceIdentifier": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SimulationPreset": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "TestWebhookRequest": {
        "type": "object",
        "properties": {
          "eventType": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateAssetRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "category": {
            "type": "string",
            "nullable": true
          },
          "speedThresholdKmh": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceRequest": {
        "type": "object",
        "properties": {
          "identifier": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "protocol": {
            "type": "string",
            "nullable": true
          },
          "assetId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "provider": {
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "type": "string",
            "nullable": true
          },
          "tags": {
            "type": "string",
            "nullable": true
          },
          "integrationFeedId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateGeofenceRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "centerLatitude": {
            "type": "number",
            "format": "double"
          },
          "centerLongitude": {
            "type": "number",
            "format": "double"
          },
          "radiusMeters": {
            "type": "number",
            "format": "double"
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateIntegrationFeedRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "isEnabled": {
            "type": "boolean"
          },
          "autoCreateDevices": {
            "type": "boolean"
          },
          "defaultTags": {
            "type": "string",
            "nullable": true
          },
          "configurationJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API key authentication",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  },
  "security": [
    { }
  ],
  "tags": [
    {
      "name": "AssTrack.Api"
    },
    {
      "name": "ObservationEndpoints"
    },
    {
      "name": "EventsEndpoints"
    }
  ]
}