SeeClickFix API v2

REST API for the SeeClickFix 311 CRM (a CivicPlus product) covering civic service-request issues, comments, users, places, questions, and answers, plus an Open311 GeoReport v2 compatible endpoint. JSON over HTTPS with GeoJSON geometry, ISO 8601 timestamps, and page/per_page pagination.

OpenAPI Specification

civicplus-seeclickfix-open311-openapi-original.yml Raw ↑
swagger: '2.0'

info:
  version: "2.0"
  title: Open311 GeoReport API
  description: Open311 allows you to get/post civic information of cities via a unified interface. The GeoReport part allows you to submit and view issues at the public local space
  termsOfService: (depends on server instance for example NYC http://dev.cityofchicago.org/docs/api/tos)
  contact:
    name: Open311 community
    url: http://wiki.open311.org/GeoReport_v2/
    email:  discuss@lists.open311.org
  license:
    name: CC BY 3.0
    url: http://creativecommons.org/licenses/by/3.0/

consumes:
        - application/x-www-form-urlencoded
produces:
        - application/json
        - text/xml
        
securityDefinitions:
  api_key:
    type: apiKey
    name: api_key
    in: query
  
definitions:
  Service:
    description: A single service (type) offered via Open311
    required:
      - service_code
      - service_name
      - type
    properties:
      service_code:
        type: string
        format: uid
        description: unique identifier for the service request type
      service_name:
        type: string
        description: human readable name of the service request type
      description:
        type: string
      metadata:
        type: boolean
        description: Are there additional form fields for this service type? If true use GET service definition for that one
      type:
        type: string
        description: Possible values realtime, batch, blackbox
        enum: 
          - realtime
          - batch
          - blackbox        
      keywords:
        type: array
        items:
          type: string
        collectionFormat: csv
        description: list of keywords or tags seperated by comma
      group:
        type: string
        description: Category or group to cluster different request types e.g. “sanitation”
  
  ServiceDefinition:
    description: Attributes associated with a service code. These attributes can be unique to the city/jurisdiction.
    required:
      - service_code
      - attributes #todo How to make sure it's not empty?
    properties:
      service_code:
        type: string
        format: uid
        description: unique identifier for the service request type
      attributes:
        type: array
        items:
          $ref: '#/definitions/ServiceAttribute'
          
  ServiceAttribute:
    description: A single attribute extension for a service
    required:
      - variable
      - code
      - datatype
      - required
    properties:
      variable:
        type: boolean
        description: If only used to present information to the user within the description field or if that user input is needed
      code:
        type: string
        format: uid
        description: Unique identifier for the attribute #<?>why and limitations
      datatype:
        type: string
        enum:
          - string
          - number
          - datetime
          - text
          - singlevaluelist
          - multivaluelist
        description: Type of field used for user input. According widgets will be picked for user inputs
      required:
        type: boolean
        description: If attributes value required to submit service request 
      datatype_description:
        type: string
        description: Description of the datatype which helps the user provide their input
      order:
        type: integer
        format: uint
        description: Sort order that the attributes will be presented to the user. 1 is shown first in the list.
      description:
        type: string
        description: description of the attribute field with instructions for the user to find and identify the requested information
      values:
        type: array
        items:
          $ref: '#/definitions/AttributeValue'
          
  AttributeValue:
    description: Possible value for ServiceAttribute that defines lists
    required:
      - key
      - name
    properties:
      key:
        type: string
        format: uid
        description: Unique identifier associated with an option for singlevaluelist or multivaluelist (analogous to the value attribute in an html option tag).
      name:
        type: string
        description: Human readable title of an option for singlevaluelist or multivaluelist (analogous to the innerhtml text node of an html option tag).

  Request:
   description: Issues that have been reported as service requests. Location is submitted via lat/long or address or address_id
   required:
    - service_request_id
    - status
    - service_code
    - requested_datetime
   properties:
    service_request_id:
      type: string
      format: uid
      description: Unique ID of the service request created.
    status:
      type: string
      enum:
        - open
        - closed
      description: Current status of the service request.
    status_notes:
      type: string
      description: Explanation of why status was changed to current state or more details on current status than conveyed with status alone.
    service_name: #todo Generalization and linking
      type: string
      description: The human readable name of the service request type.
    service_code:
      type: string
      format: uid
      description: The unique identifier for the service request type
    description:
      type: string
      description: A full description of the request or report submitted.
    agency_responsible:
      type: string
      description: Agency responsible for fulfilling or otherwise addressing the service request.
    service_notice:
      type: string
      description: Information about the action expected to fulfill the request or otherwise address the information reported.
    requested_datetime:
      type: string
      format: date-time
      description: Date and time when the service request was made.
    updated_datetime:
      type: string
      format: date-time
      description: Date and time when the service request was last modified. For requests with status=closed, this will be the date the request was closed.
    expected_datetime:
      type: string
      format: date-time
      description: The date and time when the service request can be expected to be fulfilled. This may be based on a service-specific service level agreement.
    address:
      type: string
      description: Human readable address or description of location. This should be provided from most specific to most general geographic unit, eg address number or cross streets, street name, neighborhood/district, city/town/village, county, postal code.
    address_id:
      #<?> optional or required?
      type: string
      description: Internal address ID used by a jurisdictions master address repository or other addressing system.
    zipcode:
      #<?> Already mentioned in address descr?
      type: string
      description: postal code for the location of the service request. (Redundant and field might be removed as it should be part of adress string)
    lat: #Generalisation with
      type: number
      format: double
      description: latitude using the (WGS84) projection.
    long:
      type: number
      format: double
      description: longitude using the (WGS84) projection.
    media_url:
      type: string
      format: uri
      #<?> so we write we don't know how to submit
      description: URL to media associated with the request, eg an image. A convention for parsing media from this URL has yet to be established, so currently it will be done on a case by case basis much like Twitter.com does. For example, if a jurisdiction accepts photos submitted via Twitpic.com, then clients can parse the page at the Twitpic URL for the image given the conventions of Twitpic.com. This could also be a URL to a media RSS feed where the clients can parse for media in a more structured way.
    
    
  RequestResponse:
    description: Details for tracking an created service request
    properties: #todo service_requests array?
      service_request_id:
        type: string
        format: uid
        description: Unique ID of the service request created.
      token:
        type: string
        format: uid
        description: Use this to call GET service_request_id from a token.
      service_notice:
        type: string
        description: Information about the action expected to fulfill the request or otherwise address the information reported.
      account_id:
        type: string
        format: uid
        description: Unique ID for the user account of the person submitting the request.

  TokenResponse:
    description: Resolves temporary token to ID of the request
    properties: #todo service_requests array?
      service_request_id: #todo general request ID concept
        type: string
        format: uid
        description: Unique ID of the service request created.
      token:
        type: string
        format: uid
        description: Use this to call GET service_request_id

parameters:
  jurisdiction_id:
    name: jurisdiction_id
    in: query
    description: <?>
    required: true
    type: string
    format: uid
  response_format:
    name: response_format
    in: path
    required: true
    type: string
    format: uid
        

paths:
#todo extract service_code?
#todo extract an error model for responses?
  /requests.{response_format}:
    get:
      summary: requests
      description: Query the current status of multiple requests.
      parameters:
        -  $ref: '#/parameters/response_format'
        - $ref: '#/parameters/jurisdiction_id'
        - name: service_request_id
          in: query
          description: To call multiple Service Requests at once, multiple service_request_id can be declared; comma delimited.This overrides all other arguments.
          required: false
          type: string
          format: uid
        - name: service_code
          in: query
          description: Specify the service type by calling the unique ID of the service_code.
          required: false
          type: string
        - name: start_date
          in: query
          description: Earliest datetime to include in search. When provided with end_date, allows one to search for requests which have a requested_datetime that matches a given range, but may not span more than 90 days.
          required: false
          type: string
          format: date-time
        - name: end_date
          in: query
          description: Latest datetime to include in search. When provided with start_date, allows one to search for requests which have a requested_datetime that matches a given range, but may not span more than 90 days.
          required: false
          type: string
          format: date-time
        - name: status
          in: query
          description: Allows one to search for requests which have a specific status. This defaults to all statuses; can be declared multiple times, comma delimited.
          required: false
          type: string
          enum:
            - open
            - closed
      responses:
        200:
          description: List of matching requests (Default query limit is a span of 90 days or first 1000 requests returned, whichever is smallest).
          schema:
            type: array
            items:
             $ref: '#/definitions/Request'
          examples:
            application/xml:
              request:
                service_request_id: 638344
                status: closed
                status_notes: Duplicate request.
                service_name: Sidewalk and Curb Issues
                service_code: 006
                description: 
                agency_responsible:
                service_notice:
                requested_datetime: 2010-04-14T06:37:38-08:00
                updated_datetime: 2010-04-14T06:37:38-08:00
                expected_datetime: 2010-04-15T06:37:38-08:00
                address: 8TH AVE and JUDAH ST
                address_id: 545483
                zipcode: 94122
                lat: 37.762221815
                long: -122.4651145
                media_url: http://city.gov.s3.amazonaws.com/requests/media/638344.jpg
              request:
                service_request_id: 638349
                status: open
                status_notes:
                service_name: Sidewalk and Curb Issues
                service_code: 006
                description: 
                agency_responsible:
                service_notice:
                requested_datetime: 2010-04-19T06:37:38-08:00
                updated_datetime: 2010-04-19T06:37:38-08:00
                expected_datetime: 2010-04-19T06:37:38-08:00
                address: 8TH AVE and JUDAH ST
                address_id: 545483
                zipcode: 94122
                lat: 37.762221815
                long: -122.4651145
                media_url: http://city.gov.s3.amazonaws.com/requests/media/638344.jpg
              
        400:
          description: jurisdiction_id was not provided (specified in error response) or General Service error (Any failure during service query processing. Client will have to notify us)
        401:
          description:  jurisdiction_id not found (specified in error response)
    post:
      summary: Create service request
      description: Submit a new request for with specific details of a single service. Must provide a location via lat/long or address_string or address_id
      security:
        - api_key: []
      parameters:
        -  $ref: '#/parameters/response_format'
        - $ref: '#/parameters/jurisdiction_id'
        - name: service_code
          in: query
          description: <?>
          required: true
          type: string
          format: uid
        - name: lat
          in: query
          description: WGS-84 latitude
          required: false
          type: number
          format: double
        - name: long
          in: query
          description: WGS-84 longitude
          required: false
          type: number
          format: double
        - name: address_string #todo any formal definition?
          in: query
          required: false
          type: string
        - name: address_id #todo any formal definition?
          in: query
          required: false
          type: string
          format: uid
        - name: attribute
          in: query
          description: array of key/value responses based on Service Definitions.
          required: false
          type: array
          items:
            type: string #todo $ref: '#/definitions/ServiceAttribute'
          collectionFormat: multi
      responses:
        200:
          description: success returns an tracking-id
          schema:
            type: array
            items:
              $ref: "#/definitions/RequestResponse"
          examples:
            application/xml:
              service_requests:
                service_request_id: 293944
                service_notice: The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code
                account_id:
                
  
  /request/{service_request_id}.{response_format}:
    get:
      summary: current status
      description: Query the current status of an individual request
      parameters:
        -  $ref: '#/parameters/response_format'
        - $ref: '#/parameters/jurisdiction_id'
        - name: service_request_id
          in: path
          description: Is specified in the main URL path rather than an added query string parameter.
          required: true
          type: string
          format: uid
      responses:
        200:
          description: success returns request details
          schema:
              $ref: "#/definitions/Request"
          examples:
            application/xml:
              request:
                service_request_id: 638344
                status: closed
                status_notes: Duplicate request.
                service_name: Sidewalk and Curb Issues
                service_code: 006
                description: 
                agency_responsible:
                service_notice:
                requested_datetime: 2010-04-14T06:37:38-08:00
                updated_datetime: 2010-04-14T06:37:38-08:00
                expected_datetime: 2010-04-15T06:37:38-08:00
                address: 8TH AVE and JUDAH ST
                address_id: 545483
                zipcode: 94122
                lat: 37.762221815
                long: -122.4651145
                media_url: http://city.gov.s3.amazonaws.com/requests/media/638344.jpg
          

          
  /services.{response_format}:
    get:
      summary: service types
      description: List acceptable service request types and their associated service codes. These request types can be unique to the city/jurisdiction.
      parameters:
        - $ref: '#/parameters/jurisdiction_id'
        -  $ref: '#/parameters/response_format'
      responses:
        200:
          description: ok
          schema:
              type: array
              items:
                $ref: '#/definitions/Service'
          examples:
            application/xml:
              services:
                service:
                  service_code: 001
                  service_name: Cans left out 24x7
                  description: Garbage or recycling cans that have been left out for more than 24 hours after collection. Violators will be cited.
                  metadata: true
                  type: realtime
                  keywords: lorem, ipsum, dolor
                  group: sanitation
                service:
                  service_code: 002
                  service_name: Construction plate shifted
                  description: Metal construction plate covering the street or sidewalk has been moved.
                  metadata: true
                  type: realtime
                  keywords: lorem, ipsum, dolor
                  group: street
                service:
                  service_code: 003
                  service_name: Curb or curb ramp defect
                  description: Sidewalk curb or ramp has problems such as cracking, missing pieces, holes, and/or chipped curb.
                  metadata: true
                  type: realtime
                  keywords: lorem, ipsum, dolor
                  group: street
                  
        400:
          description: The URL request is invalid or service is not running or reachable. Client should notify us after checking URL
        404:
          description: jurisdiction_id provided was not found (specify in error response).
          
  /services/{service_code}.{response_format}:
    get:
      summary: (extended) definition of a service type
      description: Define attributes associated with a service code. These attributes can be unique to the city/jurisdiction.
      parameters:
        - $ref: '#/parameters/jurisdiction_id'
        -  $ref: '#/parameters/response_format'
        - name: service_code
          in: path
          required: true
          type: string
          format: uid
      responses:
        200:
          description: returns ServiceDefinition for the Service
          schema:
            $ref: '#/definitions/ServiceDefinition'
          examples:
            application/xml:
              service_definition:
                service_code: DMV66
                attributes:
                  attribute:
                    variable: true
                    code: WHISHETN
                    datatype: singlevaluelist
                    required: true
                    datatype_description:
                    order: 1
                    description: What is the ticket/tag/DL number?
                    values:
                      value:
                        key: 123
                        name: Ford
                      value:
                        key: 124
                        name: Chrysler
                
        400:
          description: service_code or jurisdiction_id provided were not found (specify in erraddor response)
        404:
          description: service_code or jurisdiction_id provided were not found (specify in error response)

  /tokens/{token_id}.{response_format}:
    get:
      summary: Id of service_request via token
      description: Get the service_request_id from a temporary token. This is unnecessary if the response from creating a service request does not contain a token.
      parameters:
        - $ref: '#/parameters/jurisdiction_id'
        -  $ref: '#/parameters/response_format'
        - name: token_id #todo link with POST Service req
          in: path
          required: true
          type: string
          format: uid
      responses:
        200:
          description: returns tuple request ID, token
          schema:
            $ref: '#/definitions/TokenResponse'
          examples:
            application/xml:
              service_requests:
                request:
                  service_request_id: 638344
                  token: 12345