Appearance
Custom API
The customapi widget is the escape hatch: point it at any JSON endpoint and it renders the result. Use it for services that don't have a dedicated widget but do expose JSON.
Configuration
| Field | Notes |
|---|---|
| URL | The JSON endpoint to fetch |
| Key (optional) | Sent as a Bearer token in the Authorization header |
How it renders
The backend fetches the URL and shapes the response automatically:
- Feed - if the response is a JSON array, or an object with an
items/messages/notifications/eventsarray, each entry becomes a timeline feed row (the same style as the ntfy widget). - Metrics - if it's a flat JSON object, up to four key/value tiles are shown.
Field mappings
For metric output you can define mappings to pick specific (even nested) fields and label them - e.g. map data.cpu.usage → "CPU" with a % suffix. Without mappings, the first few object keys are shown as-is.
Compatibility with Homepage
This mirrors Homepage's customapi widget, so importing a Homepage config brings these across. As a special case, an imported customapi pointing at an ntfy/notifications URL is converted to the native ntfy widget automatically.
Limitations
The Custom API widget currently does a GET with an optional bearer token only - no custom headers, request bodies, or other auth schemes.