Authentication
POST /auth/login
Get a JWT access token. Tokens expire after 1 hour. Include the token in all other requests via Authorization: Bearer <token>.
Request Body:
Your username
Your password
Centralized API proxy for weather, location, telephone, NASA, books, email, iOS automation, and grade tracking — with 4-level role-based access control
Base URL: https://api.novaroma-homelab.uk
Try out endpoints interactively
Detailed API reference
Check API status
Get a JWT access token. Tokens expire after 1 hour. Include the token in all other requests via Authorization: Bearer <token>.
Your username
Your password
Current weather for a city. Returns temperature, humidity, wind speed, and conditions.
City name (e.g. "London", "New York")
metric (default), imperial, or standard
Hourly weather forecast for the next 48 hours. Requires coordinates.
Latitude
Longitude
Units of measurement (default: metric)
Daily weather forecast for up to 16 days. Requires coordinates.
Latitude
Longitude
Number of days (1–16, default: 7)
Units of measurement (default: metric)
Convert city names or addresses to geographic coordinates (latitude / longitude).
City name or address to geocode
Get geographic location based on IP address. Detects country, region, city, and coordinates.
IP address to look up (optional — uses your IP if omitted)
Search the Swiss telephone directory (search.ch) for people or businesses. Returns results as XML.
Name to search for (person or business)
Location filter (city or canton)
Max results (capped at 200)
NASA Astronomy Picture of the Day. Returns the image URL, title, and explanation.
Date in YYYY-MM-DD format (default: today)
Return high-definition image URL (true / false)
Earth satellite images from NASA's EPIC camera. collection is natural or enhanced.
Date in YYYY-MM-DD format (default: most recent available)
List all dates that have EPIC imagery available for the given collection.
Search Open Library for books, authors, or works.
Search query
Filter by author name
Max results (default: 10)
Get book details by ISBN or Open Library ID.
Comma-separated keys (e.g. ISBN:0451526538)
Get a book cover image. type is b (book), a (author), or w (work).
S, M (default), or L
Get author details by Open Library author ID (e.g. OL26320A).
Browse books by subject (e.g. science_fiction, history).
Max results (default: 20)
Get work information by Open Library work ID (e.g. OL27516M).
Internet Archive S3-compatible API proxy. Covers, metadata, and bulk data access.
Send an email via Resend. Full control over sender and recipients. API key is stored server-side.
Email subject
Email body in HTML
Sender (optional, e.g. "App <[email protected]>")
Simplified email — domain is pre-configured server-side, just provide usernames.
Email subject
Email body in HTML
Sender display name (optional)
Every request is rate-limited at two layers: your role limit (requests / hour) and per-API quota (shared across all users). Current limits are returned in X-RateLimit-* response headers.
Your current rate limit status: how many calls you have used and how many remain this hour.
Current quota usage for every external API (NASA, OpenWeather, etc.).
Full overview: all role limits and all API quotas.
Push-based health monitoring for custom software and hardware. Devices call in their own status via heartbeat endpoints, and clients read the aggregated health dashboard. Supports a three-tier control system for flexible device management.
1. server_enabled (Hard Block)
Server-side API blocking. When false → 503 response, nothing gets through. Complete shutdown.
2. is_active (Soft Signal)
Device-side signal. Device sees this in heartbeat response and can stop itself. Heartbeats still transmit.
3. health (Self-Report)
Device reports own status: ok, warning, error, or killed. Full client control.
List all registered software with health status, last heartbeat time, and staleness indicator (stale if no heartbeat in 5 minutes).
Get health status for one software service.
Software pushes its own heartbeat. Must be registered first via /settings/software.
ok, warning, error, or killed
Custom JSON data (version, uptime, status, etc.)
List all registered hardware devices with health status, config, and staleness indicator.
Get health status and config for one hardware device.
Device pushes heartbeat with optional config and details. Must be registered first via /settings/hardware.
ok, warning, error, or killed
Device config (IP, firmware, location, etc.)
Custom JSON data (CPU temp, uptime, status, etc.)
Proxy for the sercraft.ch Grade Tracker API.
Login first to get an X-Grade-Token, then include it in all subsequent grade requests.
Login to the grade tracker. Returns an X-Grade-Token to use in all other grade requests.
Grade tracker username
Grade tracker password
Register a new grade tracker account.
Get current grade tracker user profile.
Change username or password. Provide new_password or new_username along with current password.
Delete the grade tracker account.
List all subjects. Pass subject_id to get a single subject.
Create a new subject.
Initial average
Initial points
Number of exams
Update a subject's name or average. Requires subject_id.
Delete a subject. Requires subject_id.
Get all exams for a specific subject. Requires subject_id.
List all exams. Pass exam_id to get a single exam.
Create a new exam entry.
YYYY-MM-DD (defaults to today)
Update an exam. Requires exam_id and at least one field to change.
Delete an exam. Requires exam_id.
Live configuration — changes take effect immediately, no server restart needed. Role badges show the minimum role required.
List all user accounts.
Create a new user.
user, admin, superAdmin, or Root (default: user)
Re-enable a disabled user account.
Disable a user account (blocks login). Cannot disable your own account.
Change a user's role or password.
New role (user, admin, superAdmin, Root)
New password
Permanently delete a user. Cannot delete your own account.
List all API configurations (name, active status, max calls / hour).
Get config for a single API (e.g. nasa, openweather).
Toggle an API on/off or change its hourly call limit.
true or false
New quota limit
List all roles and their hourly request limits.
Change a role's max calls per hour or active status.
New limit
true or false
List all registered software entries with active status.
Register a new software entry for health monitoring.
Unique software name (e.g. python-cli-tools)
Toggle software active status or server-side blocking (three-tier control).
Device-side signal (soft block)
Server-side blocking (hard block via 503)
Permanently delete a software entry.
List all registered hardware devices with config and active status.
Register a new hardware device for health monitoring.
Unique device name (e.g. router-hall)
Initial device config (JSON object)
Update device config, active status, or server-side blocking (three-tier control).
Device configuration (pushed to device on next heartbeat)
Device-side signal (soft block)
Server-side blocking (hard block via 503)
Permanently delete a hardware device entry.