Monitor endpoint availability with configurable checks and alerting
Track the availability and response time of your websites, APIs, and services with scheduled health checks. Uptime monitoring gives you historical uptime percentages, response time trends, and instant alerting when a target goes down — critical for SLA reporting, incident response, and customer trust.
X-API-Key header with every request.
All requests go through the API gateway which handles authentication, rate limiting, and usage tracking.
{
"url": "https://example.com",
"interval": 60,
"timeout": 10
}
| Field | Type | Description |
|---|---|---|
url |
string |
Target URL |
interval |
integer |
Check interval in seconds |
timeout |
integer |
Request timeout in seconds |
{
"id": 1,
"url": "https://example.com",
"status": "UP",
"responseTime": 245,
"uptime": 99.97,
"lastChecked": "2026-03-25T14:30:00Z"
}
| Field | Type | Description |
|---|---|---|
id |
string |
Unique identifier |
url |
string |
Target URL |
status |
string |
Field value |
responseTime |
integer |
Field value |
uptime |
number |
Field value |
lastChecked |
string |
Field value |
| Status | Meaning |
|---|---|
200 | Request completed successfully |
400 | Bad request — invalid or missing parameters |
401 | Missing or invalid X-API-Key header |
429 | Rate limit exceeded — check Retry-After header |
500 | Internal server error |
400 Invalid URL formatRequest that triggers this:
{"url": "not a url", "interval": 60}
Error response:
{"type": "/problems/validation-error", "title": "Invalid URL", "status": 400, "detail": "'not a url' is not a valid URL"}
How to fix: Use a valid HTTP or HTTPS URL (e.g., https://example.com). Ensure the URL starts with http:// or https://.
400 Invalid intervalRequest that triggers this:
{"url": "https://example.com", "interval": 5}
Error response:
{"type": "/problems/validation-error", "title": "Invalid Interval", "status": 400, "detail": "Minimum interval is 60 seconds"}
How to fix: Set interval to at least 60 seconds. Use larger intervals for cost efficiency.
curl -X POST /v1/monitor/targets \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"url": "https://example.com",
"interval": 60,
"timeout": 10
}'
// Node.js (18+) or modern browser
const response = await fetch("/v1/monitor/targets", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "https://example.com",
"interval": 60,
"timeout": 10
}),
});
const data = await response.json();
console.log(response.status, data);
import requests
response = requests.post(
"/v1/monitor/targets",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"url": "https://example.com",
"interval": 60,
"timeout": 10
},
)
print(response.status_code)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"url": "https://example.com",
"interval": 60,
"timeout": 10
}`)
req, _ := http.NewRequest("POST", "/v1/monitor/targets", body)
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(resp.StatusCode)
fmt.Println(string(data))
}
{
"name": "uptime_monitor",
"description": "Monitor endpoint availability with configurable checks and alerting",
"inputSchema": {
"type": "object",
"properties": {
"api_key": {"type": "string", "description": "Your Orovai API key"},
"request": {"type": "object", "description": "Request body"}
},
"required": ["api_key", "request"]
},
"endpoint": "/v1/monitor/targets",
"method": "POST",
"headers": {
"X-API-Key": "{{api_key}}",
"Content-Type": "application/json"
}
}