{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://azaion/contracts/mapobjects-bundle.json", "title": "MapObjectsBundle", "description": "Pre-flight MapObjects bundle returned by the central missions API. Wire contract co-owned with the external missions repo. Local validator and bundled-schema copy live in autopilot/crates/mission_client/src/internal/schema/mapobjects.rs (AZ-646).", "type": "object", "required": ["schema_version", "mission_id", "bbox", "as_of"], "additionalProperties": false, "properties": { "schema_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" }, "mission_id": { "type": "string", "minLength": 1 }, "bbox": { "description": "[NW, SE] bounding box.", "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/definitions/coordinate" } }, "map_objects": { "type": "array", "items": { "$ref": "#/definitions/map_object" } }, "observations": { "type": "array", "items": { "$ref": "#/definitions/observation" } }, "ignored_items": { "type": "array", "items": { "$ref": "#/definitions/ignored_item" } }, "as_of": { "type": "string", "format": "date-time" }, "freshness": { "type": "string", "enum": ["fresh", "stale"] } }, "definitions": { "coordinate": { "type": "object", "required": ["latitude", "longitude", "altitude_m"], "additionalProperties": false, "properties": { "latitude": { "type": "number", "minimum": -90, "maximum": 90 }, "longitude": { "type": "number", "minimum": -180, "maximum": 180 }, "altitude_m": { "type": "number" } } }, "map_object": { "type": "object", "required": [ "h3_cell", "mgrs_key", "class", "class_group", "gps_lat", "gps_lon", "size_width_m", "size_length_m", "confidence", "first_seen", "last_seen", "mission_id", "source", "pending_upload" ], "additionalProperties": false, "properties": { "h3_cell": { "type": "integer", "minimum": 0 }, "mgrs_key": { "type": "string" }, "class": { "type": "string" }, "class_group": { "type": "string" }, "gps_lat": { "type": "number", "minimum": -90, "maximum": 90 }, "gps_lon": { "type": "number", "minimum": -180, "maximum": 180 }, "size_width_m": { "type": "number", "minimum": 0 }, "size_length_m": { "type": "number", "minimum": 0 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "first_seen": { "type": "string", "format": "date-time" }, "last_seen": { "type": "string", "format": "date-time" }, "mission_id": { "type": "string" }, "source": { "type": "string", "enum": ["central_pulled", "local_observed"] }, "pending_upload": { "type": "boolean" } } }, "observation": { "type": "object", "required": [ "id", "h3_cell", "class", "class_group", "mission_id", "uav_id", "observed_at_monotonic_ns", "observed_at_wallclock", "gps_lat", "gps_lon", "mgrs", "size_width_m", "size_length_m", "confidence", "diff_kind" ], "additionalProperties": false, "properties": { "id": { "type": "string", "format": "uuid" }, "h3_cell": { "type": "integer", "minimum": 0 }, "class": { "type": "string" }, "class_group": { "type": "string" }, "mission_id": { "type": "string" }, "uav_id": { "type": "string" }, "observed_at_monotonic_ns": { "type": "integer", "minimum": 0 }, "observed_at_wallclock": { "type": "string", "format": "date-time" }, "gps_lat": { "type": "number", "minimum": -90, "maximum": 90 }, "gps_lon": { "type": "number", "minimum": -180, "maximum": 180 }, "mgrs": { "type": "string" }, "size_width_m": { "type": "number", "minimum": 0 }, "size_length_m": { "type": "number", "minimum": 0 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "diff_kind": { "type": "string", "enum": ["NEW", "MOVED", "EXISTING", "REMOVED_CANDIDATE"] }, "photo_ref": { "type": "string" }, "raw_evidence": {} } }, "ignored_item": { "type": "object", "required": [ "id", "mgrs", "h3_cell", "class_group", "decline_time", "mission_id", "retention_scope", "source", "pending_upload" ], "additionalProperties": false, "properties": { "id": { "type": "string", "format": "uuid" }, "mgrs": { "type": "string" }, "h3_cell": { "type": "integer", "minimum": 0 }, "class_group": { "type": "string" }, "decline_time": { "type": "string", "format": "date-time" }, "operator_id": { "type": "string" }, "mission_id": { "type": "string" }, "retention_scope": { "type": "string", "enum": ["mission", "session", "until_expiry"] }, "expires_at": { "type": "string", "format": "date-time" }, "source": { "type": "string", "enum": ["central_pulled", "local_appended"] }, "pending_upload": { "type": "boolean" } } } } }