Документация API
Создавайте, ставьте на паузу и удаляйте мониторы и получайте их результаты из скриптов и CI с помощью API-ключа.
Справочник ниже доступен только на английском языке.
- Base URL
- Authentication
- Bearer API key
- Format
- JSON
- Rate limit
- 120 requests per minute per key
Authentication
Every request needs an API key, sent as a bearer token. Create keys under API keys in the dashboard. The API is part of the REST API access add-on ($5 a month), which the Pro and Business presets include.
export FASTPING_KEY=fp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
curl -s -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitorsThe examples on this page read the key from the FASTPING_KEY environment variable, as above.
- A key is shown once, when you create it. FastPing stores only a hash of it.
- A key has full access to the monitors of its organisation. Use one key per integration, so a leaked key can be deleted without breaking the others.
- Requests and responses are JSON. Send
Content-Type: application/jsonwith a body.
A walkthrough with scripts for bulk imports and deployments is in REST API quick start.
Rate limits
Each key may make 120 requests per minute. Above that, the API answers 429 with a Retry-After header that gives the number of seconds to wait.
Errors
Errors use the HTTP status code and a JSON body with an error message:
{
"error": "Invalid or missing API key"
}| Status | Message | When |
|---|---|---|
401 | Invalid or missing API key | No Authorization header, or the key was deleted. |
403 | Your plan does not include API access | The REST API access add-on is not active. |
403 | Plan limit of 22 monitors reached | Creating a monitor would exceed the plan (paused monitors count). |
403 | Your plan does not include this monitor type | The type needs an add-on the plan does not include. |
403 | Plan limit reached | Resuming a monitor would exceed the plan. |
400 | Invalid or unsupported type | Unknown type, or a type that cannot be created through the API. |
400 | port is required | The type needs a port and none was sent. |
400 | Invalid hostname. | The url or host failed validation; the message says why, as in the dashboard. |
400 | Invalid JSON body | The request body is not valid JSON. |
404 | Not found | No monitor with that ID in your organisation. |
404 | Unknown endpoint | The path or method does not exist. |
429 | Rate limit exceeded | More than 120 requests in a minute with this key. |
Monitors
Monitor IDs are the numbers in the dashboard URLs. Every endpoint only sees the monitors of the key's organisation.
List monitors
GET/api/v1/monitors
Every monitor of the organisation, oldest first, as monitor objects.
curl -s -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitors{
"monitors": [
{
"id": 12,
"name": "Shop",
"type": "http",
"target": "https://shop.example.com",
"port": null,
"interval": 60,
"enabled": true,
"status": "up",
"last_checked_at": "2026-10-17T09:30:00.000Z",
"last_response_ms": 184,
"last_message": "HTTP 200",
"data": null,
"options": {
"maxMs": 1500
},
"uptime_24h": 100,
"public_id": "x7Kp2QmR9"
}
]
}Get a monitor
GET/api/v1/monitors/:id
One monitor with its uptime, latest checks and incidents:
uptime: percentages for today (1d) and the last 7, 30 and 90 days, counted in UTC days;nullwithout checks.checks: the latest 100 checks, newest first.okisup,warnordown;valueis the number some types record (players online, days left, email security score), elsenull.incidents: the last 20 incidents.started_atandresolved_atare milliseconds since the Unix epoch;resolved_atisnullwhile the incident is open.
curl -s -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitors/12{
"monitor": {
"id": 12,
"name": "Shop",
"type": "http",
"target": "https://shop.example.com",
"port": null,
"interval": 60,
"enabled": true,
"status": "up",
"last_checked_at": "2026-10-17T09:30:00.000Z",
"last_response_ms": 184,
"last_message": "HTTP 200",
"data": null,
"options": {
"maxMs": 1500
},
"uptime_24h": 100,
"public_id": "x7Kp2QmR9"
},
"uptime": {
"1d": 100,
"7d": 99.97,
"30d": 99.99,
"90d": 99.98
},
"checks": [
{
"ts": "2026-10-17T09:30:00.000Z",
"ok": "up",
"response_ms": 184,
"value": null,
"message": "HTTP 200"
}
],
"incidents": [
{
"started_at": 1792185240000,
"resolved_at": 1792185520000,
"cause": "HTTP 503"
}
]
}Create a monitor
POST/api/v1/monitors
Creates a monitor and runs its first check straight away. It is attached to every alert channel of the organisation.
| Field | Description |
|---|---|
type | Required. One of the monitor type keys. Security scans cannot be created through the API. |
name | Up to 100 characters. Defaults to the target. |
url | For types whose target is a URL. |
host | For types whose target is a host name or IP address. |
port | For types with a port. Required for TCP and UDP; the others use their default port. |
interval | Seconds between checks. Raised to your plan's minimum; some types have their own minimum. |
options | Object with the type's options, named as in the API option column of each type's settings table in the help centre. |
The response holds the new monitor; heartbeat monitors also get their heartbeat_url.
curl -s -X POST https://fastping.app/api/v1/monitors \
-H "Authorization: Bearer $FASTPING_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"http","name":"Shop","url":"https://shop.example.com","interval":60,"options":{"maxMs":1500}}'{
"monitor": {
"id": 12,
"name": "Shop",
"type": "http",
"target": "https://shop.example.com",
"port": null,
"interval": 60,
"enabled": true,
"status": "pending",
"last_checked_at": null,
"last_response_ms": null,
"last_message": null,
"data": null,
"options": {
"maxMs": 1500
},
"uptime_24h": null,
"public_id": "x7Kp2QmR9"
}
}Pause a monitor
POST/api/v1/monitors/:id/pause
Stops the checks and alerts of a monitor until it is resumed. Its history is kept.
curl -s -X POST -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitors/12/pause{
"ok": true
}Resume a monitor
POST/api/v1/monitors/:id/resume
Starts the checks again and runs one immediately. Answers 403 when the plan has no room for another active monitor.
curl -s -X POST -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitors/12/resume{
"ok": true
}Delete a monitor
DELETE/api/v1/monitors/:id
Deletes the monitor with its checks, uptime history and incidents. This cannot be undone.
curl -s -X DELETE -H "Authorization: Bearer $FASTPING_KEY" \
https://fastping.app/api/v1/monitors/12{
"ok": true
}The monitor object
| Field | Type | Description |
|---|---|---|
id | number | Monitor ID. |
name | string | Name shown in alerts and on status pages. |
type | string | A monitor type key. |
target | string | The URL or host; an empty string for heartbeat monitors. |
port | number or null | Port, for types that use one. |
interval | number | Seconds between checks. |
enabled | boolean | false while the monitor is paused. |
status | string | up, down, warn, pending or paused. |
last_checked_at | string or null | Time of the latest check, ISO 8601 in UTC. |
last_response_ms | number or null | Response time of the latest check in milliseconds. |
last_message | string or null | Message of the latest check, for example HTTP 200. |
data | object or null | Details some types record, such as certificate dates or players online. |
options | object | The type's options. |
uptime_24h | number or null | Uptime of the current UTC day in percent. |
public_id | string | Random ID used in the monitor's badge and widget URLs. |
Monitor types
19 types. The settings table in each guide lists the options of that type.
| Key | Name | Target | Default port | Runs at most every | Notes |
|---|---|---|---|---|---|
http | Website (HTTP) | url | n/a | Plan minimum | None |
keyword | Keyword | url | n/a | Plan minimum | None |
api | API (JSON) | url | n/a | Plan minimum | None |
ping | Ping | host | n/a | Plan minimum | None |
tcp | TCP port | host | Required | Plan minimum | None |
dns | DNS records | host | n/a | Plan minimum | None |
ssl | SSL certificate | host | 443 | 1 hour | None |
domain | Domain expiry | host | n/a | 12 hours | None |
email | Email security | host | n/a | 6 hours | None |
blacklist | Blacklist | host | n/a | 6 hours | None |
security | Security scan | host | n/a | 1 day | Needs: Security exposure scans add-on, Domain verification. Not available through the API. |
game | Game server | host | Game default | Plan minimum | None |
heartbeat | Heartbeat (cron) | None | n/a | Plan minimum | None |
smtp | SMTP server | host | 25 | 5 minutes | None |
imap | IMAP server | host | 993 | 5 minutes | None |
pop3 | POP3 server | host | 995 | 5 minutes | None |
udp | UDP port | host | Required | 1 minute | None |
websocket | WebSocket | url | n/a | Plan minimum | None |
http2 | HTTP/2 & HTTP/3 | url | n/a | Plan minimum | None |
Webhook alerts
Webhook alert channels receive an HTTP POST with Content-Type: application/json and the User-Agent FastPing-Monitor/1.0 (+https://fastping.app) for every alert:
{
"event": "down",
"monitor": {
"id": 12,
"name": "Shop",
"type": "http",
"target": "https://shop.example.com"
},
"detail": "HTTP 503",
"status": "down",
"timestamp": "2026-10-17T09:30:00.000Z",
"url": "https://fastping.app/app/monitors/12"
}| Field | Description |
|---|---|
event | down, up (recovery, or a warning that cleared), warn or event (a change, such as DNS records or a game server's map). |
monitor | id, name, type and target of the monitor. |
detail | The message of the check that caused the alert. |
status | The monitor's status after the alert: up, down or warn. |
timestamp | When the alert was sent, ISO 8601 in UTC. |
url | The monitor in the dashboard (login required). |
- The URL must use HTTPS and resolve to a public IP address.
- Answer with a 2xx status within 10 seconds. Redirects are not followed and count as failures.
- Each alert is sent once, without retries. Requests are not signed: keep a long random secret in the URL path.
The webhook alerts guide has a receiver example.
Heartbeat URLs
A heartbeat monitor has its own secret URL. Your job calls it with GET, POST or HEAD each time it finishes successfully. No API key is needed: the URL is the credential.
curl -fsS -m 10 --retry 3 -o /dev/null https://fastping.app/hb/<token>| Response | Meaning |
|---|---|
200 ok | The heartbeat was recorded. |
404 unknown or paused heartbeat | The token does not exist, or the monitor is paused or deleted. |
405 | Another method than GET, POST or HEAD. |
Examples for cron, systemd timers, Windows Task Scheduler and GitHub Actions are in Heartbeat monitors for cron jobs and scheduled tasks.
Остались вопросы?
Напишите нам, и вам ответит живой человек, обычно в течение одного рабочего дня.