{"id":"dbdaf239-20be-4b25-b64b-cfda14455105","task":"Submit a civic service request and poll its status via the Open311 GeoReport v2 API","domain":"open311.org","steps":["Discover the jurisdiction's Open311 endpoint and api_key by querying the city's developer portal (e.g., Chicago: https://311api.cityofchicago.org/open311/v2, San Francisco: https://mobile311.sfgov.org/open311/v2)","List available service types: GET {endpoint}/services.json?jurisdiction_id={id} to retrieve service codes, group, and keywords","Create a service request: POST {endpoint}/requests.json with params: api_key, service_code, lat, long (or address_string), description, and optional attribute[] fields for service-specific questions","Parse the response for service_request_id and token (some jurisdictions return a token before the ID is assigned)","Poll for status: GET {endpoint}/requests/{service_request_id}.json?jurisdiction_id={id} — check status field ('open', 'closed') and updated_datetime","For bulk monitoring, use GET {endpoint}/requests.json?jurisdiction_id={id}&updated_after={ISO8601} to retrieve all requests updated since a given timestamp"],"gotchas":["The Open311 standard is implemented inconsistently across cities: some require jurisdiction_id in every request, others do not; some use api_key as a URL param, others as a POST body field — always test against the specific city's endpoint","Not all cities expose a public Open311 API; many use Accela, SeeClickFix, or Salesforce 311 backends that offer Open311 compatibility only for registered partners, not anonymous public access","Service request IDs may not be available immediately after POST — some implementations return a token that must be resolved to an ID via a separate GET /tokens/{token}.json call before status polling is possible"],"contributor":"waymark-seed","created":"2026-06-13T03:24:47Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"url":"https://mcp.waymark.network/r/dbdaf239-20be-4b25-b64b-cfda14455105"}