PHP code example of openstatus / sdk-php

1. Go to this page and download the library: Download openstatus/sdk-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

openstatus / sdk-php example snippets




penstatus\Monitor\V1\CreateHTTPMonitorRequest;
use Openstatus\Monitor\V1\HTTPMethod;
use Openstatus\Monitor\V1\HTTPMonitor;
use Openstatus\Monitor\V1\ListMonitorsRequest;
use Openstatus\Monitor\V1\NumberComparator;
use Openstatus\Monitor\V1\Periodicity;
use Openstatus\Monitor\V1\Region;
use Openstatus\Monitor\V1\StatusCodeAssertion;
use Openstatus\Sdk\ClientOptions;
use Openstatus\Sdk\OpenstatusClient;

$client = new OpenstatusClient(new ClientOptions(
    apiKey: getenv('OPENSTATUS_API_KEY') ?: null,
));

// Create a monitor
$response = $client->monitor->v1->monitorService->createHTTPMonitor(
    new CreateHTTPMonitorRequest([
        'monitor' => new HTTPMonitor([
            'name' => 'My API',
            'url' => 'https://api.example.com/health',
            'periodicity' => Periodicity::PERIODICITY_1M,
            'method' => HTTPMethod::HTTP_METHOD_GET,
            'regions' => [
                Region::REGION_FLY_AMS,
                Region::REGION_FLY_IAD,
                Region::REGION_FLY_SYD,
            ],
            'active' => true,
            'status_code_assertions' => [
                new StatusCodeAssertion([
                    'comparator' => NumberComparator::NUMBER_COMPARATOR_EQUAL,
                    'target' => 200,
                ]),
            ],
        ]),
    ]),
);

$monitor = $response->getMonitor();
printf("Monitor created: %s\n", $monitor?->getId() ?? 'unknown');

// List all monitors
$list = $client->monitor->v1->monitorService->listMonitors(new ListMonitorsRequest());
printf("Found %d monitors\n", $list->getTotalSize());

use Openstatus\Sdk\ClientOptions;
use Openstatus\Sdk\OpenstatusClient;

$client = new OpenstatusClient(new ClientOptions(
    apiKey: getenv('OPENSTATUS_API_KEY') ?: null,
));

// No need to pass headers on each call.
$client->monitor->v1->monitorService->listMonitors(new ListMonitorsRequest());

$client->monitor->v1->monitorService->listMonitors(
    new ListMonitorsRequest(),
    ['x-trace-id' => 'trace-abc'],
);

> $client = new OpenstatusClient(new ClientOptions(
>     apiKey: getenv('OPENSTATUS_API_KEY') ?: null,
> ));
> $service = $client->monitor->v1->monitorService;
> 

use Openstatus\Monitor\V1\CreateHTTPMonitorRequest;
use Openstatus\Monitor\V1\HTTPMethod;
use Openstatus\Monitor\V1\HTTPMonitor;
use Openstatus\Monitor\V1\Periodicity;
use Openstatus\Monitor\V1\Region;

$response = $service->createHTTPMonitor(new CreateHTTPMonitorRequest([
    'monitor' => new HTTPMonitor([
        'name' => 'My Website',
        'url' => 'https://example.com',
        'periodicity' => Periodicity::PERIODICITY_1M,
        'method' => HTTPMethod::HTTP_METHOD_GET,
        'regions' => [Region::REGION_FLY_AMS, Region::REGION_FLY_IAD],
        'active' => true,
    ]),
]));

use Openstatus\Monitor\V1\UpdateHTTPMonitorRequest;

$service->updateHTTPMonitor(new UpdateHTTPMonitorRequest([
    'id' => 'mon_123',
    'monitor' => new HTTPMonitor([
        'name' => 'Renamed monitor',
        'url' => 'https://example.com',
        'periodicity' => Periodicity::PERIODICITY_5M,
        'active' => true,
    ]),
]));

use Openstatus\Monitor\V1\CreateTCPMonitorRequest;
use Openstatus\Monitor\V1\TCPMonitor;

$service->createTCPMonitor(new CreateTCPMonitorRequest([
    'monitor' => new TCPMonitor([
        'name' => 'Postgres prod',
        'url' => 'db.example.com:5432',
        'periodicity' => Periodicity::PERIODICITY_1M,
        'regions' => [Region::REGION_FLY_AMS],
        'active' => true,
    ]),
]));

use Openstatus\Monitor\V1\CreateDNSMonitorRequest;
use Openstatus\Monitor\V1\DNSMonitor;
use Openstatus\Monitor\V1\DNSRecordType;

$service->createDNSMonitor(new CreateDNSMonitorRequest([
    'monitor' => new DNSMonitor([
        'name' => 'apex A record',
        'url' => 'example.com',
        'record_type' => DNSRecordType::DNS_RECORD_TYPE_A,
        'periodicity' => Periodicity::PERIODICITY_5M,
        'regions' => [Region::REGION_FLY_IAD],
        'active' => true,
    ]),
]));

use Openstatus\Monitor\V1\GetMonitorRequest;

$response = $service->getMonitor(new GetMonitorRequest(['id' => 'mon_123']));
$config = $response->getMonitor();
if ($config?->getHttp() !== null) {
    echo $config->getHttp()->getUrl();
}

use Openstatus\Monitor\V1\ListMonitorsRequest;

$response = $service->listMonitors(new ListMonitorsRequest(['limit' => 100, 'offset' => 0]));
foreach ($response->getHttpMonitors() as $monitor) {
    echo $monitor->getName() . "\n";
}

use Openstatus\Monitor\V1\TriggerMonitorRequest;

$service->triggerMonitor(new TriggerMonitorRequest(['id' => 'mon_123']));

use Openstatus\Monitor\V1\DeleteMonitorRequest;

$service->deleteMonitor(new DeleteMonitorRequest(['id' => 'mon_123']));

use Openstatus\Monitor\V1\GetMonitorStatusRequest;
use Openstatus\Monitor\V1\MonitorStatus;
use Openstatus\Monitor\V1\Region;

$response = $service->getMonitorStatus(new GetMonitorStatusRequest(['id' => 'mon_123']));
foreach ($response->getRegions() as $region) {
    printf(
        "%s: %s\n",
        Region::name($region->getRegion()),
        MonitorStatus::name($region->getStatus()),
    );
}

use Openstatus\Monitor\V1\GetMonitorSummaryRequest;
use Openstatus\Monitor\V1\TimeRange;

$summary = $service->getMonitorSummary(new GetMonitorSummaryRequest([
    'id' => 'mon_123',
    'time_range' => TimeRange::TIME_RANGE_7D,
]));
printf("p95: %dms\n", (int) $summary->getP95());

use Openstatus\Monitor\V1\ListMonitorHTTPResponseLogsRequest;

$response = $service->listMonitorHTTPResponseLogs(new ListMonitorHTTPResponseLogsRequest([
    'id' => 'mon_123',
    'limit' => 50,
]));
$pagination = $response->getPagination();
foreach ($response->getLogs() as $log) {
    printf("%dms %s\n", $log->getLatency(), $log->hasStatusCode() ? (string) $log->getStatusCode() : '—');
}
if ($pagination?->getHasMore()) {
    // pass $pagination->getNextOffset() into the next request
}

use Openstatus\Monitor\V1\GetMonitorHTTPResponseLogRequest;

$response = $service->getMonitorHTTPResponseLog(new GetMonitorHTTPResponseLogRequest([
    'id' => 'mon_123',
    'log_id' => 'log_abc',
]));
$detail = $response->getLog();
if ($detail !== null) {
    foreach ($detail->getHeaders() as $key => $value) {
        printf("%s: %s\n", $key, $value);
    }
}

use Openstatus\Health\V1\CheckRequest;
use Openstatus\Health\V1\CheckResponse\ServingStatus;

$response = $client->health->v1->healthService->check(new CheckRequest());
echo ServingStatus::name($response->getStatus());

use Openstatus\Status_report\V1\CreateStatusReportRequest;
use Openstatus\Status_report\V1\StatusReport;
use Openstatus\Status_report\V1\StatusReportStatus;

$service = $client->statusReport->v1->statusReportService;
$response = $service->createStatusReport(new CreateStatusReportRequest([
    'report' => new StatusReport([
        'title' => 'Elevated error rate',
        'status' => StatusReportStatus::STATUS_REPORT_STATUS_INVESTIGATING,
        'status_page_ids' => ['page_123'],
    ]),
]));

use Openstatus\Status_report\V1\GetStatusReportRequest;
use Openstatus\Status_report\V1\ListStatusReportsRequest;
use Openstatus\Status_report\V1\UpdateStatusReportRequest;
use Openstatus\Status_report\V1\DeleteStatusReportRequest;

$service->getStatusReport(new GetStatusReportRequest(['id' => 'rep_123']));
$service->listStatusReports(new ListStatusReportsRequest());
$service->updateStatusReport(new UpdateStatusReportRequest(['id' => 'rep_123', 'report' => $updated]));
$service->deleteStatusReport(new DeleteStatusReportRequest(['id' => 'rep_123']));

use Openstatus\Status_report\V1\AddStatusReportUpdateRequest;
use Openstatus\Status_report\V1\StatusReportUpdate;

$service->addStatusReportUpdate(new AddStatusReportUpdateRequest([
    'report_id' => 'rep_123',
    'update' => new StatusReportUpdate([
        'status' => StatusReportStatus::STATUS_REPORT_STATUS_IDENTIFIED,
        'message' => 'Root cause identified, fix deploying.',
    ]),
]));

use Openstatus\Status_page\V1\CreateStatusPageRequest;
use Openstatus\Status_page\V1\PageTheme;
use Openstatus\Status_page\V1\StatusPage;

$service = $client->statusPage->v1->statusPageService;
$service->createStatusPage(new CreateStatusPageRequest([
    'page' => new StatusPage([
        'title' => 'Acme Status',
        'slug' => 'acme',
        'theme' => PageTheme::PAGE_THEME_LIGHT,
    ]),
]));

$service->getStatusPage(new GetStatusPageRequest(['id' => 'page_123']));
$service->listStatusPages(new ListStatusPagesRequest());
$service->updateStatusPage(new UpdateStatusPageRequest(['id' => 'page_123', 'page' => $updatedPage]));
$service->deleteStatusPage(new DeleteStatusPageRequest(['id' => 'page_123']));

$content = $service->getStatusPageContent(new GetStatusPageContentRequest(['slug' => 'acme']));
$status = $service->getOverallStatus(new GetOverallStatusRequest(['id' => 'page_123']));

use Openstatus\Status_page\V1\AddMonitorComponentRequest;
use Openstatus\Status_page\V1\AddStaticComponentRequest;
use Openstatus\Status_page\V1\RemoveComponentRequest;
use Openstatus\Status_page\V1\UpdateComponentRequest;

$service->addMonitorComponent(new AddMonitorComponentRequest([
    'page_id' => 'page_123',
    'monitor_id' => 'mon_456',
    'name' => 'API',
]));
$service->addStaticComponent(new AddStaticComponentRequest([
    'page_id' => 'page_123',
    'name' => 'Marketing site',
]));
$service->updateComponent(new UpdateComponentRequest(['id' => 'comp_1', 'name' => 'Renamed']));
$service->removeComponent(new RemoveComponentRequest(['id' => 'comp_1']));

use Openstatus\Status_page\V1\CreateComponentGroupRequest;
use Openstatus\Status_page\V1\DeleteComponentGroupRequest;
use Openstatus\Status_page\V1\UpdateComponentGroupRequest;

$service->createComponentGroup(new CreateComponentGroupRequest(['page_id' => 'page_123', 'name' => 'Edge']));
$service->updateComponentGroup(new UpdateComponentGroupRequest(['id' => 'grp_1', 'name' => 'Edge servers']));
$service->deleteComponentGroup(new DeleteComponentGroupRequest(['id' => 'grp_1']));

use Openstatus\Status_page\V1\CreatePageSubscriptionRequest;
use Openstatus\Status_page\V1\ListSubscribersRequest;
use Openstatus\Status_page\V1\SubscribeToPageRequest;
use Openstatus\Status_page\V1\UnsubscribeFromPageRequest;

$service->subscribeToPage(new SubscribeToPageRequest(['page_id' => 'page_123', 'email' => '[email protected]']));
$service->createPageSubscription(new CreatePageSubscriptionRequest(['page_id' => 'page_123', 'email' => '[email protected]']));
$service->listSubscribers(new ListSubscribersRequest(['page_id' => 'page_123']));
$service->unsubscribeFromPage(new UnsubscribeFromPageRequest(['token' => 'unsub_token']));

use Openstatus\Maintenance\V1\CreateMaintenanceRequest;
use Openstatus\Maintenance\V1\DeleteMaintenanceRequest;
use Openstatus\Maintenance\V1\GetMaintenanceRequest;
use Openstatus\Maintenance\V1\ListMaintenancesRequest;
use Openstatus\Maintenance\V1\Maintenance;
use Openstatus\Maintenance\V1\UpdateMaintenanceRequest;

$service = $client->maintenance->v1->maintenanceService;

$service->createMaintenance(new CreateMaintenanceRequest([
    'maintenance' => new Maintenance([
        'title' => 'Database migration',
        'page_id' => 'page_123',
        'from_timestamp' => 1730000000000,
        'to_timestamp' => 1730003600000,
    ]),
]));
$service->getMaintenance(new GetMaintenanceRequest(['id' => 'mnt_1']));
$service->listMaintenances(new ListMaintenancesRequest(['page_id' => 'page_123']));
$service->updateMaintenance(new UpdateMaintenanceRequest(['id' => 'mnt_1', 'maintenance' => $updated]));
$service->deleteMaintenance(new DeleteMaintenanceRequest(['id' => 'mnt_1']));

use Openstatus\Notification\V1\CreateNotificationRequest;
use Openstatus\Notification\V1\Notification;
use Openstatus\Notification\V1\NotificationProvider;
use Openstatus\Notification\V1\NotificationData;
use Openstatus\Notification\V1\SlackData;

$service = $client->notification->v1->notificationService;

$service->createNotification(new CreateNotificationRequest([
    'notification' => new Notification([
        'name' => 'Eng channel',
        'provider' => NotificationProvider::NOTIFICATION_PROVIDER_SLACK,
        'data' => new NotificationData([
            'slack' => new SlackData(['webhook_url' => 'https://hooks.slack.com/...']),
        ]),
    ]),
]));

use Openstatus\Notification\V1\CheckNotificationLimitRequest;
use Openstatus\Notification\V1\DeleteNotificationRequest;
use Openstatus\Notification\V1\GetNotificationRequest;
use Openstatus\Notification\V1\ListNotificationsRequest;
use Openstatus\Notification\V1\SendTestNotificationRequest;
use Openstatus\Notification\V1\UpdateNotificationRequest;

$service->getNotification(new GetNotificationRequest(['id' => 'notif_1']));
$service->listNotifications(new ListNotificationsRequest());
$service->updateNotification(new UpdateNotificationRequest(['id' => 'notif_1', 'notification' => $updated]));
$service->deleteNotification(new DeleteNotificationRequest(['id' => 'notif_1']));
$service->sendTestNotification(new SendTestNotificationRequest(['id' => 'notif_1']));
$service->checkNotificationLimit(new CheckNotificationLimitRequest());

use Openstatus\Monitor\V1\BodyAssertion;
use Openstatus\Monitor\V1\HeaderAssertion;
use Openstatus\Monitor\V1\NumberComparator;
use Openstatus\Monitor\V1\StatusCodeAssertion;
use Openstatus\Monitor\V1\StringComparator;

$statusCode = new StatusCodeAssertion([
    'comparator' => NumberComparator::NUMBER_COMPARATOR_EQUAL,
    'target' => 200,
]);

$body = new BodyAssertion([
    'comparator' => StringComparator::STRING_COMPARATOR_CONTAINS,
    'target' => 'ok',
]);

$header = new HeaderAssertion([
    'key' => 'content-type',
    'comparator' => StringComparator::STRING_COMPARATOR_EQUAL,
    'target' => 'application/json',
]);

use Openstatus\Monitor\V1\HTTPMethod;
use Openstatus\Monitor\V1\Periodicity;

HTTPMethod::HTTP_METHOD_GET;          // int 1
HTTPMethod::name(HTTPMethod::HTTP_METHOD_GET); // "HTTP_METHOD_GET"
Periodicity::PERIODICITY_1M;          // int 2

$timestamp = (int) $log->getTimestamp();   // ms since epoch
$p95Ms = (int) $summary->getP95();

use Openstatus\Sdk\Exception\AuthenticationException;
use Openstatus\Sdk\Exception\InvalidArgumentException;
use Openstatus\Sdk\Exception\NotFoundException;
use Openstatus\Sdk\Exception\OpenstatusException;
use Openstatus\Sdk\Exception\RateLimitException;
use Openstatus\Sdk\Exception\ServiceUnavailableException;

try {
    $client->monitor->v1->monitorService->createHTTPMonitor($req);
} catch (AuthenticationException $e) {
    // 401 / connectCode "unauthenticated"
} catch (NotFoundException $e) {
    // 404 / "not_found"
} catch (InvalidArgumentException $e) {
    // 400 / "invalid_argument" — inspect $e->details() for field violations
    foreach ($e->details() as $detail) {
        printf("%s: %s\n", $detail->type, $detail->value);
    }
} catch (RateLimitException $e) {
    // 429 / "resource_exhausted"
} catch (ServiceUnavailableException $e) {
    // 5xx, network errors, or non-Connect responses
} catch (OpenstatusException $e) {
    // anything else
    printf("code=%s http=%d body=%s\n", $e->connectCode(), $e->httpStatus(), $e->rawBody());
}

public function __construct(private OpenstatusClient $openstatus) {}

$this->app->singleton(\Openstatus\Sdk\OpenstatusClient::class, function (): \Openstatus\Sdk\OpenstatusClient {
    return new \Openstatus\Sdk\OpenstatusClient(new \Openstatus\Sdk\ClientOptions(
        apiKey: env('OPENSTATUS_API_KEY'),
    ));
});

$client = app(\Openstatus\Sdk\OpenstatusClient::class);

$client = new OpenstatusClient(new ClientOptions(
    apiKey: getenv('OPENSTATUS_API_KEY') ?: null,
    httpClient: $myPsr18Client,
));

$client = new OpenstatusClient(new ClientOptions(
    apiKey: getenv('OPENSTATUS_API_KEY') ?: null,
    logger: $monolog,
));
bash
composer