Service requests profile
How resident requests, like reporting a pothole, are tracked from submission to resolution.
Schemas: 2
Code lists: 1
Standards: schema.org, Open311 GeoReport v2
ServiceRequest
One report of a problem or request for service - a pothole, a broken streetlight, an abandoned vehicle.
Standards: Open311 GeoReport v2
| Field | Type | Definition | Required |
|---|---|---|---|
@id |
string |
This request's own dereferenceable identifier. | Yes |
@type |
"ServiceRequest" |
Always ServiceRequest. Mirrors Open311 GeoReport v2, which is the established standard and remains the source model; this is a schema.org projection of it, not a replacement - schema.org has no service request concept of any kind, so gs:ServiceRequest is minted outright. Deliberately has no fields for the reporter's name, email, phone, device ID, or account ID: those exist in the Open311 POST payload and must not survive into published data. See the privacy section in the profile README. |
Yes |
identifier |
Identifier[] |
Any scheme-qualified identifiers for this request beyond its @id. |
No |
serviceRequestId |
string |
The publisher's own request number, as shown to the public. Open311 service_request_id. |
Yes |
serviceCode |
string |
The code of the service requested. Open311 service_code. Must match a GovernmentService in the catalogue. |
Yes |
service |
Reference |
The GovernmentService this request is against. |
No |
description |
string |
The reporter's account of the problem. Free text submitted by a member of the public: treat as untrusted, and review before publishing, since people put their own names and phone numbers in here. | No |
requestStatus |
string |
termCode from the ServiceRequestStatus code list. Open311 defines only open and closed; anything other than closed maps to open for Open311 compatibility. |
Yes |
statusNote |
string |
Public explanation of the current status. Open311 status_notes. |
No |
agencyResponsible |
Reference |
The GovernmentOrganization handling it. |
No |
dateCreated |
string |
Open311 requested_datetime. |
Yes |
dateModified |
string |
Open311 updated_datetime. |
No |
expectedResolutionDate |
string |
Open311 expected_datetime. |
No |
geo |
object |
schema.org GeoCoordinates. Round coordinates for requests at residential addresses - see the privacy section of the profile README. |
No |
address |
object |
schema.org PostalAddress, when the request concerns one rather than coordinates alone. |
No |
location |
Reference |
A named Facility or Place, where the request concerns one. |
No |
jurisdiction |
Reference |
The Jurisdiction the request falls in. |
No |
image |
object[] |
schema.org ImageObject. Open311 media_url. Photos submitted by the public routinely contain bystanders, licence plates, and house numbers; review before publishing. |
No |
additionalProperty |
object[] |
Answers to the service's own questions, as schema.org PropertyValue with propertyID matching the attribute's valueName. Open311 attribute[]. |
No |
sourceDataset |
string |
The Dataset this record was published as part of. |
No |
duplicateOf |
Reference |
The request this duplicates, when requestStatus is duplicate. A reference, not prose: 'Duplicate of 2025-104882' in a status note cannot be followed by anything. |
No |
relatedAlert |
Reference |
An Alert this request concerns. A service disruption is both: the disruption is an alert, reports about it are requests. |
No |
statusHistory |
object[] |
Timestamped record of how the request progressed. Without it only current state is visible, so nobody can see how long a request sat unassigned - which is exactly what residents and service-level measurement need. | No |
{
"@id": "https://example-city.gov/id/request/2025-104882",
"@type": "ServiceRequest",
"serviceRequestId": "2025-104882",
"serviceCode": "ROAD-001",
"service": {
"@id": "https://example-city.gov/id/service/pothole",
"name": "Pothole repair"
},
"description": "Large pothole in the eastbound lane just past the junction.",
"requestStatus": "closed",
"statusNote": "Repaired and resurfaced.",
"agencyResponsible": {
"@id": "https://example-city.gov/id/organization/public-works",
"name": "Public Works Department"
},
"jurisdiction": {
"@id": "https://example-city.gov/id/jurisdiction/example-city",
"name": "Example City"
},
"dateCreated": "2025-05-02T08:14:00-07:00",
"dateModified": "2025-05-09T16:02:00-07:00",
"expectedResolutionDate": "2025-05-09T00:00:00-07:00",
"geo": {
"@type": "GeoCoordinates",
"latitude": 34.0521,
"longitude": -118.2436
},
"address": {
"@type": "PostalAddress",
"streetAddress": "Junction of 4th and Alder",
"addressLocality": "Example City",
"addressRegion": "CA",
"addressCountry": "US"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"propertyID": "surface_type",
"value": "asphalt"
},
{
"@type": "PropertyValue",
"propertyID": "approx_size_cm",
"value": "60"
}
],
"statusHistory": [
{
"@type": "StatusChange",
"requestStatus": "open",
"date": "2025-05-02T08:14:00-07:00"
},
{
"@type": "StatusChange",
"requestStatus": "inProgress",
"date": "2025-05-05T09:02:00-07:00",
"statusNote": "Assigned to street maintenance crew."
},
{
"@type": "StatusChange",
"requestStatus": "closed",
"date": "2025-05-09T16:02:00-07:00",
"statusNote": "Repaired and resurfaced."
}
]
}
Service
One service a resident can request, and the questions asked when requesting it.
Standards: Open311 GeoReport v2
| Field | Type | Definition | Required |
|---|---|---|---|
@id |
string |
This service's own dereferenceable identifier. | Yes |
@type |
"GovernmentService" |
Always GovernmentService - this is the half of Open311 that schema.org does cover: GovernmentService is a real type, ServiceChannel describes how to reach it, and PropertyValueSpecification describes a form field, so the request attributes need no minted vocabulary. Combines the Open311 Service List and Service Definition into a single entity. |
Yes |
name |
string |
The service's public name, e.g. 'Pothole Repair'. | Yes |
description |
string |
A plain-language explanation of the service, shown to residents deciding what to report. | No |
url |
string |
Where more information about this service can be found. | No |
serviceCode |
string |
Open311 service_code. Stable; requests reference it. |
Yes |
serviceType |
string |
Open311 group, e.g. 'Streets', 'Sanitation'. |
No |
keywords |
string[] |
Search terms residents might use to find this service. | No |
provider |
Reference |
The GovernmentOrganization providing it. |
Yes |
areaServed |
Reference |
The Jurisdiction it covers. |
No |
availableChannel |
object[] |
schema.org ServiceChannel: how a resident actually reports this. processingTime carries the service-level expectation. |
No |
requestAttribute |
object[] |
The questions asked when submitting. Open311 Service Definition attributes, as schema.org PropertyValueSpecification. |
No |
isRealtime |
boolean |
Whether a request against this service returns an id immediately. Open311 type: realtime versus batch or blackbox. |
No |
sourceDataset |
string |
The Dataset this record was published as part of. |
No |
{
"@id": "https://example-city.gov/id/service/pothole",
"@type": "GovernmentService",
"name": "Pothole repair",
"description": "Report a pothole or damaged road surface on a city-maintained street.",
"url": "https://example-city.gov/services/pothole",
"serviceCode": "ROAD-001",
"serviceType": "Streets",
"keywords": [
"pothole",
"road",
"pavement",
"street repair"
],
"isRealtime": true,
"provider": {
"@id": "https://example-city.gov/id/organization/public-works",
"name": "Public Works Department"
},
"areaServed": {
"@id": "https://example-city.gov/id/jurisdiction/example-city",
"name": "Example City"
},
"availableChannel": [
{
"@type": "ServiceChannel",
"serviceUrl": "https://example-city.gov/report/pothole",
"servicePhone": {
"@type": "ContactPoint",
"telephone": "+1-555-0311"
},
"serviceSmsNumber": {
"@type": "ContactPoint",
"telephone": "+1-555-0311"
},
"processingTime": "P5D",
"availableLanguage": [
"en-US",
"es-US"
]
}
],
"requestAttribute": [
{
"@type": "PropertyValueSpecification",
"valueName": "surface_type",
"name": "What kind of surface is affected?",
"valueRequired": true,
"position": 1,
"valueOption": [
{
"@type": "DefinedTerm",
"termCode": "asphalt",
"name": "Asphalt road"
},
{
"@type": "DefinedTerm",
"termCode": "concrete",
"name": "Concrete road"
},
{
"@type": "DefinedTerm",
"termCode": "sidewalk",
"name": "Sidewalk"
}
]
},
{
"@type": "PropertyValueSpecification",
"valueName": "approx_size_cm",
"name": "Roughly how wide is it, in centimetres?",
"valueRequired": false,
"position": 2,
"minValue": 1,
"maxValue": 500
}
],
"serviceStatus": "active"
}