MENU navbar-image

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
    }
}
 

Request      

GET api/applications

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

group_id   integer  optional  

optional Filter by application group ID. Example: 1

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."
        ]
    }
}
 

Request      

POST api/applications

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The application name. Example: My App

url   string   

The application URL to monitor. Example: https://example.com

url_to_watch   string  optional  

Must be a valid URL. Must not be greater than 255 characters. Example: m

expected_http_code   integer  optional  

Must be at least 100. Must not be greater than 599. Example: 15

application_group_id   integer  optional  

optional Associate with an application group. Example: 1

description   string  optional  

optional The application description. Example: Production API

monitoring_enabled   boolean  optional  

optional Enable monitoring for this application. Example: true

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."
}
 

Request      

GET api/applications/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

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."
        ]
    }
}
 

Request      

PUT api/applications/{id}

PATCH api/applications/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

Body Parameters

name   string  optional  

optional The application name. Example: Updated App

url   string  optional  

optional The application URL. Example: https://updated-example.com

url_to_watch   string  optional  

Must be a valid URL. Must not be greater than 255 characters. Example: m

expected_http_code   integer  optional  

Must be at least 100. Must not be greater than 599. Example: 15

application_group_id   integer  optional  

optional Change application group. Example: 2

description   string  optional  

optional The application description. Example: Updated description

monitoring_enabled   boolean  optional  

optional Enable/disable monitoring. Example: false

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."
}
 

Request      

DELETE api/applications/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

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"
    }
}
 

Request      

POST api/applications/{application_id}/check

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

application_id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

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"
    }
}
 

Request      

GET api/applications/{application_id}/status

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

application_id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

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"
            ]
        }
    ]
}
 

Request      

GET api/applications/{application_id}/subscribers

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

application_id   string   

The ID of the application. Example: architecto

application   integer   

The application ID. Example: 1

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."
        ]
    }
}
 

Request      

POST api/auth/register

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The user's full name. Example: John Doe

email   string   

The user's email address. Example: john@example.com

password   string   

The user's password (minimum 8 characters). Example: secretpassword

password_confirmation   string   

Password confirmation. Example: secretpassword

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."
        ]
    }
}
 

Request      

POST api/auth/login

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

email   string   

The user's email address. Example: john@example.com

password   string   

The user's password. Example: secretpassword

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
}
 

Request      

POST api/auth/logout

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

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"
    }
}
 

Request      

GET api/auth/user

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

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));

Request      

DELETE api/application-groups/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application group. Example: architecto

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));

Request      

POST api/application-groups/{applicationGroup_id}/applications

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

applicationGroup_id   string   

The ID of the applicationGroup. Example: architecto

Body Parameters

application_id   string   

The id of an existing record in the applications table. Example: architecto

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));

Request      

DELETE api/application-groups/{applicationGroup_id}/applications/{application_id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

applicationGroup_id   string   

The ID of the applicationGroup. Example: architecto

application_id   string   

The ID of the application. Example: architecto

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));

Request      

POST api/subscriptions

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

subscribable_type   string   

Example: App\Models\ApplicationGroup

Must be one of:
  • App\Models\Application
  • App\Models\ApplicationGroup
subscribable_id   string   

Example: architecto

notification_channels   string[]  optional  
Must be one of:
  • email
  • slack
  • teams
  • discord

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));

Request      

PUT api/subscriptions/{id}

PATCH api/subscriptions/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the subscription. Example: architecto

Body Parameters

notification_type   string  optional  

Example: discord

Must be one of:
  • email
  • slack
  • teams
  • discord
email   string  optional  

This field is required when notification_type is email. Must be a valid email address. Must not be greater than 255 characters. Example: gbailey@example.net

webhook_url   string  optional  

This field is required when notification_type is slack, teams, or discord. Must be a valid URL. Must not be greater than 500 characters. Example: http://rempel.com/sunt-nihil-accusantium-harum-mollitia

is_active   boolean  optional  

Example: false

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));

Request      

DELETE api/subscriptions/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the subscription. Example: architecto

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
    }
}
 

Request      

GET api/incidents

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

application_id   integer  optional  

optional Filter by application ID. Example: 1

status   string  optional  

optional Filter by status (open, resolved, investigating). Example: open

severity   string  optional  

optional Filter by severity (low, medium, high, critical). Example: high

start_date   string  optional  

optional Filter incidents after this date. Example: 2024-01-01

end_date   string  optional  

optional Filter incidents before this date. Example: 2024-12-31

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));

Request      

POST api/incidents

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

title   string   

Must not be greater than 255 characters. Example: b

description   string   

Example: Eius et animi quos velit et.

application_id   string   

The id of an existing record in the applications table. Example: architecto

status   string  optional  

Example: OPEN

Must be one of:
  • OPEN
  • IN_PROGRESS
  • RESOLVED
  • CLOSED
severity   string  optional  

Example: CRITICAL

Must be one of:
  • LOW
  • HIGH
  • CRITICAL
started_at   string  optional  

Must be a valid date. Example: 2025-08-22T09:20:27

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));

Request      

PUT api/incidents/{id}

PATCH api/incidents/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the incident. Example: architecto

Body Parameters

title   string  optional  

Must not be greater than 255 characters. Example: b

description   string  optional  

Example: Eius et animi quos velit et.

status   string  optional  

Example: OPEN

Must be one of:
  • OPEN
  • IN_PROGRESS
  • RESOLVED
  • CLOSED
severity   string  optional  

Example: HIGH

Must be one of:
  • LOW
  • HIGH
  • CRITICAL
started_at   string  optional  

Must be a valid date. Example: 2025-08-22T09:20:27

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));

Request      

DELETE api/incidents/{id}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the incident. Example: architecto

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));

Request      

PUT api/incidents/{incident_id}/resolve

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

incident_id   string   

The ID of the incident. Example: architecto

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));

Request      

PUT api/incidents/{incident_id}/reopen

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

incident_id   string   

The ID of the incident. Example: architecto

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"
        ]
    }
}
 

Request      

GET api/user/notification-settings

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

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
    }
}
 

Request      

PUT api/user/notification-settings

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

notification_email   string  optional  

optional Email address for notifications. Example: user@example.com

slack_webhook_url   string  optional  

optional Slack webhook URL for notifications. Example: https://hooks.slack.com/services/...

teams_webhook_url   string  optional  

optional Microsoft Teams webhook URL. Example: https://your-tenant.webhook.office.com/...

discord_webhook_url   string  optional  

optional Discord webhook URL. Example: https://discord.com/api/webhooks/...

email_notifications   boolean  optional  

optional Whether to enable email notifications. Example: true

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"
}
 

Request      

POST api/user/test-notification/{type}

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

type   string   

The notification channel to test. Must be one of: email, slack, teams, discord. Example: slack

Body Parameters

type   string   

Example: email

Must be one of:
  • email
  • slack
  • teams
  • discord

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": []
    }
}
 

Request      

GET api/user/notification-history

Headers

Authorization      

Example: Bearer Bearer {YOUR_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

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"
    }
}
 

Request      

GET api/status

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json