Skip to content

Use Case: On‐street EV Charging and Usage Tracking

Michael Schnuerle edited this page Jul 14, 2026 · 8 revisions

Note: this is a specific implementation of a use case from the CDS Examples page.

This example supports the CDS use case "On-street EV charging and usage tracking." It shows how the Curb Data Specification (CDS) describes the location of an on-street, at-curb EV charging station with associated permissions, the details of the EV charging "object", and an Event that tracks a charging session there.

Sample API responses

Curb Policy

EV only parking policy and rules. 4 hour max stay, with 1 hour no return. For electric vehicles. Small vehicles not allowed. $2 an hour flat rate.

{
  "curb_policy_id": "b02b3c99-3475-451d-a1d7-c3ef438db5fe",
  "name": "Rules for parking an electric vehicle (EV) in a curb space with a charging station.",
  "description": "4 hour max stay, with 1 hour no return. For electric vehicles. Small vehicles not allowed. $2 an hour flat rate.",
  "published_date": 1643130000000,
  "priority": 1,
  "rules": [
    {
      "name": "string",
      "description": "string",
      "activity": "parking",
      "max_stay": 240,
      "max_stay_unit": "minutes",
      "no_return": 60,
      "no_return_unit": "minutes",
      "user_classes_except": [
        "combustion", "bicycle", "bus", "cargo_bicycle", "moped", "scooter"
      ],
      "purposes": [
        "parking", "service_vehicles", "taxi", "valet"
      ],
      "rate": [
        {
          "rate": 2,
          "rate_unit": "hour"
        }
      ]
    }
  ],
  "time_spans": [
    {
      "start_date": 1643130000000,
      "end_date": 1649130000000,
    }
  ]
}

Curb Zone

Define the curb zone.

{
  "curb_zone_id": "0eaa505d-c9e1-49ad-9fac-3c745ba58676",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        -73.982105,
        40.767932
      ],
      [
        -73.973694,
        40.764551
      ],
      [
        -73.949318,
        40.796918
      ]
    ]
  },
  "description": "string",
  "curb_policy_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "published_date": 1643130000000,
  "prev_policies": [
    {
      "curb_policy_ids": [
        null
      ],
      "start_date": 1643130000000,
      "end_date": 1643130000000
    }
  ],
  "last_updated_date": 1643130000000,
  "available": true,
  "available_spaces": 0,
  "jurisdiction_type": "public",
  "owner_name": "string",
  "address_number": "string",
  "prev_curb_zone_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "start_date": 1643130000000,
  "end_date": 1643130000000,
  "location_references": [
    {
      "source": "string",
      "ref_id": "string",
      "start": 0,
      "end": 0,
      "side": "left"
    }
  ],
  "name": "string",
  "user_zone_id": "string",
  "street_name": "string",
  "cross_street_start_name": "string",
  "cross_street_end_name": "string",
  "length": 1,
  "width": 1,
  "available_space_lengths": [
    0
  ],
  "availability_time": 1643130000000,
  "parking_angle": "parallel",
  "num_spaces": 0,
  "street_side": "N",
  "median": true,
  "entire_roadway": true,
  "curb_area_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "curb_object_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "curb_space_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "custom_attributes": {
    "color": "blue",
    "kiosk_id": "K-1234"
  },
  "external_references": [
    {
      "reference_url": "https://example.com/wzdx/road-events",
      "name": "WZDx",
      "public": true,
      "identifier_name": "RoadEventFeature",
      "ids": [
        "road_event_feature_1234"
      ]
    }
  ]
}

Curb Space

Define a single parking space in the curb zone for an EV vehicle.

{
  "curb_space_id": "182c227b-ca22-4250-a08c-0b1d60c1dadc",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        -73.982105,
        40.767932
      ],
      [
        -73.973694,
        40.764551
      ],
      [
        -73.949318,
        40.796918
      ]
    ]
  },
  "name": "string",
  "published_date": 1643130000000,
  "last_updated_date": 1643130000000,
  "curb_zone_id": "0eaa505d-c9e1-49ad-9fac-3c745ba58676",
  "curb_object_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "space_number": 10,
  "length": 0,
  "width": 0,
  "available": true,
  "availability_time": 1643130000000,
  "custom_attributes": {
    "color": "blue",
    "kiosk_id": "K-1234"
  },
  "external_references": [
    {
      "reference_url": "https://example.com/wzdx/road-events",
      "name": "WZDx",
      "public": true,
      "identifier_name": "RoadEventFeature",
      "ids": [
        "road_event_feature_1234"
      ]
    }
  ]
}

Curb Object

Define an EV charging station and properties.

{
  "curb_object_id": "1f4e2d6a-9b3c-4f8a-bd21-7c5e9a0d3b62",
  "geometry": {
    "type": "Point",
    "coordinates": [
      -73.982105,
      40.767932
    ]
  },
  "curb_zone_id": "a3b1c8d4-2e6f-4a90-9c11-5d7e8f2a4b06",
  "curb_policy_id": "6d2f9c14-8b37-4e51-a0d9-1c4e7b8a52f3",
  "lane_type": "parking",
  "object_type": "signage",
  "name": "No Parking 8-10 AM sign",
  "description": "Pole-mounted regulatory sign at the upstream end of the loading zone.",
  "owner": "City Department of Transportation",
  "operator": "City Department of Transportation",
  "linear_distance": 0,
  "perpendicular_distance": 45,
  "max_length": 30,
  "max_depth": 30,
  "max_height": 240,
  "published_date": 1643130000000,
  "last_updated_date": 1643130000000,
  "external_references": [
    {
      "reference_url": "https://example.com/signs/no-parking-8-10",
      "name": "CDS",
      "public": true,
      "identifier_name": "id",
      "ids": [
        "sign_1234"
      ]
    }
  ]
}

Curb Event

Create an EV charging event and transaction.

{
  "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7",
  "event_type": "comms_lost",
  "event_purpose": "string",
  "event_location": {
    "type": "Point",
    "coordinates": [
      [
        -73.982105,
        40.767932
      ]
    ]
  },
  "event_time": 1643130000000,
  "event_publication_time": 1643130000000,
  "event_session_id": "b81ad47b-76c8-44b9-8c45-3655880d887a",
  "curb_zone_id": "1897ba21-d26b-4e9a-b61b-d4e6712c8a45",
  "curb_area_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "curb_space_id": "182c227b-ca22-4250-a08c-0b1d60c1dadc",
  "curb_object_id": "55e9452a-5b45-463a-b891-f0ea32fc0eaf",
  "data_source_type": "data_feed",
  "data_source_operator_id": "55b617b9-730e-485e-83de-5e1a35fdc352",
  "data_source_operator_name": "string",
  "data_source_device_id": "642bca69-00e8-4d70-bb51-65c53111d838",
  "data_source_device_name": "string",
  "data_source_manufacturer": "string",
  "data_source_model": "string",
  "sensor_status_is_commissioned": true,
  "sensor_status_is_online": true,
  "vehicle_id": "string",
  "vehicle_license_plate": "string",
  "vehicle_license_plate_jurisdiction": "string",
  "vehicle_license_plate_confidence": 1,
  "vehicle_permit_number": "string",
  "vehicle_length": 0,
  "vehicle_type": "bicycle",
  "vehicle_type_confidence": 1,
  "vehicle_color": "string",
  "vehicle_color_confidence": 1,
  "vehicle_company_name": "string",
  "vehicle_company_name_confidence": 1,
  "vehicle_run_id": "string",
  "vehicle_run_id_confidence": 1,
  "vehicle_propulsion_types": [
    "human"
  ],
  "vehicle_blocked_lane_types": [
    "travel_lane"
  ],
  "curb_occupants": [
    {
      "type": "bicycle",
      "length": 0,
      "linear_location": [
        null,
        null
      ]
    }
  ],
  "actual_cost": 100,
  "enforcement": {
    "enforcement_id": "123e4567-e89b-12d3-a456-426614174000",
    "citation_id": "C-2026-0001",
    "is_warning": false,
    "action_taken": "citation_posted",
    "citation_cost": "6500",
    "violations": [
      {
        "violation_code": "NO_PARKING",
        "violation_name": "No parking in loading zone",
        "violation_cost": "6500"
      }
    ]
  },
  "payment_channel": "meter",
  "payment_method": "cash",
  "payment_transaction_id": "string",
  "custom_attributes": {
    "color": "blue",
    "kiosk_id": "K-1234"
  },
  "external_references": [
    {
      "reference_url": "https://example.com/wzdx/road-events",
      "name": "WZDx",
      "public": true,
      "identifier_name": "RoadEventFeature",
      "ids": [
        "road_event_feature_1234"
      ]
    }
  ]
}

Metrics Session

Turning this event into a session in Metrics.

{
  "session_type": "parking",
  "event_session_id": "b81ad47b-76c8-44b9-8c45-3655880d887a",
  "event_id_start": "c7d99cd9-387d-4a57-872b-844234319ba0",
  "event_id_end": "801eb3f4-3c11-4432-8896-0f2bd66be2db",
  "event_location_start_latitude": -180,
  "event_location_start_longitude": -180,
  "event_location_end_latitude": -180,
  "event_location_end_longitude": -180,
  "event_time_start": 1643130000000,
  "event_time_end": 1643130000000,
  "curb_zone_id": "1897ba21-d26b-4e9a-b61b-d4e6712c8a45",
  "curb_space_id": "182c227b-ca22-4250-a08c-0b1d60c1dadc",
  "curb_object_id": "55e9452a-5b45-463a-b891-f0ea32fc0eaf",
  "vehicle_length": 900,
  "vehicle_type": "car"
}

Aggregate Metric

Sample of aggregated counts and calculations of usage at this EV charging station.

{
  "curb_place_type": "space",
  "curb_place_id": "3dff0d35-b1c0-40e1-8246-2e24b6871b69",
  "metric_type": "total_sessions",
  "date": "2023-04-30",
  "hour": 23,
  "value": 100
}

Clone this wiki locally