Repository navigation
Adding Apps
An app in NORA is any external service that reports webhooks, polls an API, or otherwise feeds events into the system — Sonarr, Radarr, Gotify, whatever. Each app is bound to a profile (a YAML template) that tells NORA how to parse its data.
- Stats strip at the top: total apps, healthy / warn / down counts, recent events summary, last-event timestamp.
- App cards: icon (from the profile or a monogram fallback), name, profile badge, date added, status dot.
- Settings gear on each card opens the App Settings slide-panel.
- Add app button (topbar or top-right) opens the 3-step Add App modal.
Name the app and pick a profile template. Profiles are grouped by category (Media, Automation, Infrastructure, etc.) in the dropdown.
| Field | Notes |
|---|---|
| Base URL | Where the app lives (what humans click through to). Used for the Launch button and for URL checks. |
| API URL | Where API polling goes if different from the base URL. Optional — leave blank to use base URL. |
| API key | Used by API polling. Stored encrypted at rest. |
| Rate limit | Events per minute. 0 = unlimited. |
If the base URL is HTTPS, NORA offers to auto-create a URL check and SSL check as pills on this step — click to accept.
Shows the generated webhook URL with a copy button. Paste it into the source app's webhook configuration (the profile's setup instructions tell you where). From here you can add another app or jump to the one you just created.
The panel covers:
- Name and profile. Changing profile re-pulls auth defaults if you haven't set custom ones.
- Base URL and API URL. The API URL overrides the base URL for API polling only — useful when the API lives on a different hostname.
-
API Polling Auth section:
- Auth type: None, API Key Header, API Key Query, Bearer, Basic
- Header or query parameter name (shown when the auth type uses one)
- API key field with show/hide toggle. For
Basic, format asuser:pass.
- Rate limit (events per minute).
- Webhook URL (read-only) with a copy button.
- Regenerate Token — useful if a token leaks. After regenerating, the old URL stops working immediately and you must update the source app.
- Delete App — in the danger zone, with confirmation.
The app detail page is where you see live data for one app.
- Header — name, icon, profile, capability badge (Webhook, API, Webhook + API, or Monitor), rate limit, base URL, status. Buttons: Launch (opens base URL in a new tab if set), Discover Now, Settings.
- Live Metrics — per-category and per-widget tiles from your profile's digest configuration. Only tiles active in the digest registry render here.
- Events summary — 24 hour / week / month tiles by severity, clickable through to filtered Events.
- Monitor Checks — every check linked to this app, with status, type icon, and target. Add check opens the check form with this app pre-selected.
- Infrastructure chain (right column on desktop) — vertical visualization of the infra components this app runs on, pulled from the Relationships page links. Only renders if relationships exist.
Clicking Discover Now on an app detail page runs all three of these in parallel:
- API polling for this app (if the profile has an
api_pollingblock and the app has an API key configured). - Infrastructure scans on every infra component in this app's chain.
- Every monitor check linked to this app.
Then the page refreshes its metrics and check statuses. Expect a few seconds on busy instances.
NORA computes a profile's capability from the content of its YAML:
| YAML content | Capability |
|---|---|
webhook mappings and api_polling block |
Webhook + API |
| webhook mappings only | Webhook |
api_polling block only |
API |
Neither (just meta:) |
Monitor — attach purely for name + icon + monitor checks |
The capability badge on the App Detail header and in the library reflects this.
Every app gets a unique token-authenticated ingest URL:
POST http://your-nora-host:8081/api/v1/ingest/{token}
The token is in the webhook URL shown in the Settings slide-panel. No additional authentication on the ingest endpoint — the token is the credential. Use network-level controls (firewall, internal network) to limit who can hit the endpoint if needed.
Two options:
- Attach it to the Generic Webhook profile — you get events in the feed but no mapping, severity, or cards.
- Author a custom profile. See Custom App Profiles.
- Webhooks — payload format, token regeneration, ingest details
- Custom App Profiles — authoring YAML profiles
- Monitor Checks — attaching checks to apps