---
title: "Estimate a swap"
method: GET
path: "/money/swap_estimate"
tags: ["money", "swaps", "customer-session"]
---

# Estimate a swap

`GET /money/swap_estimate`

## Request

- Base URL: `https://api.stablesea.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stablesea.com/money/swap_estimate`
- Auth: none declared

Prices one stablecoin swap in the business's Go Account without committing anything, for a client to call as the amount is typed. The rate is indicative; POST /money/swap_quotes fixes a firm one. The estimate runs the quote's checks and reports the first that fails as refusal_reason, except the provider's own balance, which only the quote checks.

Requires kyb_locked, and assets_buy to swap USDC out or assets_sell to swap USDT into USDC. A business whose swap money movement type is off is refused with 403 money_movement_type_disabled.

## Query parameters

- `route_id` 'ethereum_usdc_usdt', required
- `from_asset` 'USDC' | 'USDT', required
- `to_asset` 'USDC' | 'USDT', required
- `amount` string, required: The amount on amount_side: a positive decimal of at most six places, no separators.
- `amount_side` 'send' | 'receive'

## Response `200`

OK

- SwapsEstimateOutput
  - `fee_amount` string, required: The swap fee, always in USDC: a decimal string at six places.
  - `fee_bps` integer, required: The swap fee rate, in basis points of the swap's USDC side.
  - `rate` string, required: The all-in exchange rate, to_asset per one from_asset, before the swap fee: a decimal string at eight places.
  - `receive_amount` string, required: The amount of to_asset received, after the fee when to_asset is USDC: a decimal string at six places.
  - `refusal_reason` 'swap_custody_mode_unsupported' | 'swap_amount_too_small' | 'swap_amount_too_large' | 'movement_limit_exceeded' | 'insufficient_balance' | 'swap_rate_out_of_bounds', nullable, required
  - `reviewable` boolean, required: Whether the swap can go on to a firm quote (POST /money/swap_quotes). False exactly when refusal_reason is set.
  - `send_amount` string, required: The amount of from_asset sent, fee included when from_asset is USDC: a decimal string at six places.
  - `spread_bps` string, required: How far rate is from 1:1, in basis points, as a decimal string at two places: positive when the business receives less than it sends, before the fee.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `503`: Service Unavailable
- `default`: Error response.

## Changes

- **2026-10-29** `e003c8a67b62`: 5 info
  - added the optional property `error/authorization` to the response with the `400` status
  - added the optional property `error/authorization` to the response with the `401` status
  - added the optional property `error/authorization` to the response with the `403` status
  - added the optional property `error/authorization` to the response with the `503` status
  - …1 more
- **2026-10-26** `d133adcfb3dc`: 1 info
  - api tag `customer-session` added
- **2026-10-26** `aa0e969ab6e6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/stablesea/apis/stable-sea-backend/changes/money/swap_estimate/get.md)

---

[API](https://skmtc.dev/stablesea/apis/stable-sea-backend.md) - [All operations](https://skmtc.dev/stablesea/apis/stable-sea-backend/llms.txt) - [OpenAPI document](https://skmtc.dev/stablesea/apis/stable-sea-backend/revisions/772c80d83658?raw)
