Request

How to structure and send a meter reading request to the API.

Content type

Requests must be sent as multipart/form-data. Do not set the Content-Type header manually. Your HTTP client (curl, fetch, requests) will set it automatically, including the required multipart boundary.

Request fields

FieldTypeRequiredDescription
imageFileYesThe meter image to analyse.

Image requirements

Accepted formatsJPEG, PNG, WEBP
Maximum file size10 MB
Recommended sizeUnder 2 MB for fastest processing
Minimum resolution300 × 300 px
OrientationThe meter face should be upright and filling most of the frame

Tips for accurate readings

Photograph the meter straight-on, not at an angle.
Ensure the dial or digit display is fully visible and in focus.
Use adequate lighting — avoid harsh shadows across the display.
Avoid photos where the meter is partially obscured by pipes or debris.
Avoid very low-resolution or heavily compressed images.
Avoid extreme angles that distort the digit display.

Code examples

These examples use the default asynchronous endpoint. To use the synchronous version, change the URL to /api/meter-reading/sync.

curl
curl -X POST https://www.aquameter.site/api/meter-reading \
-H "Authorization: Bearer aqm_live_YOUR_API_KEY" \
-F "image=@/path/to/meter.jpg"
JavaScript
const form = new FormData();
form.append("image", file); // File object from <input type="file">
await fetch("https://www.aquameter.site/api/meter-reading", {
method: "POST",
headers: { Authorization: "Bearer aqm_live_YOUR_API_KEY" },
body: form,
});
Python
import requests
with open("meter.jpg", "rb") as f:
r = requests.post(
"https://www.aquameter.site/api/meter-reading",
headers={"Authorization": "Bearer aqm_live_YOUR_API_KEY"},
files={"image": f},
)