Introduction
A comprehensive monitoring API for tracking application health, managing incidents, and sending notifications.
This API provides comprehensive monitoring capabilities for your applications. You can:
- Monitor application health and uptime
- Manage incidents and their lifecycle
- Subscribe to notifications for critical events
- Organize applications into groups for easier management
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer Bearer {YOUR_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by logging in via the POST /api/auth/login endpoint. Include the token in the Authorization header as Bearer {token}.
Applications
APIs for managing applications including CRUD operations, health checks, and monitoring status.
List applications
requires authentication
Retrieve a paginated list of applications for the authenticated user.
Example request:
curl --request GET \
--get "http://localhost/api/applications?group_id=1" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications"
);
const params = {
"group_id": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'group_id' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Applications retrieved successfully",
"data": {
"data": [
{
"id": 1,
"name": "My Application",
"description": "Application description",
"url": "https://example.com",
"monitoring_enabled": true,
"application_group": {
"id": 1,
"name": "Production Apps"
},
"incidents_count": 2,
"subscriptions_count": 5
}
],
"current_page": 1,
"per_page": 15,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create application
requires authentication
Create a new application for monitoring.
Example request:
curl --request POST \
"http://localhost/api/applications" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"My App\",
\"url\": \"https:\\/\\/example.com\",
\"url_to_watch\": \"m\",
\"expected_http_code\": 15,
\"application_group_id\": 1,
\"description\": \"Production API\",
\"monitoring_enabled\": true
}"
const url = new URL(
"http://localhost/api/applications"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "My App",
"url": "https:\/\/example.com",
"url_to_watch": "m",
"expected_http_code": 15,
"application_group_id": 1,
"description": "Production API",
"monitoring_enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'My App',
'url' => 'https://example.com',
'url_to_watch' => 'm',
'expected_http_code' => 15,
'application_group_id' => 1,
'description' => 'Production API',
'monitoring_enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (201):
{
"success": true,
"message": "Application created successfully",
"data": {
"id": 1,
"name": "My App",
"description": "Production API",
"url": "https://example.com",
"monitoring_enabled": true,
"application_group": null,
"incidents_count": 0,
"subscriptions_count": 0
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Show application
requires authentication
Retrieve detailed information about a specific application.
Example request:
curl --request GET \
--get "http://localhost/api/applications/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Application retrieved successfully",
"data": {
"id": 1,
"name": "My Application",
"description": "Production API",
"url": "https://example.com",
"monitoring_enabled": true,
"application_group": {
"id": 1,
"name": "Production Apps"
},
"incidents": [],
"subscriptions": []
}
}
Example response (403):
{
"message": "This action is unauthorized."
}
Example response (404):
{
"message": "Application not found."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update application
requires authentication
Update the specified application's information.
Example request:
curl --request PUT \
"http://localhost/api/applications/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated App\",
\"url\": \"https:\\/\\/updated-example.com\",
\"url_to_watch\": \"m\",
\"expected_http_code\": 15,
\"application_group_id\": 2,
\"description\": \"Updated description\",
\"monitoring_enabled\": false
}"
const url = new URL(
"http://localhost/api/applications/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Updated App",
"url": "https:\/\/updated-example.com",
"url_to_watch": "m",
"expected_http_code": 15,
"application_group_id": 2,
"description": "Updated description",
"monitoring_enabled": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Updated App',
'url' => 'https://updated-example.com',
'url_to_watch' => 'm',
'expected_http_code' => 15,
'application_group_id' => 2,
'description' => 'Updated description',
'monitoring_enabled' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Application updated successfully",
"data": {
"id": 1,
"name": "Updated App",
"description": "Updated description",
"url": "https://updated-example.com",
"monitoring_enabled": false
}
}
Example response (403):
{
"message": "This action is unauthorized."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"url": [
"The url field must be a valid URL."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete application
requires authentication
Delete the specified application. This action cannot be undone.
Example request:
curl --request DELETE \
"http://localhost/api/applications/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Application deleted successfully",
"data": null
}
Example response (403):
{
"message": "This action is unauthorized."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Trigger health check
requires authentication
Manually trigger a health check for the specified application.
Example request:
curl --request POST \
"http://localhost/api/applications/architecto/check" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications/architecto/check"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto/check';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Health check initiated",
"data": {
"id": 1,
"name": "My Application",
"status": "checking"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get application status
requires authentication
Get the current monitoring status and recent incident information for an application.
Example request:
curl --request GET \
--get "http://localhost/api/applications/architecto/status" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications/architecto/status"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto/status';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Application status retrieved successfully",
"data": {
"application": {
"id": 1,
"name": "My Application",
"monitoring_enabled": true
},
"status": "operational",
"recent_incidents": 2,
"last_check": "2024-01-15T10:30:00Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get application subscribers
requires authentication
Retrieve all users subscribed to notifications for this application.
Example request:
curl --request GET \
--get "http://localhost/api/applications/architecto/subscribers" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/applications/architecto/subscribers"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/applications/architecto/subscribers';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Application subscribers retrieved successfully",
"data": [
{
"id": 1,
"application_id": 1,
"user": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"notification_types": [
"email",
"slack"
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Authentication
APIs for user authentication including registration, login, logout, and profile management.
Register a new user
Create a new user account and return an authentication token.
Example request:
curl --request POST \
"http://localhost/api/auth/register" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"John Doe\",
\"email\": \"john@example.com\",
\"password\": \"secretpassword\",
\"password_confirmation\": \"secretpassword\"
}"
const url = new URL(
"http://localhost/api/auth/register"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "John Doe",
"email": "john@example.com",
"password": "secretpassword",
"password_confirmation": "secretpassword"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/auth/register';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'secretpassword',
'password_confirmation' => 'secretpassword',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (201):
{
"success": true,
"message": "User registered successfully",
"data": {
"user": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"token": "1|abc123..."
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"email": [
"The email has already been taken."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Login user
Authenticate a user with email and password, returning an authentication token.
Example request:
curl --request POST \
"http://localhost/api/auth/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"john@example.com\",
\"password\": \"secretpassword\"
}"
const url = new URL(
"http://localhost/api/auth/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "john@example.com",
"password": "secretpassword"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/auth/login';
$response = $client->post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'john@example.com',
'password' => 'secretpassword',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Login successful",
"data": {
"user": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
"token": "1|abc123..."
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"email": [
"The provided credentials are incorrect."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Logout user
requires authentication
Revoke the current authentication token, effectively logging out the user.
Example request:
curl --request POST \
"http://localhost/api/auth/logout" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/auth/logout"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/auth/logout';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Logged out successfully",
"data": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get authenticated user
requires authentication
Retrieve the profile information of the currently authenticated user.
Example request:
curl --request GET \
--get "http://localhost/api/auth/user" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/auth/user"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/auth/user';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "User profile retrieved successfully",
"data": {
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Endpoints
Remove the specified application group.
requires authentication
Example request:
curl --request DELETE \
"http://localhost/api/application-groups/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/application-groups/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/application-groups/architecto';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Add a single application to a group.
requires authentication
Example request:
curl --request POST \
"http://localhost/api/application-groups/architecto/applications" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"application_id\": \"architecto\"
}"
const url = new URL(
"http://localhost/api/application-groups/architecto/applications"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"application_id": "architecto"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/application-groups/architecto/applications';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'application_id' => 'architecto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Remove a single application from a group.
requires authentication
Example request:
curl --request DELETE \
"http://localhost/api/application-groups/architecto/applications/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/application-groups/architecto/applications/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/application-groups/architecto/applications/architecto';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Store a newly created subscription.
requires authentication
Example request:
curl --request POST \
"http://localhost/api/subscriptions" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"subscribable_type\": \"App\\\\Models\\\\ApplicationGroup\",
\"subscribable_id\": \"architecto\",
\"notification_channels\": [
\"discord\"
]
}"
const url = new URL(
"http://localhost/api/subscriptions"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"subscribable_type": "App\\Models\\ApplicationGroup",
"subscribable_id": "architecto",
"notification_channels": [
"discord"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/subscriptions';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'subscribable_type' => 'App\\Models\\ApplicationGroup',
'subscribable_id' => 'architecto',
'notification_channels' => [
'discord',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update the specified subscription.
requires authentication
Example request:
curl --request PUT \
"http://localhost/api/subscriptions/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notification_type\": \"discord\",
\"email\": \"gbailey@example.net\",
\"webhook_url\": \"http:\\/\\/rempel.com\\/sunt-nihil-accusantium-harum-mollitia\",
\"is_active\": false
}"
const url = new URL(
"http://localhost/api/subscriptions/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notification_type": "discord",
"email": "gbailey@example.net",
"webhook_url": "http:\/\/rempel.com\/sunt-nihil-accusantium-harum-mollitia",
"is_active": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/subscriptions/architecto';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notification_type' => 'discord',
'email' => 'gbailey@example.net',
'webhook_url' => 'http://rempel.com/sunt-nihil-accusantium-harum-mollitia',
'is_active' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Remove the specified subscription.
requires authentication
Example request:
curl --request DELETE \
"http://localhost/api/subscriptions/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/subscriptions/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/subscriptions/architecto';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Incidents
APIs for managing incidents including creation, listing, updates, and status changes.
List incidents
requires authentication
Retrieve a paginated list of incidents for applications owned by the authenticated user.
Example request:
curl --request GET \
--get "http://localhost/api/incidents?application_id=1&status=open&severity=high&start_date=2024-01-01&end_date=2024-12-31" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/incidents"
);
const params = {
"application_id": "1",
"status": "open",
"severity": "high",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'application_id' => '1',
'status' => 'open',
'severity' => 'high',
'start_date' => '2024-01-01',
'end_date' => '2024-12-31',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Incidents retrieved successfully",
"data": {
"data": [
{
"id": 1,
"title": "Server Error",
"description": "500 error on login",
"status": "open",
"severity": "high",
"started_at": "2024-01-15T10:00:00Z",
"application": {
"id": 1,
"name": "My App"
}
}
],
"current_page": 1,
"per_page": 15,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Store a newly created incident.
requires authentication
Example request:
curl --request POST \
"http://localhost/api/incidents" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"b\",
\"description\": \"Eius et animi quos velit et.\",
\"application_id\": \"architecto\",
\"status\": \"OPEN\",
\"severity\": \"CRITICAL\",
\"started_at\": \"2025-08-22T09:20:27\"
}"
const url = new URL(
"http://localhost/api/incidents"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "b",
"description": "Eius et animi quos velit et.",
"application_id": "architecto",
"status": "OPEN",
"severity": "CRITICAL",
"started_at": "2025-08-22T09:20:27"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'b',
'description' => 'Eius et animi quos velit et.',
'application_id' => 'architecto',
'status' => 'OPEN',
'severity' => 'CRITICAL',
'started_at' => '2025-08-22T09:20:27',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update the specified incident.
requires authentication
Example request:
curl --request PUT \
"http://localhost/api/incidents/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"b\",
\"description\": \"Eius et animi quos velit et.\",
\"status\": \"OPEN\",
\"severity\": \"HIGH\",
\"started_at\": \"2025-08-22T09:20:27\"
}"
const url = new URL(
"http://localhost/api/incidents/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "b",
"description": "Eius et animi quos velit et.",
"status": "OPEN",
"severity": "HIGH",
"started_at": "2025-08-22T09:20:27"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents/architecto';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'b',
'description' => 'Eius et animi quos velit et.',
'status' => 'OPEN',
'severity' => 'HIGH',
'started_at' => '2025-08-22T09:20:27',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Remove the specified incident.
requires authentication
Example request:
curl --request DELETE \
"http://localhost/api/incidents/architecto" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/incidents/architecto"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents/architecto';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Mark incident as resolved.
requires authentication
Example request:
curl --request PUT \
"http://localhost/api/incidents/architecto/resolve" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/incidents/architecto/resolve"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents/architecto/resolve';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Reopen a resolved incident.
requires authentication
Example request:
curl --request PUT \
"http://localhost/api/incidents/architecto/reopen" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/incidents/architecto/reopen"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/incidents/architecto/reopen';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Notification Management
APIs for managing user notification settings and testing notification channels.
Get notification settings
requires authentication
Retrieve the current user's notification settings including configured webhook URLs and notification preferences.
Example request:
curl --request GET \
--get "http://localhost/api/user/notification-settings" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/user/notification-settings"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/user/notification-settings';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Notification settings retrieved successfully",
"data": {
"email_notifications": true,
"slack_webhook_url": "https://hooks.slack.com/services/...",
"teams_webhook_url": "https://your-tenant.webhook.office.com/...",
"discord_webhook_url": "https://discord.com/api/webhooks/...",
"default_notification_channels": [
"email"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update notification settings
requires authentication
Update the current user's notification settings including webhook URLs and notification preferences.
Example request:
curl --request PUT \
"http://localhost/api/user/notification-settings" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notification_email\": \"user@example.com\",
\"slack_webhook_url\": \"https:\\/\\/hooks.slack.com\\/services\\/...\",
\"teams_webhook_url\": \"https:\\/\\/your-tenant.webhook.office.com\\/...\",
\"discord_webhook_url\": \"https:\\/\\/discord.com\\/api\\/webhooks\\/...\",
\"email_notifications\": true
}"
const url = new URL(
"http://localhost/api/user/notification-settings"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notification_email": "user@example.com",
"slack_webhook_url": "https:\/\/hooks.slack.com\/services\/...",
"teams_webhook_url": "https:\/\/your-tenant.webhook.office.com\/...",
"discord_webhook_url": "https:\/\/discord.com\/api\/webhooks\/...",
"email_notifications": true
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/user/notification-settings';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notification_email' => 'user@example.com',
'slack_webhook_url' => 'https://hooks.slack.com/services/...',
'teams_webhook_url' => 'https://your-tenant.webhook.office.com/...',
'discord_webhook_url' => 'https://discord.com/api/webhooks/...',
'email_notifications' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Notification settings updated successfully",
"data": {
"id": 1,
"name": "John Doe",
"email": "user@example.com",
"notification_email": "user@example.com",
"slack_webhook_url": "https://hooks.slack.com/services/...",
"teams_webhook_url": null,
"discord_webhook_url": null
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Test notification channel
requires authentication
Send a test notification through the specified channel to verify configuration.
Example request:
curl --request POST \
"http://localhost/api/user/test-notification/slack" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"type\": \"email\"
}"
const url = new URL(
"http://localhost/api/user/test-notification/slack"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"type": "email"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/user/test-notification/slack';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'type' => 'email',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Test slack notification sent successfully",
"data": {
"success": true
}
}
Example response (400):
{
"success": false,
"message": "Slack webhook URL not configured"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get notification history
requires authentication
Retrieve statistics and history of sent notifications for the current user.
Example request:
curl --request GET \
--get "http://localhost/api/user/notification-history" \
--header "Authorization: Bearer Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/user/notification-history"
);
const headers = {
"Authorization": "Bearer Bearer {YOUR_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/user/notification-history';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer Bearer {YOUR_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "Notification history retrieved successfully",
"data": {
"total_sent": 0,
"last_7_days": 0,
"by_type": {
"email": 0,
"slack": 0,
"teams": 0,
"discord": 0
},
"recent_notifications": []
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
System Status
APIs for checking system status and health.
Get API status
Check if the API is running and get basic system information.
Example request:
curl --request GET \
--get "http://localhost/api/status" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"http://localhost/api/status"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'http://localhost/api/status';
$response = $client->get(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"success": true,
"message": "API is running",
"data": {
"version": "1.0.0",
"status": "healthy",
"timestamp": "2025-08-22T01:58:09.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.