---
title: "List stored cost inputs"
method: GET
path: "/pnl/costs"
tags: ["P&L"]
---

# List stored cost inputs

`GET /pnl/costs`

Every cost input stored for this shop: cost of goods per SKU and per-unit sample cost per product. Returns full history — a row per ``effective_from`` — not just what is in force today, so a caller restating an old window can see which amount applied then. ``sku_id`` is null on the product-level default.

## Query parameters

- `cost_type` string, nullable — Filter to one type: cogs | sample_unit_cost.
- `product_id` string, nullable — Filter to one product.
- `sku_id` string, nullable — Filter to one SKU. Pass an empty string to see only product-level defaults.

## Response `200`

Successful Response

- PnlCostsResponse — The cost inputs stored for one shop.
  - `shop_id` integer, required
  - `costs` PnlCostItem[], required
    - `id` integer, required
    - `product_id` string, required
    - `sku_id` string, nullable — Null means the product-level default.
    - `cost_type` string, required
    - `amount` number, required — Cost per unit, positive.
    - `currency` string, required
    - `effective_from` string, required
    - `notes` string, nullable
    - `source` string, nullable
    - `updated_at` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
