Documentation / Developers

Public API

The read-only API behind the public dashboard.

The CLIF public API provides the read-only data the public Board of Estimates dashboard needs: meeting dates, departments, public settings, texts and page content. It returns JSON and exposes only data that administrators have marked as public.

Base URL#

https://staging-api.interflow-ai.com

All endpoints below are relative to this address. Always use HTTPS.

Organization and access#

The API needs no credentials. It works out which organization a request belongs to from the address of the calling website (the Origin header) or, failing that, from the API host name, and returns that organization's data only.

Calling from a browser
Browsers may only call the API from the public website addresses configured for your organization (CORS). Ask the technical team to add a new address before using the API from another site.

Endpoints#

MethodPathPurpose
GET/api/MeetingScheduleBoard meeting dates.
GET/api/DepartmentDepartments (agencies).
GET/api/ParameterPublic parameters.
GET/api/LanguageResourcePublic texts.
GET/api/PagePartPublic page content blocks.
GET/api/TenantOrganization details.
POST/api/ExceptionReport an error from the public site.

Meeting dates#

GET/api/MeetingSchedule

Returns the Board meetings as an object that maps each meeting id to its start date and time.

curl https://staging-api.interflow-ai.com/api/MeetingSchedule \
  -H "Origin: https://your-public-site"
200 OK
{
  "ab12cd34ef": "2025-03-05T09:00:00",
  "gh56ij78kl": "2025-03-19T09:00:00"
}

Departments#

GET/api/Department

Returns the departments as an object that maps each department id to its name.

200 OK
{
  "k3n8p2q7rs": "Department of Public Works",
  "t5v9w1x4yz": "Department of Finance"
}

Public parameters#

GET/api/Parameter

Returns the parameters marked Is Public, by name.

200 OK
{
  "PublicArtPercent": "1"
}

Public texts#

GET/api/LanguageResource

Returns the language resources marked Is Public, by key, so the public site can show the same wording as CLIF.

200 OK
{
  "Home": "Home",
  "Search": "Search"
}

Page content#

GET/api/PagePart

Returns the page parts marked Is Public: HTML content by access name.

200 OK
{
  "public-introduction": "<p>Welcome to the Board of Estimates dashboard.</p>"
}

Organization#

GET/api/Tenant

Returns the organization the request belongs to, with its properties as strings (for example its id, logo and web address).

200 OK
{
  "TenantId": "m2n4b6v8c0",
  "LogoId": "seal",
  "Domain": "https://public.example.org"
}

Report an error#

POST/api/Exception

Lets the public site record an error in CLIF's Error Logs. The body is a JSON string whose content is the exception serialized with Json.NET, so the full exception (type, message, stack trace) can be rebuilt on the server. The response has no body.

C#
catch (Exception ex)
{
    // The body is a JSON string that itself contains the Json.NET-serialized exception.
    var body = JsonConvert.SerializeObject(JsonConvert.SerializeObject(ex));
    using var content = new StringContent(body, Encoding.UTF8, "application/json");
    await http.PostAsync("https://staging-api.interflow-ai.com/api/Exception", content);
}
An unhandled error has occurred. Reload 🗙