Ingest error codes#
Self Hosted Cloud Hosted
When a device sends a reading, BrewGraph answers with an HTTP status code.
200 means the reading was accepted. Anything else means it was turned away
and nothing was stored. This page explains each code, the likely cause, and
what to do. It applies to every device that sends readings, including
iSpindel, Gravitymon, the Gravitymon Gateway, and Tilt through TiltBridge.
Blocks marked Hosted service only or Self-hosted apply to
that product only.
What the codes mean#
Code |
Likely cause |
What to do |
|---|---|---|
|
The reading was accepted. |
Nothing. If the batch chart is still empty, check that the device is assigned to the batch. |
|
The token is missing or BrewGraph does not recognise it. Typical reasons: a typo, a token that was rotated, or a token pasted with extra spaces. For KegMon, the token belongs to a tap that is not registered, or the tap has no active vessel or batch. |
Compare the token in the device’s configuration with the one on file. If you lost it, rotate it and paste the new one into the device (see Device Tokens). For KegMon, register the tap and assign an active vessel with a batch. |
|
The URL does not exist. This is usually a mistyped path. |
Use the exact address BrewGraph shows for the device, for example
|
|
A KegMon pour event conflicted with one already recorded. |
Normally nothing; the device does not need to resend it. |
|
The request arrived but a value cannot be stored: the body cannot be read, a required field is missing, a number is not a number, or the device type cannot be recognised from the payload. |
Open the ingestion log. The detail names the field. Fix that setting on the device, such as the unit or the gravity format. |
|
Too many requests. The device sent readings faster than allowed, or too many requests came from the same address in a short time. |
Increase the sending interval on the device and wait for the
|
|
The request did not reach BrewGraph. The most common reason is the wrong host or port in the device’s configuration. |
Check the address in the device’s configuration. If it is correct, wait a few minutes and try again. |
Hosted service only#
On the hosted service, devices must send to https://ingest.brewgraph.com,
not to the address you use to open the app. Example:
https://ingest.brewgraph.com/ingest/gravitymon.
Additional causes and codes:
403: the feature for this device type or data type is switched off for your account. The ingestion log showsfeature_disabledwith the switch that is off. A reading is only accepted when that switch is on.429: readings arrive more often than your account’s reporting interval, or the measurement budget is used up. The log showsrate_limited_deviceormeasurement_budget. Set the device’s sending interval to at least the interval for your account. A reading that was turned away does not use up the interval.A reading that is accepted but dropped (for example when you have reached your batch limit and a new batch would be needed) still returns
200, so the device does not keep retrying. It shows up asbatch_quota_exhaustedin the ingestion log and as a notification.
To find out why a reading was refused, open Settings:
- Ingestion log
Shows the 15 newest requests from your devices that BrewGraph turned away, with the reason, device, and detail. It names the field for a
422. Each device writes at most one row per reason in 15 minutes, so a device that keeps failing does not flood the list. Download saves the log as a JSON file. Requests with a token BrewGraph does not recognise are never shown to members, and neither are requests with no token. If a device fails with401and nothing appears in the log, check the token first.- Payload capture
Shows what a device actually sends. Point the device at
https://ingest.brewgraph.com/api/ingest/test, orhttps://ingest.brewgraph.com/api/ingest/test/<token>if the device cannot send a token any other way. The 20 newest captures are kept for 7 days and the token is masked.
Self-hosted#
Devices send to your own BrewGraph address, for example
http://<your-server>/ingest/gravitymon. There is no plan, so no reporting
interval or measurement budget is applied: the per-device minimum interval is
off by default. A 429 therefore means that one address sent more than
120 requests in a minute and is blocked for a short while. Check for a device
that is sending far too often, or several devices behind one address.
The Ingestion log page in the app (under Other) lists requests that were turned away, with the reason, device, and detail, and lets you download the list as a JSON file. Log entries are removed after 120 days.
Never paste a real token into a screenshot, issue report or forum post. See Device Tokens.