---
title: "Get normalized swap status (body). Prefer this — GET 431s on large compose quoteTokens."
method: POST
path: "/api/v1/status"
tags: ["Swap"]
---

# Get normalized swap status (body). Prefer this — GET 431s on large compose quoteTokens.

`POST /api/v1/status`

## Request

- Base URL: `https://app.ravn.exchange`
- URL: `https://app.ravn.exchange/api/v1/status`
- Auth: one of:
  - API key in header `x-api-key`
  - none

## Request body

- object
  - `quoteToken` string, required: The quoteToken /v1/execute returned — it carries the destinationAddress given at execute.
  - `ref` string, required: statusRef from /v1/execute (compose packed handle, or a deposit address) or from /v1/submit-signature; with none, the origin tx hash (the txHash /v1/submit-transaction returned, when execute carried `submit`). Prefer POST /v1/status — GET with a large compose quoteToken can 431.
  - `txHash` string: Only where a fee the swap carries (fee.bps > 0) was paid in a transaction RAVN can't otherwise find; every other venue proves its fee itself. Two-hop (compose) routes: the hop-1 transaction you broadcast (not needed when hop 1 is gasless, submitted via /v1/submit-signature: its venue's record of the trade proves the fee). A fee RAVN collects beside the swap (the execution's fee.transaction: Rift, private swaps, Eco, Layerswap, Mayan routes paying no referrer) on an EVM chain: the on-chain hash of the transaction that carried that payment (its own, or the batch or relay that included it — not a batch id or a userOpHash) — send it on every status call (RAVN keeps it once that payment has confirmed); not needed when it rode in the swap's own transaction and you poll with that hash. Until RAVN can read that transaction, a delivered swap is answered `processing` (up to 15 minutes after execute), so keep polling. Without it nothing is owed on that swap: its status is still reported, and RAVN stops waiting for the fee a day after execute.

## Response `200`

Status resolved

- object
  - `data` StatusDTO
    - `status` 'pending' | 'processing' | 'expired' | 'success' | 'refunded' | 'failed' | 'not_found' | 'unknown', required
    - `venue` string, required
    - `venueStatus` unknown
    - `tracking` 'unavailable'
    - `deliveredAmount` string, nullable: Actual delivered output in the output token's base units, when the venue exposes it. Only populated once `status` is terminal.
    - `txHash` string, nullable: The destination-chain tx that paid the user out, when the venue names one. Only populated once `status` is terminal (success/refunded/failed) — e.g. THORChain can report a real outbound tx while still "processing" and before it's known whether that tx is the payout or a refund, so it's withheld until terminal to avoid a caller treating an in-flight tx as the payout landing.
  - `meta` Meta
    - `requestId` string, required
    - `version` string, required

## Other responses

- `400`: Invalid request or malformed quoteToken
- `401`: x-api-key present but invalid

---

[API](https://skmtc.dev/ravn/apis/ravn-swap-api.md) · [All operations](https://skmtc.dev/ravn/apis/ravn-swap-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ravn/apis/ravn-swap-api/revisions/f1c5a0c63392?raw)
