The Curbs API is a REST API allowing cities to specify areas of interest along the curb along with the rules for using them: who is allowed to park, load, unload, pick up, drop off, etc., for how long, for what price (if any), at what times, and on which days. Locations defined in the Curbs API can be connected to event and metrics data, and can be shared with companies and the public, for purposes such as routing, finding legal parking, loading, and pick-up/drop-off spots, or analyzing curb utilization over time.
See other CDS APIs on the homepage.
There are four different endpoints that are part of the Curbs API:
- A Curb Zone is a contiguous region of curb space on a single block face that is regulated in a particular way. Defining curb zones is required as part of the Curbs API.
- A Curb Space is a defined vehicle parking spot along the curb for use by one vehicle at a time. Curb spaces are optional.
- A Curb Area is a larger area of interest, such as a neighborhood or corridor, that could be used to show proximity, approaches, conflicts, circling, or other activity. Curb areas are optional.
- A Curb Policy A Policy object is a rule that allows or prohibits a particular set of users from using a particular curb at a particular time or times. Curb policies are optional but recommended with Curb Zones.
See examples for these endpoints.
All endpoints return a JSON object containing the fields as specified in the REST Endpoint details.
Authorization is not required for any of the Curbs endpoints, as this information should be made public and easily accessible.
Endpoint: /curbs/zones
Method: GET
data
Payload: a JSON object with a zones
field containing an array of Curb Zone objects.
This required endpoint must be implemented by every Curbs API server. If attaching policies to curb zones, the Query Curb Policies endpoint is also required.
All query parameters are optional.
Name | Type | Description |
---|---|---|
area |
UUID | The ID of a Curb Area. If specified, only return Curb Zones contained within this area. |
min_lat min_lng max_lat max_lng |
Numeric | Specifies a bounding box; if one of these parameters is specified, all four MUST be. If specified only return Curb Zones that intersect the supplied bounding box. |
lat lng radius |
Numeric | If one of these parameters is specified, all three MUST be. Returns only Curb Zones that are within radius centimeters of the point identified by lat /lng . Curb Zones in the response MUST be ordered ascending by distance from the center point. |
include_geometry |
true /false |
If the value is false , do not include the geometry field within the Curb Zone feature object. |
time |
Timestamp | Only Curb Zone objects whose validity period includes this time will be returned; availability data (if supplied) will be returned as of this time. |
Endpoint: /curbs/areas
Method: GET
data
Payload: a JSON object with an areas
field containing an array of Curb Area objects.
Optional endpoint. If not implemented, the server should reply with 501 Not Implemented
.
All query parameters are optional.
Name | Type | Description |
---|---|---|
min_lat min_lng max_lat max_lng |
Numeric | Specifies a bounding box; if one of these parameters is specified, all four MUST be. If specified only return Curb Areas that intersect the supplied bounding box. |
lat lng radius |
Numeric | If one of these parameters is specified, all three MUST be. Returns only Curb Areas that are within radius centimeters of the point identified by lat /lng . Curb Areas in the response MUST be ordered ascending by distance from the center point. |
Endpoint: /curbs/spaces
Method: GET
data
Payload: a JSON object with a spaces
field containing an array of Curb Space objects.
Optional endpoint. If not implemented, the server should reply with 501 Not Implemented
.
All query parameters are optional.
Name | Type | Description |
---|---|---|
zone |
UUID | The ID of a Curb Zone. If specified, only return Curb Spaces contained within this zone. |
min_lat min_lng max_lat max_lng |
Numeric | Specifies a bounding box; if one of these parameters is specified, all four MUST be. If specified only return Curb Zones that intersect the supplied bounding box. |
lat lng radius |
Numeric | If one of these parameters is specified, all three MUST be. Returns only Curb Spaces that are within radius centimeters of the point identified by lat /lng . Curb Spaces in the response MUST be ordered ascending by distance from the center point. |
time |
Timestamp | Availability data (if supplied) will be returned as of this time. |
Endpoint: /curbs/policies
Method: GET
data
Payload: a JSON object with a policies
field containing an array of Curb Policy objects.
Optional endpoint, but required if Curb Zones contain policy_id references. If not implemented, the server should reply with 501 Not Implemented
.
All query parameters are optional.
Name | Type | Description |
---|---|---|
ids |
Comma-separated list of UUIDs | If present, return only policies with the supplied UUIDs. Otherwise, return all policies. |
Endpoint: /curbs/zones/<id>
Method: GET
data
Payload: the Curb Zone object with the ID provided in the path.
Optional endpoint. If not implemented, the server should reply with 501 Not Implemented
.
All query parameters are optional.
Name | Type | Description |
---|---|---|
time |
Timestamp | The Curb Zone object will only be returned if its validity period includes this time; otherwise, the server should reply with 404 Not Found . Availability data (if supplied) will be returned as of this time. |
show_historic |
Boolean | Whether to return historic, retired curb zone data. Default is "false" to reduce payload size and complexity. |
Endpoint: /curbs/areas/<id>
Method: GET
data
Payload: the Curb Area object with the ID provided in the path.
Optional endpoint. If not implemented, the server should reply with 501 Not Implemented
.
This endpoint takes no query parameters.
Endpoint: /curbs/spaces/<id>
Method: GET
data
Payload: the Curb Space object with the ID provided in the path.
Optional endpoint. If not implemented, the server should reply with 501 Not Implemented
.
All query parameters are optional.
Name | Type | Description |
---|---|---|
time |
Timestamp | Availability data (if supplied) will be returned as of this time. |
Endpoint: /curbs/policies/<id>
Method: GET
data
Payload: the Curb Policy object with the ID provided in the path.
This endpoint takes no query parameters.
A Curb Zone is a geographical entity representing a single region along the curb, along with metadata about that region and the policies that apply to its use by vehicles. What constitutes an individual Curb Zone is determined by the city, but all Curb Zones MUST meet the following criteria:
- Always have a common regulation along their entire extent (i.e., if at certain times of day, half of a given stretch of curb is a loading zone and the other half is metered parking, that stretch of curb must be divided into at least two Curb Zones);
- Never span multiple blocks -- an entire Curb Zone must be on the same street and be between the same two cross streets, alleys, or service roads.
- Never overlap other Curb Zones in the same dataset with overlapping validity times. This applies to both the zone's polygon geometries and linear references (if used).
- Be assigned a unique ID, in the form of a UUID. This ID SHOULD remain consistent as long as the Curb Zone's geography remains substantially the same. Policies may be updated without changing the ID.
- It SHOULD NOT be possible to legally park a single vehicle in two different Curb Zone at the same time (i.e., a given non-demarcated parking area or loading zone should be represented as a single curb location), unless this conflicts with the requirements above.
A Curb Zone is represented as a JSON object, whose fields are as follows:
Name | Type | Required/Optional | Description |
---|---|---|---|
curb_zone_id |
UUID | Required | The ID of this Curb Zone. |
geometry |
Polygon | Required | The spatial extent of this curb zone. A new curb_zone_id is required if this geometry changes. |
curb_policy_ids |
Array of UUIDs | Required | An array of IDs of Policy objects. Together, these define the regulations of this Curb Zone. |
prev_policies |
Array of Previous Policy objects | Optional | An array of information about previous policies that have applied to this curb zone. They are listed in order with the most recent ones first. |
published_date |
Timestamp | Required | The date/time that this curb zone was first published in this data feed. |
last_updated_date |
Timestamp | Required | The date/time that the properties of ths curb zone were last updated. This helps consumers know that some curb objects fields may have changed. |
prev_curb_zone_ids |
Array of UUIDs | Optional | An array of IDs of previous curb zone objects. They are listed in order with the most recent ones first. |
start_date |
Timestamp | Required | The earliest time that the data for this curb location is known to be valid (inclusive, see Range Boundaries). This could be the date on which the data was collected, for instance. This MUST never change for a given id. |
end_date |
Timestamp | Optional | The time at which the data for this curb location ceases to be valid (exclusive, see Range Boundaries). If not present, the data will be presumed to be valid indefinitely. |
location_references |
Array of Location Reference objects | Optional | One or more linear references for this Curb Zone. |
name |
String | Optional | A human-readable name for this Curb Zone that identifies it to end users. |
user_zone_id |
String | Optional | An identifier that can be used to refer to this Curb Zone on physical signage as well as within mobile applications, typically for payment purposes. |
street_name |
String | Optional | The name of the street that this Curb Zone is on. |
cross_street_start_name |
String | Optional | The name of the cross street at or before the start of this Curb Zone (which cross street is at the start and end of the location is defined in the same direction as the linear reference for this curb; if no linear reference is provided, start and end SHOULD be oriented such that start comes before end when moving in the direction of travel for the roadway immediately adjacent to the curb.) |
cross_street_end_name |
String | Optional | The name of the cross street at the end of this Curb Zone. |
length |
Integer | Optional | The length, in centimeters, of the Curb Zone when projected along the street centerline. Note that this is the definitive length of the curb area, and not the edge length of the geographic polygon. |
available_space_lengths |
Array of Integers | Optional | If availability information is present, an array of numbers containing the lengths (in centimeters) of all known non-overlapping available spaces within this Curb Zone. In cases where availability is known less precisely, this data MAY be inferred from a model. |
availability_time |
Timestamp | Optional | If availability information is present, the timestamp corresponding to the most recent time that availability was computed for this zone. |
width |
Integer | Optional | The width, in centimeters, that the Curb Zone occupies from the curb to the roadway lane. |
parking_angle |
String | Optional | The angle in which passenger vehicles in this Curb Zone are meant to park. May take one of the following values:
|
num_spaces |
Integer | Optional | The number of demarcated spaces within this Curb Zone. Demarcated spaces may also be specified using Curb Spaces. |
street_side |
String | Optional | The cardinal or subcardinal direction representing the side of the roadway that this curb is on. May be N , NE , E , SE , S , SW , W , or NW . For cities with "grid directions", the side MAY be based on the grid direction rather than the closest true-north compass direction, but MUST NOT be more than 90 degrees away from the true compass direction. |
median |
Boolean | Optional | If "true", this curb location is on the median of a street, rather than its edge. A median is a strip of land separating two roadways within the same street. Note that, for medians, street_side is interpreted relative to the roadway that the particular curb is on, so the curb along the median of the southern roadway of a divided street would have street_side of N . |
entire_roadway |
Boolean | Optional | If "true", this curb location takes up the entire width of the roadway (which may be impassible for through traffic when the Curb Zone is being used for parking or loading). This is a common condition for alleyways. If entire_roadway is true , street_side MUST NOT be present. |
curb_area_ids |
Array of UUID | Optional | The ID(s) of the Curb Areas that this Curb Zone is a part of. If specified, the areas identified MUST be retrievable through the Curb API and its geographical area MUST contain that of the Curb Zone. |
curb_space_ids |
Array of UUID | Optional | The ID(s) of the Curb Spaces that this Curb Zone contains. If specified, the spaces identified MUST be retrievable through the Curb API and its geographical area MUST be contained in this Curb Zone. |
The curb_zone_id
field uniquely identifies a particular zone with one particular set of policies in a specific geographic area.
- New ID: When a Curb Zone ceases to be valid, or it needs substantive geometric changes, it will be retired and returned only when the
show_historic
flag is "true" in the Query Curb Zones endpoint parameters. Its ID MUST NOT not be reused by a Curb Zone with different data. If geometric data updates reflect changes in the physical world, a new ID MUST be assigned and the previous one stored for historic lookups. - No new ID: data updates that reflect changes in how the same physical locations or regulations are modeled digitally -- e.g., additional metadata, or regulations being modeled more accurately -- SHOULD NOT be implemented by ending a Curb Zone's validity and creating a new one with a new ID. The existing Curb Zone can be updated silently with the new data and its
last_updated_date
changed. Callers MAY NOT rely on a Curb Zone with the same ID remaining identical over time. If policies in a zone change, you may update the policy IDs, track previous policies, and reset thelast_updated_date
, but keep the zone ID the same.
Defines curb areas in a city and their properties. A Curb Area is a particular neighborhood or area of interest that includes one or more Curb Zones. Important notes about Curb Areas:
- Curb Areas MAY overlap with other Curb Areas
- Multiple Curb Areas MAY include the same Curb Zones
- Curb Areas are not meant to be city-wide, and instead should be an area of interest around one or more Curb Zones that is no bigger than a neighborhood.
- Unlike Zones, Areas may be updated as needed, with a new
curb_area_id
being optionally assigned by the city
A Curb Area is represented as a JSON object, whose fields are as follows:
Name | Type | Required/Optional | Description |
---|---|---|---|
curb_area_id |
UUID | Required | The ID for the curb area. |
geometry |
Polygon | Required | The spatial extent of this curb location. |
name |
String | Optional | The name of this curb area for reference. |
published_date |
Timestamp | Required | The date/time that this curb area was first published in this data feed. |
last_updated_date |
Timestamp | Required | The date/time that the properties of ths curb area were last updated. This helps consumers know that some fields may have changed. |
curb_zone_ids |
Array of UUIDs | Required | The IDs of all the Curb Zones included within this Curb Area at the requested time. |
Defines individual demarcated spaces within a Curb Zone. Important notes about Curb Spaces:
- Curb Spaces may NOT overlap with other Curb Spaces
- Curb Spaces must be wholly contained within a single Curb Zone
- Unlike Zones, Spaces may be updated as needed, with a new
curb_space_id
being optionally assigned by the city
A Curb Space is represented as a JSON object whose fields are as follows:
Name | Type | Required/Optional | Description |
---|---|---|---|
curb_space_id |
UUID | Required | The ID of the curb space. |
geometry |
Polygon | Required | The spatial extent of this curb location. |
name |
String | Optional | The name of this curb space for reference. |
published_date |
Timestamp | Required | The date/time that this curb area was first published in this data feed. |
last_updated_date |
Timestamp | Required | The date/time that the properties of ths curb area were last updated. This helps consumers know that some fields may have changed. |
curb_zone_id |
UUID | Required | The ID of the Curb Zone this space is within. The geometry of the specified Curb Zone MUST contain the geometry of this space. |
space_number |
Integer | Optional | The sequence number of this space within its Zone. If specified, two spaces within the same Curb Zone MUST NOT share a space number, and space numbers SHOULD be consecutive positive integers starting at 1. |
length |
Integer | Required | Length in centimeters of this Space. If comparing the length of a vehicle to that of a space, note that vehicles may have to account for a buffer for doors, mirrors, bumpers, ramps, etc. |
width |
Integer | Optional | Width in centimeters of this Space. |
available |
Boolean | Optional | Whether this space is available for vehicles to park in at the specified time (‘True’ means the Space is available). |
availability_time |
Timestamp | Optional | If availability information is present, the most recent time that availability was computed for this space. |
A Policy object is a rule that allows or prohibits a particular set of users from using a particular curb at a particular time or times. Multiple Policy objects together define the full extent of regulations within a Curb Zone. The design of the Policy object borrows heavily from the work of the CurbLR project, with additions for the larger scope of CDS.
The policy
field within the FeatureCollection returned by Query Curb Zones contains a list of the Policy objects referenced by the returned zones. In addition, the Query Curb Policies endpoint return the complete list of policies.
A Policy is represented as a JSON object whose fields are as follows:
Name | Type | Required/Optional | Description |
---|---|---|---|
curb_policy_id |
UUID | Required | An ID that uniquely identifies this exact regulation across Curb Zones. Two Policy objects containing the same curb_policy_id MUST be completely identical. A curb_policy_id MUST NOT be reused -- once created, it must continue to refer to the identical policy forever. |
published_date |
Timestamp | Required | The date/time that this policy was first published in this data feed. |
priority |
Integer | Required | Specifies which other policies this one takes precedence over. If two Policies on the same Curb Zone have overlapping Time Spans and apply to the same user class, the one that applies at a given time is the one with the lowest priority. E.g., a priority of 1 takes precedence over a priority of 3 . Two Policies that apply to the same Curb Zone with overlapping Time Spans and equivalent User Class enumerations MUST NOT have the same priority. |
rules |
Array of Rules | Required | The rule(s) that this policy applies. If a Policy specifies multiple rules, each rule MUST specify disjoint lists of user classes. |
time_spans |
Array of Time Spans | Optional | If specified, this regulation only applies at the times defined within. |
data_source_operator_id |
Array of UUIDs | Optional | An array of Data Source Operator IDs that this policy only applies to. IDs come from data_source_operators.csv file here in the CDS repo. Read our How to Get a Data Source Operator ID guide. |
A rule defines who is allowed to do what, and for how long, on a curb, per the policy.
It is a JSON object with the following fields:
Name | Type | Required/Optional | Description |
---|---|---|---|
activity |
Activity String | Required | The activity that is forbidden or permitted by this regulation. Value MUST be one of the activities. |
max_stay |
Integer | Optional | The length of time (in units of max_stay_unit ) for which the curb may be used under this regulation. If not specified, the curb may be used under this regulation indefinitely. May not be applicable for all activities. |
max_stay_unit |
Enum | Optional | The Unit of Time associated with the max_stay value. Defaults to "minute". |
no_return |
Integer | Optional | The length of time (in units of no_return_unit ) that a user must vacate a Curb Zone before being allowed to return for another stay. Defaults to 0. May not be applicable for all activities. |
no_return_unit |
Enum | Optional | The Unit of Time associated with the no_return value. Defaults to "minute". |
user_classes |
Array of user class Strings | Optional | If specified, this regulation only applies to users matching the user classes contained within. If not specified, this regulation applies to everyone. The order of user_classes is not relevant, but a vehicle using a curb with this rule must match all user_classes contained in the array. |
rate |
Array of Rates | Optional | The cost of using this Curb Zone when this regulation applies. Rates are repeated to allow for prices that change over time. For instance, a regulation may have a price of $1 for the first hour but $2 for every subsequent hour. The complete set of the Rates array must span from start_minutes = 0 or null to end_minutes = max_stay without overlap of effective minutes (i.e. the range created by rate start_minutes and end_minutes ). If a "negative" activity is used, this array should be empty. May not be applicable for all activity. |
The following activities may be specified for rules within a policy. The reason we have
"positive" and "negative" versions of the same activities (like loading
and no parking
)
is due to priorities: a loading
rule that is higher priority than a no loading
rule,
for instance, implies that the Curb Zone does allow loading at the time in question, while a
no parking
rule would not. If "negative", rate
array should be empty.
parking
- implies that loading and stopping are also permittedno parking
- may not stop and leave vehicle unattendedloading
- loading of goods; implies that stopping is also permittedno loading
- no loading allowed; implies that parking is also prohibitedunloading
- unloading of goods; implies that stopping is also permittedno unloading
- no unloading allowed; implies that parking is also prohibitedstopping
- stopping briefly to pick up or drop off passengersno stopping
- stopping, loading, unloading, and parking are all prohibited; not a typical travel lanetravel
- represents curbside lanes typically intended for moving vehicles, like bus lanes, bike lanes, and rush-hour-only travel lanes; implies that parking, loading, unloading, and stopping are prohibited.no travel
- no travel allowed; implies it could be used for other activities
A user class represents any class of vehicles that is regulated by a city with respect to curb space. They can be defined by the vehicle's physical characteristics (e.g., trucks, vans, EVs), the presence/absence of a particular permit (e.g., residential parking permits), or even by the intent or destination of the driver, for things like hotel or school unloading zones.
These are not meant to be a mirror to similarly named items in the Events API, but instead serve a unique purpose of describing locally defined regulations at a curb.
This array of user classes serves as an 'AND' function. A vehicle must have all the properties listed
in the array to use the curb. For example, an accessible EV bus will use handicap-accessible
AND electric
AND bus
. To create 'OR' values at the same curb, you must create a new rule
with the new array of values.
New user classes MAY be generated to reflect local regulations, but when possible, the following well-known recommended values should be used. If multiple similar values apply, then use the more descriptive/specific value when possible.
Well-known values:
Vehicle types
bicycle
bus
cargo_bicycle
car
moped
motorcycle
scooter
truck
van
Vehicle properties
handicap-accessible
human
electric_assist
electric
combustion
autonomous
Purpose
construction
delivery
emergency_use
freight
parking
permit
rideshare
school
service_vehicles
special_events
taxi
utilities
vending
waste_management
A Time Span defines a period of time (that may occur once or repeatedly) during which a given regulation applies. When multiple fields are combined, all criteria must be met in order for a given Time Span to apply. For instance, the following Time Span represents 10AM to 1PM on Mondays and Tuesdays:
{
"days_of_week": ["mon", "tue"],
"time_of_day_start": "10:00",
"time_of_day_end": "13:00"
}
A Time Span is represented as a JSON object whose fields are as follows:
Name | Type | Required/Optional | Description |
---|---|---|---|
start_date |
Timestamp | Optional | The earliest point in time that this Time Span could apply (inclusive, see Range Boundaries). If unspecified, the Time Span applies to all matching periods arbitrarily far in the past. See note below for more details. |
end_date |
Timestamp | Optional | The latest point in time that this Time Span could apply (exclusive, see Range Boundaries). If unspecified, the Time Span applies to all matching periods arbitrarily far in the future. See note below for more details. |
days_of_week |
Array of strings | Optional | An array of days of the week when this Time Span applies, specified as 3-character strings ("sun" , "mon" , "tue" , "wed" , "thu" , "fri" , "sat" ). |
days_of_month |
Array of integers | Optional | An array of days of the month when this Time Span applies, specified as integers (1-31). Note that, in order to specify, e.g., the "2nd Monday of the month", you can use days_of_month combined with days_of_week (in this example, days_of_week = ["mon"] and days_of_month = [8,9,10,11,12,13,14] ). |
months |
Array of integers | Optional | If specified, this Time Span applies only during these months (1=January, 12=December). |
time_of_day_start |
"HH:MM" string | Optional | The 24-hour local time that this Time Span starts to apply (inclusive, see Range Boundaries), in the local timezone. If unspecified, this Time Span starts at midnight. |
time_of_day_end |
"HH:MM" string | Optional | The 24-hour local time that this Time Span stops applying (exclusive, see Range Boundaries), in the local timezone. This is not inclusive, so for instance if time_of_day_end is "17:00" , this Time Span goes up to 5PM but does not include it. If unspecified, this Time Span ends at midnight. |
designated_period |
String | Optional | A string representing an arbitrarily-named, externally-defined period of time. Any values MAY be specified but the following known values SHOULD be used when possible:
|
designated_period_except |
Boolean |
Optional |
If specified and true , this Time Span applies at all times not matching the named designated period. (e.g., if designated_period is snow emergency and designated_period_except is true , this Time Span does not apply on snow days). |
Note about start_date
and end_date
in Time Span: these fields are optional but useful for defining policies that will be used once and won't be reused later, like around a specific, temporary event. If used, they are only applicable in any connected Curb Zone during their overlapping time frames.
A Rate defines the amount a user of the curb needs to pay when a given rule applies. It is a JSON object with the following fields:
Name | Type | Required/Optional | Description |
---|---|---|---|
rate |
Integer | Required | The rate for this space in cents (or the smallest denomination of local currency) per rate_unit . |
rate_unit |
Enum | Required | The unit of time associated with the rate. One of "second", "minute", "hour", "day", "week", "month", "quarter", "year". |
rate_unit_period |
Enum | Optional | The period of time that the rate_unit covers. One of "rolling" or "calendar". If not specified, defaults to "rolling". When rolling, the rate_unit begins (inclusive) at the timestamp of the event and ends (exclusive) when one full rate_unit has elapsed. For example, with {"rate_unit": "month", "rate_unit_period": "rolling"} the rate_unit for an event starting at 2022-02-25 19:25:52 would be interpreted as ranging from the start of the event - 2022-02-25 19:25:52 (inclusive) - to the timestamp when one "month" has elapsed: 2022-03-25 19:25:52 (exclusive). E.g. from the 25th of one month to the 25th of the next month. When calendar, the rate_unit begins (inclusive) at the start of the rate_unit in question and ends (exclusive) when one full rate_unit has elapsed. For example, with {"rate_unit": "month", "rate_unit_period": "calendar"} the rate_unit for an event starting at 2022-02-25 19:25:52 would be interpreted as ranging from the start of the "month" - 2022-02-01 00:00:00 (inclusive) - to the end of the "month": 2022-03-01 00:00:00 (exclusive). E.g. from the 25th of the month to the end of the current calendar month only. The "week" rate_unit is defined as starting on Monday, per the ISO 8601 standard. See example for other scenarios in action. |
increment_duration |
Integer | Optional | If specified, this is the smallest number of rate_unit s a user can pay for (e.g., if increment_duration is 15 and rate_unit is minute , a user can pay for 15, 30, 45, etc. minutes). |
increment_amount |
Integer | Optional | If specified, the rate for this space is rounded up to the nearest increment of this amount, specified in the same currency units as rate . |
start_duration |
Integer | Optional | The number of rate_unit s the vehicle must have already been present in the Curb Zone before this rate starts applying (inclusive, see Range Boundaries). If not specified, this rate starts when the vehicle arrives. |
end_duration |
Integer | Optional | The number of rate_unit s after which the rate stops applying (exclusive, see Range Boundaries). If not specified, this rate ends when the vehicle departs. |
A Location Reference defines a linear reference for a given Curb Zone. A linear reference defines a Curb Zone's position by reference to a linear feature, like a street centerline or edge-of-pavement line. Linear referencing systems can be global, like SharedStreets linear references or OpenLR, or local to a particular city.
A Location Reference is a JSON object with the following fields:
Name | Type | Required/Optional | Description |
---|---|---|---|
source |
URL | Required | An identifier for the source of the linear reference. This MUST be a URL pointing to more information about the underlying map or reference system. Values include (but other can be used):
|
ref_id |
String | Required | The linear feature being referenced (usually a street or curb segment). For OpenLR, this is the Base64-encoded OpenLR line location for the street segment of which this Curb Zone is part, and the start and end offsets below are relative to this segment. |
start |
Integer | Required | The distance (in centimeters) from the start of the referenced linear feature to the start of the Curb Zone (inclusive, see Range Boundaries). |
end |
Integer | Required | The distance (in centimeters) from the start of the referenced linear feature to the end of the Curb Zone (exclusive, see Range Boundaries). 'end' MAY be smaller than start, implying that the direction of the Curb Zone is opposite to the direction of the referenced linear feature - in this case the Range Boundaries) are reversed. |
side |
String | Optional | If the referenced linear feature is a roadway, the side of the roadway on which the Curb Zone may be found, when heading from the start to the end of the feature in its native orientation. Values are left and right . MUST be absent for features where entire_roadway is true. |
An array of information about what previous policies applied to a curb zone and when. This allows cities to historically track what policies applied to a curb zone.
A Previous Policy is a JSON object with the following fields:
Name | Type | Required/Optional | Description |
---|---|---|---|
curb_policy_ids |
Array of UUIDs | Required | An array of IDs of Policy objects. Together, these define the previous regulations of this Curb Zone. |
start_date |
Timestamp | Required | The date/time that this policy started being active for this curb location (inclusive, see Range Boundaries). |
end_date |
Timestamp | Required | The date/time that this policy ended being active for this curb location (exclusive, see Range Boundaries). |
See a series of CDS Curbs endpoint examples to use as templates.