The updater service runs a Flask application that listens on a single HTTP port and exposes four routes. Three of them are read-only utilities — a health probe and two backup-browsing endpoints — while the fourth is the webhook ingestion endpoint that drives all RIPE synchronization. Understanding how each endpoint works helps you configure NetBox correctly, troubleshoot failed deliveries, and integrate the service with load balancers or monitoring tools.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/jalmargyyk/netbox-ripe-updater/llms.txt
Use this file to discover all available pages before exploring further.
GET /health
Returns a plain-textOk response with HTTP 200. No authentication is required.
This endpoint is intentionally minimal so that Docker health checks and load balancer probes can confirm the service is alive without sending credentials or a JSON body.
| Status | Body | Meaning |
|---|---|---|
200 OK | Ok | Service is running |
POST /update
Accepts NetBox webhook payloads and synchronizes the corresponding INETNUM or INET6NUM object in RIPE DB. This is the core endpoint of the service.Authentication
IfUPDATE_TOKEN is set in .env.updater, every request must carry an Authorisation header whose value matches the configured token exactly. NetBox sends the header as-is from the Additional Headers field of its webhook configuration.
401 Unauthorized immediately.
Request format
The request body must be a valid NetBox webhook payload withContent-Type: application/json. Sending any other content type causes a 400 Bad Request response.
Required fields in the payload
Must be
"ipam.prefix". Any other value is rejected with 400.The NetBox event type:
"created", "updated", or "deleted". When event is "deleted", the RIPE object is removed regardless of ripe_report.The prefix in CIDR notation, e.g.
"203.0.113.0/24" or "2001:db8::/32".Controls whether the prefix should exist in RIPE DB. Set to
true to push the object; false to delete it.The template name to use when building the RIPE object. Must match a key in your
templates.json. Required when ripe_report is true.Optional override for the NETNAME attribute. When omitted, the template name is used as the NETNAME.
The NetBox username that triggered the event. Used in email reports; defaults to
"None" if absent.Behavior
| Condition | Action |
|---|---|
ripe_report = true and event != "deleted" | Push (create or update) the INETNUM / INET6NUM object in RIPE DB |
ripe_report = false | Delete the object from RIPE DB |
event = "deleted" (any ripe_report) | Delete the object from RIPE DB |
Example request
Response codes
| Status | Meaning |
|---|---|
204 No Content | Success — RIPE DB was updated or deleted |
200 OK | Skipped — prefix is a non-routed network (NotRoutedNetwork) or below the configured minimum size (ErrorSmallPrefix) |
400 Bad Request | Invalid payload — wrong content type, missing object_type, or missing custom fields |
401 Unauthorized | Token mismatch or missing Authorisation header |
500 Internal Server Error | RIPE API returned an error; check logs for details |
A
200 response on a skipped prefix is intentional — the updater successfully processed the request and decided no RIPE action was needed. NetBox webhook delivery will mark these as successful.GET /backups
Returns an HTML page listing all backup files stored in the configured S3 bucket. Protected by HTTP Basic Auth usingUI_USER and UI_PASSWORD.
prefix_203.0.113.0_24.json.
Response
| Status | Body | Meaning |
|---|---|---|
200 OK | HTML page | Backup list rendered successfully |
401 Unauthorized | — | Missing or wrong Basic Auth credentials |
GET /backup/{name}
Returns the JSON content of a single named backup file. Protected by HTTP Basic Auth using the sameUI_USER and UI_PASSWORD credentials.
curl POST to restore the object manually:
| Status | Body | Meaning |
|---|---|---|
200 OK | JSON | Backup content |
401 Unauthorized | — | Missing or wrong Basic Auth credentials |
Error responses
All error responses return a plain-text body describing the problem. The most common causes are:401—UPDATE_TOKENis set but theAuthorisationheader is missing or wrong400— wrong content type — theContent-Typeheader is notapplication/json400— not a prefix —object_typeis present but is not"ipam.prefix"400— missing custom fields —data.custom_fields.ripe_reportis absent from the payload500— RIPE API rejected the object; the response body contains the raw exception; check application logs for the full RIPE error message
Known limitations
Edge cases that cause silent skips or failures in RIPE updates
FAQ
Answers to common configuration and operational questions