Blackbaud APIstatus.blackbaud.com ↗
Access current and historical Blackbaud service incidents via API. Retrieve active outages, impact levels, affected components, and full update timelines.
What is the Blackbaud API?
This API exposes 2 endpoints that surface incident and outage data from the Blackbaud status page. The list_incidents endpoint returns active or recent incidents with their impact level, affected components, and timestamps, while get_incident delivers the full timeline of status updates—including per-update component transitions—for any specific incident. Together they cover the key fields needed to monitor Blackbaud service health programmatically.
curl -X GET 'https://api.parse.bot/scraper/fabfd6ee-5478-4fcc-aa1c-03a69fa38f20/list_incidents?filter=unresolved' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace status-blackbaud-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: BlackbaudStatus SDK — bounded, re-runnable; every call capped."""
from parse_apis.status_blackbaud_com_api import BlackbaudStatus, IncidentFilter, IncidentNotFound
client = BlackbaudStatus()
# List current unresolved incidents (active outages)
for incident in client.incident_summaries.list(filter=IncidentFilter.UNRESOLVED, limit=3):
print(incident.name, incident.status, incident.impact)
# Drill into the first incident for full details
summary = client.incident_summaries.list(filter=IncidentFilter.UNRESOLVED, limit=1).first()
if summary:
try:
full = summary.details()
print(full.name, full.status, full.resolved_at)
for update in full.incident_updates[:3]:
print(update.status, update.body[:80], update.created_at)
except IncidentNotFound as e:
print("gone:", e.incident_id)
print("exercised: incident_summaries.list, IncidentSummary.details")
List incidents from the Blackbaud status page. By default returns only unresolved (active) incidents; set filter to 'all' for the 50 most recent incidents including resolved ones. Each incident includes affected components and update count. Results are returned in a single page.
| Param | Type | Description |
|---|---|---|
| filter | string | Which incidents to return. |
{
"type": "object",
"fields": {
"total": "integer count of incidents returned",
"incidents": "array of incident summaries with id, name, status, impact, components, and timestamps"
},
"sample": {
"data": {
"total": 1,
"incidents": [
{
"id": "tt6bzqpmv91h",
"name": "Active Issue Alert – Blackbaud ID – Multiple Products - 000685870",
"impact": "minor",
"status": "investigating",
"shortlink": "https://stspg.io/2zf7plqbpcy1",
"components": [
{
"id": "tl7cmmsgmcz2",
"name": "Blackbaud Merchant Services™",
"status": "degraded_performance"
}
],
"created_at": "2026-07-29T16:01:19.365-04:00",
"started_at": "2026-07-29T16:01:19.352-04:00",
"updated_at": "2026-07-29T16:37:31.185-04:00",
"resolved_at": null,
"updates_count": 2
}
]
},
"status": "success"
}
}About the Blackbaud API
Endpoints Overview
The list_incidents endpoint returns an array of incident summaries. By default it returns only unresolved (active) incidents; passing filter: 'all' expands the result to the 50 most recent incidents including resolved ones. Each entry in the incidents array includes an id, name, status (e.g. investigating, identified, monitoring, resolved), impact level (none, minor, major, critical), a list of components, and ISO 8601 timestamps for creation and last update. The total field tells you how many incidents were returned.
Incident Detail
The get_incident endpoint accepts an incident_id obtained from list_incidents results and returns the full incident record. This includes all status updates with their individual timestamps and message bodies, per-update component transitions showing how each component's status changed over time, a shortlink to the public incident page, and a resolved_at timestamp that is null while the incident is still active. The started_at field is distinct from created_at, which can matter when an incident was posted retroactively.
Data Scope and Coverage
All incidents and components are scoped to Blackbaud's own status page at status.blackbaud.com. The components array in each response reflects which Blackbaud products or infrastructure segments were affected—useful for filtering alerts to only the services relevant to your integration. Pagination is not supported; list_incidents returns results in a single page with a cap of 50 incidents when filter: 'all' is set.
The Blackbaud API is a managed, monitored endpoint for status.blackbaud.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when status.blackbaud.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official status.blackbaud.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Trigger internal alerts when a new active incident appears with
impactofmajororcritical - Log resolved incident durations by comparing
started_atandresolved_atfor SLA reporting - Filter incidents by affected
componentsto notify only teams using specific Blackbaud products - Build a historical outage dashboard using the
filter: 'all'option inlist_incidents - Poll
get_incidenton a schedule to track status progression throughinvestigating→resolved - Surface the
shortlinkin internal runbooks so support staff can link directly to the incident page
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Blackbaud have an official developer API for status data?+
What does `list_incidents` return by default versus when `filter` is set to 'all'?+
list_incidents returns only unresolved (active) incidents—those with a status other than resolved. Setting filter to 'all' returns up to 50 of the most recent incidents regardless of status, including fully resolved ones. The response always includes a total count and an incidents array with id, name, status, impact, components, and timestamps.Is there a way to retrieve incidents older than the most recent 50?+
list_incidents endpoint returns at most 50 incidents when filter: 'all' is set, and pagination is not supported. You can fork this API on Parse and revise it to add a paginated or date-range endpoint if deeper history is needed.Does the API expose scheduled maintenance windows separately from incidents?+
How fresh is the incident data, and is `resolved_at` always populated for closed incidents?+
resolved_at is null; it is populated only once Blackbaud marks the incident resolved. If an incident was closed without an explicit resolution timestamp on the source page, the field may remain null even for a resolved status.