---
title: "Replace metrics records"
method: POST
path: "/unit-cost/v1/telemetry/metric/{metric_name}/replace"
tags: ["telemetry"]
---

# Replace metrics records

`POST /unit-cost/v1/telemetry/metric/{metric_name}/replace`

This endpoint will replace any data within the appropriate stream that matches the supplied properties (timestamp is minimally required).

A value of 0 is not allowed for the `replace` operation and is rejected with a 400; use the delete operation to remove a record.

**Note:** If no existing data matches the supplied properties, the data will be added to the stream.

## Path parameters

- `metric_name` string, required

## Headers

- `Authorization` string, required

## Request body

- object
  - `records` MetricTelemetryRecord[], required — A batch of telemetry records to submit to CloudZero.
    - `value` number, required — The value associated with this unit metric telemetry record (e.g., the number of requests, GBs, etc. that this record represents). May be negative to support use cases such as budgets (for example, refunds or budget reductions). On send (sum) operations a value of 0 is accepted but does not contribute to aggregated telemetry. The `replace` and `replace_period` operations reject zero-value records with a 400; use the delete operation to remove a record.
    - `timestamp` string, required — ISO formatted timestamp of when the usage occurred.
    - `granularity` 'DAILY' | 'MONTHLY' — The sample frequency over time.
    - `associated_cost` AssociatedCost — A definition of the portion of your infrastructure to which this metric telemetry corresponds. When filtering on the dimensions specified here via the CloudZero platform, the corresponding unit metric's value will also be filtered. Defined as a mapping from CloudZero Dimensions to string values, where dimensions are identified similarly to how they would be in the `partitions` parameter of a CloudZero Explorer URL (https://app.cloudzero.com/explorer). For example, - custom:<the name of your CloudZero Custom Dimension> (as defined in CostFormation via the Name parameter) - tag:<your cloud provider tag key> - k8s_label:<your Kubernetes label key> - accounts, services, product_family, ... - k8s_cluster, k8s_namespace, ...

## Response `200`

Telemetry accepted

## Other responses

- `400` — Invalid request, specific responses for: - Invalid JSON - Invalid Schema: Unrecognized filter keys - Invalid Schema: Missing required fields - Timestamp too far into the future - A value of 0 is not allowed; use the delete operation to remove a record - All records in a stream must contain the same filter keys - All records in a stream must contain the same granularity as the stream's granularity
- `403` — Not authorized, make sure you're using a valid API key in the header `Authorization`
- `429` — Rate limit exceeded. The API enforces rate limiting on incoming requests. Retry after a short delay.
- `503` — Service temporarily unavailable due to downstream capacity constraints. Retry after a short delay with exponential backoff.

---

[API](https://skmtc.dev/cloudzero/apis/cloudzero-api-v2-resources.md) · [All operations](https://skmtc.dev/cloudzero/apis/cloudzero-api-v2-resources/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/cloudzero/cloudzero-api-v2-resources/revisions/fd805a0e75e5/schema)
