<?xml version="1.0" encoding="UTF-8"?>
<simple-page>
  <content>
&lt;html&gt;


&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;

&lt;base target="_top"&gt;
&lt;style type="text/css"&gt;
  

/* default css */

table {
  font-size: 1em;
  line-height: inherit;
  border-collapse: collapse;
}


tr {
  
  text-align: left;
  
}


div, address, ol, ul, li, option, select {
  margin-top: 0px;
  margin-bottom: 0px;
}

p {
  margin: 0px;
}


pre {
  font-family: Courier New;
  white-space: pre-wrap;
  margin:0;
}

body {
  margin: 6px;
  padding: 0px;
  font-family: Verdana, sans-serif;
  font-size: 10pt;
  background-color: #ffffff;
}


img {
  -moz-force-broken-image-icon: 1;
}

@media screen {
  html.pageview {
    background-color: #f3f3f3 !important;
  }

  

  body {
    min-height: 1100px;
    
    counter-reset: __goog_page__;
  }
  * html body {
    height: 1100px;
  }
  .pageview body {
    border-top: 1px solid #ccc;
    border-left: 1px solid #ccc;
    border-right: 2px solid #bbb;
    border-bottom: 2px solid #bbb;
    width: 648px !important;
    margin: 15px auto 25px;
    padding: 40px 50px;
  }
  /* IE6 */
  * html {
    overflow-y: scroll;
  }
  * html.pageview body {
    overflow-x: auto;
  }
  /* Prevent repaint errors when scrolling in Safari. This "Star-7" css hack
     targets Safari 3.1, but not WebKit nightlies and presumably Safari 4.
     That's OK because this bug is fixed in WebKit nightlies/Safari 4 :-). */
  html*#wys_frame::before {
    content: '\A0';
    position: fixed;
    overflow: hidden;
    width: 0;
    height: 0;
    top: 0;
    left: 0;
  }
  
  

  
    .writely-callout-data {
      display: none;
      *display: inline-block;
      *width: 0;
      *height: 0;
      *overflow: hidden;
    }
    .writely-footnote-marker {
      background-image: url('MISSING');
      background-color: transparent;
      background-repeat: no-repeat;
      width: 7px;
      overflow: hidden;
      height: 16px;
      vertical-align: top;

      
      -moz-user-select: none;
    }
    .editor .writely-footnote-marker {
      cursor: move;
    }
    .writely-footnote-marker-highlight {
      background-position: -15px 0;
      -moz-user-select: text;
    }
    .writely-footnote-hide-selection ::-moz-selection, .writely-footnote-hide-selection::-moz-selection {
      background: transparent;
    }
    .writely-footnote-hide-selection ::selection, .writely-footnote-hide-selection::selection {
      background: transparent;
    }
    .writely-footnote-hide-selection {
      cursor: move;
    }

    
    .editor .writely-comment-yellow {
      background-color: #FF9;
      background-position: -240px 0;
    }
    .editor .writely-comment-yellow-hover {
      background-color: #FF0;
      background-position: -224px 0;
    }
    .editor .writely-comment-blue {
      background-color: #C0D3FF;
      background-position: -16px 0;
    }
    .editor .writely-comment-blue-hover {
      background-color: #6292FE;
      background-position: 0 0;
    }
    .editor .writely-comment-orange {
      background-color: #FFDEAD;
      background-position: -80px 0;
    }
    .editor .writely-comment-orange-hover {
      background-color: #F90;
      background-position: -64px 0;
    }
    .editor .writely-comment-green {
      background-color: #99FBB3;
      background-position: -48px 0;
    }
    .editor .writely-comment-green-hover {
      background-color: #00F442;
      background-position: -32px 0;
    }
    .editor .writely-comment-cyan {
      background-color: #CFF;
      background-position: -208px 0;
    }
    .editor .writely-comment-cyan-hover {
      background-color: #0FF;
      background-position: -192px 0;
    }
    .editor .writely-comment-purple {
      background-color: #EBCCFF;
      background-position: -144px 0;
    }
    .editor .writely-comment-purple-hover {
      background-color: #90F;
      background-position: -128px 0;
    }
    .editor .writely-comment-magenta {
      background-color: #FCF;
      background-position: -112px 0;
    }
    .editor .writely-comment-magenta-hover {
      background-color: #F0F;
      background-position: -96px 0;
    }
    .editor .writely-comment-red {
      background-color: #FFCACA;
      background-position: -176px 0;
    }
    .editor .writely-comment-red-hover {
      background-color: #FF7A7A;
      background-position: -160px 0;
    }

    .editor .writely-comment-marker {
      background-image: url('MISSING');
      background-color: transparent;
      padding-right: 11px;
      background-repeat: no-repeat;
      width: 16px;
      height: 16px;
      -moz-user-select: none;
    }

    .editor .writely-comment-hidden {
      padding: 0;
      background: none;
    }
    .editor .writely-comment-marker-hidden {
      background: none;
      padding: 0;
      width: 0;
    }
    .editor .writely-comment-none {
      opacity: .2;
      filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);
      -moz-opacity: .2;
    }
    .editor .writely-comment-none-hover {
      opacity: .2;
      filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);
      -moz-opacity: .2;
    }
  


  
  .br_fix br:not(:-moz-last-node):not(:-moz-first-node) {
    
    position:relative;
    
    left: -1ex
    
  }
  
  .br_fix br+br {
    position: static !important
  }

  
  #cb-p-tgt {
    font-size: 8pt;
    padding: .4em;
    font-style: oblique;
    background-color: #FFF1A8;
    border: 1px solid #000;
  }
}

h6 { font-size: 8pt }
h5 { font-size: 8pt }
h4 { font-size: 10pt }
h3 { font-size: 12pt }
h2 { font-size: 14pt }
h1 { font-size: 18pt }

blockquote {padding: 10px; border: 1px #DDD dashed }

.webkit-indent-blockquote { border: none; }

a img {border: 0}

.pb {
  border-width: 0;
  page-break-after: always;
  /* We don't want this to be resizeable, so enforce a width and height
     using !important */
  height: 1px !important;
  width: 100% !important;
}

.editor .pb {
  border-top: 1px dashed #C0C0C0;
  border-bottom: 1px dashed #C0C0C0;
}

div.google_header, div.google_footer {
  position: relative;
  margin-top: 1em;
  margin-bottom: 1em;
}


/* Table of contents */
.editor div.writely-toc {
  background-color: #f3f3f3;
  border: 1px solid #ccc;
}
.writely-toc &gt; ol {
  padding-left: 3em;
  font-weight: bold;
}
ol.writely-toc-subheading {
  padding-left: 1em;
  font-weight: normal;
}
/* IE6 only */
* html writely-toc ol {
  list-style-position: inside;
}
.writely-toc-none {
  list-style-type: none;
}
.writely-toc-decimal {
  list-style-type: decimal;
}
.writely-toc-upper-alpha {
  list-style-type: upper-alpha;
}
.writely-toc-lower-alpha {
  list-style-type: lower-alpha;
}
.writely-toc-upper-roman {
  list-style-type: upper-roman;
}
.writely-toc-lower-roman {
  list-style-type: lower-roman;
}
.writely-toc-disc {
  list-style-type: disc;
}

/* Ordered lists converted to numbered lists can preserve ordered types, and
   vice versa. This is confusing, so disallow it */
ul[type="i"], ul[type="I"], ul[type="1"], ul[type="a"], ul[type="A"] {
  list-style-type: disc;
}

ol[type="disc"], ol[type="circle"], ol[type="square"] {
  list-style-type: decimal;
}

/* end default css */


  /* default print css */
  
  @media print {
    body {
      padding: 0;
      margin: 0;
    }

    div.google_header, div.google_footer {
      display: block;
      min-height: 0;
      border: none;
    }

    div.google_header {
      flow: static(header);
    }

    /* used to insert page numbers */
    div.google_header::before, div.google_footer::before {
      position: absolute;
      top: 0;
    }

    div.google_footer {
      flow: static(footer);
    }

    /* always consider this element at the start of the doc */
    div#google_footer {
      flow: static(footer, start);
    }

    span.google_pagenumber {
      content: counter(page);
    }

    span.google_pagecount {
      content: counter(pages);
    }


    callout.google_footnote {
      
      display: prince-footnote;
      footnote-style-position: inside;
      /* These styles keep the footnote from taking on the style of the text
         surrounding the footnote marker. They can be overridden in the
         document CSS. */
      color: #000;
      font-family: Verdana;
      font-size: 10.0pt;
      font-weight: normal;
    }

    /* Table of contents */
    #WritelyTableOfContents a::after {
      content: leader('.') target-counter(attr(href), page);
    }

    #WritelyTableOfContents a {
      text-decoration: none;
      color: black;
    }
  }

  @page {
    @top {
      content: flow(header);
    }
    @bottom {
      content: flow(footer);
    }
    @footnotes {
      border-top: solid black thin;
      padding-top: 8pt;
    }
  }
  /* end default print css */


/* custom css */


/* end custom css */

/* ui edited css */

body {
  font-family: Verdana;
  
  font-size: 10.0pt;
  line-height: normal;
  background-color: #ffffff;
}
/* end ui edited css */


/* editor CSS */
.editor a:visited {color: #551A8B}
.editor table.zeroBorder {border: 1px dotted gray}
.editor table.zeroBorder td {border: 1px dotted gray}
.editor table.zeroBorder th {border: 1px dotted gray}


.editor div.google_header, .editor div.google_footer {
  border: 2px #DDDDDD dashed;
  position: static;
  width: 100%;
  min-height: 2em;
}

.editor .misspell {background-color: yellow}

.editor .writely-comment {
  font-size: 9pt;
  line-height: 1.4;
  padding: 1px;
  border: 1px dashed #C0C0C0
}


/* end editor CSS */

&lt;/style&gt;

  
  &lt;title&gt;Open311 API Spec v0.1-2009-16-18&lt;/title&gt;

&lt;/head&gt;

&lt;body 
    
    &gt;
    
    
    
&lt;div style=TEXT-ALIGN:center&gt;
  &lt;font size=6&gt;Open311 API&lt;br&gt;
  Draft Specification&lt;/font&gt;&lt;br&gt;
  &lt;font size=6&gt; 2009-06&lt;br&gt;
  v0.1&lt;/font&gt;&lt;br&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Abstract&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
The Open311 API provides a way to work with service requests between citizens, governments and non-governmental organizations.&lt;br&gt;
&lt;br&gt;
Open311 is decentralized. There is no central registry to which a providing system is required to register. There is also no central authority that lists the responsible Open311 providers for a particular location or set of concerns.&lt;br&gt;
&lt;br&gt;
Open311 is intended to be applicable every where for all languages. The spec has been initially written in English with English terms solely for the convenience of the authors. All attempts were made to provide for the API to work for all language locales.&lt;br&gt;
&lt;br&gt;
Open311 uses only standard HTTP requests and responses.&lt;br&gt;

&lt;br&gt;
The Open311 API is a RESTful service. All GET requests are idempotent, they have no side effect other then returning data in a response to the client.&lt;br&gt;
&lt;br&gt;
It is expected that multiple versions of the Open311 API will exist and interoperate concurrently. The spec is designed to allow service providers of different versions to be able to communicate together.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Terminology&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Provider or Service Provider&lt;/font&gt;&lt;br&gt;
The system on which the API calls are made. This is the system that is mapped to by the URIs that a client makes HTTP calls to.&lt;br&gt;
&lt;br&gt;

&lt;font size=3&gt;Client&lt;/font&gt;&lt;br&gt;
The entity or system from which API calls are made. This could be a citizen's browser, a third party computer system or another service provider.&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Issue&lt;/font&gt;&lt;br&gt;
A specific, geographically stationary, concern that has a concrete definable fix. Some common names include: service request, work order or ticket.&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Citizen&lt;/font&gt;&lt;br&gt;
Any natural person.&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Non-Governmental Organization&lt;br&gt;

&lt;font size=2&gt;An entity that is not a government.&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;font size=3&gt;Government&lt;/font&gt;&lt;br&gt;
The organization that manages a political unit of any size.&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Locale&lt;/font&gt;&lt;br&gt;
The collection of configuration that is necessary to contextualize specific content for a particular language format. For example language or numerical formatting that configures a system for a specific known language. Locales are usually originated in a specific geographic region. However the Open311 API expects them to only refer to the configuration necessary localize content for that locale. See http://en.wikipedia.org/wiki/Locale&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Latitude / Longitude&lt;/font&gt;&lt;br&gt;
All latitudes and longitude values MUST be WGS84 (World Geodetic System 1984) datum values expressed in decimal format. See http://en.wikipedia.org/wiki/WGS84&lt;br&gt;

&lt;br&gt;
For Example: 37.40320,-121.977521&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Area of Interest&lt;/font&gt;&lt;br&gt;
An area of interest is a bounded geographical area inside which a service provider will accept issue reports. Areas of interest are independent of the locales that a provider supports. Providers MAY support any area(s) of interest independently of which ever locale(s) they wish to support.&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;Root URI&lt;/font&gt;&lt;br&gt;
A root URI defines the start point for the API for a particular service provider. It is defined by the service provider and takes the form of: http://&amp;lt;host&amp;gt;[/path]&lt;br&gt;
&lt;br&gt;
Possible Example Root URIs:&lt;br&gt;

&amp;nbsp;&amp;nbsp; http://api.seeclickfix.com/open311/&lt;br&gt;
&amp;nbsp;&amp;nbsp; http://data.gov/apis/311/&lt;br&gt;
&amp;nbsp;&amp;nbsp; http://311.toronto.ca/&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Protocol Overview&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
The Open311 API is stateless.&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Protocol Messages&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
Open311 messages are mappings of plain-text parameters (keys) to plain-text values. The keys and values permit the full Unicode character set (UCS).&lt;br&gt;
&lt;br&gt;
When the keys and values need to be converted to/from bytes, they MUST be encoded using &lt;a class=info href=http://openid.net/specs/openid-authentication-2_0.html#RFC3629&gt;UTF-8 (&lt;span class=info&gt;Yergeau, F., &#8220;UTF-8, a transformation format of Unicode and ISO 10646,&#8221; .&lt;/span&gt;)&lt;/a&gt; [RFC3629].&lt;br&gt;
&lt;br&gt;
&lt;p&gt;

  Messages MUST NOT contain multiple keys with the same name.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
  &lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
  Throughout this document, all Open311 parameters are REQUIRED unless marked as OPTIONAL with square brackets eg [example]&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;
Open311 expects RESTful semantics on all URIs exposed by providers. This means that all GET requests MUST be idempotent. Said another way, GET requests return data with out making any change to the data at the service provider. To change data at a service provider the client must use a PUT, POST, or DELETE request.&lt;br&gt;
&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;HTTP Encoding&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
  When a message is sent to an HTTP server, it MUST be encoded using a form encoding specified in Section 17.13.4 of &lt;a class=info href=http://openid.net/specs/openid-authentication-2_0.html#HTML401&gt;[HTML401] (&lt;span class=info&gt;W3C, &#8220;HTML 4.01 Specification,&#8221; .&lt;/span&gt;)&lt;/a&gt;. Likewise, if the "Content-Type" header is included in the request's headers, its value MUST also be of such an encoding.
&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Locale&lt;/font&gt;&lt;br&gt;

&lt;font size=3&gt;&lt;font size=2&gt;&lt;br&gt;
The Open311 API is intended for planet wide applicability. It is expected that there will be service providers that only support a single language locale. This locale MAY or MAY NOT be the primary locale for the areas of interest the service provider supports. It is also expected that there will be service providers that support several locales&lt;span style=BACKGROUND-COLOR:#ffff00&gt;&lt;span style=BACKGROUND-COLOR:#ffffff&gt;. Again these locales MAY or MAY NOT be the default primary locale for the areas of interest the service provider supports.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;If a client submits a request a service provider with no locale defined, then the service provider's response MUST be consistent with the default locale the service provider returns from the "/info" resource.&lt;br&gt;
&lt;br&gt;
If a client submits a request to a service provider with a locale that is included in the provider's list of supported locales then the service providers response MUST be consistent with the language locale specified in the request.&lt;br&gt;
&lt;br&gt;
If a client submits a request to a service provider with a locale that is not included in the provider's list of supported locales then the service provider's response MAY be consistent with any language locale that the service provider supports.&lt;br&gt;
&lt;br&gt;
Locale values MUST conform to &lt;/font&gt;&lt;/font&gt;[RFC 4646] definitions. See http://tools.ietf.org/html/rfc4646&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Resources&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;&lt;font size=2&gt;Any request or response parameters marked in square brackets like this: [example], MUST be considered optional. All other parameters MUST be considered required.&lt;br&gt;
&lt;br&gt;
Resource URIs MAY be suffixed with the format the client prefers to receive its response. Clients SHOULD NOT request any formats other then:&lt;br&gt;
&amp;nbsp;&amp;nbsp; -JSON&lt;br&gt;
&amp;nbsp;&amp;nbsp; -HTML&lt;br&gt;

&amp;nbsp;&amp;nbsp; -XML&lt;br&gt;
&lt;br&gt;
Providers SHOULD respond to these requests with properly formatted responses. If no format is specified then the service provider SHOULD respond with an HTML formatted response.&lt;br&gt;
&lt;br&gt;
The implementation of the HTML response is intended to be human read-able. The specific format of which is left to the discretion of the service provider. Clients SHOULD NOT expect the format of the HTML responses to be be consistent between service providers or through time for the same service provider.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;&lt;b&gt;&lt;br&gt;
/versions&lt;/b&gt;&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;u&gt;Description&lt;/u&gt;&lt;br&gt;

&lt;br&gt;
This base resource is intended to be used to provide clients with information on which versions of the Open311 API the provider supports.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; -no parameters-&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; versions: List of supported API versions&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;u&gt;Example&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Request:&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;http://api.provider.gov/open311/info.json&lt;br&gt;
&lt;br&gt;
Response:&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;{ "versions" : ["v1"] }&lt;br&gt;
&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;u&gt; / POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=3&gt;&lt;b&gt;/v1/info&lt;/b&gt;&lt;br&gt;
&lt;/font&gt;&lt;br&gt;

&lt;u&gt;Description&lt;/u&gt;&lt;br&gt;
The info method is intended to return general system level information about the service provider. If no areas of interest are returned it is expected that the provider is interested in service requests in all areas. The provider doesn't return a list of areas of interested they SHOULD NOT error a service request create method for not existing inside an area of interest.&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; name: Provider Name&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; contact_info: Provider Contact Info&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MUST include one of the following: phone, email or postal address&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; default_locale: Default Locale&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; locales: List of Supported Locales&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; areas: List of areas of interest&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Each list of lat/lngs MUST be defined clockwise so as to disambiguate in vs out&lt;br&gt;

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Each list is a string of space delimited comma seperated pairs of latitude,longitude&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;Example&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Request:&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;http://api.provider.gov/open311/v1/info.json&lt;br&gt;
&lt;br&gt;
Response:&lt;br&gt;

{&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;"name" : "Provider Gov",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "contact_info" : "Phone: +1 (123) 456 - 7890",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "default_locale" : "en-US",&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "locales" : ["en-US", "en-CA"],&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "areas" : ["37.40320,-121.977521 37.40320,-121.976021 37.40195,-121.976021 37.40195,-121.977521"]&lt;br&gt;

}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;u&gt; / POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/issue&lt;/font&gt;&lt;/b&gt;&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; issues: List of issues&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Failure&lt;br&gt;
&lt;/u&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; locale&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]: Language locale desired in reponse&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; summary: Short title for the issue.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [description]: Longer write up of exactly what the issue pertains to.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tags: comma delimited list of tags to apply to the issue.&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; display_name: How the reporter wishes to be identified as the reporter&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lat: The latitude of the issue&lt;br&gt;

&amp;nbsp;&amp;nbsp; &amp;nbsp;lng: The longitude of the issue&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [callback]: URI that the client requests notification calls be sent to in the event of this issue being updated.&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Same as GET to http://&amp;lt;root&amp;gt;/v1/issue/&amp;lt;id&amp;gt;&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Failure&lt;br&gt;
&lt;/u&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; locale&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;

&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/issue/&amp;lt;id&amp;gt;&lt;/font&gt;&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
This resource represents a specific issue inside of the service provider's system. The id is defined by the service provider at the time the issue is created. The id MUST stay consistent so that the same id always points to the same issue. The service provider MUST ensure that the id is unique inside of its own system and across versions of the API.&amp;nbsp; It is not expected that the id is unique accross service providers.&lt;br&gt;

&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; summary&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; description&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tags&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; callback URI&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; display name&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lat/lng&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; request id&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Failure&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Code&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/tag&lt;/font&gt;&lt;/b&gt;&lt;br&gt;
&lt;br&gt;

Many municipalities or other governmental organizations have extensive internal taxonomies for issue classification. The Open311 API intentionally eschews rigid taxonomies. Instead the API supports free form tagging.&lt;br&gt;
&lt;br&gt;
To allow providers to help promote a coherent tag structure for submitted issues, providers MAY support this resource. If providers do not implement this then they MUST provide an empty list with an unsupported operation HTTP response code. If the client makes a call to this resource it gives the provider an opportunity to suggest a list of possible tag completion values that the provider would encourage the client to submit.&lt;br&gt;
&lt;br&gt;
The client MAY use a value from this returned list. The provider MUST accept any tag that is submitted by the client.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]: The desired language locale for the response.&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; [tag]: Some or no portion of a tag&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Ordered list of suggested tags&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Failure&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Locale&lt;br&gt;

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;u&gt; / POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/callback/&amp;lt;source URI&amp;gt;/&amp;lt;resource&amp;gt;...&lt;/font&gt;&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
This is the resource that will be called by a client if that client was a provider that had a callback registered with it for the provider URI that it is now calling.&lt;br&gt;
&lt;br&gt;
To register a call back the caller MUST provide a URI. This URI MUST refer to a Open311 compliant provider system. If the service provider accepts the registration of a callback URI on a service request, the provider MUST make calls to the URI when state on that service request changes.&lt;br&gt;
&lt;br&gt;
Example:&lt;br&gt;
&lt;br&gt;

System A calls System B with a PUT: (only the callback is listed for simplicity)&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Request: http://systemb.net/api/issue?callback=http://systemA.net/open311/&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Response: { "id" : "12345678" }&lt;br&gt;
&lt;br&gt;
Some internal work flow changes the status of http://systemb.net/api/issue/12345678 from "Open" to "Closed". System A MUST call System B with the following POST:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Request: http://systemA.net/open311/callback/systemb.net/api/issue/12345678?status=Closed&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font size=3&gt;search&lt;/font&gt;&lt;/b&gt;&lt;br style=COLOR:#6aa84f&gt;
&lt;br&gt;
The purpose of the search method is to return data associated with a service requests that match the query submitted. The specific algorithm for matching the query submitted to particular issues is solely at the discretion of the provider. It is SUGGESTED that the algorithm maintain consistency between searches that are performed soon after each other. However clients SHOULD NOT expect to always get the same result set back for the same query from the same provider.&lt;br&gt;
&lt;br&gt;
Each provider MAY implement rate limiting or max result set sizing in order to better shape the load on their system.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; query: The query string&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;List of issues&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;u&gt;Failure&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;locale&lt;br&gt;

&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;u&gt; / POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;
&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;br&gt;
&lt;b&gt;&lt;font size=3&gt;/v1/&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font size=3&gt;find&lt;/font&gt;&lt;/b&gt;&lt;br&gt;
&lt;br&gt;
The purpose find resource is find issues that match the particular attributes that are submitted.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;GET&lt;/u&gt;&lt;br&gt;
Accepts:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [locale]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [bounding_box] (max lat, max lng, min lat, min lng)&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; [tags]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [keywords]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; other attributes of issue?&lt;br&gt;
Returns:&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;u&gt;Success&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;List of issues&lt;br&gt;

&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;u&gt;Failure&lt;/u&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;locale&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Error Description&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;u&gt;PUT&lt;/u&gt;&lt;u&gt; / POST&lt;/u&gt;&lt;u&gt; / DELETE&lt;/u&gt;&lt;br&gt;

&lt;br&gt;
Not supported.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Acknowledgments&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
This work attempts to stand on the shoulders of giants. Taking a stab at a thank you list would inevitability leave out a worthy party. This spec is not intended to promote an original idea, on the contrary, it is intended to codify the thinking of many others. Thank you to all. We would be remiss if we did not mention that the language in this spec is _heavily_ borrowed from the OpenID Authentication 2.0 Specification. Much appreciation is directed to their efforts.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font size=5&gt;Open Questions&lt;/font&gt;&lt;br&gt;
&lt;br&gt;

Authentication&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Q: How do we handle authentication?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Is it required of optional?&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Authorization&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Q: How do we handle API keying?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Is it required or optional?&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Should there be an automated request/response mechanism in the API?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Are providers allowed to rate limit clients? If so are there guidelines?&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Errors&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Should all messages return status 200?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Should all error messages be human readable?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Should all error messages be localized to the requested or default locale?&lt;br&gt;

&lt;br&gt;
&lt;br&gt;
Client Based Request Identifiers&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Would supporting client based request identifiers that allow clients to replay requests without repetitive effects be worth while?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: How long is the provider expected to track these&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Refusal of Service&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: May providers refuse service at their discretion?&lt;br&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Does the type of provider entity matter?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: How does a service provider reject PUT/POST/DELETE? Do rejects trigger callbacks?&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Comments&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Is the initial description considered a comment on the issue?&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Q: Can anyone add comments to issues?&lt;br&gt;
&lt;br&gt;

&lt;br&gt;&lt;/body&gt;
&lt;/html&gt;</content>
  <created-at type="timestamp">Thu Jun 18 23:40:18 UTC 2009</created-at>
  <html type="boolean" nil="true"></html>
  <id type="integer">23</id>
  <right-column></right-column>
  <title>Open311 API Spec</title>
  <updated-at type="timestamp">Thu Jun 18 23:41:10 UTC 2009</updated-at>
</simple-page>
