Curb Data Specification: Events API

October 27, 2025 · View on GitHub

CDS Events Icon

The Events API is a REST API allowing real-time and historic events at the curb to be sent to cities, and the ability to check on the status of any sensors. Events can come from company data feeds, on street sensors, session payments, company check-ins, in-person parking personnel, directly from operators, and/or other city data sources. Data sent in the Events API can be connected to the Curbs API over time and space, and events are used for calculations in the Metrics API.

See other CDS APIs on the homepage.

Endpoints

There are two different endpoints that are part of the Events API:

  • A Curb Event is an activity that occurs near, at, or within a pre-defined curb area. Defining events is required as part of the Events API.
  • A Status is the current status of a curb monitoring source. Event status is optional.

See examples for these endpoints.

Table of Contents

REST Endpoints

All endpoints return a JSON object containing the fields as specified in the REST Endpoint details.

Top

Authorization

Authorization is recommended for Events endpoints, since (depending on implementation, use cases, and fields required) it may contain information only city transporation agencies should have access to.

Top

Query Event

Endpoint: /events/events
Method: GET
Authorization: recommended
data Payload: a JSON object with the following fields:

This endpoint must be implemented by every Events API server.

Query Parameters

All query parameters are optional.

NameTypeDescription
event_timeStringAn ISO 8601 extended datetime representing an UTC hour between 00 and 23 in format YYYY-MM-DDTHH. Specifies the hour for which data should be returned. If omitted the API should return all events in the last 60 minutes. For example, requesting event_time=2019-10-01T07 returns all events where 2019-10-01T07:00:00 <= event.event_time < 2019-10-01T08:00:00 UTC.
curb_area_idUUIDThe ID of a Curb Area. If specified, only return events occurring within this area.
curb_zone_idUUIDThe ID of a Curb Zone. If specified, only return events occurring within this zone.
curb_space_idUUIDThe ID of a Curb Space. If specified, only return events occurring within this space.
curb_object_idUUIDThe ID of a Curb Object. If specified, only return events occurring at this object.

Top

Query Status

Endpoint: /events/status
Method: GET
Authorization: recommended
data Payload: a JSON object with a status field containing an array of Status objects.

Optional endpoint, as required by public agencies; if not implemented, the server should reply with 501 Not Implemented if possible.

Query Parameters

All query parameters are optional.

NameTypeDescription
curb_area_idUUIDThe ID of a Curb Area. If specified, only return sensor statuses within this area.
curb_zone_idUUIDThe ID of a Curb Zone. If specified, only return sensor statuses within this zone.
curb_space_idUUIDThe ID of a Curb Space. If specified, only return sensor statuses within this space.
curb_object_idUUIDThe ID of a Curb Object. If specified, only return sensor statuses at this object.

Top

Push Event

Endpoint: /events/event
Method: POST
Authorization: required
data Payload: an array of Curb Event events objects.

Optional endpoint, as required by public agencies; if not implemented, the server should reply with 501 Not Implemented.

Servers implementing a POST /events/event API should be able to deduplicate events from a publisher based upon the event_id field. It should be expected that some events can be resent as a result of restoring connections between systems interrupted by network or system errors.

Responses

Possible HTTP Status Codes: 200, 201, 400, 401, 404, 406, 409, 500, 501

See Responses for details.

Event Errors:

errorerror_descriptionerror_details[]
bad_paramA validation error occurredArray of parameters with errors
missing_paramA required parameter is missingArray of missing parameters

Top

Responses and Error Messages

The response to a client request must include a valid HTTP status code defined in the IANA HTTP Status Code Registry.

The response must set the Content-Type header as specified in the Versioning section.

Response bodies must be a UTF-8 encoded JSON object.

See the Responses, Error Messages, and Bulk Responses sections, and the schema for more details.

Top

Data Objects

Curb Event

A Curb Event is a record of activity that happens within the geographic bounds of a Curbs object.

A Curb Event is represented as a JSON object, whose fields are as follows:

NameTypeRequired/OptionalDescription
event_idUUIDRequiredThe globally unique identifier of the event that occurred.
event_typeEvent TypeRequiredThe event_type that happened for this event.
event_purposeEvent PurposeConditionally RequiredGeneral curb usage purpose that the vehicle performed during the event. Required for sources capable of determining activity type for relevant event_types.
event_locationGeoJSON PointOptionalThe geographic point location where the event occurred. All efforts should be made to provide this field, even if slightly imprecise. But there may be times when a location is impossible or irrelevant.
event_timeTimestampRequiredTime at which the event occurred.
event_publication_timeTimestampRequiredTime at which the event became available for consumption by this API.
event_session_idUUIDOptionalMay be provided to tie known connected park_start and park_end event types together by a unique session ID. If not confident of being able to determine a park_end event at some time after park_start is recorded (i.e., you cannot detect when a vehicle departs), then do not use session_id. This field may be most useful to payment companies who provide their source data as sessions (typical for transaction data). Note also: the use of the term "session" across CDS means the start and end of curb usage of a vehicle, not necessarily a financial or payment session or transaction.
curb_zone_idUUIDConditionally RequiredUnique ID of the Curb Zone where the event occurred. Required for events that occurred in a known Curb Zone, if known and used, for ALL event_types.
curb_area_idsArray of UUIDConditionally RequiredUnique IDs of the Curb Area where the event occurred. Since Curb Areas can overlap, an event may happen in more than one. Required for events that occurred in a known Curb Area, if known and used, for ALL event_types.
curb_space_idUUIDConditionally RequiredUnique ID of the Curb Space where the event occurred. Required for events that occurred at a known Curb Space, if known and used, for ALL event_types.
curb_object_idUUIDConditionally RequiredUnique ID of the Curb Object where the event occurred. Required for events that occurred at a known Curb Object, if known and used, for ALL event_types.
data_source_typeEnum Source TypeRequiredGeneral category of the source creating the event.
data_source_operator_idUUIDConditionally RequiredUnique identifier of the entity responsible for operating the event data source. IDs can identify the fleet operator sending a data feed, or the organization (company or city) operating the sensor. IDs for fleet operators are required and global and come from the data_source_operators.csv file, and optional for others. Read our How to Get a Data Source Operator ID guide. An agency at their discretion may allow a small, local company to simply provide a consistent data_source_operator_name string instead of this field, otherwise this field is required.
data_source_operator_nameStringOptionalName of the provider responsible for operating the vehicle, device, or sensor at the time of the event. May be sent along with data_source_operator_id or on its own for small operators at the discretion of the city.
data_source_device_idUUIDRequiredUnique identifier of this event source, whether sensor, vehicle, camera, etc. Allows agencies to connect related Events as they are recorded by the same source. If coming from a provider, this is a generated UUID they use and not the same as the external vehicle_id. If this field is needed for your use cases, review our Privacy Guidance.
data_source_device_nameStringConditionally RequiredUnique name of this event source, whether sensor, vehicle, camera, etc. Allows agencies to connect related Events as they are recorded by the same source. If coming from a provider, this is usually the internal ID they use for the device. Must be provided if the device has a visible or shared identifier. If this field is needed for your use cases, review our Privacy Guidance.
data_source_manufacturerStringOptionalManufacturer of the data source hardware or vehicle reporting event data.
data_source_modelStringOptionalModel of the data source hardware or vehicle reporting event data.
sensor_status_is_commissionedBooleanOptionalIf a sensor was used to capture this event, the commissioned status at the time that the event was reported. Indicates whether the sensor is currently in a state where it should be reporting data.
sensor_status_is_onlineBooleanOptionalIf a sensor was used to capture this event, the online status at the time that the event was reported. Indicates whether the sensor is currently online and reporting data.
vehicle_idStringOptionalA vehicle identifier visible externally on the vehicle itself. If this field is needed for your use cases, review our Privacy Guidance. Note: in the next breaking CDS release, it is likely all of these "vehicle" fields will be moved to a Vehicles data object._
vehicle_license_plateStringOptionalThe consistently placed vehicle license plate, usable by ALPR systems, when required for curb use. This field is potentially sensitive (depending on local, state, and national laws) and a data privacy framework is recommended for collecting, retention, deletion, obfuscation, and security. If this field is needed for your use cases, review our Privacy Guidance. The detection of stealth, invisible, modified, ghost, or otherwise ANPR-evading plate violations may be recorded using the enforcement field and associated Enforcement object.
vehicle_license_plate_jurisdictionStringOptionalJurisdiction or state in which the vehicle_license_plate is registered.
vehicle_license_plate_confidenceIntegerOptionalValue from 1 to 100 specifying the recognition confidence level for vehicle_license_plate.
vehicle_permit_numberStringOptionalIf applicable, the assigned permit number for this vehicle from the city agency.
vehicle_lengthIntegerConditionally RequiredApproximate length of the vehicle that performed the event, in centimeters. Required for sources capable of determining vehicle length.
vehicle_typeVehicle TypeConditionally RequiredType of the vehicle that performed the event. Required for sources capable of determining vehicle type.
vehicle_type_confidenceIntegerOptionalValue from 1 to 100 specifying the recognition confidence level for vehicle_type.
vehicle_colorStringOptionalColor of the vehicle that performed the event.
vehicle_color_confidenceIntegerOptionalValue from 1 to 100 specifying the recognition confidence level for vehicle_color.
vehicle_company_nameStringOptionalCompany or courier name of the vehicle that performed the event.
vehicle_company_name_confidenceIntegerOptionalValue from 1 to 100 specifying the recognition confidence level for vehicle_company_name.
vehicle_run_idStringOptionalRun identifier from an external runs table containing information about make, model, and/or year, of the vehicle that performed the event.
vehicle_run_id_confidenceIntegerOptionalValue from 1 to 100 specifying the recognition confidence level for vehicle_run_id.
vehicle_propulsion_typesArray of Propulsion TypeConditionally RequiredList of propulsion types used by the vehicle that performed the event. Required for sources capable of determining vehicle propulsion type.
vehicle_blocked_lane_typesArray of Lane TypeConditionally RequiredType(s) of lane blocked by the vehicle performing the event. If no lanes are blocked by the vehicle performing the event, the array should be empty. Required for sources capable of determining it for the following event_types: park_start
curb_occupantsArray of Curb OccupantConditionally RequiredCurrent occupants of the Curb Zone. If the sensor is capable of identifying the linear location of the vehicle, then elements are sorted in ascending order according to the start property of the linear reference. Otherwise, elements appear in no particular order. Required for sources capable of determining it for the following event_types: park_start, park_end, scheduled_report
actual_costIntegerOptionalIf available from the source, the actual cost, in the currency defined in currency, paid by the curb user for this event. The currency type is sent in with the REST Endpoints JSON object. All costs should be given as integers in the currency's smallest unit. As an example, to represent $1 USD, specify an amount of 100 (for 100 cents).
enforcementEnforcementOptionalEnforcement information related to this Curb Event, relevant to the moment in time the event happens. Only used for enforcement related events such as vehicle_detected, vehicle_violation_start, vehicle_violation_end, and citation_issued.
payment_channelPayment ChannelConditionally RequiredIf available from the source, the medium by which a user submitted payment.
payment_methodPayment MethodConditionally RequiredIf available from the source, the method used to pay for this event.
payment_transaction_idStringConditionally RequiredThe transaction ID of the payment if available from the source and different from the event_id.
custom_attributesCustom Attributes JSON ObjectOptionalAdditional attributes (fields and data) to include in this endpoint.
external_referencesArray of External Reference objectsOptionalOne or more references to external data sources impacting this Curb Event. The external reference is relevant to the moment in time the event happens.

Top

Event Type

Curb Event Type event_type enumerates the set of possible types of Curb Event. The values that it can assume are listed below:

NameDescription
comms_lostCommunications with the event source were lost
comms_restoredCommunications with the event source were restored
decommissionedEvent source was decommissioned
park_startA vehicle stopped, parked, or double parked
park_endA parked vehicle leaving a parked or stopped state and resuming movement
scheduled_reportEvent source reported status at a scheduled interval
enter_areaVehicle enters the relevant geographic area. This differs from vehicle_detected since enter_area represents the tracking of a vehicle crossing the geo-boundary of an area/location.
exit_areaVehicle exits the relevant geographic area
vehicle_detectedDetection or observation of a vehicle within or near a curb zone. Can originate from manual surveying, automated license plate recognition (LPR) systems, or other detection methods. This differs from the enter_area and exit_area events where a vehicle_detected event does not require the vehicle to be crossing the geo-boundary of an area/location.
vehicle_violation_startStart of a compliance violation at a curb location, triggered when a vehicle is not permitted or has exceeded allowed time limits. This event may be published after detecting a vehicle but does not require a vehicle_detected event.
vehicle_violation_endResolution of a compliance violation, when the vehicle is no longer in violation of regulations. Used for time-based violations where the end of the violation can be detected. Requires a preceding vehicle_violation_start event for the same vehicle.
citation_issuedIssuance of a ticket or citation to a vehicle. May be published in addition to a related vehicle_violation_start event.

Top

Source Type

Curb Data Source Type data_source_type enumerates the set of possible categories of sources that are sending this event. The values that it can assume are listed below:

NameDescription
data_feedDirectly from a provider data feed sent to the agency
cameraVideo or static image processing source
above_groundSensor deployed above ground
in_groundSensor deployed in the ground
meterA smart parking meter
paymentFrom payment system or app
in_personAn individual on site recording the event digitally or otherwise
otherSources not enumerated above

Top

Vehicle Type

Type of vehicle vehicle_type similar to vehicle_type in MDS. In the next major MDS and CDS releases, alignment between vehicle types can occur.

NameDescription
bicycleA two-wheeled mobility device intended for personal transportation that can be operated via pedals, with or without a motorized assist (includes e-bikes, recumbents, and tandems)
busA vehicle larger than a car or small truck capable of transporting multiple passengers at once
cargo_bicycleA two- or three-wheeled bicycle intended for transporting larger, heavier cargo than a standard bicycle (such as goods or passengers), with or without motorized assist (includes bakfiets/front-loaders, cargo trikes, and long-tails)
carA passenger car or similar light-duty vehicle
delivery_robotA robot or remote-operated device intended for transporting goods
scooterA standing or seated fully-motorized mobility device intended for one rider, capable of travel at low or moderate speeds, and suited for operation in infrastructure shared with motorized bicycles
scooter_standingA standing fully-motorized mobility device without a seat intended for one rider, capable of travel at low or moderate speeds, and suited for operation in infrastructure shared with motorized bicycles
scooter_seatedA fully-motorized mobility device with a seat intended for one rider, capable of travel at low or moderate speeds, and suited for operation in infrastructure shared with motorized bicycles
mopedA seated fully-motorized mobility device capable of travel at moderate or high speeds and suited for operation in general urban traffic
motorcycleA seated mobility device capable of travel at high speeds and suited for operation in general urban traffic or expressways
truckA box truck or large delivery truck with attached cab
vanA van with significant interior cargo space
freightA large delivery truck with attached cab
otherA device that does not fit in the other categories
unspecifiedUnspecified

Top

Propulsion Type

Propulsion type vehicle_propulsion_types of the vehicle, similar to propulsion_type in MDS. For this CDS release the list will be developed independently here to accommodate CDS and MDS use cases, while still aligning to the MDS design principles. In the next major MDS 2.0 release and next CDS release, alignment between CDS and MDS propulsion types can occur.

NameDescription
humanPedal or foot propulsion
electric_assistProvides electric motor assist only in combination with human propulsion - no throttle mode
electricPowered by battery-powered electric motor with throttle mode
combustionPowered by gasoline combustion engine
combustion_dieselPowered by diesel combustion engine
hybridPowered by combined combustion engine and battery-powered motor
hydrogen_fuel_cellPowered by hydrogen fuel cell powered electric motor
plug_in_hybridPowered by combined combustion engine and battery-powered motor with plug-in charging

A vehicle may have one or more values from the vehicle_propulsion_types, depending on the number of modes of operation. For example, a scooter that can be powered by foot or by electric motor would have the vehicle_propulsion_types represented by the array ["human", "electric"]. A bicycle with pedal-assist would have the vehicle_propulsion_types represented by the array ["human", "electric_assist"] if it can also be operated as a traditional bicycle. A hybrid vehicle may use ["combustion", "electric"].

Top

Event Purpose

General event purpose event_purpose that the vehicle performed during its event, discernible by observation, sensors, or self-reported in company data feeds. New event purposes MAY be generated to reflect local curb uses, but when possible, the following well-known recommended values should be used. It may not always be knowable, but where it is possible this information should be conveyed. If multiple purposes apply, then use the more descriptive/specific value.

NameDescription
constructionConstruction of hard assets including buildings and roadside infrastructure
deliveryGeneral delivery of parcels, goods, freight
emergency_useIncludes ambulance, fire truck, police
parkingVehicle parking, charging, or stopping
passenger_transportPicking up and/or dropping off of human passengers
special_eventsIncludes unloading equipment for concerts, theatre, street events
waste_managementRetrieval/disposal of waste
device_maintenanceIncludes scooter pickup, drop off, battery swapping
autonomousAutonomous vehicle use
emsEmergency medical vehicle use
fireEmergency fire vehicle
food_deliveryDelivery of food items ready for consumption to an end consumer
parcel_deliveryDelivery of parcels, including bulk food goods to a restaurant or other business
policeUse by a police vehicle
public_transitIncludes large or small buses or paratransit.
ride_hailIncludes privately run ride hailing services
road_maintenanceIncludes pothole patching, striping, snow plowing, street sweeping
service_vehiclesIncludes private sector activity like some utilities
taxiTraditionally licensed taxi services
utility_workIncludes public sector activity like sewer, water, telecoms
vehicle_chargingParking for electric vehicles to charge
vehicle_parkingIncludes private or commercial vehicle free or paid/metered parking
vendingMobile vending or food truck curb uses
unspecifiedUnknown or unspecified activity type

Top

Payment Channel

The payment channel describes the medium or platform used to pay for a curb event. This helps disambiguate a credit card payment made at a physical meter from a credit card payment made via a mobile app, for example.

NameDescription
meterUser paid at a physical meter.
mobile_appPaid via a mobile app, including iOS App Clips, and Android Instant App.
smsPaid via text message.
telephonePaid via a telephone call.
websiteUser went to a standard website to pay, maybe directed by QR code.
otherSome payment channel not captured above (please submit a pull request!).

Top

Payment Method

Strings used to indicate how a curb user paid for a curb event.

NameDescription
cashBills or coins at a meter.
credit_cardVisa, Mastercard, etc at a meter.
digital_walletPayment disbursed from a digital wallet such as Apple Pay, Google Pay, Cash App, PayPal, or Venmo, etc. credit_card is preferred if the payment is made from a credit card via a digital wallet.
smart_cardA specialized smart card.
membership_cardA card used at a meter to pay via a corporate membership or loyalty program, etc.
billingCurb user will be billed for usage at a later time.
permitCurb user has a permit allowing them to use the curb without payment.
voucherCurb user paid with a pre-issued voucher.
courtesyAt a curb that normally requires payment this event for some reason did not.
testThis was a test payment/event.
otherSome payment method not captured above (please submit a pull request!).

Top

Curb Occupants

A Curb Occupant curb_occupants object represents a specific vehicle’s occupancy in a curb region at a specific point in time. Curb Occupant objects contain the following fields:

NameTypeRequired/OptionalDescription
typeVehicle TypeRequiredThe vehicle type of the occupant. When the event source is not capable of distinguishing vehicle type, this property must take the value "unspecified".
lengthFloatConditionally requiredThe approximate length in centimeters of the vehicle. Required when the event source is capable of determining vehicle length.
linear_locationArray of FloatConditionally requiredA two-element array that specifies the start and end of the occupant’s linear location relative to the start of the Curb Zone in that order. Required when the event source is capable of determining the linear location of occupants.

Top

Status

The Curb Status is the current status of sensors that are monitoring curb places.

A Curb Status is represented as a JSON object array of all deployed sensors, whose fields are as follows:

NameTypeRequired/OptionalDescription
data_source_device_idUUIDRequiredUnique identifier of this event source, whether sensor, vehicle, camera, etc.
data_source_typeEnum Source TypeRequiredGeneral category of the source creating the event.
data_source_operator_idUUIDConditionally RequiredUnique identifier of the entity responsible for operating the event data source. Can be global from data_source_operators.csv or defined per city.
sensor_status_is_commissionedBooleanOptionalIf a sensor was used to capture this event, the commissioned status at the time that the event was reported. Indicates whether the sensor is currently in a state where it should be reporting data.
sensor_status_is_onlineBooleanOptionalIf a sensor was used to capture this event, the online status at the time that the event was reported. Indicates whether the sensor is currently online and reporting data.

Top

Examples

See the CDS Events Examples wiki page for code examples of specific Events use cases, and ideas on how Events can be implemented.

Top

Schema

For details on the CDS schema in OpenAPI format and on Stoplight, please reference the CDS OpenAPI repository.

Top