Help Center · Data Import

Webhook returns 400 Bad Request — payload shape problems

A 400 means your signature was valid (good — auth is fine) but the platform couldn't make sense of the payload. Common causes:

Empty readings array.

A payload like {"readings":[]} is rejected. Don't push empty batches — skip the request entirely if the gateway has no new data this cycle.

Invalid JSON.

A trailing comma, unquoted key, or smart-quote character will fail the parse. Validate the JSON locally before sending. Many gateway template engines silently emit bad JSON when a value is null or missing.

Missing required fields per reading.

Each reading needs a timestamp, a point_id, and a values object. A reading like {"point_id":"x","values":{"kwh":10}} without a timestamp will not be ingested. The timestamp must be a string (ISO 8601), not a number.

Wrong field types.

"values" must be an object, not an array. The numeric reading inside values must be a number, not a string ("kwh":"12.5" is wrong, "kwh":12.5 is right). Quote-wrapped numbers are a frequent template mistake.

Body too large.

The maximum body size is 10 MB. If you batch many meters into one push and hit this limit, split the batch by meter or by time window.

Where to look: the response body usually contains a brief error description — that is the most specific information available, so capture it on the gateway side. In the platform, Analytics → Data Import shows the last error under the import's status badge, which tells you whether the failures are continuous or intermittent (e.g. always at the top of the hour = template engine issue).

← Back to Help CenterOpen this page in inbilit →

Webhook returns 400 Bad Request — payload shape problems | inbilit Help