Logga in

Kodexempel

Det finns inga officiella SDK:er. API:et är litet nog att anropa direkt, och OpenAPI-filen kan användas för att generera en klient.

JavaScript

// Node 18+ (inbyggd fetch)
const BASE = 'https://api.upfinity.app/api/v1';
const headers = {
  Authorization: `Bearer ${process.env.UPFINITY_API_KEY}`,
  'Content-Type': 'application/json',
};

async function api(method, path, body) {
  const res = await fetch(BASE + path, { method, headers, body: body && JSON.stringify(body) });
  if (res.status === 204) return null;
  const data = await res.json();
  if (!res.ok) throw new Error(data.message || data.error);
  return data;
}

// Checkar som är nere just nu
const { sites } = await api('GET', '/sites');
const down = sites.sites.filter((s) => s.lastCheck && !s.lastCheck.isUp && !s.isPaused);
console.log(down.map((s) => s.name));

// Skapa en check i ett projekt
const { projects } = await api('GET', '/projects');
const project = projects.find((p) => p.name === 'DizWeb');
await api('POST', '/sites', {
  name: 'api.dizweb.se',
  url: 'https://api.dizweb.se/health',
  projectId: project?.id,
});

// Pågående incidenter
const { incidents } = await api('GET', '/incidents?status=active');
console.log(incidents.length, 'pågående');

Python

import os
import requests

BASE = 'https://api.upfinity.app/api/v1'
session = requests.Session()
session.headers['Authorization'] = f"Bearer {os.environ['UPFINITY_API_KEY']}"

def api(method, path, body=None):
    res = session.request(method, BASE + path, json=body)
    res.raise_for_status()
    return None if res.status_code == 204 else res.json()

# Upptid senaste 7 dagarna för alla checkar
for site in api('GET', '/sites')['sites']['sites']:
    stats = api('GET', f"/sites/{site['id']}/stats?days=7")
    print(f"{site['name']}: {stats['summary']['uptime']:.2f} %")

# Pausa en check under underhåll och återuppta efteråt
site_id = '...'
api('POST', f'/sites/{site_id}/pause')
# ... underhåll ...
api('POST', f'/sites/{site_id}/resume')

Heartbeat från ett jobb

Heartbeat-adressen hämtas från heartbeatUrl på checken, eller under checken i appen. Anropet kräver ingen API-nyckel. Token i adressen identifierar checken.

# Sist i ett cron-jobb: rapportera att det gick bra
0 2 * * * /opt/backup.sh && curl -fsS -m 10 "https://my.upfinity.app/api/hb/TOKEN" > /dev/null

# Rapportera ett fel med meddelande
curl -fsS -m 10 -X POST -H "Content-Type: application/json" \
  -d '{"status":"fail","message":"Backup misslyckades"}' \
  "https://my.upfinity.app/api/hb/TOKEN"

Generera en klient

npx @openapitools/openapi-generator-cli generate \
  -i https://developer.upfinity.app/openapi.json \
  -g typescript-fetch -o ./upfinity-client