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

200

The reading was accepted.

Nothing. If the batch chart is still empty, check that the device is assigned to the batch.

401

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.

404

The URL does not exist. This is usually a mistyped path.

Use the exact address BrewGraph shows for the device, for example /ingest/gravitymon on your BrewGraph address.

409

A KegMon pour event conflicted with one already recorded.

Normally nothing; the device does not need to resend it.

422

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.

429

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 Retry-After time (when present) before sending again. See the product blocks below for the exact limits.

502, 503, 504

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 shows feature_disabled with 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 shows rate_limited_device or measurement_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 as batch_quota_exhausted in 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 with 401 and 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, or https://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.