---
title: "Create a new gateway order (V3)."
method: POST
path: "/v3/create-order"
tags: ["v3"]
---

# Create a new gateway order (V3).

`POST /v3/create-order`

Accepts a `GatewayQuoteV3` — the signed V3 quote with `ownerAddress` embedded in each variant.

## Request body

- union — V3 gateway quote — used for both the get-quote response and the create-order body. `ownerAddress` is embedded in each variant that carries an owner concept.
  - object
    - `onramp` GatewayOnrampQuoteV2, required — V2 onramp quote: identical to V1 plus a resolved `affiliates` list. Kept as a separate type so the V1 OpenAPI schema stays frozen.
      - `affiliateAddress` string, nullable — Affiliate address (V1-compatible field; first entry from `affiliates`).
      - `affiliates` ResolvedAffiliate[] — Resolved affiliate recipients and computed fees.
        - `address` string, required — Affiliate recipient address.
        - `fee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `dstChain` string, required — Destination chain
      - `dstToken` string, required — Destination token address
      - `estimatedTimeInSecs` integer, nullable — Estimated time in secs to complete the Order
      - `executionFees` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `feeBreakdown` GatewayOnrampFeeBreakdownV2, required
        - `affiliateFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `executionFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `layerzeroFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `protocolFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `solverFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `fees` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `gasRefill` string, nullable — Optional gas refill amount
      - `inputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `outputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `priceImpact` string, nullable — Price impact as a fraction, e.g. `"-0.05"` means 5% loss. Absent if no price feed is available.
      - `priceImpactUsd` string, nullable — Price impact in USD, excluding execution fee. E.g. `"-1.00"` means $1 loss. Absent if no price feed is available.
      - `recipient` string, required — Recipient address
      - `sender` string, nullable — Sender address
      - `signedQuoteData` string, required — The signed quote data to be used in create-order
      - `slippage` string, required — Slippage tolerance
      - `strategyAddress` string, nullable
      - `strategyMessage` string, nullable
      - `token` string, required — Token address
  - object
    - `offramp` GatewayOfframpQuoteV3, required — V3 offramp quote: identical to V2 plus `owner_address`.
      - `affiliateAddress` string, nullable — Affiliate address (V1-compatible field; first entry from `affiliates`).
      - `affiliates` ResolvedAffiliate[] — Resolved affiliate recipients and computed fees (V2).
        - `address` string, required — Affiliate recipient address.
        - `fee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `estimatedTimeInSecs` integer, nullable — Estimated time in secs to complete the Order
      - `feeBreakdown` GatewayOfframpFeeBreakdownV2, required — V2 offramp fee breakdown. Same shape as V1 but each line carries USD.
        - `affiliateFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `fastestFeeRate` string, required
        - `inclusionFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `protocolFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
        - `solverFee` GatewayTokenAmountV2, required
          - `address` string, required
          - `amount` string, required
          - `chain` string, required
          - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `inputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `outputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `ownerAddress` string, required — Resolved EVM owner / refund-claimant for the on-chain order.
      - `priceImpact` string, nullable — Price impact as a fraction, e.g. `"-0.05"` means 5% loss. Absent if no price feed is available.
      - `priceImpactUsd` string, nullable — Price impact in USD, excluding execution fee. E.g. `"-1.00"` means $1 loss. Absent if no price feed is available.
      - `recipient` string, required
      - `sender` string, nullable
      - `slippage` integer, required
      - `srcChain` string, required
      - `tokenAddress` string, required
      - `totalFeeUsd` string, required
      - `txTo` string, required
  - object
    - `tokenSwap` GatewayTokenSwapQuoteV3, required — V3 token-swap quote: the V2 shape plus a resolved `affiliate`. The quote *is* the create-order body, so carrying the affiliate here is what stops it being dropped on the round-trip — the aggregator (Bungee/Velora) charges it on the source chain. Mirrors how onramp/offramp embed affiliates in their quotes.
      - `affiliate` TokenSwapAffiliateV3 — A single affiliate fee on a token swap: `bps` of the swap input paid to `address` by the aggregator on the source chain. Aggregators charge one partner fee, so a swap carries at most one.
        - `address` string, required — Affiliate fee recipient, encoded for the source chain (`0x…` on EVM).
        - `bps` integer, required — Affiliate fee size in basis points of the swap input.
      - `dstChain` string, required
      - `estimatedTimeInSecs` integer, required — Estimated time in secs to complete the Order
      - `fees` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `inputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `outputAmount` GatewayTokenAmountV2, required
        - `address` string, required
        - `amount` string, required
        - `chain` string, required
        - `usd` string, nullable — USD value of `amount`, absent if no price feed is available.
      - `priceImpact` string, nullable — Price impact as a fraction, e.g. `"-0.05"` means 5% loss. Absent if no price feed is available.
      - `priceImpactUsd` string, nullable — Price impact in USD, excluding execution fee. E.g. `"-1.00"` means $1 loss. Absent if no price feed is available.
      - `recipient` string, required
      - `sender` string, nullable
      - `slippage` integer, required
      - `srcChain` string, required
      - `txTo` string, required

## Response `201`

Created order

- union — V3 create-order response; offramp and token-swap carry polymorphic `GatewayTxData`.
  - object
    - `onramp` object, required
      - `address` string, required — Bitcoin address to pay to
      - `op_return_data` string, nullable — Optional OP_RETURN data
      - `order_id` string, required — Unique order id
      - `psbt_hex` string, nullable — Hex-encoded Bitcoin PSBT (only present when sender address was provided)
  - object
    - `offramp` object, required
      - `order_id` string, required — Unique order id
      - `tx` union, required — Tagged union of EVM, Tron and Solana transaction data for V3 create-order responses.
        - object
          - `chain` string, required
          - `data` string, required
          - `to` string, required
          - `value` string, required
          - `type` 'evm', required
        - object — Tron transaction data: the EVM-style call fields plus `feeLimit`, the max TRX (in sun) a Tron wallet may burn on energy/bandwidth. EVM chains have no such concept, so it lives on the dedicated Tron entry rather than every tx.
          - `chain` string, required
          - `data` string, required
          - `feeLimit` string, required
          - `to` string, required
          - `value` string, required
          - `type` 'tron', required
        - object — Solana transaction returned on V3 create-order (offramp / token-swap). `transaction` is base64-encoded bincode serialization of an unsigned `VersionedTransaction`. Clients must decode, sign, re-serialize, and broadcast — do not sign the base64 string directly.
          - `chainId` integer, required
          - `transaction` string, required
          - `type` 'solana', required
  - object
    - `tokenSwap` object, required
      - `order_id` string, required — Unique order id
      - `tx` union, required — Tagged union of EVM, Tron and Solana transaction data for V3 create-order responses.
        - object
          - `chain` string, required
          - `data` string, required
          - `to` string, required
          - `value` string, required
          - `type` 'evm', required
        - object — Tron transaction data: the EVM-style call fields plus `feeLimit`, the max TRX (in sun) a Tron wallet may burn on energy/bandwidth. EVM chains have no such concept, so it lives on the dedicated Tron entry rather than every tx.
          - `chain` string, required
          - `data` string, required
          - `feeLimit` string, required
          - `to` string, required
          - `value` string, required
          - `type` 'tron', required
        - object — Solana transaction returned on V3 create-order (offramp / token-swap). `transaction` is base64-encoded bincode serialization of an unsigned `VersionedTransaction`. Clients must decode, sign, re-serialize, and broadcast — do not sign the base64 string directly.
          - `chainId` integer, required
          - `transaction` string, required
          - `type` 'solana', required

## Other responses

- `400` — Create order error

---

[API](https://skmtc.net/bob-collective/apis/bob-gateway-api.md) · [All operations](https://skmtc.net/bob-collective/apis/bob-gateway-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bob-collective/bob-gateway-api/revisions/5a00610487e4/schema)
