Utah Project Portal API

This API provides access to project data.

Authentication

All requests require an API key passed in the x-api-key header. API keys can be generated from your account settings at utahprojects.org.

curl -H "x-api-key: YOUR_API_KEY" "https://api.utahprojects.org/beta/projects?pageSize=10"

Endpoints

GET /beta/projects

Returns a list of projects.

Query Parameters

Parameter Type Description
pageSize number Number of results per page (default: 100, max: 10000)
searchAfter string Cursor for pagination (from nextSearchAfter in response)

Response Format

{
  "total": 1234,
  "pageSize": 10000,
  "count": 1234,
  "nextSearchAfter": null,
  "projects": [
    {
      "id": "abc123",
      "name": "Pickleball Courts",
      "clientId": "client456",
      "clientName": "Salt Lake City",
      "clientGroupId": "group789",
      "clientGroupName": "R6 Regional Council",
      "projectStatus": "inProgress",
      "projectStatusLabel": "In Progress",
      "projectType": "drinkingWater",
      "projectTypeLabel": "Drinking Water",
      "projectSubType": "treatment",
      "projectSubTypeLabel": "Treatment",
      "timeFrame": "medium",
      "timeFrameLabel": "Medium-Term (2-5 Years)",
      "priority": 1,
      "totalCost": 5000000,
      "description": "Upgrade existing treatment facility...",
      "county": "Salt Lake",
      "city": "Salt Lake City",
      "state": "UT",
      "zip": "84101",
      "locationGeoPoint": { "lat": 40.7608, "lon": -111.8910 },
      "fundingSources": [
        {
          "source": "deq",
          "sourceLabel": "DEQ - Department of Environmental Quality",
          "amount": 3000000
        }
      ],
      "programIds": ["program-id-123"],
      "programNames": ["Some Program Name"],
      "projectManagerName": "Jane Smith",
      "projectEngineerName": "John Doe",
      "durationMonths": 24,
      "dateCreated": "2024-01-15T00:00:00.000Z",
      "dateModified": "2024-06-20T00:00:00.000Z"
    }
  ]
}

Pagination

For large result sets, use cursor-based pagination. If nextSearchAfter is not null, pass it as the searchAfter query parameter to get the next page:

curl -H "x-api-key: YOUR_API_KEY" \
  "https://api.utahprojects.org/beta/projects?pageSize=1000&searchAfter=PREVIOUS_REQUEST_nextSearchAfter"

Error Responses

Status Description
401 Missing or invalid API key
429 Rate limit exceeded
500 Server error
Note: This API is currently in beta. Endpoints and response formats may change.

Contact

For questions or issues, contact support when logged in to utahprojects.org.