Firehouse Solutions
Web Design and Data Management for Firefighters, Rescue Techs, EMTS, Medics, and All Others Who Save Lives
Phone 301.475.1900
Web Design and Data Management for Firefighters, Rescue Techs, EMTS, Medics, and All Others Who Save Lives Phone 301.475.1900   
Firehouse Solutions Firehouse Solutions


August 15, 2026:
Training Center Now Available
April 20, 2026:
Release of AI Writing Tool and Two-Factor Authentication
October 30, 2025:
Schedule News Posts for Automated Go Live and Come Down
August 30, 2025:
Light and Dark Mode, Calendar Email Reminders, Emoji Support, and Video Galleries
October 17, 2024:
Why Your Organization Needs Email Archiving
February 5, 2024:
Introducing Upgraded SmarterMail and firehouse.email
API Documentation

The Firehouse Solutions Application Programming Interface (API) gives your developers read-only access to your website data as JSON over HTTPS. Nothing can be created, changed, or deleted through the API. Use it to feed station display boards, mobile apps, reporting tools, or any in-house software with live data from your website: news stories with photos, calendar events, training records, member rosters, custom databases, and more.


Getting Started

The API is available to every Firehouse Solutions website. A website manager creates an API Project in the Members Area under Manage > API. Each project receives its own refresh token and its own settings: status, allowed endpoints, and optional IP address lockdown. Create one project per application so each can be monitored and revoked independently.

All calls go to your own website's address. Throughout these pages, replace the example domain with your department's domain.

Base Address
https://www.YourDepartment.com/apps/api/

The base address returns a catalog of the available endpoints and requires no token. Not a customer yet? See our features overview or contact Sales@FirehouseSolutions.com.


Authentication

Authentication uses two tokens:

1. Refresh Token - created with your API Project, valid for 1 year. Keep it secret; treat it like a password.
2. Access Token - obtained from the refresh endpoint, valid for 24 hours. Send it on every data request in the Authorization header: Authorization: Bearer {access_token}

Obtain an access token
HTTP Request TypePOST
Calling URIhttps://www.YourDepartment.com/apps/api/refresh/
Request HeaderAuthorization: Bearer {refresh_token}
Request BodyNone required; the refresh token travels in the header
Success Codes200 OK
Failure Codes401 Unauthorized (missing or invalid refresh token), 403 Forbidden (project disabled or IP not allowed), 405 Method Not Allowed (not a POST), 429 Too Many Requests

Response JSON structure
{
    "status": 200,
    "endpoint": "refresh",
    "domain": "www.YourDepartment.com",
    "project": "Your Project Name",
    "token_type": "Bearer",
    "access_token": "d99ce419-53b8-40f2-a747-...",
    "expires_in": 86400,
    "access_token_expire": "2026-09-06 14:00:00"
}

Security

HTTPS only - requests over plain HTTP receive 403; tokens never travel in cleartext.
Read-only by design - data endpoints reject anything but GET.
Token regeneration - regenerate a project's refresh token at any time; all active access tokens are revoked immediately.
Failed-authentication lockout - 10 failed token requests from one IP within 10 minutes blocks that IP for 60 minutes.
IP Address Lockdown - optionally list allowed IP addresses on your API Project; all other addresses receive 403.
Endpoint Access - limit a project to specific endpoints.
Project Status - disable a project at any time.
Throttling - each project is limited to 30 calls per minute and 5000 calls per day. Exceeding a limit returns 429 with a Retry-After header. Check your consumption anytime with the usage endpoint or on your API Project statistics page.
Call Logging - every call (including failures) is logged for 90 days and shown on your API Project statistics page.
Passwords - passwords and account credentials are never available through the API.


Responses & Paging

Every successful data response uses this JSON structure. Some endpoints add extra properties (noted per endpoint), and items holds the records:

{
    "status": 200,
    "endpoint": "announce",
    "domain": "www.YourDepartment.com",
    "generated": "2026-09-05 14:00:00",
    "startRow": 1,
    "maxRows": 100,
    "count": 2,
    "totalCount": 57,
    "items": [ { ... }, { ... } ]
}

count is the number of records in this response; totalCount is all matching records regardless of paging. Page with StartRow and MaxRows until count + startRow exceeds totalCount.

Common parameters (all data endpoints)
ParameterDescription
StartRowFirst row to return (1-based). Combine with MaxRows to page through results.
MaxRowsRows to return. Default 100, maximum 500.

Response Codes

Every API call answers with a standard HTTP status code and a JSON body, on success and on failure alike. Program against the codes below rather than the message text.

CodeMeaning
200 OKSuccess; JSON body returned
400 Bad RequestA parameter is invalid
401 UnauthorizedMissing, invalid, or expired token
403 ForbiddenProject disabled, IP address not allowed, or endpoint not allowed
404 Not FoundThe requested record or endpoint does not exist
405 Method Not AllowedWrong HTTP request type (data endpoints are GET only)
429 Too Many RequestsThrottle limit reached; retry after the Retry-After header
500 Internal Server ErrorUnexpected failure; automatically reported to Firehouse Solutions

Every failure code returns this JSON structure. Branch on the machine-readable code value, not the message text:

{
    "status": 401,
    "error": "Unauthorized",
    "code": "token_expired",
    "message": "Access token expired. Request a new one from /apps/api/refresh using your refresh token."
}
Error codes
StatuscodeCause
400invalid_parameterA parameter is non-numeric, a date is invalid or reversed, or MaxRows / StartRow is out of range
401token_missingThe Authorization header is missing
401token_invalidThe supplied token is not recognized
401token_expiredThe access token has expired; request a new one from the refresh endpoint
401refresh_token_suppliedA refresh token was sent to a data endpoint; data endpoints need an access token
403https_requiredThe request was made over plain HTTP
403project_disabledThe API Project's status is Disabled
403ip_not_allowedIP Address Lockdown is set and the caller's IP is not listed
403endpoint_not_allowedEndpoint Access excludes the endpoint called
404not_foundAn ID was requested that does not exist or is not available
404unknown_endpointThe URI is not an endpoint; the response includes the endpoints list
405method_not_allowedWrong HTTP request type for the endpoint
429rate_limitedA throttle limit was reached; wait the number of seconds in the Retry-After header
429too_many_failures10 or more failed token requests from one IP within 10 minutes; the IP is blocked for 60 minutes
500server_errorUnhandled exception; details are reported to Firehouse Solutions automatically

Data Endpoints

All data endpoints are HTTP GET and require the Authorization: Bearer {access_token} header. All accept the common StartRow and MaxRows parameters. Click an endpoint for its parameters, response properties, and sample code.

EndpointDescription
Announcements
/apps/api/announce/
Live announcements (approved and not expired).
Calendar
/apps/api/calendar/
Events on the members-area calendar. Defaults to today through the next 30 days.
Databases
/apps/api/databases/
Member-built custom databases. Without DatabaseID, lists the databases. With DatabaseID, returns that database's records (primary display fields only). Archived and No Access databases are never returned.
Discussion Forum
/apps/api/discuss/
Online and locked topics. Pass ID to get a single topic with its replies (returned in items[]; the topic itself is returned in a topic object).
Document Library
/apps/api/documents/
Online documents with their categories.
Public Events
/apps/api/events/
Published public events. Without a date range, returns current and upcoming events.
Guestbook
/apps/api/guestbook/
Approved guestbook entries.
Meeting Minutes
/apps/api/minutes/
Online meeting minutes with their categories.
News
/apps/api/news/
Published news stories with their photos, attachments, and videos.
Online Members
/apps/api/members/
The active member roster with contact details.
Rental Calendar
/apps/api/rental/
Facility rental bookings with renter details. Defaults to today through the next 90 days. The response also includes a rentalTypes array for mapping TypeID.
Sign Up Sheets
/apps/api/signup/
Online sign up sheets. Pass ID for one sheet's groups, slots and who has signed up (groups are returned in items[]; the sheet itself in a sheet object).
Training
/apps/api/training/
Training Center data. The Type parameter selects the record set. Items restricted to specific members are excluded.
Usage / Throttle Statistics
/apps/api/usage/
Your project's current rate-limit consumption. Always available, regardless of endpoint access settings.

Questions about the API? Contact us at Support@FirehouseSolutions.com.