- ObjectService
  - post Create or update an object (upsert)
  - post Search objects
  - get Get object by ID

API docs by Redocly

# Raft Warfighting Data Model (WDM) Object Service API (1.0)

Download OpenAPI specification:

REST API for managing object lifecycle and real-time updates in the Raft Warfighting Data Model (WDM). Provides operations for creating, updating, querying, and streaming objects representing tracked things in the battlespace (platforms, units, facilities, personnel, equipment, events, control measures, signals, etc.).

Note: Streaming APIs (PublishObjects, StreamObjects) are only available via gRPC and are not supported over standard REST/HTTP at this time.

## ObjectService

## Create or update an object (upsert)

Upsert operation for objects. If object.id is provided and exists, performs an update; otherwise creates a new object with a generated UUID.

This single endpoint handles all object lifecycle operations:

- CREATE: Omit object.id or provide a new UUID
- UPDATE: Provide existing object.id with modified fields
- DELETE: Set object.status to OBJECT_STATUS_DELETED

##### Authorizations:

rdp_basic rdp_jwt rdp_api_key

##### Request Body schema: application/json
required

Request body for creating or updating an object. Note: The 'ontology' field is read-only and will be ignored if provided.

required | object (v1Object) Core warfighting representation of a tracked object in the battlespace. An Object is anything with identity that the force needs to track: platforms, units, facilities, equipment, personnel, events, control measures, signals, and more. ## Flexible Field Model Most fields are optional - populate only what is relevant for the specific object being represented. This flexibility allows modeling diverse object types without requiring separate message definitions for each category. Different object types naturally use different field subsets. For example: Maritime vessel: location, motion, maritime info, identities (MMSI), dimensions. Aircraft: location, motion, aviation info, identities (Mode-S), assessment. Ground vehicle: location, motion, ground info, assessment, labels. Facility: location, dimensions, assessment (no motion). Person: location, assessment (minimal fields). Control measure: shape, assessment, labels (no motion or dimensions). Etc. ## Required vs Optional Fields Minimally required for all objects: `id`: unique identifier (generated if not provided). `provenance.updated_at`: when this data was last modified. Commonly populated but optional: `name`: human-readable identifier. `location.position`: geographic coordinates. `assessment`: tactical assessment (affiliation, environment). Domain-specific (populate as applicable): `type_info.maritime`: ships, boats, submarines. `type_info.aviation`: aircraft, helicopters, UAVs. `type_info.ground`: vehicles, dismounts, equipment. `type_info.orbital`: satellites, space objects. `type_info.signal`: SIGINT/ELINT emissions. Etc. ## Field Population Guidelines Populate what you know, and omit unknown or irrelevant fields. Do not invent data. Empty or default values can mislead consumers. Use the type_info discriminator and populate the domain-specific section that applies. Provenance is critical: always include source and timestamp. Assessment provides warfighting context. Affiliation and environment are needed for tactical decision-making.

### Responses

/api/v1/wdm/objects

### Request samples

- Payload

Content type
application/json
`
{

- "object":
  {
  - "assessment":
    {
    - "affiliation": "AFFILIATION_FRIEND",
    - "environment": "ENVIRONMENT_SURFACE",
    - "nationality": "USA"
    },
  - "description": "Arleigh Burke-class guided missile destroyer",
  - "dimensions":
    {
    - "height_meters": 30,
    - "length_meters": 155,
    - "width_meters": 20
    },
  - "id": "550e8400-e29b-41d4-a716-446655440000",
  - "identities":
    [
    - {
      - "identifier": "366987000",
      - "system": "ais"
      },
    - {
      - "identifier": "366987000",
      - "system": "mmsi"
      }
    ],
  - "labels":
    {
    - "fleet": "7th Fleet",
    - "platform.class": "DDG-51",
    - "platform.hull": "DDG-51"
    },
  - "location":
    {
    - "orientation":
      {
      - "heading_degrees": 45
      },
    - "position":
      {
      - "altitude_hae_meters": 0,
      - "altitude_msl_meters": 0,
      - "latitude_degrees": 35.285,
      - "longitude_degrees": 139.777
      }
    },
  - "motion":
    {
    - "velocity_enu_mps":
      {
      - "x": 10.9,
      - "y": 10.9,
      - "z": 0
      }
    },
  - "name": "USS Arleigh Burke (DDG-51)",
  - "provenance":
    {
    - "name": "ais-receiver-01",
    - "updated_at": "2024-01-15T10:30:00Z"
    },
  - "status": "OBJECT_STATUS_ACTIVE",
  - "type_info":
    {
    - "maritime":
      {
      - "mmsi": "366987000"
      }
    }
  }

}`

### Response samples

- 200
- 400
- 401
- 403
- 500
- default

Content type
application/json
`
{

- "object":
  {
  - "assessment":
    {
    - "affiliation": "AFFILIATION_FRIEND",
    - "environment": "ENVIRONMENT_SURFACE",
    - "nationality": "USA"
    },
  - "description": "Alpha Co 1st platoon lead tank",
  - "dimensions":
    {
    - "heightMeters": 2.44,
    - "lengthMeters": 9.77,
    - "widthMeters": 3.66
    },
  - "id": "7f3e9b20-4c8a-4d5e-9f1b-2a3c4d5e6f70",
  - "identities":
    [
    - {
      - "identifier": "A-11",
      - "system": "bumper"
      }
    ],
  - "labels":
    {
    - "unit.echelon": "platoon",
    - "unit.parent": "A/1-66-AR"
    },
  - "location":
    {
    - "orientation":
      {
      - "headingDegrees": 90
      },
    - "position":
      {
      - "altitudeHaeMeters": 42,
      - "latitudeDegrees": 33.2104,
      - "longitudeDegrees": 44.1234
      }
    },
  - "motion":
    {
    - "velocityEnuMps":
      {
      - "x": 6.2,
      - "y": 0.8,
      - "z": 0
      }
    },
  - "name": "A-11",
  - "provenance":
    {
    - "name": "blue-force-tracker-03",
    - "updatedAt": "2026-04-15T10:30:00Z"
    },
  - "status": "OBJECT_STATUS_ACTIVE",
  - "typeInfo":
    {
    - "ground":
      {
      - "cover": "COVER_STATUS_EXPOSED",
      - "movement": "MOVEMENT_STATUS_MOVING",
      - "platformType": "M1A2_SEPv3",
      - "terrain": "TERRAIN_TYPE_DESERT"
      }
    }
  }

}`

## Search objects

Retrieves a paginated list of objects matching the specified filter criteria. Returns a snapshot at query time. For real-time updates, use StreamObjects.

##### Authorizations:

rdp_basic rdp_jwt rdp_api_key

##### Request Body schema: application/json
required

Request message for retrieving multiple objects.

| object (serviceObjectQuery) Query criteria for retrieving objects from storage. Uses a flat structure where all criteria are combined with AND logic between fields, and OR logic within repeated fields. Optimized for efficient bulk retrieval. Empty query returns all objects. For complex filtering (geographic bounding boxes, labels, nested boolean logic), stream objects and use ObjectStreamFilter instead. Logic semantics: Multiple values within a repeated field use OR (e.g., statuses=[1,2] means status=ACTIVE OR status=INACTIVE) Different fields are combined with AND (e.g., statuses=[1] AND affiliations=[7]) Note: affiliation and environment filters traverse into the object's `assessment` submessage server-side. An affiliation filter matches `assessment.affiliation` and an environment filter matches `assessment.environment`. Objects missing an `assessment` are treated as having the UNSPECIFIED enum value for both. Examples: Query hostile objects:
    {
      "affiliations": [7]
    }
Matches: `assessment.affiliation=HOSTILE` Query surface entities positively identified as friendly:
    {
      "environments": [5],
      "affiliations": [4]
    }
Matches: `assessment.environment=SURFACE AND assessment.affiliation=FRIEND` Query non-simulated surface objects:
    {
      "environments": [5],
      "flags": { "is_simulated": false }
    }
Query objects from specific sources:
    {
      "provenance": {
        "source_names": ["USS Roosevelt CIC", "SIGINT Station Alpha"]
      }
    }
Query objects updated recently:
    {
      "provenance": {
        "updated_at": {
          "start": "2025-12-18T10:00:00Z"
        }
      }
    }
cursor | string Pagination cursor from previous response. Omit or leave empty for first page.
pageSize | integer <int32> <= 1000 Default: "10" Maximum number of objects per page.

### Responses

/api/v1/wdm/objects/search

### Request samples

- Payload

Content type
application/json
`
{

- "pageSize": 100,
- "query":
  {
  - "affiliations":
    [
    - "AFFILIATION_FRIEND"
    ],
  - "statuses":
    [
    - "OBJECT_STATUS_ACTIVE"
    ]
  }

}`

### Response samples

- 200
- 400
- 401
- 403
- 500
- default

Content type
application/json
`
{

- "nextCursor": "a2919858-75bf-42c4-8850-2bbb2b94d154",
- "objects":
  [
  - {
    - "assessment":
      {
      - "affiliation": "AFFILIATION_FRIEND",
      - "environment": "ENVIRONMENT_SURFACE",
      - "nationality": "USA"
      },
    - "dimensions":
      {
      - "heightMeters": 30,
      - "lengthMeters": 155,
      - "widthMeters": 20
      },
    - "id": "550e8400-e29b-41d4-a716-446655440000",
    - "identities":
      [
      - {
        - "identifier": "366987000",
        - "system": "mmsi"
        }
      ],
    - "location":
      {
      - "orientation":
        {
        - "headingDegrees": 45
        },
      - "position":
        {
        - "latitudeDegrees": 35.285,
        - "longitudeDegrees": 139.777
        }
      },
    - "motion":
      {
      - "velocityEnuMps":
        {
        - "x": 10.9,
        - "y": 10.9,
        - "z": 0
        }
      },
    - "name": "USS Arleigh Burke (DDG-51)",
    - "provenance":
      {
      - "name": "ais-receiver-01",
      - "updatedAt": "2026-04-15T10:30:00Z"
      },
    - "status": "OBJECT_STATUS_ACTIVE",
    - "typeInfo":
      {
      - "maritime":
        {
        - "flagState": "USA",
        - "mmsi": "366987000",
        - "navStatus": "NAVIGATION_STATUS_UNDERWAY",
        - "vesselType": "VESSEL_TYPE_MILITARY"
        }
      }
    },
  - {
    - "assessment":
      {
      - "affiliation": "AFFILIATION_FRIEND",
      - "environment": "ENVIRONMENT_HIGH_ALTITUDE",
      - "nationality": "USA"
      },
    - "id": "b12c8400-e29b-41d4-a716-446655440099",
    - "identities":
      [
      - {
        - "identifier": "AE1234",
        - "system": "mode_s"
        },
      - {
        - "identifier": "RAZOR21",
        - "system": "callsign"
        }
      ],
    - "location":
      {
      - "position":
        {
        - "altitudeHaeMeters": 9144,
        - "latitudeDegrees": 35.45,
        - "longitudeDegrees": 139.55
        }
      },
    - "motion":
      {
      - "velocityEnuMps":
        {
        - "x": 180,
        - "y": 60,
        - "z": 2.5
        }
      },
    - "name": "RAZOR-21",
    - "provenance":
      {
      - "name": "adsb-gateway",
      - "updatedAt": "2026-04-15T10:30:05Z"
      },
    - "status": "OBJECT_STATUS_ACTIVE",
    - "typeInfo":
      {
      - "aviation":
        {
        - "aircraftType": "F-15E",
        - "icaoType": "F15",
        - "registration": "89-0487",
        - "verticalMode": "VERTICAL_MODE_CLIMBING"
        }
      }
    }
  ]

}`

## Get object by ID

Retrieves a single object by its UUID.

##### Authorizations:

rdp_basic rdp_jwt rdp_api_key

##### path Parameters

objectId required | string UUID of the object to retrieve

### Responses

/api/v1/wdm/objects/{objectId}

### Response samples

- 200
- 400
- 401
- 403
- 404
- 500
- default

Content type
application/json
`
{

- "object":
  {
  - "assessment":
    {
    - "affiliation": "AFFILIATION_HOSTILE",
    - "environment": "ENVIRONMENT_HIGH_ALTITUDE",
    - "nationality": "RUS"
    },
  - "description": "Hostile fighter tracked by AESA radar",
  - "id": "3b1d4f72-9e5a-4f8c-b123-5c6d7e8f9010",
  - "identities":
    [
    - {
      - "identifier": "47210",
      - "system": "link16_track"
      }
    ],
  - "location":
    {
    - "orientation":
      {
      - "headingDegrees": 270
      },
    - "position":
      {
      - "altitudeHaeMeters": 11500,
      - "latitudeDegrees": 36.12,
      - "longitudeDegrees": 42.88
      }
    },
  - "motion":
    {
    - "velocityEnuMps":
      {
      - "x": -240,
      - "y": 15,
      - "z": 0
      }
    },
  - "name": "TRACK-4721",
  - "provenance":
    {
    - "name": "aegis-radar-07",
    - "updatedAt": "2026-04-15T10:30:10Z"
    },
  - "status": "OBJECT_STATUS_ACTIVE",
  - "typeInfo":
    {
    - "aviation":
      {
      - "aircraftType": "Su-35S",
      - "icaoType": "SU35",
      - "verticalMode": "VERTICAL_MODE_LEVEL"
      }
    }
  }

}`