Skip to main content
This is the API reference for incident.io. It documents available API endpoints, provides examples of how to use them, and covers authentication, rate limits, and error handling. The API is hosted at https://api.incident.io/, and you will need an API key from your incident.io dashboard to make requests.

OpenAPI specification

Download the full OpenAPI 3.0 spec to generate clients or feed to your tools.

Command-line interface

Manage incidents, alerts, and schedules from your terminal with inc.

Authentication

For all requests, you’ll need an API key. To create one, visit Settings → API keys. When you create the key, you’ll choose what actions it can take. Keys can have account-level permissions, team-scoped permissions, or both. We’ll only show the token once, so store it somewhere safe. API keys remain valid even if the creating user is deactivated. For more details on managing keys and permissions, see API keys. Set the Authorization header using a Bearer scheme:

Make your first request

Any key can call the identity endpoint, which returns details of the key you authenticated with:
If you get a 401, check the key is passed exactly as shown, with no quotes around the token.

Rate limits

The default rate limit is 1,200 requests/minute per API key. Some endpoints have lower limits documented below. Note that these limits are subject to change unless otherwise contracted: Burst is how many requests you can make at once; sustained is the rate at which your allowance refills. Creating incidents is limited separately: an API key can create 10 incidents per hour where a chat channel is created, and 300 per hour otherwise. If you’re importing historical incidents, contact support to raise this temporarily.

Rate limit headers

Every response to a request made with an API key tells you where you stand, so you can slow down before you get a 429. For example:
More than one limit can apply to the same request. Here your API key allows 1,200 requests a minute and the endpoint allows 60 a minute. X-RateLimit-Limit lists both. Remaining, Used and Reset describe whichever has least left, because that is the one you will run into first. Limits top up continuously rather than resetting at a set time. The window is in seconds and tells you the rate you can keep up. 1200;window=60 means 1,200 requests a minute, which is 20 requests a second that you can sustain indefinitely. Two things to expect. X-RateLimit-Remaining can drop by more than the number of requests you made, because some limits are shared across all the API keys on your account. And the headers are left out entirely if we cannot work out your limits for a request, so treat them as missing rather than as zero.

Exceeding a rate limit

When you go over a rate limit, the API responds with 429 Too Many Requests and a Retry-After header giving the number of seconds to wait:
Use Retry-After to decide how long to back off. It tells you when your next request will go through. X-RateLimit-Reset is later than that, because it is when your whole allowance is back. The response body has the same information:

Pagination

List endpoints are cursor-paginated. Pass page_size to control how many records you get per request (default 25), and use the after cursor from pagination_meta to fetch the next page:
To iterate through all records, repeat the request with after set to the cursor from the previous response, until a response returns fewer records than page_size. The maximum page_size varies by endpoint and is documented on each endpoint’s page.

Errors

We use standard HTTP response codes. The response body is JSON with a type, status, request_id, and a list of errors:
The request_id can be provided to support to help debug issues.

Compatibility

We won’t make breaking changes to existing endpoints, but expect integrators to upgrade within 3 months of deprecation. Backwards-compatible changes include:
  • Adding new endpoints
  • Adding new properties to responses
  • Reordering response properties
  • Adding optional request parameters
  • Altering the format or length of IDs
  • Adding new enum values
When breaking changes are unavoidable, we create a new version on a separate path (e.g. /v1/incidents/v2/incidents) and run them in parallel. For questions, email support@incident.io.