---
title: "POST /v2/order-bundles/prepare"
method: POST
path: "/v2/order-bundles/prepare"
---

# POST /v2/order-bundles/prepare

`POST /v2/order-bundles/prepare`

## Request

- Base URL: `https://api.arbital.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.arbital.xyz/v2/order-bundles/prepare`
- Auth: HTTP bearer

Prepare a client-signed funding bridge with existing market fee policy and owned wallets. No user signature, broadcast or workflow is performed. Solana server-execution wallets are excluded.

## Request body

- OrderBundleTermsV2: Client checkpoint terms for Solana USDC to Base USDC to an ERC-20 limit buy. Terms are untrusted inputs, not a signed allocation or server workflow. Expiry is future UTC seconds within 30 days for preparation; return recovery may use the original expired terms.
  - `destination_chain_id` '8453', required
  - `source_budget_usdc_atomic` string, required
  - `target_asset` string, required
  - `limit_price_usd` string, required: Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected.
  - `expire_time` string, date-time, required: Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps.

## Response `200`

Stateless client preparation or explicit pending/manual-review state

- OrderBundlePreparedV2
  - `state` 'ready', required
  - `terms` OrderBundleTermsV2, required: Client checkpoint terms for Solana USDC to Base USDC to an ERC-20 limit buy. Terms are untrusted inputs, not a signed allocation or server workflow. Expiry is future UTC seconds within 30 days for preparation; return recovery may use the original expired terms.
    - `destination_chain_id` '8453', required
    - `source_budget_usdc_atomic` string, required
    - `target_asset` string, required
    - `limit_price_usd` string, required: Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected.
    - `expire_time` string, date-time, required: Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps.
  - `owned_wallets` object, required
    - `solana` string, required
    - `evm` string, required
  - `funding` SvmToEvmQuoteV2, required: Sponsor-signed Relay Solana-to-EVM quote. A hyperliquid_perps_funding request returns this shape with destination_chain_id 1337, a zero destination_asset, platform_fee_bps 0, and an empty fees array.
    - `asset_decimals` integer: Decimals of the destination asset when Relay reports them.
    - `authorization_requirement` 'interactive_client_signature', required
    - `destination_asset` string, required
    - `destination_chain_id` string, required
    - `dynamic_slippage_bps` integer, required: Relay-selected slippage derived from the expected and minimum outputs.
    - `exact_input_atomic` string, required
    - `execution_speed` 'normal' | 'fast', required
    - `expected_output_atomic` string, required
    - `expires_at_unix_ms` integer, required
    - `fees` ExecutionQuoteFeeV2[], required
      - `amount_atomic` string, required
      - `asset` string, required
      - `certainty` 'exact' | 'estimated', required
      - `kind` 'application', required
    - `minimum_output_atomic` string, required
    - `operation` 'svm_to_evm', required
    - `platform_fee_bps` integer, nullable, required
    - `prepared` PreparedRelayQuoteV2, required
      - `destination_address` string, required
      - `fee_payer_address` string, required
      - `fee_payer_signature` string, required: Base64 Ed25519 fee-payer signature already present in the transaction.
      - `last_valid_block_height` string, required
      - `relay_status_endpoint` string, uri, required
      - `relay_swap_id` string, required
      - `transaction_base64` string, required: Exact two-signer transaction with only the fee-payer slot signed. The client fills the remaining user slot without changing the message.
      - `transaction_signature` string, required: Base58 Solana transaction signature to observe after client broadcast.
    - `priority_fee_lamports` string, nullable, required
    - `quote_id` string, required
    - `source_asset` 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', required
    - `source_chain_id` 'solana', required
    - `swap_impact_bps` integer, nullable, required

## Other responses

- `400`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `401`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `403`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `409`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `503`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.

---

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