---
title: "Settlement adjustments"
method: POST
path: "/pnl/adjustments"
tags: ["P&L"]
---

# Settlement adjustments

`POST /pnl/adjustments`

Credits, clawbacks and manual corrections TikTok posts against a **statement** rather than an order. They never appear on order rows, so a P&L built only from ``/pnl/orders`` silently omits them — ``net_amount`` is the figure to carry across.

Windowed on the date TikTok raised the adjustment. ``settled_date`` is null until it reaches a payout.

## Request body

- PnlAdjustmentsRequest — POST /pnl/adjustments request body — settlement adjustments.
  - `start_date` string, date, nullable — Inclusive window start (YYYY-MM-DD).
  - `end_date` string, date, nullable — Inclusive window end (YYYY-MM-DD).
  - `limit` integer — Page size.
  - `offset` integer — Page offset.

## Response `200`

Successful Response

- PnlAdjustmentsResponse — Settlement adjustments for one shop.
  - `shop_id` integer, required
  - `seller_id` string, required
  - `total` integer, required
  - `limit` integer, required
  - `offset` integer, required
  - `net_amount` number, required — Sum of every adjustment matching the window, before paging — the number to carry into a P&L, since these never appear on order rows.
  - `adjustments` PnlAdjustmentOut[], required
    - `adjustment_id` string, required
    - `adjustment_type` string, nullable
    - `reason` string, nullable
    - `amount` number, nullable — Signed as TikTok posts it: negative is a charge.
    - `created_date` string, nullable — When TikTok raised it. The window filters on this.
    - `settled_date` string, nullable — When it hit a payout. Null until settled.
    - `linked_statement_id` string, nullable
    - `linked_payout_id` string, nullable
    - `currency` string, required
  - `data_status` PnlDataStatus, required — Freshness and reachability of this shop's P&L data. ``state`` distinguishes "no sales" from "we cannot read the finance export": ``no_permission`` means the shop's Seller Center account lacks finance-tab access and the fix is customer-side, not a retry.
    - `state` string, required — Latest export-run status: never_run | pending | parsed | empty | failed | no_permission.
    - `last_synced_at` string, nullable — ISO timestamp of the newest successfully parsed run.
    - `last_window` PnlDateWindow — The date window an export run requested.
      - `start_date` string, nullable
      - `end_date` 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)
