meters.list (version 1)
EOS meters (energy, water and waste metering: electricity, district heating and cooling, gas, water, waste) with their carrier, unit, whether they count in building totals (building meters) or are sub-meters, virtual (calculated from other meters) or tenant (lease) meters, what they are used for, and until when EOS has processed them. Filter by building, carrier, id, name, buildingMetersOnly or virtual. Feed the ids to consumption.meters; for a building total use consumption.buildings, which sums exactly the building meters. Pages by id: pass nextCursor back until it is null.
bearerAuthorizationBearer <JWT>A signed-in Relynk user's access token: OAuth 2.0 authorization code with PKCE at https://auth.relynk.io/authorize and https://auth.relynk.io/oauth/token, with audience https://ai.relynk.io/builder. The caller sees exactly what that user may see.
tenantId?stringThe tenant to read. May be left out when the caller belongs to exactly one tenant; GET /me lists them.
uuidapplication/json- body
buildingId?stringA building id (from buildings.list). Matches the building itself and everything that is part of it
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidcarriers?array<>Only these carriers; omit for all
1 <= items <= 7ids?array<>Only these meters
1 <= items <= 1000buildingMetersOnly?booleanOnly the meters EOS sums into building totals
falsevirtual?booleantrue: only virtual meters, false: only physical ones; omit for both
search?stringOnly names containing this text, ignoring case
1 <= length <= 200limit?integer1 <= value <= 1000500cursor?stringnextCursor from the previous page; omit for the first page
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidThe function output
application/json- response
meters*array<>items <= 1000nextCursor*|Pass as cursor for the next page; null on the last
curl -X POST 'https://ai.relynk.io/builder/v1/meters.list/v1' \ -H 'Content-Type: application/json' \ -d '{}'{ "meters": [ { "id": "string", "name": "string", "typeKey": "string", "typeName": "string", "carrier": "electricity", "unit": "kWh", "isBuildingMeter": true, "isVirtual": true, "buildingId": "string", "buildingName": "string", "consumedForUse": "string", "wasteFraction": "string", "countAsSortedWaste": true, "lease": { "id": "string", "name": "string", "start": "string", "end": "string" }, "sourcePointId": "string", "processedUntil": "string" } ], "nextCursor": "string"}points.timeseries (version 2) POST
Readings of up to 1000 points aggregated into Oslo-time buckets over [from, to): one shared time axis t and one array per requested metric per point, null where a bucket has no readings. Days, weeks (Monday) and months start at Oslo midnight, so DST days have 23 or 25 hours. Limits: 15m buckets up to 62 days, others up to 400 days, and points × buckets up to 50 000; split longer ranges into several calls.
meters.topology (version 1) POST
How a building's EOS meters (energy, water, waste) are connected: every meter with its carrier and whether it counts in the building total, the sub-meter tree (parent → child; a parent's consumption includes its children's, and the part no child measures is not sub-metered), what each virtual meter is calculated from with its factor, and overlappingBuildingMeters: virtual building meters fed by another building meter of the same building and carrier, or by its sub-meters, which EOS (like its dashboard) counts both, so the building total includes that consumption twice. Use it to explain a building's metering, to break a total down by sub-meter, and before trusting a building total.