May Mobility · AsyncAPI Specification
May Mobility Fleet Events
Version
View Spec
View on GitHub
CompanyAutonomous VehiclesTransportationMobilityRobotaxiFleet ManagementTelemetryPublic TransitAutomotiveStreamingAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-01'
method: searched
source: https://docs.maymobility.com/docs/fleet-api/types-of-data
spec_type: null
spec_type_note: 'May Mobility publishes NO AsyncAPI document. Every probe for one
missed (docs.maymobility.com/asyncapi.yaml 404, /asyncapi.json 404, no spec link
anywhere in the docs, no public GitHub repo). This file is therefore an
event-surface CATALOG harvested from the provider''s own per-topic documentation
pages — it is not, and must not be presented as, an AsyncAPI specification.'
surface_type: websocket-streaming
surface_note: 'The May Mobility Fleet Realtime API is a WebSocket pub/sub stream, not
an HTTP webhook callback surface. It is catalogued here because it is the
provider''s genuine event surface. Topics were previously delivered over a NATS
client SDK; release notes for v2.0.0 (August 2023) record the migration from NATS
to WebSockets, with protobuf-to-JSON conversion moved server-side.'
transport:
protocol: websocket
auth: AWS Cognito client-credentials access token passed as a `token` URL query
parameter
encryption: 'All connections are encrypted (documented as: "Note: All connections
are encrypted").'
server_url: null
server_url_note: The connection domain is issued per account by the May Mobility
Fleet API team and is written as `domain` in all published examples. It is not
published and has not been guessed here.
addressing:
realtime_topic_pattern: /.vehicle.{vehicleID}.{topicName}
realtime_subscription: Comma-separated topic list passed as a `topics` query
parameter, e.g. `domain/topics=/.vehicle.testvehicle.GPS,/.vehicle.examplevehicle.POSE`
video_subscription: Comma-separated vehicle list passed as a `vehicles` query
parameter, e.g. `domain/vehicles=vehiclename1,vehiclename2`
batch_path_pattern: /vehicles/{vehicleID}/topics/{topicName}
limits:
- limit: Maximum 20 topics per Realtime connection or request. Exceeding it fails the
connection with an error.
- limit: Maximum 4 vehicles per video-mode connection or request. Exceeding it fails
the connection with an error.
modes:
- name: telemetry
description: Streams JSON messages for subscribed per-vehicle topics. Protobuf is
decoded to JSON server-side, so no protobuf tooling is needed on the client.
encoding: application/json
- name: video
description: Streams exterior camera feeds. Output is a serialized `quic_wrapper`
protobuf whose `data` field carries a `May.image_t` message. Encodings observed
in the docs are JPEG, VP8 and VP9 (mostly VP9); frame types are KEY and DELTA.
Clients must sequence frames themselves; the docs publish a reference
`decodingWithFrameSequencing` routine in TypeScript.
encoding: application/x-protobuf
schema: grpc/may-mobility-quic-wrapper.proto
cameras: 'Camera position is carried in the `mqtt_topic` field of the wrapper —
e.g. a value containing "fc" denotes front center.'
common_message_fields:
- field: utime
datatype: string
description: Best estimate of when this message is from, host clock in UTC
(microseconds).
- field: vehicle
datatype: string
description: Unique vehicle name the data is associated to.
- field: topic
datatype: string
description: Type of telemetry data.
channels:
- name: GPS
topic: /.vehicle.{vehiclename}.GPS
batch_path: /vehicles/{vehiclename}/topics/GPS
realtime: true
batch: true
description: Provides latitude, longitude, and elevation information of a vehicle.
This also contains uncertainties on those measurements.
fields:
- {name: utime, type: string}
- {name: utimeGlobal, type: double, description: Global time of navigation solution
generation}
- {name: lat, type: double, description: latitude of a vehicle}
- {name: lon, type: double, description: longitude of a vehicle}
- {name: elevation, type: double, description: Meters above sea level}
- {name: horizDop, type: double, description: Horizontal Dilution of Precision}
- {name: timeDop, type: double, description: GPS Time Dilution of Precision}
- {name: nsats, type: int32, description: number of satellites}
- {name: errX, type: double, description: meters covariance East West}
- {name: errY, type: double, description: meters covariance North South}
- {name: errZ, type: double, description: meters covariance Up Down}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/gps
- name: GPS_VELOCITY
topic: /.vehicle.{vehiclename}.GPS_VELOCITY
batch_path: /vehicles/{vehiclename}/topics/GPS_VELOCITY
realtime: true
batch: true
description: NED velocity, ground speed and heading of the vehicle with ublox
accuracy estimates.
fields:
- {name: utime, type: string}
- {name: utimeGlobal, type: double}
- {name: vNorth, type: double, description: NED north velocity m/s}
- {name: vEast, type: double, description: NED east velocity m/s}
- {name: vDown, type: double, description: NED down velocity m/s}
- {name: groundSpeed, type: double, description: ground speed (2-D) m/s}
- {name: heading, type: double, description: NED heading of motion (0.0 = North)
(2-D) rad}
- {name: speedAccuracy, type: double, description: ublox model speed estimate
accuracy m/s}
- {name: headingAccuracy, type: double, description: ublox model heading estimate
accuracy rad}
- {name: validFix, type: bool, description: GNSS fix is within ublox configured DOP
and accuracy masks}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/gps-velocity
- name: POSE
topic: /.vehicle.{vehiclename}.POSE
batch_path: /vehicles/{vehiclename}/topics/POSE
realtime: true
batch: true
description: Provides position, orientation, linear velocity, angular velocity, and
linear acceleration for the rigid body of a vehicle.
fields:
- {name: utime, type: string, description: utime that the actual measurement took
place}
- {name: pos, type: '[double]', description: position (x,y,z) in meters in local
frame}
- {name: quat, type: '[double]', description: quaternion which rotates a vector
from body to local frame}
- {name: vel, type: '[double]', description: velocity in m/s, expressed in body
frame}
- {name: avel, type: '[double]', description: angular velocity about (x,y,z) in
rad/s in body frame}
- {name: acc, type: '[double]', description: acceleration in m/s^2 in body frame}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/pose
- name: L2G
topic: /.vehicle.{vehiclename}.L2G
realtime: true
batch: false
description: Converts Local Position to Global Position (pose). Global position is
relative to the map.
fields:
- {name: topic, type: string}
- {name: vehicle, type: string}
- {name: utime, type: string, description: Time (UTC) of the L2G reading}
- {name: xyt, type: '[double]', description: 'Encoding of POSE channel as X, Y,
Theta — a vector to map (translate and rotate) pose''s position to the global
(RTN) position.'}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/l2g
- name: ROUTE_LOCATION
topic: /.vehicle.{vehiclename}.ROUTE_LOCATION
batch_path: /vehicles/{vehiclename}/topics/ROUTE_LOCATION
realtime: true
batch: true
description: Provides details on the edge we are currently on or closest to in
route network, along with the latitude, longitude, and altitude associated with
that location.
fields:
- {name: utime, type: string}
- {name: layerId, type: '[string]', description: road, lane, navigation as defined
by route network}
- {name: lla, type: '[double]', description: latitude, longitude, altitude relative
to the route network (degrees, degrees, meters)}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/route-location
- name: DRIVE_STATUS
topic: /.vehicle.{vehiclename}.DRIVE_STATUS
batch_path: /vehicles/{vehiclename}/topics/DRIVE_STATUS
realtime: true
batch: true
availability_note: This topic is unavailable for Lexus vehicles.
description: Provides details on throttle, brake and steering on a vehicle ride.
fields:
- {name: utime, type: string}
- {name: throttleValid, type: bool}
- {name: throttleUtime, type: string}
- {name: throttle, type: double, description: 'forward is positive and reverse is
negative [-1, 1]; reports last known state. Throttle does not exist when brake
is applied, in which case brake is available in its place.'}
- {name: brakeValid, type: bool}
- {name: brakeUtime, type: string}
- {name: steerValid, type: bool}
- {name: steerUtime, type: string}
- {name: steer, type: double, description: wheel angle, left is positive and right
is negative; reports last known state}
- {name: shiftValid, type: bool}
- {name: shiftUtime, type: string}
- {name: shift, type: int32, description: SHIFT type enum; reports last known state}
- {name: modeValid, type: bool}
- {name: modeUtime, type: string}
- {name: mode, type: int32, description: MODE type enum; reports last known state}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/drive-status
- name: RUNLEVEL
topic: /.vehicle.{vehiclename}.RUNLEVEL
batch_path: /vehicles/{vehiclename}/topics/RUNLEVEL
realtime: true
batch: true
description: Provides information if the vehicle is in manual or autonomy.
safety_relevant: true
fields:
- {name: utime, type: string}
- {name: runlevel, type: string, description: The current runlevel for the system —
the actual mode the vehicle is being driven in (autonomy or manual).}
- {name: healthRunlevel, type: string, description: 'Runlevel specified by the
health monitoring system. "nominal" means the vehicle is capable of autonomous
driving; any value other than nominal or controlled stop means it is not and
the safety driver must take over.'}
- {name: requestedRunlevel, type: string, description: The runlevel currently being
requested by a user.}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/runlevel
- name: DRIVER_TAKEOVER
topic: /.vehicle.{vehiclename}.DRIVER_TAKEOVER
batch_path: /vehicles/{vehiclename}/topics/DRIVER_TAKEOVER
realtime: true
batch: true
availability_note: This topic is unavailable for Lexus vehicles.
safety_relevant: true
description: Driver Intervention signals and determination of Takeover Status, as
well as safety cross checks of associated signals.
fields:
- {name: utime, type: string}
- {name: primaryChannelIntervention, type: integer, description: Takeover determined
from a primary channel (0 or 1)}
- {name: secondaryChannelIntervention, type: integer, description: 'For internal
use only: takeover determined from secondary channel (0 or 1)'}
- {name: adnDetectedTakeover, type: integer, description: 'For internal use only:
takeover determined from the two channel interventions'}
- {name: adnModeCommand, type: integer, description: 'For internal use only:
takeover determined from interventions'}
- {name: mayIntervention, type: boolean, description: Whether there was a driver
takeover, based on adnDetectedTakeover and the channel interventions.}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/driver-takeover
- name: COLLISION_NOTIFICATION
topic: /.vehicle.{vehiclename}.COLLISION_NOTIFICATION
realtime: true
batch: false
safety_relevant: true
description: This event is triggered when an impact is detected on ego.
fields:
- {name: utime, type: string}
- {name: impact_detection, type: string, description: 'NORMAL_STATUS,
CRASH_DETECTION_AIRBAG, CRASH_DETECTION_NON_AIRBAG, INVALID_VALUE'}
- {name: vehicle, type: string}
- {name: topic, type: string}
enums:
impact_detection:
- {value: NORMAL_STATUS, meaning: normal, no impact detected}
- {value: IMPACT_POINT, meaning: Crash detection with activated airbag; shuts off
high voltage circuit, with airbag deployment.}
- {value: CRASH_DETECTION_AIRBAG, meaning: Crash detection; shuts off high voltage
circuit, without airbag deployment.}
- {value: INVALID_VALUE, meaning: Invalid value}
note: 'The field table and the enum table disagree — the field description lists
CRASH_DETECTION_NON_AIRBAG while the enum table lists IMPACT_POINT in its place.
Recorded verbatim as published; not reconciled.'
added: '2026-04 (April 2024 release notes)'
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/collision-detected
- name: TRAFFIC_LIGHT
topic: /.vehicle.{vehiclename}.TRAFFIC_LIGHT
realtime: true
batch: false
description: Provides current status of the traffic light and the distance to the
next traffic light per May's Planner.
fields:
- {name: utime, type: string, description: Local machine time when this list was
generated}
- {name: distance, type: int32, description: 'distance to the next traffic light we
plan to wait for; -1 if no traffic light is currently relevant'}
- {name: signal_type, type: SignalType, description: Configuration of traffic light}
- {name: status_straight_turn, type: Status, description: Estimate of the light
status}
- {name: status_right_turn, type: Status, description: Estimate of the light status}
- {name: status_left_turn, type: Status, description: Estimate of the light status}
added: '2024-06 (June 2024 release notes)'
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/traffic-light
- name: VEHICLE_STATE
topic: /.vehicle.{vehiclename}.VEHICLE_STATE
realtime: true
batch: false
description: 'Provides a comprehensive overview of a vehicle''s status, including
the state of signals, lights, windows, windshield wipers, airbags, access control,
seat belts, AC temperature, tire pressure, odometer, fuel status, and the
vehicle''s VIN. The topic is organised into subtopics (for instance "Seat Belts")
each broken into their own fields.'
subtopics:
- name: Seat Belts
fields:
- seatBeltStatus1L
- seatBeltStatus1R
- seatBeltStatus2L
- seatBeltStatus2R
- seatBeltStatus3L
- seatBeltStatus3R
- seatBeltStatus3C
values: 'BUCKLED, UNBUCKLED, Undetermined (sensor not working just after IG-ON,
communication disruption to the seat sensor, or switch fault)'
added: '2024-04 (April 2024 release notes)'
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/vehicle-state
- name: HEALTH_SUMMARY
topic: /.vehicle.{vehiclename}.HEALTH_SUMMARY
batch_path: /vehicles/{vehiclename}/topics/HEALTH_SUMMARY
realtime: true
batch: true
description: Outputs the status/errors of various modules running in a vehicle.
fields:
- {name: utime, type: string, description: Local machine utime of the most recently
reported health update}
- {name: statuses, type: '[Statuses]', description: Array of Statuses}
- {name: nuids, type: uint32, description: How many uids there are in the report}
- {name: nfields, type: uint32, description: How many reporting fields for every
uid there are}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/health-summary
- name: PLATFORM_HEALTH
topic: /.vehicle.{vehiclename}.PLATFORM_HEALTH
batch_path: /vehicles/{vehiclename}/topics/PLATFORM_HEALTH
realtime: true
batch: true
description: Provides details on the compute, storage, power and processes of a
vehicle.
fields:
- {name: utime, type: string}
- {name: groupId, type: Group Id, description: Each group is identified by its ID}
- {name: value, type: uint32, description: the value of interpretation}
- {name: valueId, type: Value Id, description: the ID that defines the
interpretation of the value}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/platform-health
- name: LIGHTING_STATUS
topic: /.vehicle.{vehiclename}.LIGHTING_STATUS
batch_path: /vehicles/{vehiclename}/topics/LIGHTING_STATUS
realtime: true
batch: true
availability_note: This topic is unavailable for Lexus vehicles.
description: Provides details on the condition of all the lights that are reported
on by firmware.
fields:
- {name: utime, type: string}
- {name: output, type: uint32, description: bitfield of lights that are reported on
by firmware}
- {name: vehicle, type: string}
- {name: topic, type: string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/lighting-status
- name: TELE_OP_OBJECTS
topic: /.vehicle.{vehiclename}.TELE_OP_OBJECTS
batch_path: /vehicles/{vehiclename}/topics/TELE_OP_OBJECTS
realtime: true
batch: true
description: Perception object list published for teleoperation, as tele_op_object_t
entries.
fields:
- {name: utime, type: string, description: Local machine time when this list was
generated}
- {name: id, type: int32, description: 'The ID of the object; -1 == EGO agent, else
a real object'}
- {name: vel, type: '[double]', description: 'estimated velocity vector for the
object in global frame [m/s]'}
- {name: pose, type: '[double]', description: position (x,y,z) in meters in global
frame}
- {name: quat, type: '[double]', description: quaternion which rotates a vector
from body to global frame}
- {name: poly, type: polygon_t, description: A bounding polygon for the object in
global frame}
- {name: classLabel, type: string, description: The maximum probability class of
this object as a human readable string}
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/teleop-objects
batch_only_resources:
- name: LIDAR
description: This object is an abstraction of vehicle lidar (Ouster and Velodyne)
data. Retrieved through a two-step Batch API flow.
realtime: false
batch: true
format: ROSBAG
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/lidar
- name: SHIFT_TIMING
description: Vehicle shifts associated with a vehicle and day.
realtime: false
batch: true
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/vehicle-shift-timing
- name: LAST_ACTIVE
description: Last time a vehicle was in service, as an ISO DateTime.
realtime: false
batch: true
docs: https://docs.maymobility.com/docs/fleet-api/topics-channels/last-active
coverage:
realtime_channels: 15
batch_capable_channels: 11
realtime_only_channels: 4
batch_only_resources: 3
safety_relevant_channels: 3
x-evidence:
fetched: '2026-08-01'
pages:
- https://docs.maymobility.com/docs/intro
- https://docs.maymobility.com/docs/fleet-api/types-of-data
- https://docs.maymobility.com/docs/fleet-api/video-data-output
- https://docs.maymobility.com/docs/fleet-api/decoding-a-message
- https://docs.maymobility.com/docs/fleet-api/topics-channels/* (18 pages)
http_status: 200