---
title: GET /api/v1/metering/costs/by-article
description: Costs By Article
locale: en
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/api/metering/get-metering-costs-by-article/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

:::note
Generated from the OpenAPI contract — do not edit by hand. Interactive explorer with full schemas: [https://entherium.duckdns.org:8443/reference](https://entherium.duckdns.org:8443/reference); frozen spec for this build: [openapi.json](/developers/api/openapi.json). Group: [metering](../).
:::

Costs By Article

Per-article cost for a contract: direct spend + amortized collect share.

``direct`` = sum over the article's own runs (generate/publish, where
``generated_article_id`` is set). ``amortized_collect`` = the contract's
contract-level cost (its collect runs, where ``generated_article_id`` IS
NULL) divided by the number of articles in the window — (owner
decision: amortize by period, not per collect-run, since collect feeds the
reused RAG corpus). imagegen is a deliberately separate ledger and NOT added.

**Auth:** `Authorization: Bearer <token>` required

## Request

```sh
curl -sS -X GET "https://entherium.duckdns.org:8443/api/v1/metering/costs/by-article" \
  -H "Authorization: Bearer <token>"
```

## Response `200`

The contract carries no example for this response; schema: `array of ArticleCostRow`. Field-level shape: [interactive explorer](https://entherium.duckdns.org:8443/reference).

## Returns

`array of ArticleCostRow` — Successful Response

| Field | Type | Description |
| --- | --- | --- |
| `amortized_collect_micro_usd` | `integer` |  |
| `cost_micro_usd` | `integer` |  |
| `direct_micro_usd` | `integer` |  |
| `generated_article_id` | `integer` |  |

## Parameters

| Parameter | In | Required | Type | Default | Constraints | Description |
| --- | --- | --- | --- | --- | --- | --- |
| `salescontracts_id` | query | yes | `integer` | — | — |  |
| `from` | query | no | `string \| null` | — | date-time |  |
| `to` | query | no | `string \| null` | — | date-time |  |

## Errors

| Code | Meaning | Body |
| --- | --- | --- |
| `401` | Missing or invalid authentication credentials | `ErrorResponse` |
| `422` | Validation Error | `HTTPValidationError` |

Every error body is `{detail, code?, request_id, doc_url}` — `request_id` is the value to quote, `doc_url` points at the [Errors reference](../../../reference/errors/).
