Skip to content

API documentation

With the fastry API you create monitors, mark deployments and read your rankings – for example from your CI pipeline. The API is available in the Agency plan.

Authentication

Create an API key under Settings → API and choose its rights there. Send it with every request:

Authorization: Bearer fry_…

Without a valid API key the API responds with 401, if a right is missing with 403. Errors come as JSON with the field error.

Paging

Lists return data and meta (page, per_page, total, total_pages). With ?page=2&per_page=50 you get the next page; per_page is 100 by default, at most 200.

Example: report a deployment from CI

curl -X POST https://fastry.com/api/v1/deployments \
  -H "Authorization: Bearer $FASTRY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://shop.example.com", "commit": "a1b2c3d"}'

Endpoints

POST /api/v1/deployments Right: Report deployments

Mark deployment

Sets a marker on all monitors of the URL(s). A plain domain (without path) matches all monitors of this domain. About 2 minutes later fastry measures every monitor with performance tracking again (default; can be switched off per monitor or with `scan: false`; `scan: true` also measures switched-off monitors). Several deploys in quick succession result in one measurement; it doesn't count towards the scans per day. 404 if no URL matches a monitor.

Fields: author (string) branch (string) commit (string) commit_url (string) deployed_at (string) environment (string) message (string) scan (boolean) url (string) urls (array)

GET /api/v1/monitors Right: Read monitors

List monitors

page
Page, from 1 (default 1)
per_page
Entries per page (default 100, at most 200)
POST /api/v1/monitors Right: Create & change monitors

Create monitor

Fields: monitor.basic_auth (object | null) monitor.check_type (string) monitor.expected_content_type (string) monitor.expected_status_codes (object) monitor.field_rules (array) monitor.follow_redirects (boolean) monitor.host (string) monitor.http_method (string) monitor.interval_seconds (integer) monitor.json_schema (object | null) monitor.keyword (string) monitor.keyword_case_sensitive (boolean) monitor.keyword_mode (string) monitor.location (string) monitor.max_response_ms (integer) monitor.name (string) monitor.packet_count (integer) monitor.packet_loss_threshold (integer) monitor.paused (boolean) monitor.port (integer) monitor.port_expect (string) monitor.psi_device (string) monitor.psi_enabled (boolean) monitor.request_body (string) monitor.request_content_type (string) monitor.request_headers (object | null) monitor.scan_after_deploy (boolean) monitor.timeout_seconds (integer) monitor.udp_payload (string) monitor.udp_payload_template (string) monitor.url (string)

GET /api/v1/monitors/{id} Right: Read monitors

Read a monitor

id
ID of the monitor
PATCH /api/v1/monitors/{id} Right: Create & change monitors

Change monitor

id
ID of the monitor

Fields: monitor.basic_auth (object | null) monitor.check_type (string) monitor.expected_content_type (string) monitor.expected_status_codes (object) monitor.field_rules (array) monitor.follow_redirects (boolean) monitor.host (string) monitor.http_method (string) monitor.interval_seconds (integer) monitor.json_schema (object | null) monitor.keyword (string) monitor.keyword_case_sensitive (boolean) monitor.keyword_mode (string) monitor.location (string) monitor.max_response_ms (integer) monitor.name (string) monitor.packet_count (integer) monitor.packet_loss_threshold (integer) monitor.paused (boolean) monitor.port (integer) monitor.port_expect (string) monitor.psi_device (string) monitor.psi_enabled (boolean) monitor.request_body (string) monitor.request_content_type (string) monitor.request_headers (object | null) monitor.scan_after_deploy (boolean) monitor.timeout_seconds (integer) monitor.udp_payload (string) monitor.udp_payload_template (string) monitor.url (string)

PUT /api/v1/monitors/{id} Right: Create & change monitors

Change monitor (like PATCH)

id
ID of the monitor

Fields: monitor.basic_auth (object | null) monitor.check_type (string) monitor.expected_content_type (string) monitor.expected_status_codes (object) monitor.field_rules (array) monitor.follow_redirects (boolean) monitor.host (string) monitor.http_method (string) monitor.interval_seconds (integer) monitor.json_schema (object | null) monitor.keyword (string) monitor.keyword_case_sensitive (boolean) monitor.keyword_mode (string) monitor.location (string) monitor.max_response_ms (integer) monitor.name (string) monitor.packet_count (integer) monitor.packet_loss_threshold (integer) monitor.paused (boolean) monitor.port (integer) monitor.port_expect (string) monitor.psi_device (string) monitor.psi_enabled (boolean) monitor.request_body (string) monitor.request_content_type (string) monitor.request_headers (object | null) monitor.scan_after_deploy (boolean) monitor.timeout_seconds (integer) monitor.udp_payload (string) monitor.udp_payload_template (string) monitor.url (string)

DELETE /api/v1/monitors/{id} Right: Create & change monitors

Delete monitor

id
ID of the monitor
POST /api/v1/monitors/{id}/check Right: Create & change monitors

Check immediately

id
ID of the monitor
GET /api/v1/rankings Right: Read rankings

Read current rankings

page
Page, from 1 (default 1)
per_page
Entries per page (default 100, at most 200)

Machine-readable as OpenAPI: /api/v1/openapi.json