---
title: "Public Net Sheet"
method: POST
path: "/api/v1/public/net-sheet"
tags: ["public"]
---

# Public Net Sheet

`POST /api/v1/public/net-sheet`

## Request

- Base URL: `https://app.sentineliq.net`
- URL: `https://app.sentineliq.net/api/v1/public/net-sheet`
- Auth: none required

Full WA seller net sheet (REET + commission + title/escrow + payoff).

Same request shape as the keyed ``/agent-api/v1/net-sheet`` and the
``wa_net_sheet`` MCP tool; same engine (src/deals/net_sheet.py); same
``public_calc`` IP bucket as the other free calculators. Engine-rejected
inputs surface as the same structured 422 the keyed route returns
(pydantic bounds mirror the engine, but the engine stays authoritative).

## Request body

- AgentApiNetSheetRequest
  - `sale_price` integer, required
  - `county` string: Omitted county assumes King. Confirm the property's DOR location code.
  - `commission_rate` number
  - `mortgage_balance` integer: Legacy calculator assumes $0 if omitted; use seller-scenarios to distinguish an unknown payoff.
  - `has_hoa` boolean
  - `property_tax_proration` integer

## Response `200`

Successful Response

- NetSheetResponse: Full WA seller net sheet — every line item from the deterministic engine.
  - `sale_price` integer, required
  - `mortgage_payoff` integer, required
  - `state_reet` integer, required
  - `state_reet_brackets` ReetBracket[], required
    - `up_to` integer, nullable, required: Upper bound of the band in dollars; null for the top band.
    - `rate` number, required: State rate applied in this band (0.011 = 1.10%).
    - `taxable` integer, required: Dollars of the sale price taxed in this band.
    - `tax` integer, required: State REET owed on this band, rounded to the dollar.
  - `local_reet` integer, required
  - `total_reet` integer, required
  - `reet_technology_fee` integer, required
  - `local_reet_rate` number, required
  - `local_reet_rate_effective_date` string, required
  - `local_reet_assumption` string, required
  - `state_reet_brackets_effective_through` string, required
  - `reet_scope` string, required
  - `commission` integer, required
  - `commission_rate` number, required
  - `title_insurance` integer, required
  - `escrow_fee` integer, required
  - `recording_fees` integer, required
  - `hoa_transfer` integer, required
  - `property_tax_proration` integer, required
  - `total_costs` integer, required
  - `total_deductions` integer, required
  - `net_proceeds` integer, required
  - `county` string, required
  - `disclaimer` string, required
  - `attributions` Attribution[], required
    - `source` string, required
    - `text` string, required
    - `url` string, nullable
    - `required` boolean

## Other responses

- `413`: PAYLOAD_TOO_LARGE — serialized body exceeds 65536 bytes; never metered. Reduce it before retrying.
- `422`: VALIDATION — request failed validation.
- `429`: RATE_LIMITED — per-IP burst or daily cap; Retry-After.

---

[API](https://skmtc.dev/sentineliq/apis/sentinel-property-research-api.md) · [All operations](https://skmtc.dev/sentineliq/apis/sentinel-property-research-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sentineliq/apis/sentinel-property-research-api/revisions/64c34d5f2937?raw)
