Ingest error codes#

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 to https://ingest.brewgraph.com, including iSpindel, Gravitymon, the Gravitymon Gateway, Tilt through TiltBridge, and RAPT Pill.

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.

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.

404

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

Use the exact address BrewGraph shows for the device, for example https://ingest.brewgraph.com/ingest/gravitymon.

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 a unit is not one of the allowed values (for example a pressure unit other than kPa, bar or psi).

Open the ingestion log. The detail names the field. Fix that setting on the device, such as the unit or the gravity format.

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.

Increase the sending interval on the device so it is at least as long as the interval for your account. Wait for the Retry-After time before sending again. A reading that was turned away does not use up the interval.

502, 503, 504

The request did not reach BrewGraph. The most common reason is the wrong host: devices must send to ingest.brewgraph.com, not to the address you use to open the app.

Check the host in the device’s configuration. If it is correct, wait a few minutes and try again.

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. Those drops show up as batch_quota_exhausted in the ingestion log and as a notification.

Find out why a reading was refused#

Open Settings and use these two tools.

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.

Never paste a real token into a screenshot, issue report or forum post. See Device Tokens.