> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trails.build/llms.txt
> Use this file to discover all available pages before exploring further.

# QuoteIntentEdge

## Overview

The `QuoteIntentEdge` endpoint requests a quote for a cross-chain intent that uses a non-EVM **edge rail** (Solana or Tron) on either the origin or destination side. Edge rails extend the standard intent flow with an external bridge hop that hands funds off to (or receives funds from) the EVM intent wallet.

Use `QuoteIntent` for EVM-only routes. Use `QuoteIntentEdge` whenever Solana or Tron is involved.

## Request Parameters

### Required Fields

* **intent** (`QuoteIntentRequest`): The outer intent shape. The origin must be left unset — `intent.originChainId` must be `0` (or omitted) when `edge.mode = ORIGIN`. The `edge` request determines the actual origin chain/token at quote time.
* **edge** (`EdgeQuoteRequest`):
  * **rail** (`EdgeRail`): `SOLANA` or `TRON`.
  * **mode** (`EdgeMode`): `ORIGIN` (edge funds the intent from a non-EVM chain) or `DESTINATION` (intent funds an address on a non-EVM chain).
  * **provider** (`RouteProvider`, optional): External bridge provider (defaults to AUTO selection).
  * **tradeType** (`TradeType`, optional): Controls the external funding rail. Defaults to `EXACT_OUTPUT` (funds the fixed handoff amount required by the quoted intent). `EXACT_INPUT` spends `originTokenAmount` on the origin rail and derives the intent from the rail's quoted minimum output.

### ORIGIN Mode Fields

Required when `edge.mode = ORIGIN`:

* **originChainId** (number): Non-EVM origin chain ID (Solana or Tron).
* **originAddress** (string): User's address on the non-EVM chain.
* **originTokenAddress** (string): Token address on the non-EVM chain.

Optional for `ORIGIN`:

* **originTokenAmount** (bigint): Required when `tradeType = EXACT_INPUT`.
* **refundAddress** (string): Refund destination on the non-EVM chain.

### DESTINATION Mode Fields

Required when `edge.mode = DESTINATION`:

* **destinationChainId** (number): Non-EVM destination chain ID.
* **destinationAddress** (string): Recipient address on the non-EVM chain.
* **destinationTokenAddress** (string): Token address on the non-EVM chain.

## Response

* **edgeId** (string): The Trails edge quote ID. Pass this to `GetEdgeStatus` to track the external rail leg.
* **edge** (`EdgeQuoteResponse`): Quote details for the external rail, including the `handoff` describing the chain, token, amount, and recipient address used to hand funds off between the rail and the intent wallet, plus the provider-specific `providerQuote` and `executionPlan`.
* **intent** (`Intent`, optional): The committed intent shape — same structure as `QuoteIntent` returns.
* **gasFeeOptions** (`GasFeeOptions`, optional)
* **transactionStates** (array, optional)
* **passthrough** (`PassthroughInfo`, optional)

## Discovery

Call [`GetEdges`](/api-reference/endpoints/get-edges) to find out which edge rails and modes are enabled on this deployment before quoting.

## Example

```typescript theme={null}
const response = await fetch('https://trails-api.sequence.app/rpc/Trails/QuoteIntentEdge', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Access-Key': 'YOUR_ACCESS_KEY'
  },
  body: JSON.stringify({
    intent: {
      ownerAddress: '0x0709CF2d5D4f3D38f5948d697fE64d7FB3639Eb1',
      originChainId: 0, // must be 0 in ORIGIN mode — set by edge
      destinationChainId: 8453,
      destinationTokenAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // USDC on Base
      destinationToAddress: '0x0709CF2d5D4f3D38f5948d697fE64d7FB3639Eb1',
      destinationTokenAmount: 100000000
    },
    edge: {
      rail: 'SOLANA',
      mode: 'ORIGIN',
      tradeType: 'EXACT_OUTPUT',
      originChainId: 1399811149, // Solana
      originAddress: 'AbC...',
      originTokenAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' // USDC mint
    }
  })
});

const { edgeId, edge, intent } = await response.json();
```

## Next Steps

<CardGroup cols={2}>
  <Card title="GetEdgeStatus" icon="signal" href="/api-reference/endpoints/get-edge-status">
    Track the external rail leg's status
  </Card>

  <Card title="GetEdges" icon="list" href="/api-reference/endpoints/get-edges">
    List enabled edge rails and modes
  </Card>
</CardGroup>


## OpenAPI

````yaml trails-api.gen.json post /rpc/Trails/QuoteIntentEdge
openapi: 3.0.0
info:
  title: Trails API
  version: 0.0.1
servers:
  - url: https://trails-api.sequence.app
    description: Trails API
security: []
paths:
  /rpc/Trails/QuoteIntentEdge:
    post:
      tags:
        - Trails
      operationId: Trails-QuoteIntentEdge
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteIntentEdgeRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteIntentEdgeResponse'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ErrorWebrpcEndpoint'
                  - $ref: '#/components/schemas/ErrorWebrpcRequestFailed'
                  - $ref: '#/components/schemas/ErrorWebrpcBadRoute'
                  - $ref: '#/components/schemas/ErrorWebrpcBadMethod'
                  - $ref: '#/components/schemas/ErrorWebrpcBadRequest'
                  - $ref: '#/components/schemas/ErrorWebrpcClientAborted'
                  - $ref: '#/components/schemas/ErrorWebrpcStreamLost'
                  - $ref: '#/components/schemas/ErrorUnauthorized'
                  - $ref: '#/components/schemas/ErrorPermissionDenied'
                  - $ref: '#/components/schemas/ErrorSessionExpired'
                  - $ref: '#/components/schemas/ErrorMethodNotFound'
                  - $ref: '#/components/schemas/ErrorRequestConflict'
                  - $ref: '#/components/schemas/ErrorAborted'
                  - $ref: '#/components/schemas/ErrorGeoblocked'
                  - $ref: '#/components/schemas/ErrorRateLimited'
                  - $ref: '#/components/schemas/ErrorProjectNotFound'
                  - $ref: '#/components/schemas/ErrorAccessKeyNotFound'
                  - $ref: '#/components/schemas/ErrorAccessKeyMismatch'
                  - $ref: '#/components/schemas/ErrorInvalidOrigin'
                  - $ref: '#/components/schemas/ErrorInvalidService'
                  - $ref: '#/components/schemas/ErrorUnauthorizedUser'
                  - $ref: '#/components/schemas/ErrorQuotaExceeded'
                  - $ref: '#/components/schemas/ErrorQuotaRateLimit'
                  - $ref: '#/components/schemas/ErrorNoDefaultKey'
                  - $ref: '#/components/schemas/ErrorMaxAccessKeys'
                  - $ref: '#/components/schemas/ErrorAtLeastOneKey'
                  - $ref: '#/components/schemas/ErrorTimeout'
                  - $ref: '#/components/schemas/ErrorInvalidArgument'
                  - $ref: '#/components/schemas/ErrorUnavailable'
                  - $ref: '#/components/schemas/ErrorQueryFailed'
                  - $ref: '#/components/schemas/ErrorIntentStatus'
                  - $ref: '#/components/schemas/ErrorIntentProtocolDeprecated'
                  - $ref: '#/components/schemas/ErrorNotFound'
                  - $ref: '#/components/schemas/ErrorUnsupportedNetwork'
                  - $ref: '#/components/schemas/ErrorClientOutdated'
                  - $ref: '#/components/schemas/ErrorIntentsSkipped'
                  - $ref: '#/components/schemas/ErrorQuoteExpired'
                  - $ref: '#/components/schemas/ErrorHighPriceImpact'
                  - $ref: '#/components/schemas/ErrorIntentsDisabled'
        5XX:
          description: Server error
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ErrorWebrpcBadResponse'
                  - $ref: '#/components/schemas/ErrorWebrpcServerPanic'
                  - $ref: '#/components/schemas/ErrorWebrpcInternalError'
                  - $ref: '#/components/schemas/ErrorUnexpected'
                  - $ref: '#/components/schemas/ErrorChainNodeHealth'
components:
  schemas:
    QuoteIntentEdgeRequest:
      type: object
      required:
        - intent
        - edge
      properties:
        intent:
          $ref: '#/components/schemas/QuoteIntentRequest'
        edge:
          $ref: '#/components/schemas/EdgeQuoteRequest'
    QuoteIntentEdgeResponse:
      type: object
      required:
        - edgeId
        - edge
      properties:
        edgeId:
          type: string
        intent:
          $ref: '#/components/schemas/Intent'
        gasFeeOptions:
          $ref: '#/components/schemas/GasFeeOptions'
        transactionStates:
          type: array
          description: '[]TransactionStateInfo'
          items:
            $ref: '#/components/schemas/TransactionStateInfo'
        passthrough:
          $ref: '#/components/schemas/PassthroughInfo'
        edge:
          $ref: '#/components/schemas/EdgeQuoteResponse'
    ErrorWebrpcEndpoint:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcEndpoint
        code:
          type: number
          example: 0
        msg:
          type: string
          example: endpoint error
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorWebrpcRequestFailed:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcRequestFailed
        code:
          type: number
          example: -1
        msg:
          type: string
          example: request failed
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorWebrpcBadRoute:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcBadRoute
        code:
          type: number
          example: -2
        msg:
          type: string
          example: bad route
        cause:
          type: string
        status:
          type: number
          example: 404
    ErrorWebrpcBadMethod:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcBadMethod
        code:
          type: number
          example: -3
        msg:
          type: string
          example: bad method
        cause:
          type: string
        status:
          type: number
          example: 405
    ErrorWebrpcBadRequest:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcBadRequest
        code:
          type: number
          example: -4
        msg:
          type: string
          example: bad request
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorWebrpcClientAborted:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcClientAborted
        code:
          type: number
          example: -8
        msg:
          type: string
          example: request aborted by client
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorWebrpcStreamLost:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcStreamLost
        code:
          type: number
          example: -9
        msg:
          type: string
          example: stream lost
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorUnauthorized:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Unauthorized
        code:
          type: number
          example: 1000
        msg:
          type: string
          example: Unauthorized access
        cause:
          type: string
        status:
          type: number
          example: 401
    ErrorPermissionDenied:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: PermissionDenied
        code:
          type: number
          example: 1001
        msg:
          type: string
          example: Permission denied
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorSessionExpired:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: SessionExpired
        code:
          type: number
          example: 1002
        msg:
          type: string
          example: Session expired
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorMethodNotFound:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: MethodNotFound
        code:
          type: number
          example: 1003
        msg:
          type: string
          example: Method not found
        cause:
          type: string
        status:
          type: number
          example: 404
    ErrorRequestConflict:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: RequestConflict
        code:
          type: number
          example: 1004
        msg:
          type: string
          example: Conflict with target resource
        cause:
          type: string
        status:
          type: number
          example: 409
    ErrorAborted:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Aborted
        code:
          type: number
          example: 1005
        msg:
          type: string
          example: Request aborted
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorGeoblocked:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Geoblocked
        code:
          type: number
          example: 1006
        msg:
          type: string
          example: Geoblocked region
        cause:
          type: string
        status:
          type: number
          example: 451
    ErrorRateLimited:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: RateLimited
        code:
          type: number
          example: 1007
        msg:
          type: string
          example: Rate-limited. Please slow down.
        cause:
          type: string
        status:
          type: number
          example: 429
    ErrorProjectNotFound:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: ProjectNotFound
        code:
          type: number
          example: 1008
        msg:
          type: string
          example: Project not found
        cause:
          type: string
        status:
          type: number
          example: 401
    ErrorAccessKeyNotFound:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: AccessKeyNotFound
        code:
          type: number
          example: 1101
        msg:
          type: string
          example: Access key not found
        cause:
          type: string
        status:
          type: number
          example: 401
    ErrorAccessKeyMismatch:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: AccessKeyMismatch
        code:
          type: number
          example: 1102
        msg:
          type: string
          example: Access key mismatch
        cause:
          type: string
        status:
          type: number
          example: 409
    ErrorInvalidOrigin:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: InvalidOrigin
        code:
          type: number
          example: 1103
        msg:
          type: string
          example: Invalid origin for Access Key
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorInvalidService:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: InvalidService
        code:
          type: number
          example: 1104
        msg:
          type: string
          example: Service not enabled for Access key
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorUnauthorizedUser:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: UnauthorizedUser
        code:
          type: number
          example: 1105
        msg:
          type: string
          example: Unauthorized user
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorQuotaExceeded:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: QuotaExceeded
        code:
          type: number
          example: 1200
        msg:
          type: string
          example: Quota request exceeded
        cause:
          type: string
        status:
          type: number
          example: 429
    ErrorQuotaRateLimit:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: QuotaRateLimit
        code:
          type: number
          example: 1201
        msg:
          type: string
          example: Quota rate limit exceeded
        cause:
          type: string
        status:
          type: number
          example: 429
    ErrorNoDefaultKey:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: NoDefaultKey
        code:
          type: number
          example: 1300
        msg:
          type: string
          example: No default access key found
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorMaxAccessKeys:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: MaxAccessKeys
        code:
          type: number
          example: 1301
        msg:
          type: string
          example: Access keys limit reached
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorAtLeastOneKey:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: AtLeastOneKey
        code:
          type: number
          example: 1302
        msg:
          type: string
          example: You need at least one Access Key
        cause:
          type: string
        status:
          type: number
          example: 403
    ErrorTimeout:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Timeout
        code:
          type: number
          example: 1900
        msg:
          type: string
          example: Request timed out
        cause:
          type: string
        status:
          type: number
          example: 408
    ErrorInvalidArgument:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: InvalidArgument
        code:
          type: number
          example: 2000
        msg:
          type: string
          example: Invalid argument
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorUnavailable:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Unavailable
        code:
          type: number
          example: 2002
        msg:
          type: string
          example: Unavailable resource
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorQueryFailed:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: QueryFailed
        code:
          type: number
          example: 2003
        msg:
          type: string
          example: Query failed
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorIntentStatus:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: IntentStatus
        code:
          type: number
          example: 2004
        msg:
          type: string
          example: Invalid intent status
        cause:
          type: string
        status:
          type: number
          example: 422
    ErrorIntentProtocolDeprecated:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: IntentProtocolDeprecated
        code:
          type: number
          example: 3000
        msg:
          type: string
          example: >-
            Requested intent protocol version is outdated/deprecated. Please
            upgrade your Trails SDK, see https://docs.sequence.build for more
            information.
        cause:
          type: string
        status:
          type: number
          example: 422
    ErrorNotFound:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: NotFound
        code:
          type: number
          example: 8000
        msg:
          type: string
          example: Resource not found
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorUnsupportedNetwork:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: UnsupportedNetwork
        code:
          type: number
          example: 8008
        msg:
          type: string
          example: Unsupported network
        cause:
          type: string
        status:
          type: number
          example: 422
    ErrorClientOutdated:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: ClientOutdated
        code:
          type: number
          example: 8009
        msg:
          type: string
          example: Client is outdated
        cause:
          type: string
        status:
          type: number
          example: 422
    ErrorIntentsSkipped:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: IntentsSkipped
        code:
          type: number
          example: 7000
        msg:
          type: string
          example: >-
            Intents skipped as client is attempting a transaction that does not
            require intents
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorQuoteExpired:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: QuoteExpired
        code:
          type: number
          example: 7001
        msg:
          type: string
          example: Intent quote has expired. Please try again.
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorHighPriceImpact:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: HighPriceImpact
        code:
          type: number
          example: 7002
        msg:
          type: string
          example: Quote unavailable due to high price impact
        cause:
          type: string
        status:
          type: number
          example: 422
    ErrorIntentsDisabled:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: IntentsDisabled
        code:
          type: number
          example: 9000
        msg:
          type: string
          example: Intents service is currently unavailable
        cause:
          type: string
        status:
          type: number
          example: 400
    ErrorWebrpcBadResponse:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcBadResponse
        code:
          type: number
          example: -5
        msg:
          type: string
          example: bad response
        cause:
          type: string
        status:
          type: number
          example: 500
    ErrorWebrpcServerPanic:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcServerPanic
        code:
          type: number
          example: -6
        msg:
          type: string
          example: server panic
        cause:
          type: string
        status:
          type: number
          example: 500
    ErrorWebrpcInternalError:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: WebrpcInternalError
        code:
          type: number
          example: -7
        msg:
          type: string
          example: internal error
        cause:
          type: string
        status:
          type: number
          example: 500
    ErrorUnexpected:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: Unexpected
        code:
          type: number
          example: 2001
        msg:
          type: string
          example: Unexpected server error
        cause:
          type: string
        status:
          type: number
          example: 500
    ErrorChainNodeHealth:
      type: object
      required:
        - error
        - code
        - msg
        - status
      properties:
        error:
          type: string
          example: ChainNodeHealth
        code:
          type: number
          example: 9001
        msg:
          type: string
          example: Intent quote is unavailable due to interrupted chain node access
        cause:
          type: string
        status:
          type: number
          example: 503
    QuoteIntentRequest:
      type: object
      required:
        - ownerAddress
        - originChainId
        - originTokenAddress
        - destinationChainId
        - destinationTokenAddress
      properties:
        ownerAddress:
          type: string
        originChainId:
          type: number
        originTokenAddress:
          type: string
        destinationChainId:
          type: number
        destinationTokenAddress:
          type: string
        destinationToAddress:
          type: string
        destinationApproveAddress:
          type: string
        destinationCallData:
          type: string
        destinationCallValue:
          type: number
        originTokenAmount:
          type: number
        destinationTokenAmount:
          type: number
        tradeType:
          $ref: '#/components/schemas/TradeType'
        fundMethod:
          $ref: '#/components/schemas/FundMethod'
        mode:
          $ref: '#/components/schemas/IntentMode'
        onlyNativeGasFee:
          type: boolean
        options:
          $ref: '#/components/schemas/QuoteIntentRequestOptions'
    EdgeQuoteRequest:
      type: object
      required:
        - rail
        - mode
      properties:
        rail:
          $ref: '#/components/schemas/EdgeRail'
        mode:
          $ref: '#/components/schemas/EdgeMode'
        provider:
          $ref: '#/components/schemas/RouteProvider'
        tradeType:
          $ref: '#/components/schemas/TradeType'
        originChainId:
          type: number
        originAddress:
          type: string
        originTokenAddress:
          type: string
        originTokenAmount:
          type: number
        refundAddress:
          type: string
        destinationChainId:
          type: number
        destinationAddress:
          type: string
        destinationTokenAddress:
          type: string
    Intent:
      type: object
      required:
        - id
        - projectId
        - intentId
        - status
        - quoteRequest
        - ownerAddress
        - originChainId
        - destinationChainId
        - originTokenAddress
        - destinationTokenAddress
        - originIntentAddress
        - salt
        - depositTransaction
        - originCalls
        - originPrecondition
        - originMetaTxn
        - quote
        - fees
        - trailsVersion
        - trailsContracts
        - expiresAt
        - isTestnet
      properties:
        id:
          type: number
        projectId:
          type: number
        intentId:
          type: string
        status:
          $ref: '#/components/schemas/IntentStatus'
        quoteRequest:
          $ref: '#/components/schemas/QuoteIntentRequest'
        ownerAddress:
          type: string
        originChainId:
          type: number
        destinationChainId:
          type: number
        originTokenAddress:
          type: string
        destinationTokenAddress:
          type: string
        originIntentAddress:
          type: string
        destinationIntentAddress:
          type: string
        salt:
          type: number
        depositTransaction:
          $ref: '#/components/schemas/DepositTransaction'
        edge:
          $ref: '#/components/schemas/IntentEdgeMetadata'
        passthrough:
          type: boolean
        originCalls:
          $ref: '#/components/schemas/IntentCalls'
        destinationCalls:
          $ref: '#/components/schemas/IntentCalls'
        originPrecondition:
          $ref: '#/components/schemas/TransactionPrecondition'
        destinationPrecondition:
          $ref: '#/components/schemas/TransactionPrecondition'
        originMetaTxn:
          $ref: '#/components/schemas/MetaTxn'
        destinationMetaTxn:
          $ref: '#/components/schemas/MetaTxn'
        quote:
          $ref: '#/components/schemas/IntentProviderQuote'
        fees:
          $ref: '#/components/schemas/IntentFees'
        gasFeeOptions:
          $ref: '#/components/schemas/GasFeeOptions'
        trailsVersion:
          type: string
        intentProtocol:
          $ref: '#/components/schemas/IntentProtocolVersion'
        timedRefundUnlockTimestamp:
          type: number
        trailsContracts:
          $ref: '#/components/schemas/TrailsContracts'
        expiresAt:
          type: string
        updatedAt:
          type: string
        createdAt:
          type: string
        isTestnet:
          type: boolean
    GasFeeOptions:
      type: object
      required:
        - gasEstimate
        - feeOptions
        - expiresAt
        - feeCollectorAddress
      properties:
        gasEstimate:
          $ref: '#/components/schemas/GasEstimate'
        feeOptions:
          type: array
          description: '[]FeeOption'
          items:
            $ref: '#/components/schemas/FeeOption'
        expiresAt:
          type: string
        feeCollectorAddress:
          type: string
    TransactionStateInfo:
      type: object
      required:
        - id
        - label
        - chainId
      properties:
        id:
          type: string
        label:
          type: string
        chainId:
          type: number
        transactionHash:
          type: string
    PassthroughInfo:
      type: object
      required:
        - eligible
      properties:
        eligible:
          type: boolean
        passthroughTransaction:
          $ref: '#/components/schemas/PassThroughTransaction'
        transactionStates:
          type: array
          description: '[]TransactionStateInfo'
          items:
            $ref: '#/components/schemas/TransactionStateInfo'
        quote:
          $ref: '#/components/schemas/IntentProviderQuote'
        fees:
          $ref: '#/components/schemas/IntentFees'
    EdgeQuoteResponse:
      type: object
      required:
        - rail
        - mode
        - provider
        - tradeType
        - requestId
        - providerQuote
        - executionPlan
      properties:
        rail:
          $ref: '#/components/schemas/EdgeRail'
        mode:
          $ref: '#/components/schemas/EdgeMode'
        provider:
          $ref: '#/components/schemas/RouteProvider'
        tradeType:
          $ref: '#/components/schemas/TradeType'
        originTokenAmount:
          type: number
        requestId:
          type: string
        handoff:
          $ref: '#/components/schemas/EdgeHandoff'
        providerQuote:
          type: object
        executionPlan:
          type: array
          description: '[]string'
          items:
            type: string
    TradeType:
      type: string
      description: Represented as string on the server side
      enum:
        - EXACT_INPUT
        - EXACT_OUTPUT
    FundMethod:
      type: string
      description: Represented as string on the server side
      enum:
        - WALLET
        - DIRECT_TRANSFER
        - ONRAMP_MESH
        - ONRAMP_MELD
        - ONRAMP_BLUVO
    IntentMode:
      type: string
      description: Represented as string on the server side
      enum:
        - SWAP
        - FUND
        - EARN
        - PAY
        - WITHDRAW
    QuoteIntentRequestOptions:
      type: object
      properties:
        intentProtocol:
          $ref: '#/components/schemas/IntentProtocolVersion'
        swapProvider:
          $ref: '#/components/schemas/RouteProvider'
        bridgeProvider:
          $ref: '#/components/schemas/RouteProvider'
        swapProviderFallback:
          type: boolean
        bridgeProviderFallback:
          type: boolean
        preference:
          $ref: '#/components/schemas/RoutePreference'
        slippageTolerance:
          type: number
        trailsAddressOverrides:
          $ref: '#/components/schemas/TrailsAddressOverrides'
    EdgeRail:
      type: string
      description: Represented as string on the server side
      enum:
        - SOLANA
        - TRON
    EdgeMode:
      type: string
      description: Represented as string on the server side
      enum:
        - ORIGIN
        - DESTINATION
    RouteProvider:
      type: string
      description: Represented as string on the server side
      enum:
        - AUTO
        - CCTP
        - GASZIP
        - HYPERLANE
        - LIFI
        - LZ_OFT
        - LZ_TRANSFER
        - OIF
        - RELAY
        - SOMNIA_EXCHANGE
        - SOMNIA_SWAP
        - SUSHI
        - WETH
        - ZEROX
    IntentStatus:
      type: string
      description: Represented as uint8 on the server side
      enum:
        - QUOTED
        - COMMITTED
        - EXECUTING
        - FAILED
        - SUCCEEDED
        - ABORTED
        - REFUNDED
        - INVALID
    DepositTransaction:
      type: object
      required:
        - toAddress
        - tokenAddress
        - amount
        - chainId
        - to
        - data
        - value
      properties:
        toAddress:
          type: string
        tokenAddress:
          type: string
        decimals:
          type: number
        amount:
          type: number
        chainId:
          type: number
        to:
          type: string
        data:
          type: string
        value:
          type: number
    IntentEdgeMetadata:
      type: object
      required:
        - edgeId
        - rail
        - mode
        - edgeStatus
        - originChainId
        - relayRequestId
      properties:
        edgeId:
          type: string
        rail:
          $ref: '#/components/schemas/EdgeRail'
        mode:
          $ref: '#/components/schemas/EdgeMode'
        edgeStatus:
          $ref: '#/components/schemas/EdgeStatus'
        originChainId:
          type: number
        relayRequestId:
          type: string
        edgeTokenAmount:
          type: number
        edgeTokenAddress:
          type: string
        edgeUserAddress:
          type: string
        initTransactionHash:
          type: string
        fillTransactionHash:
          type: string
        refundTransactionHash:
          type: string
        edgeTokenMetadata:
          $ref: '#/components/schemas/TokenMetadata'
        createdAt:
          type: string
    IntentCalls:
      type: object
      required:
        - chainId
        - calls
      properties:
        chainId:
          type: number
        space:
          type: number
        nonce:
          type: number
        calls:
          type: array
          description: '[]TransactionCall'
          items:
            $ref: '#/components/schemas/TransactionCall'
    TransactionPrecondition:
      type: object
      required:
        - type
        - chainId
        - ownerAddress
        - tokenAddress
        - minAmount
      properties:
        type:
          type: string
        chainId:
          type: number
        ownerAddress:
          type: string
        tokenAddress:
          type: string
        minAmount:
          type: number
    MetaTxn:
      type: object
      required:
        - id
        - chainId
        - walletAddress
        - contract
        - input
      properties:
        id:
          type: string
        chainId:
          type: number
        walletAddress:
          type: string
        contract:
          type: string
        input:
          type: string
        bridgeGas:
          type: number
    IntentProviderQuote:
      type: object
      required:
        - routeProviders
        - routeProvidersRequestIds
        - routeProvidersFeeUsd
        - fromAmount
        - fromAmountMin
        - fromAmountUsd
        - fromAmountMinUsd
        - toAmount
        - toAmountMin
        - toAmountUsd
        - toAmountMinUsd
        - maxSlippage
        - priceImpact
        - priceImpactUsd
        - priceImpactDetails
      properties:
        routeProviders:
          type: array
          description: '[]RouteProvider'
          items:
            $ref: '#/components/schemas/RouteProvider'
        routeProvidersRequestIds:
          type: array
          description: '[]string'
          items:
            type: string
        routeProvidersFeeUsd:
          type: array
          description: '[]float64'
          items:
            type: number
        estimatedDuration:
          type: number
        fromAmount:
          type: number
        fromAmountMin:
          type: number
        fromAmountUsd:
          type: number
        fromAmountMinUsd:
          type: number
        toAmount:
          type: number
        toAmountMin:
          type: number
        toAmountUsd:
          type: number
        toAmountMinUsd:
          type: number
        maxSlippage:
          type: number
        priceImpact:
          type: number
        priceImpactUsd:
          type: number
        priceImpactDetails:
          $ref: '#/components/schemas/PriceImpactDetails'
    IntentFees:
      type: object
      required:
        - originGas
        - provider
        - feeTokenAddress
        - feeTokenAmount
        - feeTokenUsd
        - feeTokenTotal
        - gasFeeTotal
        - gasFeeUsd
        - trailsFeeTotal
        - trailsFeeUsd
        - collectorFeeTotal
        - collectorFeeUsd
        - providerFeeTotal
        - providerFeeUsd
        - totalFeeAmount
        - totalFeeUsd
      properties:
        originGas:
          $ref: '#/components/schemas/IntentTransactionGasFee'
        destinationGas:
          $ref: '#/components/schemas/IntentTransactionGasFee'
        provider:
          $ref: '#/components/schemas/IntentProviderFees'
        feeTokenAddress:
          type: string
        feeTokenAmount:
          type: number
        feeTokenUsd:
          type: number
        feeTokenTotal:
          type: number
        gasFeeTotal:
          type: number
        gasFeeUsd:
          type: number
        trailsFeeTotal:
          type: number
        trailsFeeUsd:
          type: number
        collectorFeeTotal:
          type: number
        collectorFeeUsd:
          type: number
        providerFeeTotal:
          type: number
        providerFeeUsd:
          type: number
        totalFeeAmount:
          type: number
        totalFeeUsd:
          type: number
    IntentProtocolVersion:
      type: string
      description: Represented as string on the server side
      enum:
        - v1
        - v1_5
    TrailsContracts:
      type: object
      required:
        - trailsIntentEntrypointAddress
        - trailsRouterAddress
        - trailsRouterShimAddress
        - trailsUtilsAddress
      properties:
        trailsIntentEntrypointAddress:
          type: string
        trailsRouterAddress:
          type: string
        trailsRouterShimAddress:
          type: string
        trailsUtilsAddress:
          type: string
    GasEstimate:
      type: object
      required:
        - totalGas
        - gasPrice
        - nativeCost
        - nativeCostUsd
      properties:
        totalGas:
          type: number
        gasPrice:
          type: string
        nativeCost:
          type: string
        nativeCostUsd:
          type: number
    FeeOption:
      type: object
      required:
        - tokenAddress
        - tokenSymbol
        - tokenDecimals
        - amount
        - amountUsd
        - feeCollectorAddress
        - is2612
      properties:
        tokenAddress:
          type: string
        tokenSymbol:
          type: string
        tokenDecimals:
          type: number
        amount:
          type: number
        amountUsd:
          type: number
        feeCollectorAddress:
          type: string
        is2612:
          type: boolean
        isPassthroughEligible:
          type: boolean
    PassThroughTransaction:
      type: object
      required:
        - toAddress
        - tokenAddress
        - amount
        - chainId
        - to
        - data
        - value
      properties:
        toAddress:
          type: string
        tokenAddress:
          type: string
        decimals:
          type: number
        amount:
          type: number
        chainId:
          type: number
        to:
          type: string
        data:
          type: string
        value:
          type: number
    EdgeHandoff:
      type: object
      required:
        - chainId
        - tokenAddress
        - amount
        - recipientAddress
      properties:
        chainId:
          type: number
        tokenAddress:
          type: string
        amount:
          type: number
        recipientAddress:
          type: string
    RoutePreference:
      type: string
      description: Represented as string on the server side
      enum:
        - RECOMMENDED
        - FASTEST
        - CHEAPEST
        - TRUSTLESS
    TrailsAddressOverrides:
      type: object
      properties:
        sequenceWalletFactoryAddress:
          type: string
        sequenceWalletMainModuleAddress:
          type: string
        sequenceWalletMainModuleUpgradableAddress:
          type: string
        sequenceWalletGuestModuleAddress:
          type: string
        sequenceWalletUtilsAddress:
          type: string
    EdgeStatus:
      type: string
      description: Represented as string on the server side
      enum:
        - PENDING
        - DEPOSITED
        - FILLED
        - REFUNDED
        - FAILED
    TokenMetadata:
      type: object
      required:
        - chainId
        - tokenAddress
        - name
        - symbol
      properties:
        chainId:
          type: number
        tokenAddress:
          type: string
        name:
          type: string
        symbol:
          type: string
        decimals:
          type: number
        logoUri:
          type: string
    TransactionCall:
      type: object
      required:
        - to
      properties:
        to:
          type: string
        value:
          type: number
        data:
          type: string
        gasLimit:
          type: number
        delegateCall:
          type: boolean
        onlyFallback:
          type: boolean
        behaviorOnError:
          type: number
    PriceImpactDetails:
      type: object
      required:
        - executionPriceImpact
        - marketPriceImpact
        - providerFeesPriceImpact
        - trailsFeesPriceImpact
        - netPriceImpact
      properties:
        executionPriceImpact:
          $ref: '#/components/schemas/PriceImpact'
        marketPriceImpact:
          $ref: '#/components/schemas/PriceImpact'
        providerFeesPriceImpact:
          $ref: '#/components/schemas/PriceImpact'
        trailsFeesPriceImpact:
          $ref: '#/components/schemas/PriceImpact'
        netPriceImpact:
          $ref: '#/components/schemas/PriceImpact'
    IntentTransactionGasFee:
      type: object
      required:
        - chainId
        - totalGasLimit
        - gasPrice
        - nativeTokenSymbol
        - chainGasUsageStatus
        - totalFeeAmount
        - totalFeeUsd
        - metaTxnFeeDetails
        - metaTxnGasQuote
      properties:
        chainId:
          type: number
        totalGasLimit:
          type: number
        gasPrice:
          type: number
        nativeTokenSymbol:
          type: string
        nativeTokenPriceUsd:
          type: number
        chainGasUsageStatus:
          $ref: '#/components/schemas/ChainGasUsageStatus'
        totalFeeAmount:
          type: number
        totalFeeUsd:
          type: number
        metaTxnFeeDetails:
          $ref: '#/components/schemas/MetaTxnFeeDetails'
        metaTxnGasQuote:
          type: string
    IntentProviderFees:
      type: object
      required:
        - quoteProvider
        - quoteProviderFee
        - quoteProviderFeeUsd
        - trailsFee
        - trailsFeeUsd
        - quoteProviderWithTrailsFee
        - providerWithTrailsFeeUsd
        - totalFeeAmount
        - totalFeeUsd
      properties:
        quoteProvider:
          type: string
        quoteProviderFee:
          type: number
        quoteProviderFeeUsd:
          type: number
        trailsFee:
          type: number
        trailsFeeUsd:
          type: number
        quoteProviderWithTrailsFee:
          type: number
        providerWithTrailsFeeUsd:
          type: number
        totalFeeAmount:
          type: number
        totalFeeUsd:
          type: number
    PriceImpact:
      type: object
      required:
        - priceImpact
        - priceImpactUsd
      properties:
        priceImpact:
          type: number
        priceImpactUsd:
          type: number
    ChainGasUsageStatus:
      type: string
      description: Represented as string on the server side
      enum:
        - NORMAL
        - BUSY
        - VERY_BUSY
    MetaTxnFeeDetails:
      type: object
      required:
        - metaTxnId
        - estimatedGasLimit
        - feeNative
      properties:
        metaTxnId:
          type: string
        estimatedGasLimit:
          type: number
        feeNative:
          type: number

````