Update a meter
Changes a meter. Fields you leave out keep their value, and filters and aggregation are replaced whole when sent. Changing what it counts (eventName, filters or aggregation) measures every signal already sent again. Once an order that isn't a draft bills on the meter (locked: true), what it counts can't change, so invoices already sent stay true: that's a 409 METER_IN_USE, and so is a change to an archived meter (METER_ARCHIVED). To count differently, create a new meter and price the charge on it with an amendment. name and description can always change; a meter's product can't.
Path Parameters
- Type: stringidrequired
The meter's Spondo Billing ID.
Body·
Any of a meter's fields but its product. eventName, filters and aggregation can change only while no order that isn't a draft bills on it.
- Type:aggregationProperties: 2
What each matching signal adds: 1 (
count), or the number atfieldin itsdata(sum; a field that's missing, negative or not a number adds 0). A signal from a customer unit that isn't billable adds 0 either way. - Type: string | nulldescription
- Type: stringevent
Name - Properties: 3Type:filters
- Type: stringname
Responses
- application/json
- application/json
- application/json
- application/json
curl https://billing.getspondo.com/api/v1/meters/mtr_4Gk8Rz2Wq7Ns1Lp5 \
--request PUT \
--header "Authorization: Bearer $SPONDO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"name": "Insurance claim pages"
}'
{
"id": "mtr_4Gk8Rz2Wq7Ns1Lp5",
"productId": "prod_7Hk2LmQ9xR4tVb1N",
"name": "Insurance claim pages",
"description": "Pages of uploaded insurance claims.",
"eventName": "document_uploaded",
"filters": [
{
"field": "type",
"operator": "equals",
"value": "claim"
}
],
"aggregation": {
"type": "sum",
"field": "pages"
},
"status": "active",
"locked": true,
"archivedAt": null,
"createdAt": "2026-11-10T09:30:00.000Z",
"updatedAt": "2026-11-10T11:05:00.000Z"
}