---
title: "Calculate workload costs from supplied payment profiles"
method: POST
path: "/v1/settlement/estimate"
tags: ["payments", "costs", "calculation", "workload"]
---

# Calculate workload costs from supplied payment profiles

`POST /v1/settlement/estimate`

## Request

- Base URL: `https://api.402rates.com`
- URL: `https://api.402rates.com/v1/settlement/estimate`
- Auth: none declared

Free exact-decimal calculation from caller-supplied prices, fees and setup costs for a planned number of calls. Separates locked capital and batches; unknown costs stay unknown. Compares complete profiles only within the same currency. No exchange-rate conversion, external fee measurement, payment or verification of supplied inputs.

## Request body

- object
  - `workload` string, required: Shared caller-defined workload identifier. One call denotes the same declared unit of delivered work in every profile; equivalence is not verified.
  - `calls` integer, required
  - `profiles` object[], required
    - `id` string, required
    - `label` string
    - `currency` 'USD' | 'EUR' | 'GBP' | 'CHF' | 'JPY' | 'USDC' | 'USDT' | 'XDC' | 'XRP' | 'ETH' | 'BTC' | 'SOL', required: Denomination for every amount in this profile. Codes remain distinct; no conversion or peg assumption.
    - `payment_per_call` string, required: Caller payment for the purchased service per call, in whole profile-currency units. Included in modeled expenditure.
    - `network_per_call` string, nullable, required: Nonnegative amount in the profile currency's whole units, not atomic units. At most 30 integer and 18 fractional digits; no exponent notation.
    - `provider_per_call` string, nullable, required: Nonnegative amount in the profile currency's whole units, not atomic units. At most 30 integer and 18 fractional digits; no exponent notation.
    - `setup_cost` string, nullable, required: Nonnegative amount in the profile currency's whole units, not atomic units. At most 30 integer and 18 fractional digits; no exponent notation.
    - `locked_capital` string, nullable, required: Nonnegative amount in the profile currency's whole units, not atomic units. At most 30 integer and 18 fractional digits; no exponent notation.
    - `settlement_every_calls` integer: Calls per settlement. Default 1; the final incomplete batch incurs one full settlement cost.
    - `settlement_cost` string, nullable: Nonnegative amount in the profile currency's whole units, not atomic units. At most 30 integer and 18 fractional digits; no exponent notation.
    - `source` object
      - `url` string, required: Caller-supplied HTTPS source reference without credentials, query or fragment. Never fetched.
      - `observed_at` string, required: Caller-stated UTC timestamp at or before report generation. Not independently authenticated.

## Response `200`

Successful response

- object
  - `report_version` '1.0.0', required
  - `status` string, required
  - `evidence` 'caller_supplied', required
  - `scope` 'planned_workload', required
  - `profiles` object[], required
  - `comparison_groups` object[], required
  - `method` object, required
  - `limitations` string[], required

## Other responses

- `400`: Invalid input
- `405`: POST required
- `413`: Input exceeds 196608 bytes
- `415`: application/json required
- `429`: Free request limit reached

---

[API](https://skmtc.dev/402rates/apis/402rates-com.md) · [All operations](https://skmtc.dev/402rates/apis/402rates-com/llms.txt) · [OpenAPI document](https://skmtc.dev/402rates/apis/402rates-com/revisions/483a9d0a3f0b?raw)
