NAV Navbar
289-655-9994

NOTICE

Please note that the API is under active development. Please see the documentation for each of the endpoints for information on completeness.

Development Environments

{{tenanthostname}}

{{tenantname}}

lexingtonky

{{module_code}} Options

Introduction

The purpose of this API is to support the CivicCentral web client.

With it the client can:

Overview

Authentication

Authentication is implemented via HTTP Bearer auth using JWT.

The {{tokens}} are obtained from the (Login enpoint).

Errors

The CivicCentral API uses the following error codes:

The response body will be in the form:

{
    "name":"Bad Request",
    "message":"Bad Request.",
    "code":0,
    "status":400
}
Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your authentication token is missing or invalid.
402 Payment Required -- You haven't paid for this.
403 Forbidden -- The data requested is not available to this user.
404 Not Found -- The specified resource could not be found.
405 Method Not Allowed -- You tried to access a resource with an invalid method.
406 Not Acceptable -- You requested a format that isn't json.
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.

Account

This collection can be used to create and manipulate user accounts.

Confirm Account Email

200 Confirm Account Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/account/confirm" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"token\": \"x8qahsENgFoDYBBI07lRiqpk8re5MbBP_1540211404\"
}"

Confirm the user account using a confirmation code.

HTTP Request

POST /api/account/confirm

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "token": "abcdef0123456789abcdef0123456789_123465789"
}

Request Body

Name Type Description
token String

confirm account token

Success Response

200 Confirm Account Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Confirm Account Successful."
}

200 Confirm Account Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Confirm Account Failed.",
  "error": {
    "token": [
      "Invalid account confirmation token."
    ],
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Create Account

200 Create Account Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/account" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"email\": \"john.jones@dce.mu\",
    \"password\": \"$uper$ecretP455w0rd\",
    \"first_name\": \"John\",
    \"last_name\": \"Jones\"
}"

Create a new user account.

HTTP Request

POST /api/account

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "email": "john.jones@dce.sl",
  "password": "$uper$ecretP455w0rd",
  "first_name": "John",
  "last_name": "Jones"
}

Request Body

Name Type Description
email String

account email address

password String

account password

first_name String

account user's first name

last_name String

accoutn user's last name

Success Response

200 Create Account Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Create Account Successful."
}

200 Create Account Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request / Existing Email:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Account Creation Failure.",
  "error": {
    "email": [
      "This email address has already been taken."
    ]
  }
}

400 Bad Request / Invalid Properties:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Account Creation Failure.",
  "error": {
    "email": [
      "Email Address is not a valid email address."
    ],
    "password": [
      "Password should contain at least 8 characters."
    ],
    "first_name": [
      "First Name cannot be blank."
    ],
    "last_name": [
      "Last Name cannot be blank."
    ]
  }
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 0,
   "name": "Forbidden",
   "message": "Authenticated User Cannot Create An Account."
}

Error 4xx

Name Type Description
BadRequest
  • One or more of the properties were not valid.

  • A user with the given email address already exists.

Forbidden

if an authenticated user tries to create an account

Delete Account

200 Delete Account Successful:

curl --location --request DELETE "{{scheme}}:/{{tenanthostname}}/api/account" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Delete the currently authenticated user.

HTTP Request

DELETE /api/account

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Delete Account Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Account Delete Successful."
}

200 Delete Account Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get Account User Info

200 Get Account User Info Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/account" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the details of the currently authenticated user.

HTTP Request

GET /api/account

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Account User Info Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "id": 6602,
    "email": "john.jones@dce.mu",
    "first_name": "John",
    "last_name": "Jones",
    "picture": "",
    "properties": {
      "control": {
        "alert": {
          "count": 2,
          "limit": 4,
          "place_collection": {
            "grid": {
              "limit": 10
            }
          }
        }
      },
      "preferences": {
        "language": "en-US",
        "notifications": {
          "weeklyOptin": true
        }
      }
    },
    "role": "categorised"
  }
}

200 Get Account User Info Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.id Integer

account user id

data.email String

account email address

data.first_name String

account user's first name

data.last_name String

account user's last name

data.picture String

account user's picture url

data.role String

account user's role membership

data.properties Object

account properties

data.properties.control Object

control related properties

data.properties.control.alert Object

alert related properties

data.properties.control.alert.count Integer

current saved alert count

data.properties.control.alert.limit Integer

current saved alert limit

data.properties.control.alert.place_collection Object

alert place collection properties

data.properties.control.alert.place_collection.grid Object

alert grid place collection properties

data.properties.control.alert.place_collection.grid.limit Integer

current grid selection limit

data.properties.preferences Object

user preferences

data.properties.preferences.language String

language preference

data.properties.preferences.notifications Object

notification related preferences

data.properties.preferences.notifications.weeklyOptin Boolean

weekly notification review email opt-in

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Request Account Confirm Email

202 Request Accepted:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/account/request-account-confirm" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"email\": \"john.jones@dce.sl\"
}"

Request an account confirmation link be sent to the given email address.

HTTP Request

POST /api/account/request-account-confirm

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "email": "john.jones@dce.sl",
}

Request Body

Name Type Description
email String

account email address

Success Response

202 Request Accepted:

HTTP/1.1 202 Accepted
{
   "status": 202,
   "code": 0,
   "name": "Accepted",
   "message": "If john.jones@dce.sl belongs to an existing user, an account confirmation has been sent."
}

202 Request Accepted

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Request Account Confirm Failure.",
  "error": {
    "email": [
      "Email Address is not a valid email address."
    ],
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Request Account Password Reset

202 Request Accepted:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/account/request-password-reset" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"email\": \"john.jones@dce.mu\"
}"

Request a password reset link be sent to the given email address.

HTTP Request

POST /api/account/request-password-reset

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "email": "john.jones@dce.sl",
}

Request Body

Name Type Description
email String

account email address

Success Response

202 Request Accepted:

HTTP/1.1 202 Accepted
{
   "status": 202,
   "code": 0,
   "name": "Accepted",
   "message": "If john.jones@dce.sl belongs to an existing user, a password reset has been sent."
}

202 Request Accepted

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Request Password Reset Failure.",
  "error": {
    "email": [
      "Email Address is not a valid email address."
    ],
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Reset account password

200 Reset Password Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/account/reset-password" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"password\": \"password2\",
    \"token\": \"Qj1lpMRv8vicJp0L9G5IAqZI2lN_3Rid_1540211995\"
}"

Reset the account password using a password reset token.

HTTP Request

POST /api/account/reset-password

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "password": "N3wP4$$w0rD",
  "token": "abcdef0123456789abcdef0123456789_123465789"
}

Request Body

Name Type Description
password String

new password

token String

password reset token

Success Response

200 Reset Password Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Reset Account Password Successful."
}

200 Reset Password Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Reset Account Password Failed.",
  "error": {
    "password": [
      "Password should contain at least 8 characters."
    ],
    "token": [
      "Invalid password reset token."
    ],
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Update User Account Info

200 Update Account Successful:

curl --location --request PUT "{{scheme}}:/{{tenanthostname}}/api/account" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
    \"properties\": {
        \"preferences\": {
            \"language\": \"en-US\",
            \"notifications\": {
                \"weeklyOptin\": true
            }
        }
    }
}"

Update the details of the currently authenticated used.

HTTP Request

PUT /api/account

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "properties": {
    "preferences": {
      "language": "nw-LG",
      "notifications": {
        "weeklyOptin": false
      }
    }
  }
}

Request Body

Name Type Description
properties Object

user configuration properties

properties.preferences Object

user preferences

properties.preferences.language String

language preference (ISO 639-1 with ISO 3166-2)

properties.preferences.notifications Object

notification related preferences

properties.preferences.notifications.weeklyOptin Boolean

weekly notification review email opt-in

Success Response

200 Update Account Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Update Account Successful."
}

200 Update Account Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Account Creation Failure.",
  "error": {
    "$.properties.preferences.language": [
      "$ Properties Preferences Language must be a string."
    ],
    "$.properties.preferences.notifications.weeklyOptin": [
      "$ Properties Preferences Notifications Weekly Optin must be either \"true\" or \"false\"."
    ]
  }
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Unauthorized

an unauthorized user made the request

Address

This collection can be used to access address and place data.

Address Geocode

200 Address Geocode Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/address/geocode?q=1009%20AURORA%20AVE" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get the geocode (GeoJSON point) for an address.

HTTP Request

GET /api/address/geocode?q=

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Parameter

Name Type Description
q String

the address.

Success Response

200 Address Geocode Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "type": "MultiPoint",
    "coordinates": [
      [
        -84.4758768856526,
        38.0360296782384
      ]
    ]
  }
}

200 Address Geocode Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.type String

the GeoJSON geometry type

data.coordinates Object[][]

the GeoJSON geometry co-ordinates

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no address matching the given address was found

Predict Address

200 Predict Address Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/address/predict?q=1101%20B" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get possible candidates for a given address fragment.

HTTP Request

GET /api/address/predict?q=

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Parameter

Name Type Description
q String

the address fragment.

Success Response

200 Predict Address Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "text": "1101 BEAUMONT CENTRE LN, 17106",
      "source": "address"
    },
    {
      "text": "1101 BUTTONWOOD CT",
      "source": "address"
    }
  ]
}

200 Predict Address Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.text String

a prediction candidate

data.source Object[][]

the candidate source ie place or address

Set Address Coordinates

200 Predict Address Successful:

curl --location --request PUT "{{scheme}}:/{{tenanthostname}}/api/address/123%20Main%20Street,%20Gotham,%20NJ/point" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data "{
  \"latitude\": 39.314812,
  \"longitude\": -75.202198
}
"

Set the coordinates for an address that has not geometry data.

HTTP Request

PUT /api/address/:address/point

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Path Variable

Name Type Description
address String

the identifier of the address to update.

Success Response

200 Set Address Coordinates Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Address point has been updated."
}

200 Set Address Coordinates Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 0,
   "name": "Forbidden",
   "message": "Forbidden."
}

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
Forbidden

if an user has insufficient permissions

NotFound

no address matching the given address was found

Alert

This collection of endpoints is used create, access and modify saved alerts.

Delete A Saved Alert

200 Delete Alert Successful:

curl -X DELETE \
  /lexingtonky.cc.localhost/api/alert/1 \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1NDkzNjQ3NjAsImp0aSI6IkE1a25HMXBEQi1adDdCT0xjU2d2cG9QbWlZUFNncWdyIiwiaXNzIjoibGV4aW5ndG9ua3kuY2MubG9jYWxob3N0IiwibmJmIjoxNTQ5MzY0NzUwLCJleHAiOjE1NTE5NTY3NTAsImRhdGEiOnsidXNlcl9pZCI6Mn19.RwtXHpF-eJvfg2O8vILo9_xuE0j9NxY2fz1pVHQZA4pn8st77mnrkm1vx0sX5rDLZZdOzMznIeIlD8-8JCTGLg' \
  -H 'Civic-Central-Tenant: lexingtonky'

Delete the saved alerts with the given id that belongs to the authorized user.

HTTP Request

DELETE /api/alert/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id Integer

alert id

Success Response

200 Delete Alert Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "id": "88888"
}

200 Delete Alert Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

data.id Integer

saved alert id

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no saved alert with that id belonging to the user was found

Unauthorized

an unauthorized user made the request

Get A Saved Alert

200 Update Account Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/alert/88888" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get the saved alerts with the given id that belongs to the authorized user.

HTTP Request

GET /api/alert/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id Integer

alert id

Success Response

200 Get All Alerts Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "id": "88888",
    "name": "My Saved Alert",
    "event_type": [
      "building_new",
      "planning_new"
    ],
    "geojson": { ... },
    "created": "2018-05-10 02:38:56.202614+01",
    "stats": {
      "week": 9999
    }
  }
}

200 Get All Alerts Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

data.id Integer

saved alert id

data.guid String

unique id

data.created String

timestamp

data.name String

user given name

data.event_type String[]

events to notify on

data.active Boolean

is the alert active

data.geojson Object

geojson object of the alert shape

data.stats Object

a collection of statistics

data.stats.week Integer

a count for the week

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no saved alert with that id belonging to the user was found

Unauthorized

an unauthorized user made the request

Get Tenant Alert Config

200 Get Alert Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/alert/config" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the alert configuration for the given tenant.

HTTP Request

GET /api/alert/config

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Alert Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "placeCollection": [
      {
        "type": "council_district",
        "name": "District",
        "options": [
          {
            "label": "Council District 1",
            "value": 1
          },
          {
            "value": 2,
            "label": "Council District 2"
          }
        ]
      },
      {
        "type": "downtown_design_area",
        "name": "Downtown Design Area",
        "options": [
          {
            "label": 21,
            "value": "Downtown Design Area"
          }
        ]
      },
      {
        "type": "national_register",
        "name": "National Register",
        "options": [
          {
            "label": "Northside Residential",
            "value": 31
          },
          {
            "value": 32,
            "label": "Elsmere Park"
          }
        ]
      },
      {
        "type": "neighborhood",
        "name": "Neighborhood",
        "options": [
          {
            "label": "The Lane",
            "value": 101
          },
          {
            "value": 102,
            "label": "Chevy Chase"
          }
        ]
      },
      {
        "type": "grid",
        "name": "Grid",
        "geoJSON": {
          "type": "FeatureCollection",
          "features": [
            {
              "type": "Feature",
              "geometry": {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      -84.70732319553815,
                      38.24806809889479
                    ],
                    [
                      -84.70732319553815,
                      38.174830343518614
                    ],
                    [
                      -84.61294675405725,
                      38.174830343518614
                    ],
                    [
                      -84.61294675405725,
                      38.24806809889479
                    ],
                    [
                      -84.70732319553815,
                      38.24806809889479
                    ]
                  ]
                ]
              },
              "properties": {
                "id": 1001,
                "name": "A1"
              }
            },
            {
              "type": "Feature",
              "geometry": {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      -84.61294675405725,
                      38.24806809889479
                    ],
                    [
                      -84.61294675405725,
                      38.174830343518614
                    ],
                    [
                      -84.51857031257634,
                      38.174830343518614
                    ],
                    [
                      -84.51857031257634,
                      38.24806809889479
                    ],
                    [
                      -84.61294675405725,
                      38.24806809889479
                    ]
                  ]
                ]
              },
              "properties": {
                "id": 1002,
                "name": "B1"
              }
            }
          ]
        },
        "options": [
          {
            "value": 1001,
            "label": "A1"
          },
          {
            "value": 1002,
            "label": "B1"
          }
        ]
      }
    ],
    "modules": [
      {
        "moduleCode": "building",
        "eventTypes": [
          {
            "type": "building_new",
            "name": "New Building"
          }
        ]
      },
      {
        "moduleCode": "planning",
        "eventTypes": [
          {
            "type": "planning_new",
            "name": "New Planning"
          }
        ]
      }
    ]
  }
}

200 Get Alert Config Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

data Object

response data

data.modules Object[]

modules to alert on

data.modules.moduleCode String

modules code

data.modules.eventTypes Object[]

module event types code

data.modules.eventTypes.name String

event name

data.modules.eventTypes.type String

event type code

data.placeCollection Object[]

array of place collections

data.placeCollection.name String

name of the place collection

data.placeCollection.type String

type of the place collection

data.placeCollection.options Object[]

the places in the collection

data.placeCollection.options.label String

the place name

data.placeCollection.options.value Integer

the place id

data.placeCollection.geoJSON Object

(grid type only) geoJSON of the grid

data.placeCollection.geoJSON.type String

(grid type only) geoJSON type

data.placeCollection.geoJSON.features Object[]

(grid type only) geoJSON feature collection

data.placeCollection.geoJSON.features.type String

(grid type only) geoJSON feature type

data.placeCollection.geoJSON.features.geometry Object[]

(grid type only) geoJSON feature geometry

data.placeCollection.geoJSON.features.geometry.type String

(grid type only) geoJSON geometry type

data.placeCollection.geoJSON.features.geometry.coordinates Object[][]

(grid type only) geoJSON geometry coordinates

data.placeCollection.geoJSON.features.properties Object[]

(grid type only) grid square properties

data.placeCollection.geoJSON.features.properties.id Object[]

(grid type only) grid square id

data.placeCollection.geoJSON.features.properties.name Object[]

(grid type only) grid square name

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get All Saved Alerts

200 Get All Alerts Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/alert" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get all saved alerts for the authenticated user.

HTTP Request

GET /api/alert

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get All Alerts Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Create Alert Successful.",
  "data": [
    {
      "id": 23,
      "guid": "828875ce-36d1-4f89-a82c-06e9a055164e",
      "created": "2018-10-15 14:27:40.530079+01",
      "name": "My Saved Alert",
      "event_type": [
        "building_new",
        "planning_new"
      ],
      "active": true
      "stats": {
         "week": 999
      }
    }
  ]
}

200 Get All Alerts Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object[]

response data

data.id Integer

saved alert id

data.guid String

unique id

data.created String

timestamp

data.name String

user given name

data.event_type String[]

events to notify on

data.active Boolean

is the alert active

data.stats Object

a collection of statistics

data.stats.week Integer

a count for the week

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Save An Alert

200 Create Alert Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/alert" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data "{
    \"name\": \"My Saved Alert\",
    \"event_type\": [
        \"building_new\",
        \"planning_new\"
    ],
    \"___place_type\": \"grid\",
    \"criteria\": {
        \"___place\": [1001, 1002, 1003, 1005, 1008, 1013, 1021]
    }
}"

Save an alert for the authenticated user.

HTTP Request

POST /api/alert

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "name": "My Saved Alert",
  "event_type": [
    "building_new",
    "planning_new"
  ],
  "___place_type": "grid",
  "criteria": {
    "___place": [1001, 1002, 1003, 1005, 1008, 1013, 1021]
  }
}

Request Body

Name Type Description
name String

is the user given name for the alert

event_type Array

an array of the selected alert event types

___place_type String

the place collection type of those selected in criteria.___place

criteria Object

the search criteria

criteria.___place Array

an array of the ids of the selected features

Success Response

200 Create Alert Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Create Alert Successful.",
   "data": {
     "id": 999999999
   }
}

200 Create Alert Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

id Integer

the id of the newly created saved alert

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
   "status": 400,
   "code": 0,
   "name": "Bad Request",
   "message": "Create Alert Failure.",
   "error": {
     "name": [
     ]
   }
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 1,
   "name": "Forbidden",
   "message": "Attempt To Exceed The Saved Alert Limit."
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Forbidden

the user has reached their saved alert limit

Update A Saved Alert

200 Get All Alerts Successful:

curl --location --request PUT "{{scheme}}:/{{tenanthostname}}/api/alert/88888" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data "{
  \"active\": false
}"

Update the details of a specific saved alert belonging to the authenticated user.

HTTP Request

PUT /api/alert/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "active": false
}

Request URL Path Variable

Name Type Description
id Integer

alert id

Request Body

Name Type Description
active Boolean

the active state of the alert

Success Response

200 Get All Alerts Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Update Alert Successful.",
  "data": {
    "id": "88888"
  }
}

200 Get All Alerts Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

data.id Integer

saved alert id

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
   "status": 400,
   "code": 0,
   "name": "Bad Request",
   "message": "Update Alert Failure.",
   "error": {
     "active": [
     ]
   }
}

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

NotFound

no saved alert with that id belonging to the user was found

Unauthorized

an unauthorized user made the request

Auth

This collection of endpoints is used for authentication.

Login

200 Login Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/auth/login" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
  \"username\": \"user@tenant.com\",
  \"password\": \"$up£r$£cr3tP455w0rd\"
}"

Login with an email address and password to receive an authorisation token..

HTTP Request

POST /api/auth/login

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "email": "john.jones@dce.sl",
  "password": "$uper$ecretP455w0rd"
}

Request Body

Name Type Description
email String

account email address

password String

account password

Success Response

200 Login Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Login Successful."
   "data": {
     "token": "abcdefghijklmnopqrstuvwxyz0123456789...",
     "user_id": 6602,
     "expires": "2018-11-18T09:29:25+0000"
   }
}

200 Login Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

data.token String

authorization token

data.user_id Integet

user id

data.expires String

token expiry

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Login Failed."
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 0,
   "name": "Forbidden",
   "message": "Authenticated User Already Logged In."
}

Error 4xx

Name Type Description
Unauthorized

one or more of the login credentials are wrong

Forbidden

if an authenticated user tries to login

Social Login

Login with a third party authentication service.

HTTP Request

POST /api/auth/social/:authclient

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
authclient String

The auth client id:

  • facebook
  • google
  • linkedin
  • live
  • twitter

Success Response

200 Login Successful:

HTTP/1.1 200 OK
{
   "status": 200,
   "code": 0,
   "name": "OK",
   "message": "Login Successful."
   "data": {
     "token": "abcdefghijklmnopqrstuvwxyz0123456789...",
     "user_id": 6602,
     "expires": "2018-11-18T09:29:25+0000"
   }
}

200 Login Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name Integer

HTTP status code name

message String

response message

data Object

response data

data.token String

authorization token

data.user_id Integet

user id

data.expires String

token expiry

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Login Failed."
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 0,
   "name": "Forbidden",
   "message": "Authenticated User Already Logged In."
}

Error 4xx

Name Type Description
Unauthorized

the submitted tokens are invalid

Forbidden

if an authenticated user tries to login

Config

This collection of endpoints can be used to get tenant configuration.

Get Department Config

200 Get Department Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/config/department/planning-dept" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the configuration for the given tenant department.

HTTP Request

GET /api/config/department/:code

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
code String

The department code.

Success Response

200 Get Department Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "nArea": {
      "customLink": {
        "href": "/www.lexingtonky.gov/lexcall-311",
        "text": "311"
      }
    },
    "control": {
      "map": {
        "geo": {
          "minZoom": 9,
          "agencyBounds": {
            "e": -84.279134996,
            "n": 38.2043106045,
            "s": 37.8397308603,
            "w": -84.6622831894
          },
          "panningBounds": {
            "e": -84.087561,
            "n": 38.3866,
            "s": 37.657441,
            "w": -84.853857
          }
        },
        "apiKey": "00000000000000000000000000000000",
        "provider": "com_mapquest"
      },
      "login": {
        "thirdParty": [
          {
            "key": "000000000000000",
            "label": "Facebook",
            "authClientId": "facebook"
          },
          {
            "key": "000000000000-00000000000000000000000000000000.apps.googleusercontent.com",
            "label": "Google",
            "authClientId": "google"
          },
          {
            "key": "00000000000000",
            "label": "LinkedIn",
            "authClientId": "linkedin"
          },
          {
            "key": "00000000-0000-0000-0000-11711486f8c2",
            "label": "Microsoft Live",
            "authClientId": "live"
          },
          {
            "key": "0000000000000000",
            "label": "Twitter",
            "authClientId": "twitter"
          }
        ]
      },
      "protected": false
    },
    "branding": {
      "logo": "/lorempixel.com/128/26/abstract/",
      "theme": {
        "primary": "#3e622b",
        "secondary": "#3e622b",
        "textColor": "#323A44",
        "backgroundImage": null
      },
      "title": {
        "long": "Planning Department",
        "short": "Planning Department"
      },
      "favicon": null
    },
    "settings": {
      "units": "yards"
    },
    "analytics": {
      "clicky": {
        "code": "000000000"
      },
      "google": {
        "code": "UA-00000000-00"
      }
    }
  }
}

200 Get Department Config Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data (see config docs for details)

data.analytics Object

Analytics tracking configuration. If this value is set the custom tracking javascript is enabled on the website, and custom events are triggered with the relevant analytics tracking service. The name of the service as the placeholder text and the configuration code as the ‘code’. System currently configured for Clicky and Google.

data.analytics.SERVICEPROVIDER Object

Analytics tracking service name. Service providers supported are ‘clicky’ and ‘google’.

data.analytics.SERVICEPROVIDER.code String

Tenant specific configuration code for analytics tracking.

data.branding Object

Tenant specific application branding configuration.

data.branding.favicon String

URL of tenant favicon.

data.branding.logo String

URL of tenant logo.

data.branding.theme Object

Tenant module specific colour theming of application.

data.branding.theme.backgroundImage String

URL of a background image.

data.branding.theme.primary String

Primary background HEX colour of application.

data.branding.theme.secondary String

Secondary HEX colour of application.

data.branding.theme.textColor String

Black or white text colour of top bar.

data.branding.title Object
data.branding.title.long String

Long name of agency. Eg City of Corvallis.

data.branding.title.short String

Short name of agency. eg. Corvallis

data.control Object
data.control.login Object

Configuration of application login options.

data.control.login.thirdParty Array

Array of third party login providers. Array order is display order on interface.

data.control.login.thirdParty[] String

.authClientId Internal ID of third party login providers. Options are facebook, google, linkedin, live, twitter.

data.control.map Object

Configure the application’s base map settings.

data.control.map.apiKey String

Tenant specific API key for base map. Unique key used for each paid agency, demo sites and integration sites use the same key.

data.control.map.geo Object
data.control.map.geo.agencyBounds Object

Bounding coordinates for an agency’s limits. These should be used to center the map and set zoom on load.

data.control.map.geo.agencyBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.agencyBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.agencyBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.agencyBounds.w Number

Value for west bounding coordinate.

data.control.map.geo.minZoom Number

Value for min zoom out - ie how far can you zoom out.

data.control.map.geo.panningBounds Object

Bounding coordinates for an agency’s map. The agency extents are run through a script to generate the values used below. These bounding coordinates limit the extents a map can be panned by a user.

data.control.map.geo.panningBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.panningBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.panningBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.panningBounds.w Number

Value for west bounding coordinate.

data.control.map.host String

URL that base map image calls are made to. Eg. www.mapquestapi.com

data.control.map.provider String

Base map service provider. Eg. com_mapquest.

data.control.nArea Object

Top agency branded area of application.

data.control.nArea.customLink Object

Custom link on top right of application.

data.control.nArea.customLink.href String

URL of custom link.

data.control.nArea.customLink.text String

Title of custom link.

data.control.protected Boolean

Is site access protected.

data.settings Object

Additional settings not expressed elsewhere in the config.

data.settings.units String

Change the default measurement units (ie. yards) used on the email alert range.

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no department with that department code was found

Get Module Config

200 Get Module Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/config/module/planning" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the configuration for the given tenant module.

HTTP Request

GET /api/config/module/:code

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
code String

The module code.

Success Response

200 Get Module Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "analytics": {
      "clicky": {
        "code": "000000000"
      },
      "google": {
        "code": "UA-00000000-00"
      }
    },
    "branding": {
      "favicon": null,
      "logo": "/lorempixel.com/128/26/abstract/",
      "theme": {
        "backgroundImage": null,
        "primary": "#FFAA56",
        "secondary": "#FFAA56",
        "textColor": "#323A44"
      },
      "title": {
        "long": "Building",
        "short": "Building"
      }
    },
    "control": {
      "filter": {
        "count": {
          "status": true
        },
        "components": [
          {
            "type": "filter-panel/standard",
            "params": {
              "members": [
                {
                  "type": "expand/exclusive",
                  "params": {
                    "members": [
                      {
                        "type": "text/predictive",
                        "params": {
                          "icon": true,
                          "label": "Address",
                          "style": "box",
                          "endpoint": "/api/address/predict",
                          "placeholder": "Address, Neighborhood or Zip",
                          "labelVisible": false,
                          "predictiveProperty": "text"
                        },
                        "position": 0,
                        "behaviour": "address",
                        "criterion": "___address"
                      },
                      {
                        "type": "tab/exclusive",
                        "params": {
                          "members": [
                            {
                              "type": "select/multi/checkbox",
                              "params": {
                                "label": "Council District",
                                "options": [
                                  {
                                    "label": "Council District 1",
                                    "value": "1"
                                  },
                                  {
                                    "label": "Council District 2",
                                    "value": "2"
                                  },
                                  {
                                    "label": "Council District 3",
                                    "value": "3"
                                  },
                                  {
                                    "label": "Council District 4",
                                    "value": "4"
                                  },
                                  {
                                    "label": "Council District 5",
                                    "value": "5"
                                  },
                                  {
                                    "label": "Council District 6",
                                    "value": "6"
                                  },
                                  {
                                    "label": "Council District 7",
                                    "value": "7"
                                  },
                                  {
                                    "label": "Council District 8",
                                    "value": "8"
                                  },
                                  {
                                    "label": "Council District 9",
                                    "value": "9"
                                  },
                                  {
                                    "label": "Council District 10",
                                    "value": "10"
                                  },
                                  {
                                    "label": "Council District 11",
                                    "value": "11"
                                  },
                                  {
                                    "label": "Council District 12",
                                    "value": "12"
                                  }
                                ]
                              },
                              "position": 0,
                              "criterion": "___place"
                            },
                            {
                              "type": "select/multi/checkbox",
                              "params": {
                                "label": "Downtown Design Area",
                                "options": [
                                  {
                                    "label": "21",
                                    "value": "Downtown Design Area"
                                  }
                                ]
                              },
                              "position": 1,
                              "criterion": "___place"
                            },
                            {
                              "type": "select/multi/checkbox",
                              "params": {
                                "label": "National Register",
                                "options": [
                                  {
                                    "label": "Northside Residential",
                                    "value": "31"
                                  },
                                  {
                                    "label": "Elsmere Park",
                                    "value": "32"
                                  },
                                  {
                                    "label": "Western Suburb",
                                    "value": "33"
                                  },
                                  {
                                    "label": "Northeast Lexington Residential",
                                    "value": "34"
                                  },
                                  {
                                    "label": "Gratz Park",
                                    "value": "35"
                                  },
                                  {
                                    "label": "Woodward Heights Neighborhood",
                                    "value": "36"
                                  },
                                  {
                                    "label": "North Broadway-Short Street",
                                    "value": "37"
                                  },
                                  {
                                    "label": "Victorian Commercial Block",
                                    "value": "38"
                                  },
                                  {
                                    "label": "Constitution",
                                    "value": "39"
                                  },
                                  {
                                    "label": "North Limestone Commercial",
                                    "value": "40"
                                  },
                                  {
                                    "label": "Downtown Commercial",
                                    "value": "41"
                                  },
                                  {
                                    "label": "South Hill",
                                    "value": "42"
                                  },
                                  {
                                    "label": "Southeast Lexington Residential and Commercial",
                                    "value": "43"
                                  },
                                  {
                                    "label": "Woodlands",
                                    "value": "44"
                                  },
                                  {
                                    "label": "Mentelle Park",
                                    "value": "45"
                                  },
                                  {
                                    "label": "Ashland Park",
                                    "value": "46"
                                  },
                                  {
                                    "label": "Athens",
                                    "value": "47"
                                  },
                                  {
                                    "label": "Bell Court Neighborhood",
                                    "value": "48"
                                  },
                                  {
                                    "label": "Northside Residential (Boundary Increase)",
                                    "value": "49"
                                  },
                                  {
                                    "label": "Middle Reaches of Boone Creek Rural",
                                    "value": "50"
                                  },
                                  {
                                    "label": "Pisgah Rural",
                                    "value": "51"
                                  },
                                  {
                                    "label": "Redd Road Rural",
                                    "value": "52"
                                  },
                                  {
                                    "label": "Bowman Mill Road Rural",
                                    "value": "53"
                                  },
                                  {
                                    "label": "West Fayette County Rural",
                                    "value": "54"
                                  },
                                  {
                                    "label": "Boone Creek Rural",
                                    "value": "55"
                                  },
                                  {
                                    "label": "Hollywood Terrace",
                                    "value": "56"
                                  }
                                ]
                              },
                              "position": 2,
                              "criterion": "___place"
                            },
                            {
                              "type": "select/multi/checkbox",
                              "params": {
                                "label": "Neighborhood",
                                "options": [
                                  {
                                    "label": "The Lane",
                                    "value": "101"
                                  },
                                  {
                                    "label": "Chevy Chase",
                                    "value": "102"
                                  },
                                  {
                                    "label": "Old Colony / Residents Inc",
                                    "value": "103"
                                  },
                                  {
                                    "label": "Highlands",
                                    "value": "104"
                                  },
                                  {
                                    "label": "Coldstream Station",
                                    "value": "105"
                                  },
                                  {
                                    "label": "Oakwood",
                                    "value": "106"
                                  },
                                  {
                                    "label": "Meadowthorpe",
                                    "value": "107"
                                  },
                                  {
                                    "label": "Meadow Park",
                                    "value": "108"
                                  },
                                  {
                                    "label": "Speigle Heights",
                                    "value": "109"
                                  },
                                  {
                                    "label": "Historic South Hill",
                                    "value": "110"
                                  },
                                  {
                                    "label": "Grosvenor Ave",
                                    "value": "111"
                                  },
                                  {
                                    "label": "Gardenside",
                                    "value": "112"
                                  },
                                  {
                                    "label": "Transylvania Park",
                                    "value": "113"
                                  },
                                  {
                                    "label": "Headley Green",
                                    "value": "114"
                                  },
                                  {
                                    "label": "Garden Springs",
                                    "value": "115"
                                  },
                                  {
                                    "label": "Harrods Park Townhouse",
                                    "value": "116"
                                  },
                                  {
                                    "label": "Chenault Rd",
                                    "value": "117"
                                  },
                                  {
                                    "label": "Idle Hour Neighbors",
                                    "value": "118"
                                  },
                                  {
                                    "label": "Louisiana Ave",
                                    "value": "119"
                                  },
                                  {
                                    "label": "Rosemill",
                                    "value": "120"
                                  },
                                  {
                                    "label": "Woodlake",
                                    "value": "121"
                                  },
                                  {
                                    "label": "Penmoken Park",
                                    "value": "122"
                                  },
                                  {
                                    "label": "Indian Mound",
                                    "value": "123"
                                  },
                                  {
                                    "label": "WGPL",
                                    "value": "124"
                                  },
                                  {
                                    "label": "Claymont Dr",
                                    "value": "125"
                                  },
                                  {
                                    "label": "Shadeland Community",
                                    "value": "126"
                                  },
                                  {
                                    "label": "Harrodsview",
                                    "value": "127"
                                  },
                                  {
                                    "label": "Pera Place",
                                    "value": "128"
                                  },
                                  {
                                    "label": "Lexington Oaks",
                                    "value": "129"
                                  },
                                  {
                                    "label": "The Lofts of Locust Hills",
                                    "value": "130"
                                  },
                                  {
                                    "label": "Zandale",
                                    "value": "131"
                                  },
                                  {
                                    "label": "Lakeview Islands",
                                    "value": "132"
                                  },
                                  {
                                    "label": "Tabor Oaks",
                                    "value": "133"
                                  },
                                  {
                                    "label": "Brigadoon",
                                    "value": "134"
                                  },
                                  {
                                    "label": "Oaks Condominium",
                                    "value": "135"
                                  },
                                  {
                                    "label": "Stoney Brook",
                                    "value": "136"
                                  },
                                  {
                                    "label": "Squire Oak",
                                    "value": "137"
                                  },
                                  {
                                    "label": "Woodfield Homes",
                                    "value": "138"
                                  },
                                  {
                                    "label": "Jimtown",
                                    "value": "139"
                                  },
                                  {
                                    "label": "Firebrook",
                                    "value": "140"
                                  },
                                  {
                                    "label": "Copper Run",
                                    "value": "141"
                                  },
                                  {
                                    "label": "Clements Heights / Clemens Grove",
                                    "value": "142"
                                  },
                                  {
                                    "label": "Copperfield",
                                    "value": "143"
                                  },
                                  {
                                    "label": "Wyndam Downs",
                                    "value": "144"
                                  },
                                  {
                                    "label": "Wyndham Meadows",
                                    "value": "145"
                                  },
                                  {
                                    "label": "Wyndham Meadows Ridge",
                                    "value": "146"
                                  },
                                  {
                                    "label": "Plantation",
                                    "value": "147"
                                  },
                                  {
                                    "label": "Indian Hills / Pera Place III",
                                    "value": "148"
                                  },
                                  {
                                    "label": "Rabbit Run/ Stonewall Woods",
                                    "value": "149"
                                  },
                                  {
                                    "label": "Stonewall Equestrian Estates",
                                    "value": "150"
                                  },
                                  {
                                    "label": "Stone Creek",
                                    "value": "151"
                                  },
                                  {
                                    "label": "Seven Parks",
                                    "value": "152"
                                  },
                                  {
                                    "label": "Pasadena",
                                    "value": "153"
                                  },
                                  {
                                    "label": "Pine Meadow",
                                    "value": "154"
                                  },
                                  {
                                    "label": "Skycrest",
                                    "value": "155"
                                  },
                                  {
                                    "label": "Picadome",
                                    "value": "156"
                                  },
                                  {
                                    "label": "Hollywood - Mt Vernon",
                                    "value": "157"
                                  },
                                  {
                                    "label": "Elizabeth Street",
                                    "value": "158"
                                  },
                                  {
                                    "label": "Idle Hour Dr",
                                    "value": "159"
                                  },
                                  {
                                    "label": "Montclair",
                                    "value": "160"
                                  },
                                  {
                                    "label": "Harrods Hill",
                                    "value": "161"
                                  },
                                  {
                                    "label": "Hill N Dale",
                                    "value": "162"
                                  },
                                  {
                                    "label": "Southern Heights",
                                    "value": "163"
                                  },
                                  {
                                    "label": "Open Gates",
                                    "value": "164"
                                  },
                                  {
                                    "label": "Lansdowne Merrick",
                                    "value": "165"
                                  },
                                  {
                                    "label": "Lansdowne",
                                    "value": "166"
                                  },
                                  {
                                    "label": "Fairway at Lakeside",
                                    "value": "167"
                                  },
                                  {
                                    "label": "Huntington Woods",
                                    "value": "168"
                                  },
                                  {
                                    "label": "Willow Glen",
                                    "value": "169"
                                  },
                                  {
                                    "label": "Merry Wives of Greenbriar",
                                    "value": "170"
                                  },
                                  {
                                    "label": "Eastland Parkway",
                                    "value": "171"
                                  },
                                  {
                                    "label": "Brucetown",
                                    "value": "172"
                                  },
                                  {
                                    "label": "Fayette Park Enhancement",
                                    "value": "173"
                                  },
                                  {
                                    "label": "North Elizabeth St",
                                    "value": "174"
                                  },
                                  {
                                    "label": "Joyland",
                                    "value": "175"
                                  },
                                  {
                                    "label": "Green Acres - Hollow Creek - Breckinridge",
                                    "value": "176"
                                  },
                                  {
                                    "label": "North Upper St",
                                    "value": "177"
                                  },
                                  {
                                    "label": "Northside",
                                    "value": "178"
                                  },
                                  {
                                    "label": "Brighton East",
                                    "value": "179"
                                  },
                                  {
                                    "label": "Banbury Hunt",
                                    "value": "180"
                                  },
                                  {
                                    "label": "East Cooper Dr",
                                    "value": "181"
                                  },
                                  {
                                    "label": "Winburn",
                                    "value": "182"
                                  },
                                  {
                                    "label": "Radcliffe - Marlboro",
                                    "value": "183"
                                  },
                                  {
                                    "label": "Elkhorn Park",
                                    "value": "184"
                                  },
                                  {
                                    "label": "Saddle Club",
                                    "value": "185"
                                  },
                                  {
                                    "label": "Woodland Triangle",
                                    "value": "186"
                                  },
                                  {
                                    "label": "Shriners",
                                    "value": "187"
                                  },
                                  {
                                    "label": "Deerfield",
                                    "value": "188"
                                  },
                                  {
                                    "label": "Andover Forest",
                                    "value": "189"
                                  },
                                  {
                                    "label": "Stonewall Community",
                                    "value": "190"
                                  },
                                  {
                                    "label": "Wellington Homeowners Association",
                                    "value": "191"
                                  },
                                  {
                                    "label": "Chippen Dale Square",
                                    "value": "192"
                                  },
                                  {
                                    "label": "Patchen Woods",
                                    "value": "193"
                                  },
                                  {
                                    "label": "Todds Station",
                                    "value": "194"
                                  },
                                  {
                                    "label": "Walnut Ridge",
                                    "value": "195"
                                  },
                                  {
                                    "label": "Carriage Lane",
                                    "value": "196"
                                  },
                                  {
                                    "label": "Southeastern Hills",
                                    "value": "197"
                                  },
                                  {
                                    "label": "Park Place",
                                    "value": "198"
                                  },
                                  {
                                    "label": "Tatesbrook",
                                    "value": "199"
                                  },
                                  {
                                    "label": "Tanbark",
                                    "value": "200"
                                  },
                                  {
                                    "label": "White Pine",
                                    "value": "201"
                                  },
                                  {
                                    "label": "Charleston Woods",
                                    "value": "202"
                                  },
                                  {
                                    "label": "Cumberland Hill",
                                    "value": "203"
                                  },
                                  {
                                    "label": "Cadentown",
                                    "value": "204"
                                  },
                                  {
                                    "label": "Willow Oak",
                                    "value": "205"
                                  },
                                  {
                                    "label": "Eastlake",
                                    "value": "206"
                                  },
                                  {
                                    "label": "Old Paris Place",
                                    "value": "207"
                                  },
                                  {
                                    "label": "S Broadway Park",
                                    "value": "208"
                                  },
                                  {
                                    "label": "Horse and Carriage",
                                    "value": "209"
                                  },
                                  {
                                    "label": "Castlegate",
                                    "value": "210"
                                  },
                                  {
                                    "label": "Lake Area",
                                    "value": "211"
                                  },
                                  {
                                    "label": "Beaumont Residential",
                                    "value": "212"
                                  },
                                  {
                                    "label": "Old Richmond Rd Corridor",
                                    "value": "213"
                                  },
                                  {
                                    "label": "Bryan Station",
                                    "value": "214"
                                  },
                                  {
                                    "label": "Griffin Gate",
                                    "value": "215"
                                  },
                                  {
                                    "label": "Kenwick",
                                    "value": "216"
                                  },
                                  {
                                    "label": "Fairway",
                                    "value": "217"
                                  },
                                  {
                                    "label": "North Pointe Neighbors",
                                    "value": "218"
                                  },
                                  {
                                    "label": "Danby Corners",
                                    "value": "219"
                                  },
                                  {
                                    "label": "Hartland Homeowners",
                                    "value": "220"
                                  },
                                  {
                                    "label": "Hartland Estates",
                                    "value": "221"
                                  },
                                  {
                                    "label": "Mentelle",
                                    "value": "222"
                                  },
                                  {
                                    "label": "Belleau Woods",
                                    "value": "223"
                                  },
                                  {
                                    "label": "South Point",
                                    "value": "224"
                                  },
                                  {
                                    "label": "The Woods Street Maintenance Association",
                                    "value": "225"
                                  },
                                  {
                                    "label": "The Vineyard",
                                    "value": "226"
                                  },
                                  {
                                    "label": "Wellesley Heights",
                                    "value": "227"
                                  },
                                  {
                                    "label": "Keene/Military Rd",
                                    "value": "228"
                                  },
                                  {
                                    "label": "Golf View Estates",
                                    "value": "229"
                                  },
                                  {
                                    "label": "Oldham Ave",
                                    "value": "230"
                                  },
                                  {
                                    "label": "Aylesford Place",
                                    "value": "231"
                                  },
                                  {
                                    "label": "Columbia Heights",
                                    "value": "232"
                                  },
                                  {
                                    "label": "Bracktown Rd",
                                    "value": "233"
                                  },
                                  {
                                    "label": "Gainesway",
                                    "value": "234"
                                  },
                                  {
                                    "label": "Gleneagles",
                                    "value": "235"
                                  },
                                  {
                                    "label": "Viley Rd / Versailles Rd",
                                    "value": "236"
                                  },
                                  {
                                    "label": "Calumet",
                                    "value": "237"
                                  },
                                  {
                                    "label": "Holiday Hills",
                                    "value": "238"
                                  },
                                  {
                                    "label": "Castlewood",
                                    "value": "239"
                                  },
                                  {
                                    "label": "Meadows - Loudon",
                                    "value": "240"
                                  },
                                  {
                                    "label": "M L King",
                                    "value": "241"
                                  },
                                  {
                                    "label": "William Wells Brown",
                                    "value": "242"
                                  },
                                  {
                                    "label": "Ellerslie at Delong",
                                    "value": "243"
                                  },
                                  {
                                    "label": "Belmont Farms",
                                    "value": "244"
                                  },
                                  {
                                    "label": "McConnells Trace",
                                    "value": "245"
                                  },
                                  {
                                    "label": "Masterson Station",
                                    "value": "246"
                                  },
                                  {
                                    "label": "Hume Rd",
                                    "value": "247"
                                  },
                                  {
                                    "label": "Meadow Creek",
                                    "value": "248"
                                  },
                                  {
                                    "label": "Parkers Landing",
                                    "value": "249"
                                  },
                                  {
                                    "label": "West Gardenside",
                                    "value": "250"
                                  },
                                  {
                                    "label": "Beaumont Park",
                                    "value": "251"
                                  },
                                  {
                                    "label": "The Colony IV",
                                    "value": "252"
                                  },
                                  {
                                    "label": "Andover Hills",
                                    "value": "253"
                                  },
                                  {
                                    "label": "Walnut Hill Club",
                                    "value": "254"
                                  },
                                  {
                                    "label": "Autumn Ridge",
                                    "value": "255"
                                  },
                                  {
                                    "label": "Waterford",
                                    "value": "256"
                                  },
                                  {
                                    "label": "Ashland Park",
                                    "value": "257"
                                  },
                                  {
                                    "label": "Spindletop",
                                    "value": "258"
                                  },
                                  {
                                    "label": "Ashland Townhomes of Laredo",
                                    "value": "259"
                                  },
                                  {
                                    "label": "Athens",
                                    "value": "260"
                                  },
                                  {
                                    "label": "Chilesburg Road",
                                    "value": "261"
                                  },
                                  {
                                    "label": "Chilesburg Maintenance",
                                    "value": "262"
                                  },
                                  {
                                    "label": "Centre Parkway",
                                    "value": "263"
                                  },
                                  {
                                    "label": "Creekside at Andover Unit II",
                                    "value": "264"
                                  },
                                  {
                                    "label": "Forest View Townhomes",
                                    "value": "265"
                                  },
                                  {
                                    "label": "Golf Town Homes at Andover",
                                    "value": "266"
                                  },
                                  {
                                    "label": "Golf Townhomes at Andover Estates",
                                    "value": "267"
                                  },
                                  {
                                    "label": "Glens of Greendale",
                                    "value": "268"
                                  },
                                  {
                                    "label": "Hamburg",
                                    "value": "269"
                                  },
                                  {
                                    "label": "Haskins Dr",
                                    "value": "270"
                                  },
                                  {
                                    "label": "Kennedy Landing",
                                    "value": "271"
                                  },
                                  {
                                    "label": "Lexington Court Townhomes",
                                    "value": "272"
                                  },
                                  {
                                    "label": "Palomar Townhomes",
                                    "value": "273"
                                  },
                                  {
                                    "label": "Cave Hill",
                                    "value": "274"
                                  },
                                  {
                                    "label": "Quail Run Townhomes",
                                    "value": "275"
                                  },
                                  {
                                    "label": "Richmond Square Office",
                                    "value": "276"
                                  },
                                  {
                                    "label": "Versailles Rd/Bennett Ave/Porter Pl",
                                    "value": "277"
                                  },
                                  {
                                    "label": "Villas at Andover",
                                    "value": "278"
                                  },
                                  {
                                    "label": "Winchester/Royster Rd",
                                    "value": "279"
                                  },
                                  {
                                    "label": "East Point Office Condo",
                                    "value": "280"
                                  },
                                  {
                                    "label": "Hanover Hill",
                                    "value": "281"
                                  },
                                  {
                                    "label": "Townley Park",
                                    "value": "282"
                                  },
                                  {
                                    "label": "Southend Park",
                                    "value": "283"
                                  },
                                  {
                                    "label": "Bell Court",
                                    "value": "284"
                                  },
                                  {
                                    "label": "Historic Western Suburb",
                                    "value": "285"
                                  },
                                  {
                                    "label": "Monticello",
                                    "value": "286"
                                  },
                                  {
                                    "label": "St Martins Village",
                                    "value": "287"
                                  },
                                  {
                                    "label": "Galberith",
                                    "value": "288"
                                  },
                                  {
                                    "label": "Liberty Area",
                                    "value": "289"
                                  },
                                  {
                                    "label": "Westmorland",
                                    "value": "290"
                                  },
                                  {
                                    "label": "Historic Woodward Heights",
                                    "value": "291"
                                  },
                                  {
                                    "label": "Greenbrier Residents",
                                    "value": "292"
                                  },
                                  {
                                    "label": "Gratz Park",
                                    "value": "293"
                                  },
                                  {
                                    "label": "Ashland",
                                    "value": "294"
                                  },
                                  {
                                    "label": "Melrose - Oak Park",
                                    "value": "295"
                                  },
                                  {
                                    "label": "Pickway Korner",
                                    "value": "296"
                                  },
                                  {
                                    "label": "Marehaven Homeowners Assoc",
                                    "value": "297"
                                  },
                                  {
                                    "label": "Harmony Hall",
                                    "value": "298"
                                  },
                                  {
                                    "label": "Lakewood",
                                    "value": "299"
                                  },
                                  {
                                    "label": "Eastwood Maintenance",
                                    "value": "300"
                                  },
                                  {
                                    "label": "North Limestone",
                                    "value": "301"
                                  },
                                  {
                                    "label": "Leeway Neighborhood Association",
                                    "value": "302"
                                  },
                                  {
                                    "label": "Twin Oaks Neighborhood Association",
                                    "value": "303"
                                  },
                                  {
                                    "label": "Lansdowne Shadeland-East",
                                    "value": "304"
                                  },
                                  {
                                    "label": "Grafton Drive Neighborhood Association",
                                    "value": "305"
                                  },
                                  {
                                    "label": "Suburban Ct Neighborhood Assn",
                                    "value": "306"
                                  },
                                  {
                                    "label": "Cherokee Park",
                                    "value": "307"
                                  },
                                  {
                                    "label": "Village at Tates Creek",
                                    "value": "308"
                                  },
                                  {
                                    "label": "Georgetown",
                                    "value": "309"
                                  },
                                  {
                                    "label": "The Arbors Homeowners Association",
                                    "value": "310"
                                  },
                                  {
                                    "label": "Cardinal Valley",
                                    "value": "311"
                                  },
                                  {
                                    "label": "Hamilton Park",
                                    "value": "312"
                                  },
                                  {
                                    "label": "Columbustown Neighborhood Association",
                                    "value": "313"
                                  },
                                  {
                                    "label": "Boone Creek",
                                    "value": "314"
                                  },
                                  {
                                    "label": "Traditions at Parks Edge Townhome Assoc",
                                    "value": "315"
                                  },
                                  {
                                    "label": "Dove Creek Townhome Owners Association",
                                    "value": "316"
                                  },
                                  {
                                    "label": "Tuscany Neighborhood",
                                    "value": "317"
                                  },
                                  {
                                    "label": "Glendover",
                                    "value": "318"
                                  },
                                  {
                                    "label": "River Park",
                                    "value": "319"
                                  },
                                  {
                                    "label": "Forest Ridge Maintenance Association",
                                    "value": "320"
                                  },
                                  {
                                    "label": "Clays Ferry",
                                    "value": "321"
                                  },
                                  {
                                    "label": "Groves Point",
                                    "value": "322"
                                  },
                                  {
                                    "label": "Pinnacle",
                                    "value": "323"
                                  },
                                  {
                                    "label": "The Home Place",
                                    "value": "324"
                                  },
                                  {
                                    "label": "Hamburg Park Townhomes",
                                    "value": "325"
                                  },
                                  {
                                    "label": "Spicewood",
                                    "value": "326"
                                  },
                                  {
                                    "label": "Heritage Place",
                                    "value": "327"
                                  },
                                  {
                                    "label": "Liberty Wood",
                                    "value": "328"
                                  },
                                  {
                                    "label": "Mitchell Avenue",
                                    "value": "329"
                                  },
                                  {
                                    "label": "Robinwood",
                                    "value": "330"
                                  },
                                  {
                                    "label": "The Old Colony Neighborhood Association, Inc",
                                    "value": "331"
                                  },
                                  {
                                    "label": "Hunters Point Drive Preservation Association",
                                    "value": "332"
                                  },
                                  {
                                    "label": "Still Meadow Homeowners Association",
                                    "value": "333"
                                  },
                                  {
                                    "label": "Lake Crossing",
                                    "value": "334"
                                  },
                                  {
                                    "label": "Dogwood Trace",
                                    "value": "335"
                                  },
                                  {
                                    "label": "Home Place - The Savanna Inc",
                                    "value": "336"
                                  },
                                  {
                                    "label": "Sleepy Hollow Station Homeowners Association",
                                    "value": "337"
                                  },
                                  {
                                    "label": "Distillery District Business Owners Association",
                                    "value": "338"
                                  },
                                  {
                                    "label": "Townhouses of Meadowthorpe, Association",
                                    "value": "339"
                                  },
                                  {
                                    "label": "Stuart Hall",
                                    "value": "340"
                                  },
                                  {
                                    "label": "Ashland Park Townhouses",
                                    "value": "341"
                                  },
                                  {
                                    "label": "Boston Woods Townhomes",
                                    "value": "342"
                                  },
                                  {
                                    "label": "Kearney Ridge Homeowners Assn",
                                    "value": "343"
                                  },
                                  {
                                    "label": "Malabu Hills Condominium Association",
                                    "value": "344"
                                  },
                                  {
                                    "label": "Liberty Crossing Townhomes Assn Inc",
                                    "value": "345"
                                  },
                                  {
                                    "label": "Reserve at Tates Creek HOA",
                                    "value": "346"
                                  },
                                  {
                                    "label": "The Enclave at Andover Estates",
                                    "value": "347"
                                  },
                                  {
                                    "label": "Stuart Hall Townhouses Association, Inc.",
                                    "value": "348"
                                  },
                                  {
                                    "label": "Palomar Hills Community Association Inc",
                                    "value": "349"
                                  },
                                  {
                                    "label": "Lakeview Estates Neighborhood Association",
                                    "value": "350"
                                  },
                                  {
                                    "label": "Mt. Horeb Neighborhood Association",
                                    "value": "351"
                                  },
                                  {
                                    "label": "Homeowners of Pinecrest Townhomes",
                                    "value": "352"
                                  }
                                ]
                              },
                              "position": 3,
                              "criterion": "___place"
                            }
                          ]
                        },
                        "position": 1
                      }
                    ],
                    "collapsed": true
                  },
                  "position": 0
                },
                {
                  "type": "text",
                  "params": {
                    "icon": false,
                    "label": "Permit",
                    "style": "underline",
                    "placeholder": "Number or Description"
                  },
                  "position": 1,
                  "criterion": "___keywords"
                },
                {
                  "type": "date/range",
                  "params": {
                    "end": {
                      "criterion": "record_date___end"
                    },
                    "min": "2016-07-01",
                    "label": "Date",
                    "start": {
                      "criterion": "record_date___start"
                    }
                  },
                  "position": 2,
                  "criterion": "record_date"
                },
                {
                  "type": "select/single/radio",
                  "params": {
                    "label": "Status",
                    "options": [
                      {
                        "color": "#435fc9",
                        "label": "Live / Active",
                        "value": 1
                      },
                      {
                        "color": "#306e33",
                        "label": "Archive",
                        "value": 2
                      }
                    ],
                    "allOption": true
                  },
                  "position": 3,
                  "behaviour": "status",
                  "criterion": "status_category_id_internal"
                },
                {
                  "type": "select/multi/checkbox/expandable",
                  "params": {
                    "label": "Permit Type",
                    "options": [
                      {
                        "label": "Cell Tower",
                        "value": "Cell Tower"
                      },
                      {
                        "label": "Certificate of Occupancy",
                        "value": "Certificate of Occupancy"
                      },
                      {
                        "label": "Certificate of Occupancy - Home Based Business",
                        "value": "Certificate of Occupancy - Home Based Business"
                      },
                      {
                        "label": "Commercial - Accessory",
                        "value": "Commercial - Accessory"
                      },
                      {
                        "label": "Commercial - Addition",
                        "value": "Commercial - Addition"
                      },
                      {
                        "label": "Commercial - General",
                        "value": "Commercial - General"
                      },
                      {
                        "label": "Commercial - HVAC",
                        "value": "Commercial - HVAC"
                      },
                      {
                        "label": "Commercial - New Construction",
                        "value": "Commercial - New Construction"
                      },
                      {
                        "label": "Commercial - Remodel",
                        "value": "Commercial - Remodel"
                      },
                      {
                        "label": "Complaint",
                        "value": "Complaint"
                      },
                      {
                        "label": "Contractor Registration - Application",
                        "value": "Contractor Registration - Application"
                      },
                      {
                        "label": "Contractor Registration - Registration",
                        "value": "Contractor Registration - Registration"
                      },
                      {
                        "label": "Contractor Registration - Renewal",
                        "value": "Contractor Registration - Renewal"
                      },
                      {
                        "label": "Demolition",
                        "value": "Demolition"
                      },
                      {
                        "label": "Electrical",
                        "value": "Electrical"
                      },
                      {
                        "label": "Electrical - Low Voltage",
                        "value": "Electrical - Low Voltage"
                      },
                      {
                        "label": "Extension",
                        "value": "Extension"
                      },
                      {
                        "label": "Fence / Retaining Wall",
                        "value": "Fence / Retaining Wall"
                      },
                      {
                        "label": "Fire Loss",
                        "value": "Fire Loss"
                      },
                      {
                        "label": "Home Office Certificate",
                        "value": "Home Office Certificate"
                      },
                      {
                        "label": "HVAC Replacement",
                        "value": "Change Outs"
                      },
                      {
                        "label": "HVAC Replacement - Commercial",
                        "value": "Change Outs - Commercial"
                      },
                      {
                        "label": "HVAC Replacement - Multi-Family",
                        "value": "Change Outs - Multi-Family"
                      },
                      {
                        "label": "HVAC Replacement - Residential",
                        "value": "Change Outs - Residential"
                      },
                      {
                        "label": "Paving",
                        "value": "Paving"
                      },
                      {
                        "label": "Residential - Accessory",
                        "value": "Residential - Accessory"
                      },
                      {
                        "label": "Residential - Additions",
                        "value": "Residential - Additions"
                      },
                      {
                        "label": "Residential - General",
                        "value": "Residential - General"
                      },
                      {
                        "label": "Residential - HVAC",
                        "value": "Residential - HVAC"
                      },
                      {
                        "label": "Residential - New Construction",
                        "value": "Residential - New Construction"
                      },
                      {
                        "label": "Residential - Remodel",
                        "value": "Residential - Remodel"
                      },
                      {
                        "label": "Sidewalk Café",
                        "value": "Sidewalk Café"
                      },
                      {
                        "label": "Signs",
                        "value": "Signs"
                      },
                      {
                        "label": "Swimming Pool",
                        "value": "Swimming Pool"
                      },
                      {
                        "label": "Temporary Structure",
                        "value": "Temporary Structure"
                      }
                    ],
                    "collapsed": true
                  },
                  "position": 4,
                  "criterion": "record_type"
                },
                {
                  "type": "select/multi/checkbox/expandable",
                  "params": {
                    "label": "Workflow Task",
                    "options": [
                      {
                        "label": "Fire Review",
                        "value": "Fire Review"
                      },
                      {
                        "label": "Info Received",
                        "value": "Info Received"
                      },
                      {
                        "label": "Need Info",
                        "value": "Need Info"
                      },
                      {
                        "label": "Engineering Review",
                        "value": "Engineering Review"
                      },
                      {
                        "label": "Fee Assessment",
                        "value": "Fee Assessment"
                      },
                      {
                        "label": "Construction Phase",
                        "value": "Construction Phase"
                      },
                      {
                        "label": "Inspection",
                        "value": "Inspection"
                      },
                      {
                        "label": "Solid Waste Review",
                        "value": "Solid Waste Review"
                      },
                      {
                        "label": "Storm Water Review",
                        "value": "Storm Water Review"
                      },
                      {
                        "label": "Zoning Assessment",
                        "value": "Zoning Assessment"
                      }
                    ],
                    "collapsed": true
                  },
                  "position": 5,
                  "criterion": "record___workflow_task___name"
                },
                {
                  "type": "date/range",
                  "params": {
                    "end": {
                      "default": 0,
                      "criterion": "record___workflow_task___status_date___end"
                    },
                    "max": 0,
                    "min": "2016-07-01",
                    "label": "Workflow Date",
                    "start": {
                      "default": "2016-07-01",
                      "criterion": "record___workflow_task___status_date___start"
                    }
                  },
                  "position": 6,
                  "criterion": "record___workflow_task___status_date"
                },
                {
                  "type": "select/multi/checkbox/expandable",
                  "label": "Workflow People",
                  "options": [
                    {
                      "label": "Danielle Condit",
                      "value": "DCONDIT"
                    },
                    {
                      "label": "Arnold Mammarella",
                      "value": "AMAMMAR"
                    },
                    {
                      "label": "Alicia Spotwood",
                      "value": "ASPOTWOOD"
                    },
                    {
                      "label": "Chris Riordan",
                      "value": "CRIORDAN"
                    },
                    {
                      "label": "Dionne Early",
                      "value": "DEARLY"
                    },
                    {
                      "label": "Elizabeth Egli",
                      "value": "EEGLI"
                    },
                    {
                      "label": "Evan Kort",
                      "value": "EKORT"
                    },
                    {
                      "label": "Gloria Humble",
                      "value": "GHUMBLE"
                    },
                    {
                      "label": "Jennifer Cutler",
                      "value": "JCUTLER"
                    },
                    {
                      "label": "Jeremy Dennis",
                      "value": "JDENNIS"
                    },
                    {
                      "label": "Jeffery Heckathorn",
                      "value": "JHECKAT"
                    },
                    {
                      "label": "Julia McElhinney",
                      "value": "JMCELHI"
                    },
                    {
                      "label": "Mary Figone",
                      "value": "MFIGONE"
                    },
                    {
                      "label": "M Group",
                      "value": "MGROUP"
                    },
                    {
                      "label": "Madina Klicheva",
                      "value": "MKLICHE"
                    },
                    {
                      "label": "Margaret Monroe",
                      "value": "MMONROE"
                    },
                    {
                      "label": "Matthew Weintraub",
                      "value": "MWEINTR"
                    },
                    {
                      "label": "Nandini Ramamurthi",
                      "value": "NRAMAMU"
                    },
                    {
                      "label": "Phyllis Davis",
                      "value": "PDAVIS"
                    },
                    {
                      "label": "Rebecca Adkinsen",
                      "value": "RADKINS"
                    },
                    {
                      "label": "Ronlando Babiera",
                      "value": "RBABIER"
                    },
                    {
                      "label": "Sherry Nikzat",
                      "value": "SNIKZAT"
                    },
                    {
                      "label": "Victoria Dao",
                      "value": "VDAO"
                    }
                  ],
                  "position": 7,
                  "criterion": "record___workflow_task___agent"
                }
              ]
            },
            "position": 0
          }
        ],
        "heading": "Building Permits Finder",
        "messagebox": 1,
        "recordDescriptor": "Building Permit"
      },
      "login": {
        "thirdParty": [
          {
            "authClientId": "facebook",
            "key": "000000000000000",
            "label": "Facebook"
          },
          {
            "authClientId": "google",
            "key": "000000000000-00000000000000000000000000000000.apps.googleusercontent.com",
            "label": "Google"
          },
          {
            "authClientId": "linkedin",
            "key": "00000000000000",
            "label": "LinkedIn"
          },
          {
            "authClientId": "live",
            "key": "00000000-0000-0000-0000-0000000000000000",
            "label": "Microsoft Live"
          },
          {
            "authClientId": "twitter",
            "key": "0000000000000000",
            "label": "Twitter"
          }
        ]
      },
      "map": {
        "apiKey": "00000000000000000000000000000000",
        "drawingTools": true,
        "geo": {
          "agencyBounds": {
            "e": -84.279134996,
            "n": 38.2043106045,
            "s": 37.8397308603,
            "w": -84.6622831894
          },
          "minZoom": 9,
          "panningBounds": {
            "e": -84.087561,
            "n": 38.3866,
            "s": 37.657441,
            "w": -84.853857
          }
        },
        "markerSlider": true,
        "provider": "com_mapquest"
      },
      "protected": false
    },
    "nArea": {
      "customLink": {
        "href": "/www.lexingtonky.gov/lexcall-311",
        "text": "311"
      }
    },
    "settings": {
      "units": "yards"
    }
  }
}

200 Get Module Config Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data (see config docs for details)

data.analytics Object

Analytics tracking configuration. If this value is set the custom tracking javascript is enabled on the website, and custom events are triggered with the relevant analytics tracking service. The name of the service as the placeholder text and the configuration code as the ‘code’. System currently configured for Clicky and Google.

data.analytics.SERVICEPROVIDER Object

Analytics tracking service name. Service providers supported are ‘clicky’ and ‘google’.

data.analytics.SERVICEPROVIDER.code String

Tenant specific configuration code for analytics tracking.

data.branding Object

Tenant specific application branding configuration.

data.branding.favicon String

URL of tenant favicon.

data.branding.logo String

URL of tenant logo.

data.branding.theme Object

Tenant module specific colour theming of application.

data.branding.theme.backgroundImage String

URL of a background image.

data.branding.theme.primary String

Primary background HEX colour of application.

data.branding.theme.secondary String

Secondary HEX colour of application.

data.branding.theme.textColor String

Black or white text colour of top bar.

data.branding.title Object
data.branding.title.long String

Long name of module. eg Code Enforcement.

data.branding.title.short String

Short name of module. eg. Enforcement

data.control Object
data.control.login Object

Configuration of application login options.

data.control.login.thirdParty Object[]

Array of third party login providers. Array order is display order on interface.

data.control.login.thirdParty[] String

.authClientId Internal ID of third party login providers. Options are facebook, google, linkedin, live, twitter.

data.control.map Object

Configure the application’s base map settings.

data.control.map.apiKey String

(MapQuest/Mapbox) Tenant specific API key for base map. Unique key used for each paid agency, demo sites and integration sites use the same key.

data.control.map.appId String

(HERE) Tenant specific app id for base map. Unique key used for each paid agency, demo sites and integration sites use the same key.

data.control.map.appCode String

(HERE) Tenant specific app code for base map. Unique key used for each paid agency, demo sites and integration sites use the same key.

data.control.map.geo Object
data.control.map.geo.agencyBounds Object

Bounding coordinates for an agency’s limits. These should be used to center the map and set zoom on load.

data.control.map.geo.agencyBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.agencyBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.agencyBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.agencyBounds.w Number

Value for west bounding coordinate.

data.control.map.geo.minZoom Number

Value for min zoom out - ie how far can you zoom out.

data.control.map.geo.panningBounds Object

Bounding coordinates for an agency’s map. The agency extents are run through a script to generate the values used below. These bounding coordinates limit the extents a map can be panned by a user.

data.control.map.geo.panningBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.panningBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.panningBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.panningBounds.w Number

Value for west bounding coordinate.

data.control.map.host String

URL that base map image calls are made to. Eg. www.mapquestapi.com

data.control.map.provider String

Base map service provider. Eg. com_mapquest.

data.control.nArea Object

Top agency branded area of application.

data.control.nArea.customLink Object

Custom link on top right of application.

data.control.nArea.customLink.href String

URL of custom link.

data.control.nArea.customLink.text String

Title of custom link.

data.control.protected Boolean

Is site access protected.

data.control.filter Object

Configuration for filter features.

data.control.filter.count Object
data.control.filter.count.status Boolean

If true, display open / archived breakdown beside search ‘results found’ number.

data.control.filter.components Object[]

the description of the filter panel components

data.control.filter.heading String

Text header above filter panel. Eg. ‘Planning Applications Finder’

data.control.filter.messageBox Integer

ID of message box.

data.control.map.drawingTools Boolean

Display drawing tools on map. This is based on user role permissions.

data.control.map.markerSlider Boolean

Display marker slider tool on map. This is based on user role permissions.

data.settings Object

Additional settings not expressed elsewhere in the config.

data.settings.units String

Change the default measurement units (ie. yards) used on the email alert range.

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no module with that module code was found

Get Tenant Config

200 Get Tenant Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/config" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the application configuration for the given tenant.

HTTP Request

GET /api/config

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Tenant Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "nArea": {
      "customLink": {
        "href": "/www.lexingtonky.gov/lexcall-311",
        "text": "311"
      }
    },
    "control": {
      "map": {
        "geo": {
          "minZoom": 9,
          "agencyBounds": {
            "e": -84.279134996,
            "n": 38.2043106045,
            "s": 37.8397308603,
            "w": -84.6622831894
          },
          "panningBounds": {
            "e": -84.087561,
            "n": 38.3866,
            "s": 37.657441,
            "w": -84.853857
          }
        },
        "apiKey": "01234567mapquestAPIKey76543210",
        "provider": "com_mapquest"
      },
      "login": {
        "thirdParty": [
          {
            "key": "000000000000000",
            "label": "Facebook",
            "authClientId": "facebook"
          },
          {
            "key": "000000000000-00000000000000000000000000000000.apps.googleusercontent.com",
            "label": "Google",
            "authClientId": "google"
          },
          {
            "key": "00000000000000",
            "label": "LinkedIn",
            "authClientId": "linkedin"
          },
          {
            "key": "00000000-0000-0000-0000-000000000000",
            "label": "Microsoft Live",
            "authClientId": "live"
          },
          {
            "key": "0000000000000000",
            "label": "Twitter",
            "authClientId": "twitter"
          }
        ]
      },
      "protected": false
    },
    "branding": {
      "logo": "/lorempixel.com/128/26/abstract/",
      "theme": {
        "primary": "#FFAA56",
        "secondary": "#FFAA56",
        "textColor": "#323A44",
        "backgroundImage": "/lorempixel.com/1920/290/city/5/"
      },
      "title": {
        "long": "City of Lexington",
        "short": "Lexington"
      },
      "favicon": null
    },
    "settings": {
      "units": "yards"
    },
    "analytics": {
      "clicky": {
        "code": "000000000"
      },
      "google": {
        "code": "UA-00000000-00"
      }
    }
  }
}

200 Get Tenant Config Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.analytics Object

Analytics tracking configuration. If this value is set the custom tracking javascript is enabled on the website, and custom events are triggered with the relevant analytics tracking service. The name of the service as the placeholder text and the configuration code as the ‘code’. System currently configured for Clicky and Google.

data.analytics.SERVICEPROVIDER Object

Analytics tracking service name. Service providers supported are ‘clicky’ and ‘google’.

data.analytics.SERVICEPROVIDER.code String

Tenant specific configuration code for analytics tracking.

data.branding Object

Tenant specific application branding configuration.

data.branding.favicon String

URL of tenant favicon.

data.branding.logo String

URL of tenant logo.

data.branding.theme Object

Tenant module specific colour theming of application.

data.branding.theme.backgroundImage String

URL of a background image.

data.branding.theme.primary String

Primary background HEX colour of application.

data.branding.theme.secondary String

Secondary HEX colour of application.

data.branding.theme.textColor String

Black or white text colour of top bar.

data.branding.title Object
data.branding.title.long String

Long name of agency. Eg City of Corvallis.

data.branding.title.short String

Short name of agency. eg. Corvallis

data.control Object
data.control.login Object

Configuration of application login options.

data.control.login.thirdParty Array

Array of third party login providers. Array order is display order on interface.

data.control.login.thirdParty[] String

.authClientId Internal ID of third party login providers. Options are facebook, google, linkedin, live, twitter.

data.control.map Object

Configure the application’s base map settings.

data.control.map.apiKey String

Tenant specific API key for base map. Unique key used for each paid agency, demo sites and integration sites use the same key.

data.control.map.host String

URL that base map image calls are made to. Eg. www.mapquestapi.com

data.control.map.provider String

Base map service provider. Eg. com_mapquest.

data.control.map.geo Object
data.control.map.geo.agencyBounds Object

Bounding coordinates for an agency’s limits. These should be used to center the map and set zoom on load.

data.control.map.geo.agencyBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.agencyBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.agencyBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.agencyBounds.w Number

Value for west bounding coordinate.

data.control.map.geo.minZoom Number

Value for min zoom out - ie how far can you zoom out.

data.control.map.geo.panningBounds Object

Bounding coordinates for an agency’s map. The agency extents are run through a script to generate the values used below. These bounding coordinates limit the extents a map can be panned by a user.

data.control.map.geo.panningBounds.e Number

Value for east bounding coordinate.

data.control.map.geo.panningBounds.n Number

Value for north bounding coordinate.

data.control.map.geo.panningBounds.s Number

Value for south bounding coordinate.

data.control.map.geo.panningBounds.w Number

Value for west bounding coordinate.

data.control.nArea Object

Top agency branded area of application.

data.control.nArea.customLink Object

Custom link on top right of application.

data.control.nArea.customLink.href String

URL of custom link.

data.control.nArea.customLink.text String

Title of custom link.

data.control.protected Boolean

Is site access protected.

data.settings Object

Additional settings not expressed elsewhere in the config.

data.settings.units String

Change the default measurement units (ie. yards) used on the email alert range.

Get Tenant Departments Config

200 Get Tenant Departments Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/config/departments" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the departments configuration for the given tenant.

HTTP Request

GET /api/config/departments

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Tenant Departments Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "id": "building-dept",
      "title": {
        "long": "Building Department",
        "short": "Building Department"
      },
      "modules": [
        {
          "id": "building",
          "title": {
            "long": "Building",
            "short": "Building"
          }
        }
      ]
    },
    {
      "id": "planning-dept",
      "title": {
        "long": "Planning Department",
        "short": "Planning Department"
      },
      "modules": [
        {
          "id": "planning",
          "title": {
            "long": "Planning",
            "short": "Planning"
          }
        }
      ]
    }
  ]
}

200 Get Tenant Departments Config Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.id String

department code

data.title Object

department titles object

data.title.long String

long and generally official name of the department

data.title.short String

short informal name of the department

data.modules Object[]

the departments modules

data.modules.id String

module code

data.modules.title Object

module titles object

data.modules.title.long String

long and generally official name of the module

data.modules.title.short String

short informal name of the module

200 Get Tenant Footer Config Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/config/footer" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the application footer configuration for the given tenant.

HTTP Request

GET /api/config/footer

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Tenant Footer Config Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
     "count": 4,
     "columns": [
     ]
  }
}
Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data (see footer config docs for details)

data.count Integer

column count

data.columns Object[][]

column elements

Docs

This collection of endpoints is used to access webpage content.

Get Document

200 Get Document Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/doc/lorem" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get a document using the slug with respect to the tenant.

HTTP Request

GET /api/docs/:slug

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
slug String

The content slug.

Success Response

200 Get Document Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "slug": "terms",
    "content": "<h1> ..."
  }
}

200 Get Document Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.slug Object

the content slug

data.content Object

the HTML content

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no content match the given slug was found

Landing

This collection can be used to get landing page content.

Get Agency Landing

200 Get Agency Landing Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/landing" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the landing page description for the agency.

HTTP Request

GET /api/landing

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Success Response

200 Get Agency Landing Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "heading": "Welcome To CivicCentral",
    "subHeading": "The best place to find city data",
    "rows": [
      [
        {
          "count": 2,
          "columns": [
            {
              "type": "picture-text",
              "picture": "/url.to/a/pict.ure",
              "heading": "Neque Porro",
              "text": "quisquam est qui dolorem ipsum quia dolor sit amet"
            },
            {
              "type": "picture-text",
              "picture": "/url.to/a/pictu.re2",
              "heading": "Lorem ipsum dolor sit amet",
              "text": "consectetur adipiscing elit"
            }
          ]
        }
      ],
      [
        {
          "count": 3,
          "columns": [
            {
              "type": "button",
              "heading": "Building",
              "button": {
                "text": "Search Building",
                "href": "/building-dept/building"
              },
              "text": "8,725 Building Permits currently live"
            },
            {
              "type": "button",
              "heading": "Enforcement",
              "button": {
                "text": "Search Enforcement",
                "href": "/planning-dept/enforcement"
              },
              "text": "1,904 Enforcement Cases currently live"
            },
            {
              "type": "button",
              "heading": "Planning",
              "button": {
                "text": "Search Planning",
                "href": "/building-dept/building"
              },
              "text": "837 Planning Applications currently live"
            }
          ]
        }
      ]
    ]
  }
}

200 Get Agency Landing Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.heading Object

landing page heading

data.subHeading Object

landing page sub-heading

data.rows Object[][]

landing page blocks rows

data.rows.count String

number of columns in the row

data.rows.columns Object[]

the columns of a row

data.rows.columns.type String

the block type

data.rows.columns.heading String

the block heading

data.rows.columns.text String

the block text

data.rows.columns.picture String optional

the block picture URL

data.rows.columns.button Object optional

button description

data.rows.columns.button.text String optional

button text

data.rows.columns.button.href String optional

button link

Get Department Landing

200 Get Department Landing Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/landing/department/planning-dept" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the landing page description for the given agency department.

HTTP Request

GET /api/landing/department/:code

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
code String

The department code.

Success Response

200 Get Department Landing Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "heading": "Welcome To CivicCentral",
    "subHeading": "The best place to find city data",
    "rows": [
      [
        {
          "count": 2,
          "columns": [
            {
              "type": "picture-text",
              "picture": "/url.to/a/pict.ure",
              "heading": "Neque Porro",
              "text": "quisquam est qui dolorem ipsum quia dolor sit amet"
            },
            {
              "type": "picture-text",
              "picture": "/url.to/a/pictu.re2",
              "heading": "Lorem ipsum dolor sit amet",
              "text": "consectetur adipiscing elit"
            }
          ]
        }
      ],
      [
        {
          "count": 3,
          "columns": [
            {
              "type": "button",
              "heading": "Building",
              "button": {
                "text": "Search Building",
                "href": "/building-dept/building"
              },
              "text": "8,725 Building Permits currently live"
            },
            {
              "type": "button",
              "heading": "Enforcement",
              "button": {
                "text": "Search Enforcement",
                "href": "/planning-dept/enforcement"
              },
              "text": "1,904 Enforcement Cases currently live"
            },
            {
              "type": "button",
              "heading": "Planning",
              "button": {
                "text": "Search Planning",
                "href": "/building-dept/building"
              },
              "text": "837 Planning Applications currently live"
            }
          ]
        }
      ]
    ]
  }
}

200 Get Department Landing Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.heading Object

landing page heading

data.subHeading Object

landing page sub-heading

data.rows Object[][]

landing page blocks rows

data.rows.count String

number of columns in the row

data.rows.columns Object[]

the columns of a row

data.rows.columns.type String

the block type

data.rows.columns.heading String

the block heading

data.rows.columns.text String

the block text

data.rows.columns.picture String optional

the block picture URL

data.rows.columns.button Object optional

button description

data.rows.columns.button.text String optional

button text

data.rows.columns.button.href String optional

button link

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no department with that department code was found

Get Module Landing

200 Get Department Landing Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/landing/module/building" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get the landing page description for the given department module.

HTTP Request

GET /api/landing/module/:code

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
code String

The module code.

Success Response

200 Get Department Landing Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "heading": "Welcome To CivicCentral",
    "subHeading": "The best place to find city data",
    "rows": [
      [
        {
          "count": 2,
          "columns": [
            {
              "type": "picture-text",
              "picture": "/url.to/a/pict.ure",
              "heading": "Neque Porro",
              "text": "quisquam est qui dolorem ipsum quia dolor sit amet"
            },
            {
              "type": "picture-text",
              "picture": "/url.to/a/pictu.re2",
              "heading": "Lorem ipsum dolor sit amet",
              "text": "consectetur adipiscing elit"
            }
          ]
        }
      ]
    ]
  }
}

200 Get Department Landing Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.heading Object

landing page heading

data.subHeading Object

landing page sub-heading

data.rows Object[][]

landing page blocks rows

data.rows.count String

number of columns in the row

data.rows.columns Object[]

the columns of a row

data.rows.columns.type String

the block type

data.rows.columns.heading String

the block heading

data.rows.columns.text String

the block text

data.rows.columns.picture String

the block picture URL

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

no module with that module code was found

Location

Get Place Polygon By Id

200 Get Polygon Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/location/place/31/polygon" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get the GeoJSON polygon for the given place using the place id with respect to the tenant.

HTTP Request

GET /api/location/place/:id/polygon

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Path Variable

Name Type Description
id Integer

The place id.

Success Response

200 Get Polygon Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "type": "MultiPolygon",
    "coordinates": [ ... ]
  }
}

200 Get Polygon Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.type String

the GeoJSON geometry type

data.coordinates Object[][]

the GeoJSON geometry co-ordinates

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

404 Not Found

Name Type Description
NotFound

no places match the given id was found

Get Place Polygon By Name

200 Get Polygon Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/location/place/polygon?q=Clements%20Heights%20/%20Clemens%20Grove" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get the GeoJSON polygon for the given place using the place name with respect to the tenant.

HTTP Request

GET /api/location/place/polygon?q=

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Parameter

Name Type Description
q String

the place name.

Success Response

200 Get Polygon Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "type": "MultiPolygon",
    "coordinates": [ ... ]
  }
}

200 Get Polygon Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.type String

the GeoJSON geometry type

data.coordinates Object[][]

the GeoJSON geometry co-ordinates

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

404 Not Found

Name Type Description
NotFound

no places match the given id was found

Notification

This collection can be used interact with generated notifications.

Delete Notification

200 Delete Notification Successful:

curl --location --request DELETE "{{scheme}}:/{{tenanthostname}}/api/notification/999999999" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Delete the specific notification belonging to the authorized user.

HTTP Request

DELETE /api/notification/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id Integer

The notification id.

Success Response

200 Delete Notification Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful.",
  "data": {
    "count": 1
  }
}

200 Delete Notification Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

deleted records count

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no matching notification was found

Unauthorized

an unauthorized user made the request

Delete Notifications (Batch Delete)

200 Delete Notification Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/notification/delete" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
  \"ids\": [
    1,
    2
  ]
}"

Delete the specific notifications belonging to the authorized user.

HTTP Request

POST /api/notification/delete

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "ids": [
    1,
    2
  ]
}

Request Body

Name Type Description
ids Integer[]

notification ids

Success Response

200 Delete Notification Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful.",
  "data": {
    "count": 2
  }
}

200 Delete Notification Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

deleted records count

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get All Notifications

200 Get All Notifications Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/notification" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get all the authorized users notifications.

HTTP Request

GET /api/notification

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get All Notifications Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "id": 6262524,
      "alert_name": "Building Alert",
      "record_guid": "bcd31455-fd8f-4d6b-9d88-c43b2b51275c",
      "record_address": "3321 WINCHESTER RD, LEXINGTON, KY",
      "record_watch": true,
      "created": "2018-09-18T06:54:00",
      "module_code": "building",
      "event_type": "building_new"
    },
    {
      "id": 6262436,
      "alert_name": "Building Alert",
      "record_guid": "5d883848-a61e-4d24-ada3-f604d9dbadbd",
      "record_address": "909 WINCHESTER RD, LEXINGTON, KY",
      "record_watch": true,
      "created": "2018-09-18T06:54:00",
      "module_code": "building",
      "event_type": "building_new"
    }
  ]
}

200 Get All Notifications Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.id Integer

notification id

data.alert_name String

source alert name

data.record_guid String

related record guid

data.record_address String

related record address

data.record_watch Boolean

related record is watched

data.created String

notification created datetime

data.module_code String

module code

data.event_type String

notification event type

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Mark Notification Record Watched

200 Mark Notification Record Watched Successful:

curl --location --request PUT "{{scheme}}:/{{tenanthostname}}/api/notification/999999999/record/watch" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Mark the related record as watched for a specific notification belonging to the authorized user.

HTTP Request

PUT /api/notification/:id/record/watch

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id Integer

The notification id.

Success Response

200 Mark Notification Record Watched Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Watch Successful.",
  "data": {
    "count": 1
  }
}

200 Mark Notification Record Watched Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

watched records count

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no matching notification was found

Unauthorized

an unauthorized user made the request

Mark Notifications Records Watched (Batch Update)

200 Mark Notification Record Watched:

curl --location --request PUT "{{scheme}}:/{{tenanthostname}}/api/notification/record/watch" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
  \"ids\": [
    1,
    2
  ]
}"

Mark the related records as watched for specific notifications belonging to the authorized user.

HTTP Request

PUT /api/notification/record/watch

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "ids": [
    1,
    2
  ]
}

Request Body

Name Type Description
ids Integer[]

notification ids

Success Response

200 Mark Notification Record Watched:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Watch Successful.",
  "data": {
    "count": 2
  }
}

200 Mark Notification Record Watched

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

watched records count

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

PDF

This collection of endpoints are used to create PDF files based on tenant/module data.

Delete PDF

200 Delete PDF Successful:

curl --location --request DELETE "{{scheme}}:/{{tenanthostname}}/api/pdf/999999999" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Delete the specific PDF belonging to the authorized user.

HTTP Request

DELETE /api/pdf/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id Integer

The PDF id.

Success Response

200 Delete PDF Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful.",
  "data": {
    "count": 1
  }
}

200 Delete PDF Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

deleted records count

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 1,
   "name": "Forbidden",
   "message": "Forbidden."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no matching PDF was found

Forbidden

the user does not have permission for this action

Unauthorized

an unauthorized user made the request

Delete PDFs (Batch Delete)

200 Delete PDF Successful:

curl --location --request POST "{{scheme}}:/{{tenanthostname}}/api/pdf/delete" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data "{
  \"ids\": [
    1,
    2
  ]
}"

Delete the specific PDFs belonging to the authorized user.

HTTP Request

POST /api/pdf/delete

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "ids": [
    1,
    2
  ]
}

Request Body

Name Type Description
ids Integer[]

PDF ids

Success Response

200 Delete PDF Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful.",
  "data": {
    "count": 2
  }
}

200 Delete PDF Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

deleted records count

Error Response

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 1,
   "name": "Forbidden",
   "message": "Forbidden."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Forbidden

the user does not have permission for this action

Unauthorized

an unauthorized user made the request

Get All PDFs

200 Get All PDFs Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/pdf" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get all PDFs for the authorized user.

HTTP Request

GET /api/pdf

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get All PDFs Successful:

{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "id": 999999999,
      "title": "Report-20181006",
      "url": "/downloads/pdf/report-20181006.pdf",
      "module": "building",
      "created": "2018-10-06 10:31:42"
    }
  ]
}

200 Get All PDFs Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.id Integer

PDF id

data.title Integer

PDF title

data.url Integer

PDF url

data.module Integer

PDF source module

data.created String

PDF created datetime

Error Response

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 1,
   "name": "Forbidden",
   "message": "Forbidden."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Forbidden

the user does not have permission for this action

Unauthorized

an unauthorized user made the request

Request PDF Of Item

200 Request PDF Successful:

curl --location --request DELETE "{{scheme}}:/{{tenanthostname}}/api/pdf/source/abcdefab-1234-5678-9012-0123456789ab" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Request a PDF be generated using a given data object.

HTTP Request

POST /api/pdf/source/:guid

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
guid String

The guid of the object to PDF

Success Response

200 Request PDF Successful:

HTTP/1.1 200 OK
{
  "status": 202,
  "code": 0,
  "name": "Accepted",
  "message": "Creation request has been accepted."
}

200 Request PDF Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

403 Forbidden:

HTTP/1.1 403 Forbidden
{
   "status": 403,
   "code": 1,
   "name": "Forbidden",
   "message": "Forbidden."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no matching object was found

Forbidden

the user does not have permission for this action

Unauthorized

an unauthorized user made the request

Record

This collection can be used interact with records.

Get All Watch List Records

200 Get All Watch List Records Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/record/watch" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --data ""

Get all the watched records for the authorized user.

HTTP Request

GET /api/record/watch

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 Get All Watch List Records Successful:

{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "record_watch": true,
      "module_code": "building",
      "guid": "5d883848-a61e-4d24-ada3-f604d9dbadbd",
      "agency_reference": "BLD-CO-18-00254",
      "address": "909 WINCHESTER RD, LEXINGTON, KY",
      "record_date": "2018-09-17"
    },
    {
      "record_watch": true,
      "module_code": "building",
      "guid": "bcd31455-fd8f-4d6b-9d88-c43b2b51275c",
      "agency_reference": "BLD-ELE-18-02350",
      "address": "3321 WINCHESTER RD, LEXINGTON, KY",
      "record_date": "2018-09-17"
    },
    {
      "record_watch": true,
      "module_code": "planning",
      "guid": "76db0335-8a62-41ea-a9aa-93cbe3430f46",
      "agency_reference": "PLN-MJSUB-18-00031",
      "address": "1970 WINCHESTER RD, LEXINGTON, KY",
      "record_date": "2018-09-02"
    }
  ]
}

200 Get All Watch List Records Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.record_watch Boolean

is record watched

data.module_code String

source module code

data.guid String

record GUID

data.agency_reference String

record agency reference

data.address String

record address

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get Record Details

200 Get Record Details Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/record/1966151d-bfec-48ba-b129-34a318705e0b/details" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get the record detail using the guid.

HTTP Request

GET /api/record/:guid/details

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Path Variable

Name Type Description
guid String

The record GUID.

Success Response

200 Get Record Details Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": {
    "guid": "1966151d-bfec-48ba-b129-34a318705e0b",
    "agency_reference": "166576",
    "geo": {
      "centroid": {
        "type": "MultiPoint",
        "coordinates": [
          [
            -84.5310409248234,
            37.9845986135054
          ]
        ]
      }
    },
    "details": {
      "link": "/aca3.accela.com/LEXKY/Cap/CapDetail.aspx?Module=Building&TabName=Building&capID1=16HIS&capID2=00000&capID3=01EY6&agencyCode=LEXKY&IsToShowInspection=",
      "addresses": [
        "141 ROJAY DR"
      ],
      "description": "1030ME",
      "module_code": "building",
      "record_date": "2016-12-03",
      "record_type": "New Commercial HVAC",
      "status_text": "Closed",
      "type_display": "Commercial - HVAC",
      "agency_contact": null,
      "full_addresses": [
        "141 ROJAY DR, LEXINGTON, KY"
      ],
      "agency_reference": "166576",
      "street_addresses": [
        "141 ROJAY DR"
      ],
      "status_category_id_internal": 2
    }
  }
}

200 Get Record Details Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.guid String

record guid

data.agency_reference String

record agency reference

data.details Object

record details - varies based on agency/module/user

data.geo Object optional

record point geometry - this can be null if the record is unlocated

data.geo.centroid Object optional

record point centroid

data.geo.centroid.type String optional

record point geometry type

data.geo.centroid.coordinates Integer[] optional

record point geometry coordinates

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
NotFound

no matching PDF was found

Unauthorized

an unauthorized user made the request

Predict Record Agency Reference

200 Get Predictions Successful:

curl --location --request GET "{{scheme}}:/{{tenanthostname}}/api/record/agency-reference/predict?q=BLD-CHG-18" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer {{token}}" \
  --header "Civic-Central-Tenant: {{tenantname}}" \
  --header "Civic-Central-Module: {{modulecode}}" \
  --data ""

Get possible candidates for a given agency reference fragment.

HTTP Request

GET /api/record/agency-reference/predict?q=

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request URL Parameter

Name Type Description
q String

the agency reference fragment.

Success Response

200 Get Predictions Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK.",
  "data": [
    {
      "agency_reference": "BLD-CACC-16-00003"
    },
    ...
  ]
}

200 Get Predictions Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.agency_reference String

agency reference candidate

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Predict Agency Reference Failure.",
  "error": {
    "q": [
      "Q cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

the q property is invalid

Search

This collection of endpoints is used to search tenant module data.

The following fields should come from the respective filter/search panel fields:

"___geometry" is a geoJSON representation of either the current view port envelope or a shape outline on the map (eg neighbourhood).

"___geometry_source" should identify the source of geometry the options are:

Date fields are ISO 8601 eg "2018-09-24".

"record_type" is a json array of selected options - if all fields are selected it is preferred that its value be the string "all".

Batch Delete Saved Searches

Delete the saved searches from the given guids belonging to the authorized user.

HTTP Request

POST /api/search/saved/delete

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "guids": [
    "12346578-9009-8765-4321-abcdeffedcba"
  ]
}

Request Body

Name Type Description
guids String[]

saved search ids

Success Response

200 Delete Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful."
  "data": {
    "count": 1,
  }
}

200 Delete Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

a count of records

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Delete Failure.",
  "error": {
    "guids": [
      "Guids cannot be blank."
    ],
  }
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Unauthorized

an unauthorized user made the request

Count All Available Records

Count all records in a module dataset since a given date - ignoring all other attributes.

HTTP Request

POST /api/search/count/all

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "record_date___start": "2011-01-01",
}

Request Body

Name Type Description
record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

Success Response

200 Count All Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Count All Successful."
  "data": {
    "count": 54321,
  }
}

200 Count All Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

a count of records

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Count All Failure.",
  "error": {
    "record_date___start": [
      "Record Date   Start cannot be blank."
    ],
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Count Located Records

Count the records matching the given criteria and ignoring the viewport.

HTTP Request

POST /api/search/count/located

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "agency_reference": "ABC-123456"
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___address": "1234 Main Street, Smallville, KS",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "___geometry": { ... },
  "___geometry_source": "place"
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___place": [1, 2, 3, 5, 8, 13],
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
}

Request Body Guest

Name Type Description
agency_reference String

a whole or partial agency record reference

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

___place Integer[]

place ids

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Success Response

200 Count Located Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Count Located Successful."
  "data": {
    "count": 54321
    }
  }
}

200 Count Located Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

count of matching records

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Count Located Failure.",
  "error": {
    "status_category_id_internal": [
      "status_category_id_internal is not an array."
    ],
    "record_date___start": [
      "Record Date   Start cannot be blank."
    ],
    "record_date___end": [
      "Record Date   End cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Count Records

Count the records matching the given criteria.

HTTP Request

POST /api/search/count

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "agency_reference": "ABC-123456",
  "___viewport": { ... }
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___address": "1234 Main Street, Smallville, KS",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "___viewport": { ... },
  "___geometry": { ... },
  "___geometry_source": "place"
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___place": [1, 2, 3, 5, 8, 13],
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
  "___viewport": { ... },
}

Request Body Guest

Name Type Description
agency_reference String

a whole or partial agency record reference

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

___place Integer[]

place ids

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Success Response

200 Count Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Count Successful."
  "data": {
    "count": 54321
    }
  }
}

200 Count Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

count of matching records

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Count Failure.",
  "error": {
    "status_category_id_internal": [
      "status_category_id_internal is not an array."
    ],
    "record_date___start": [
      "Record Date   Start cannot be blank."
    ],
    "record_date___end": [
      "Record Date   End cannot be blank."
    ],
    "___viewport": [
      "Viewport cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Count Unlocated Records

Count the unlocated records matching the given criteria.

HTTP Request

POST /api/search/count/unlocated

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "agency_reference": "ABC-123456"
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___address": "1234 Main Street, Smallville, KS",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2]
}

Request Body Example:

{
  "___keywords": "HVAC",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
}

Request Body Guest

Name Type Description
agency_reference String

a whole or partial agency record reference

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

___place Integer[]

place ids

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Success Response

200 Count Unlocated Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Count Unlocated Successful."
  "data": {
    "count": 54321
    }
  }
}

200 Count Unlocated Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

count of matching records

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Count Unlocated Failure.",
  "error": {
    "status_category_id_internal": [
      "status_category_id_internal is not an array."
    ],
    "record_date___start": [
      "Record Date   Start cannot be blank."
    ],
    "record_date___end": [
      "Record Date   End cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Delete the saved search from the given guid belonging to the authorized user.

HTTP Request

DELETE /api/search/saved/:guid

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request Body Example:

{
  "guid": "12346578-9009-8765-4321-abcdeffedcba"
}

Request Body

Name Type Description
guid String

saved search id

Success Response

200 Delete Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Delete Successful."
  "data": {
    "count": 1,
  }
}

200 Delete Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.count Integer

a count of records

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get All Saved Searches

Get all the saved searches for the authorized user.

HTTP Request

GET /api/search/saved

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Success Response

200 OK:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK."
  "data": [
     {
       "guid": "0330de79-0062-4bf8-9474-d898b5df312f",
       "name": "User Name For Search",
       "link": "/shortu.rl/abcedf",
       "module_code": "0330de79-0062-4bf8-9474-d898b5df312f",
       "created": "2018-10-05 14:53:42.261247+00"
     }
  ]
}

200 OK

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object[]

response data

data.guid String

the objects GUID

data.name String

user generated name for search

data.link String

public link for sharing

data.module_code String

the code for the module context

data.created String

object creation date time

Error Response

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
Unauthorized

an unauthorized user made the request

Get the search criteria for a given saved search using a GUID.

HTTP Request

GET /api/search/saved/:id

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Request URL Path Variable

Name Type Description
id String

the saved search v4 GUID

Success Response

200 OK:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "OK."
  "data": {
    "criteria": { ... },
    "guid": "0330de79-0062-4bf8-9474-d898b5df312f",
    "name": "User Name For Search",
    "module_code": "0330de79-0062-4bf8-9474-d898b5df312f",
    "created": "2018-10-05 14:53:42.261247+00"
  }
}

200 OK

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.criteria Object

search filter criteria to save @see (#Search:SearchForLocations)

data.guid String

the objects GUID

data.name String

user generated name for search

data.module_code String

the code for the module context

data.created String

object creation date time

Error Response

404 Not Found:

HTTP/1.1 404 Not Found
{
  "status": 404,
  "code": 0,
  "name": "Not Found",
  "message": "Not Found."
}

Error 4xx

Name Type Description
NotFound

object not found

Save the current search criteria (for sharing).

HTTP Request

POST /api/search/saved

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "name": "User Name For Search",
  "criteria": { ... }
}

Request Body

Name Type Description
name String

user generated name for search

criteria Object

search filter criteria to save @see (#Search:SearchForLocations)

Success Response

200 Save Search Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Update Account Successful."
  "data": {
    "public_url": "/shortu.rl/abcedf",
    "client_url": "/sanfrancisco.civiccentral.com/building-dept/building/search/saved/0330de79-0062-4bf8-9474-d898b5df312f",
    "api_path": "/search/saved/0330de79-0062-4bf8-9474-d898b5df312f",
    "guid": "0330de79-0062-4bf8-9474-d898b5df312f",
    "module_code": "building"
  }
}

200 Save Search Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.public_url String

short url for sharing

data.client_url String

url that the public url resolves to

data.api_path String

path for object within the API

data.guid String

the objects GUID

data.module_code String

the code for the module context

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Save Search Failure.",
  "error": {
    "name": [
      "Name must be a string."
    ],
    "criteria": [
      "Criteria must be valid search criteria."
    ]
  }
}

401 Unauthorized:

HTTP/1.1 401 Unauthorized
{
  "status": 401,
  "code": 0,
  "name": "Unauthorized",
  "message": "Your request was made with invalid credentials."
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Unauthorized

an unauthorized user made the request

Search For Locations

Get a set of locations for the given search criteria. Use this to get dots for the map.

HTTP Request

POST /api/search/location

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "agency_reference": "ABC-123456",
  "___viewport": { ... }
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___address": "1234 Main Street, Smallville, KS",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "___viewport": { ... },
  "___geometry": { ... },
  "___geometry_source": "place"
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___place": [1, 2, 3, 5, 8, 13],
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
  "___viewport": { ... },
}

Request Body Guest

Name Type Description
agency_reference String

a whole or partial agency record reference

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

___place Integer[]

place ids

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Success Response

200 Search For Locations Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Search For Locations Successful."
  "data": {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "properties": {
          "guid": "012345678-abcd-efab-cdef-ba9876543210",
          "statuses": {
            "1": 1,
            "2": 3
          }
        },
        "geometry": {
          "type": "Point",
          "coordinates": [
            -84.5463266789781,
            38.0332474401938
          ]
        }
      },
      ...
    ]
  }
}

200 Search For Locations Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.type String

this will always be "FeatureCollection"

data.features Object[]

GeoJSON point feature representing a location.

data.geometry Object

GeoJSON point geometry

data.properties Object

location properties

data.guid String

location identifier

data.statuses Object

record statuses at this location matching the search criteria

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Search For Locations Failure.",
  "error": {
    "status_category_id_internal": [
      "status_category_id_internal is not an array."
    ],
    "record_date___start": [
      "Record Date   Start cannot be blank."
    ],
    "record_date___end": [
      "Record Date   End cannot be blank."
    ],
    "___viewport": [
      "Viewport cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Search For Record Details

Get a set of record details for the given search criteria. Use this to get the details after a marker is clicked.

HTTP Request

POST /api/search/detail

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building"
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String optional

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "agency_reference": "ABC-123456",
  "___viewport": { ... },
  "___location": ["012345678-abcd-efab-cdef-ba9876543210"]
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___address": "1234 Main Street, Smallville, KS",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "___viewport": { ... },
  "___geometry": { ... },
  "___geometry_source": "place",
  "___location": ["012345678-abcd-efab-cdef-ba9876543210"]
}

Request Body Example:

{
  "___keywords": "HVAC",
  "___place": [1, 2, 3, 5, 8, 13],
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
  "___viewport": { ... },
  "___location": ["012345678-abcd-efab-cdef-ba9876543210"]
}

Request Body Guest

Name Type Description
agency_reference String

a whole or partial agency record reference

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___location String[]

location ids

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

___address String

a specific address

___place Integer[]

place ids

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

___viewport Object

GeoJSON feature collection with a single polygon feature representing the viewport

___geometry Object

GeoJSON feature collection containing a polygon (place or drawn)

___geometry_source String

if ___geometry is set this must specify the source ie "place" or "drawn"

Success Response

200 Search For Record Details Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Search For Record Details Successful."
  "data": {
    "details": [ ... ]
  }
}

200 Search For Record Details Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.details Object[]

details is module specific record details

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Search For Record Details Failure.",
  "error": {
    "___location": [
      "Location cannot be blank."
    ],
    "___viewport": [
      "Viewport cannot be blank."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid

Search For Unlocated Records

Get a set of record details for the given search criteria (and without geometry). Use this to the list of unmapped records.

HTTP Request

POST /api/search/list

Request Headers

Request Headers Example:

{
  "Accept": "application/json",
  "Content-Type": "application/json",
  "Authorization": "Bearer abcdefghijklmnopqrstuvwxyz0123456789...",
  "Civic-Central-Tenant": "sanfrancisco",
  "Civic-Central-Module": "building",
}
Name Type Description
Accept String

advertises which content types the client is able to understand

Default value: application/json
Content-Type String

header tells the client what the content type of the returned content actually is

Default value: application/json
Authorization String

http bearer token

Civic-Central-Tenant String

the target tenant name

Civic-Central-Module String

the target module name

Request Body Example:

{
  "___keywords": "HVAC",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
}

Request Body Example:

{
  "___keywords": "HVAC",
  "record_date___start": "2011-01-01",
  "record_date___end": "2018-12-31",
  "record_type": ["Electrical", "Plumbing"],
  "status_category_id_internal": [1, 2],
  "record___workflow_task___name": ["Received", "Incomplete"],
  "record___workflow_task___status_date___start": "2011-01-01",
  "record___workflow_task___status_date___end": "2018-12-31",
  "record___workflow_task___agent": ["ABROWN", "BWHITE"],
}

Request Body Registered

Name Type Description
___keywords String

used to search description and agency reference

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

Request Body Categorised

Name Type Description
___keywords String

used to search description and agency reference

record_date___start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_date___end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_type String[]

an array of module specific record types

status_category_id_internal Integer[]

the record statuses

record_workflow_task_name String[]

an array of module specific workflow task names

record_workflow_taskstatus_date__start String

from date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_taskstatus_date__end String

to date in yyyy-mm-dd format (ISO 8601 date format)

record_workflow_task_agent String[]

an array of agent ids

Success Response

200 Search For Unlocated Records Successful:

HTTP/1.1 200 OK
{
  "status": 200,
  "code": 0,
  "name": "OK",
  "message": "Search For Unlocated Records Successful."
  "data": {
    "details": [ ... ]
  }
}

200 Search For Unlocated Records Successful

Name Type Description
status Integer

HTTP status code

code Integer

response code

name String

HTTP status code name

message String

response message

data Object

response data

data.details Object[]

details is module specific record details

Error Response

400 Bad Request:

HTTP/1.1 400 Bad Request
{
  "status": 400,
  "code": 0,
  "name": "Bad Request",
  "message": "Search For Unlocated Records Failure.",
  "error": {
    "record_type": [
      "Record Type must be a string."
    ]
  }
}

Error 4xx

Name Type Description
BadRequest

one or more of the properties were not valid