Get connection health
Return a health overview for the calling agency's connections: counts, connections in an error state, stale connections, connections failing repeatedly, connections that succeeded while committing nothing, and per-connection failure rates.
Staleness is measured against each connection's OWN cadence, not one flat rule: 48 hours for an ordinary connection, and a week plus 48 hours for one carrying a sync_dow. A weekly connection is more than 48 hours old on five days out of seven by design, and a health list that is permanently red for a healthy connection just teaches you to skip it — the genuinely broken connection is in the same list.
needs_attention is the single number worth putting on a dashboard — the count of distinct connections in any of those lists. Everything else here is reporting; that one is a work queue.
All of it derives from Airbyte's sync notifications, so a workspace where notifications were never registered reports a perfectly healthy zero. Check notifications_registered_at on GET /config.
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/health" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/health"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/health", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/health", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/health')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"total_connections": 8,
"active": 7,
"error_connections": [
{
"id": "example_string",
"client_id": "example_string",
"platform": "example_string",
"error_message": "example_string"
}
],
"stale_connections": [
{
"id": "example_string",
"client_id": "example_string",
"platform": "example_string",
"last_sync_at": "2024-12-25T10:00:00Z"
}
],
"failing_connections": [
{
"id": "example_string",
"client_id": "example_string",
"platform": "example_string",
"consecutive_failures": 4,
"error_type": "example_string",
"error_message": "example_string",
"log_url": "example_string"
}
],
"no_data_connections": [
{
"id": "example_string",
"client_id": "example_string",
"platform": "example_string",
"last_sync_at": "2024-12-25T10:00:00Z",
"records_committed": 0
}
],
"needs_attention": 2,
"failure_rates": {}
}
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
/health
Target server for requests. Edit to use your own host.
Agency key as bearer token, format Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Location secret key as bearer token, format Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.
Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key as bearer token, format Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Bearer token. Location secret key as bearer token, format Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.