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_basicrdp_jwtrdp_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

  1. Populate what you know, and omit unknown or irrelevant fields.
  2. Do not invent data. Empty or default values can mislead consumers.
  3. Use the type_info discriminator and populate the domain-specific section that applies.
  4. Provenance is critical: always include source and timestamp.
  5. Assessment provides warfighting context. Affiliation and environment are needed for tactical decision-making.

Responses

Request samples

Content type
application/json
{
  • "object": {
    }
}

Response samples

Content type
application/json
{
  • "object": {
    }
}

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_basicrdp_jwtrdp_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

Request samples

Content type
application/json
{
  • "pageSize": 100,
  • "query": {
    }
}

Response samples

Content type
application/json
{
  • "nextCursor": "a2919858-75bf-42c4-8850-2bbb2b94d154",
  • "objects": [
    ]
}

Get object by ID

Retrieves a single object by its UUID.

Authorizations:
rdp_basicrdp_jwtrdp_api_key
path Parameters
objectId
required
string

UUID of the object to retrieve

Responses

Response samples

Content type
application/json
{
  • "object": {
    }
}