---
title: "Prepare an unsigned Solana swap for local wallet signature"
method: POST
path: "/agents/solana-swap"
tags: ["Swap", "Execution"]
---

# Prepare an unsigned Solana swap for local wallet signature

`POST /agents/solana-swap`

## Request

- Base URL: `https://www.farmdash.one/api`
- URL: `https://www.farmdash.one/api/agents/solana-swap`
- Auth: one of:
  - HTTP bearer
  - none

Prepares a user-signable Solana transaction after server-side mint, quote, simulation, wallet, idempotency, trial-admission and authority checks. `continuationId` is optional non-authoritative context correlation only; it does not relax any existing requirement or grant signing/submission authority. An expired unsigned preparation returns non-retryable 410 `solana_preparation_expired`; obtain a fresh preparation with a new idempotency key. A submitted or ambiguous 409 is not safe to resubmit; reconcile authoritative state first. Retry a retryable 503 only with the same stable idempotency key.

## Request body

- SolanaSwapPrepareRequest
  - `wallet` string, required
  - `inputMint` string, required
  - `outputMint` string, required
  - `amount` string, required
  - `continuationId` string, uuid: Optional context correlation only; does not create or change wallet authority.
  - `slippageBps` integer
  - `minAmountOut` string
  - `idempotencyKey` string
  - `executionTrialProof` ExecutionTrialProof: Locally signed server-issued commercial identity challenge. Creates no transaction authority or delegation. Valid for five minutes. Never send private keys.
    - `issuedAt` integer, required
    - `signature` string, required
  - `executionMode` 'USER_SIGNED' | 'BOUNDED_AUTONOMOUS'
  - `sessionId` string
  - `grantId` string
  - `sessionToken` string
  - `signerPubkey` string

## Response `200`

Unsigned prepared transaction requiring the customer wallet signature

- SolanaSwapPrepareResponse
  - `continuation` ExecutionContinuation
    - `schema` 'farmdash.execution-continuation.v1', required
    - `continuation_id` string, uuid, required
    - `source` object, required
      - `type` 'market_estimate' | 'solana_preview' | 'futures_analysis', required
      - `ref` string, required
    - `execution_domain` 'spot' | 'solana' | 'futures', required
    - `network` string, required
    - `protocol_id` string, nullable, required
    - `assets` object[], required
      - `namespace` 'eip155' | 'solana' | 'hyperliquid', required
      - `network` string, required
      - `identifier` string, required
      - `symbol` string
      - `kind` 'native' | 'wrapped_native' | 'token' | 'market', required
      - `decimals` integer
    - `action_kind` 'swap' | 'prepare_order', required
    - `lifecycle_id` string, uuid, required
    - `trail_id` string, nullable, required
    - `next_operation` ExecutionContinuationNextOperation, required
      - `method` 'POST', required
      - `endpoint` '/api/v1/agent/quote-intent' | '/api/agents/solana-swap' | '/api/agents/futures/prepare-order' | '/api/v1/agent/futures/prepare-order', required
      - `parameters` object, required
      - `required_fields` string[], required
    - `available_execution_modes` string[], required
    - `authority` 'NOT_GRANTED', required
    - `prerequisites` string[], required
    - `scout_trial` object, required
      - `exists` true, required
      - `domain` 'spot' | 'futures', required
      - `daily_limit` integer, required
      - `remaining` unknown, required
      - `status` 'unknown' | 'evaluation_required', required
      - `after_exhaustion` 'authoritative_admission', required
    - `expires_at` string, date-time, required
  - `next_operation` ExecutionContinuationNextOperation
    - `method` 'POST', required
    - `endpoint` '/api/v1/agent/quote-intent' | '/api/agents/solana-swap' | '/api/agents/futures/prepare-order' | '/api/v1/agent/futures/prepare-order', required
    - `parameters` object, required
    - `required_fields` string[], required
  - `ok` boolean
  - `status` 'READY_FOR_USER_SIGNATURE'
  - `preparationId` string
  - `transactionDigest` string
  - `wallet` string
  - `inputMint` string
  - `outputMint` string
  - `inAmount` string
  - `outAmount` string
  - `serializedTransactionBase64` string
  - `unsigned` true
  - `serverSigned` false
  - `requiresUserSignature` true
  - `broadcastByFarmdash` false

## Other responses

- `400`: Invalid parameters
- `402`: Free-tier limit exceeded — x402 payment required
- `409`: Preparation conflict or submitted/ambiguous state; do not resubmit until authoritative reconciliation
- `410`: Unsigned preparation expired; obtain a fresh preparation with a new idempotency key
- `503`: Durable Solana preparation or canonical resolver unavailable; retry only with the same stable idempotency key

---

[API](https://skmtc.dev/farmdash/apis/farmdash-agent-api.md) · [All operations](https://skmtc.dev/farmdash/apis/farmdash-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/farmdash/apis/farmdash-agent-api/revisions/96310281f58c?raw)
