> ## Documentation Index
> Fetch the complete documentation index at: https://anypay-docs-update-architecture-2026-06-29.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# WaitIntentReceipt

## Overview

The `WaitIntentReceipt` endpoint provides a streaming or long-polling mechanism to wait for an intent to complete. Unlike `GetIntentReceipt`, which requires manual polling, this endpoint holds the connection until the intent reaches a terminal state or times out.

## Use Cases

* Wait for transaction completion without polling
* Implement real-time transaction monitoring
* Reduce API calls by using long-polling
* Get notified immediately when transaction completes
* Simplify client-side code for waiting

## Request Parameters

### Required Fields

* **intentId** (string): The unique identifier of the intent to monitor

## Response

The response includes:

* **intentReceipt** (IntentReceipt): Complete receipt with transaction details
* **done** (boolean): Indicates if the intent has reached a terminal state
  * `true`: Intent is complete (SUCCEEDED or FAILED)
  * `false`: Intent is still processing (may require another call)

## Behavior

This endpoint will:

1. Check the current status of the intent
2. If complete (`SUCCEEDED` or `FAILED`), return immediately with `done: true`
3. If still processing, wait for state changes
4. Return updates as they occur
5. Timeout after a reasonable period if no completion

## Example

```typescript theme={null}
async function waitForCompletion(intentId: string) {
  const response = await fetch('https://trails-api.sequence.app/rpc/Trails/WaitIntentReceipt', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Access-Key': 'YOUR_ACCESS_KEY'
    },
    body: JSON.stringify({ intentId })
  });

  const { intentReceipt, done } = await response.json();
  
  if (done) {
    if (intentReceipt.status === 'SUCCEEDED') {
      console.log('Transaction succeeded!');
      return intentReceipt;
    } else {
      throw new Error(`Transaction failed: ${intentReceipt.originTransaction.statusReason}`);
    }
  } else {
    // Not done yet, call again
    return waitForCompletion(intentId);
  }
}

// Usage
try {
  const receipt = await waitForCompletion('intent_123abc');
  console.log('Completed:', receipt);
} catch (error) {
  console.error('Failed:', error);
}
```

## Comparison: WaitIntentReceipt vs GetIntentReceipt

### GetIntentReceipt (Manual Polling)

```typescript theme={null}
// Requires manual polling loop
async function pollReceipt(intentId: string) {
  while (true) {
    const { intentReceipt } = await getIntentReceipt(intentId);
    
    if (intentReceipt.status === 'SUCCEEDED' || intentReceipt.status === 'FAILED') {
      return intentReceipt;
    }
    
    await new Promise(resolve => setTimeout(resolve, 2000)); // 2s delay
  }
}
```

### WaitIntentReceipt (Long Polling)

```typescript theme={null}
// Automatic waiting, no manual delay needed
async function waitReceipt(intentId: string) {
  const { intentReceipt, done } = await waitIntentReceipt(intentId);
  
  if (!done) {
    return waitReceipt(intentId); // Recursively wait if needed
  }
  
  return intentReceipt;
}
```

<Info>
  `WaitIntentReceipt` is more efficient as it reduces the number of API calls and provides near-instant updates.
</Info>

## With Progress Updates

```typescript theme={null}
async function waitWithProgress(intentId: string, onProgress?: (status: string) => void) {
  let lastStatus = '';
  
  const wait = async (): Promise<IntentReceipt> => {
    const { intentReceipt, done } = await fetch(
      'https://trails-api.sequence.app/rpc/Trails/WaitIntentReceipt',
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'X-Access-Key': 'YOUR_ACCESS_KEY'
        },
        body: JSON.stringify({ intentId })
      }
    ).then(r => r.json());
    
    // Report progress if status changed
    if (intentReceipt.status !== lastStatus) {
      lastStatus = intentReceipt.status;
      onProgress?.(intentReceipt.status);
    }
    
    if (done) {
      return intentReceipt;
    }
    
    return wait(); // Continue waiting
  };
  
  return wait();
}

// Usage with progress callback
const receipt = await waitWithProgress('intent_123abc', (status) => {
  console.log('Status update:', status);
  // Update UI, show loading state, etc.
});
```

## Timeout Handling

```typescript theme={null}
async function waitWithTimeout(intentId: string, timeoutMs = 300000) {
  const timeoutPromise = new Promise<never>((_, reject) => {
    setTimeout(() => reject(new Error('Timeout waiting for intent')), timeoutMs);
  });
  
  const waitPromise = (async () => {
    let done = false;
    let receipt;
    
    while (!done) {
      const response = await fetch(
        'https://trails-api.sequence.app/rpc/Trails/WaitIntentReceipt',
        {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'X-Access-Key': 'YOUR_ACCESS_KEY'
          },
          body: JSON.stringify({ intentId })
        }
      );
      
      const data = await response.json();
      receipt = data.intentReceipt;
      done = data.done;
    }
    
    return receipt;
  })();
  
  return Promise.race([waitPromise, timeoutPromise]);
}

try {
  const receipt = await waitWithTimeout('intent_123abc', 60000); // 1 minute timeout
  console.log('Completed:', receipt);
} catch (error) {
  console.error('Timed out or failed:', error);
}
```

## Best Practices

<Warning>
  Always implement timeout handling to prevent indefinite waiting in case of network issues or unexpected states.
</Warning>

<Info>
  For UI applications, combine this endpoint with progress callbacks to provide real-time feedback to users.
</Info>

## Next Steps

After receiving the completed receipt:

1. Verify transaction hashes on block explorers
2. Update UI to show completion status
3. Trigger any post-transaction logic
4. Store receipt for record-keeping


## OpenAPI

````yaml trails-api.gen.json post /rpc/Trails/WaitIntentReceipt
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/WaitIntentReceipt:
    post:
      tags:
        - Trails
      operationId: Trails-WaitIntentReceipt
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaitIntentReceiptRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaitIntentReceiptResponse'
        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/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:
    WaitIntentReceiptRequest:
      type: object
      required:
        - intentId
      properties:
        intentId:
          type: string
        lastReceiptStates:
          type: array
          description: '[]TransactionStatus'
          items:
            $ref: '#/components/schemas/TransactionStatus'
    WaitIntentReceiptResponse:
      type: object
      required:
        - intentReceipt
        - receiptStates
        - done
      properties:
        intentReceipt:
          $ref: '#/components/schemas/IntentReceipt'
        receiptStates:
          type: array
          description: '[]TransactionStatus'
          items:
            $ref: '#/components/schemas/TransactionStatus'
        done:
          type: boolean
    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
    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
    TransactionStatus:
      type: string
      description: Represented as uint8 on the server side
      enum:
        - UNKNOWN
        - ON_HOLD
        - PENDING
        - RELAYING
        - SENT
        - ERRORED
        - MINING
        - SUCCEEDED
        - FAILED
        - ABORTED
        - REVERTED
    IntentReceipt:
      type: object
      required:
        - id
        - projectId
        - intentId
        - status
        - ownerAddress
        - originChainId
        - destinationChainId
        - depositTransactionId
        - depositTransaction
        - originTransactionId
        - originTransaction
        - summary
      properties:
        id:
          type: number
        projectId:
          type: number
        intentId:
          type: string
        status:
          $ref: '#/components/schemas/IntentStatus'
        ownerAddress:
          type: string
        originChainId:
          type: number
        destinationChainId:
          type: number
        depositTransactionId:
          type: number
        depositTransaction:
          $ref: '#/components/schemas/IntentTransaction'
        originTransactionId:
          type: number
        originTransaction:
          $ref: '#/components/schemas/IntentTransaction'
        destinationTransactionId:
          type: number
        destinationTransaction:
          $ref: '#/components/schemas/IntentTransaction'
        refundTransactionId:
          type: number
        refundTransaction:
          $ref: '#/components/schemas/IntentTransaction'
        summary:
          $ref: '#/components/schemas/IntentReceiptSummary'
        updatedAt:
          type: string
        createdAt:
          type: string
    IntentStatus:
      type: string
      description: Represented as uint8 on the server side
      enum:
        - QUOTED
        - COMMITTED
        - EXECUTING
        - FAILED
        - SUCCEEDED
        - ABORTED
        - REFUNDED
        - INVALID
    IntentTransaction:
      type: object
      required:
        - id
        - intentId
        - status
        - chainId
        - type
        - context
        - fromAddress
        - toAddress
        - tokenAddress
        - tokenAmount
      properties:
        id:
          type: number
        intentId:
          type: string
        status:
          $ref: '#/components/schemas/TransactionStatus'
        statusReason:
          type: string
        chainId:
          type: number
        type:
          $ref: '#/components/schemas/TransactionType'
        context:
          $ref: '#/components/schemas/TransactionContext'
        fromAddress:
          type: string
        toAddress:
          type: string
        tokenAddress:
          type: string
        tokenAmount:
          type: number
        bridgeGas:
          type: number
        calldata:
          type: string
        metaTxnId:
          type: string
        metaTxnFeeQuote:
          type: string
        precondition:
          $ref: '#/components/schemas/TransactionPrecondition'
        depositIntentEntry:
          $ref: '#/components/schemas/DepositIntentEntry'
        txnHash:
          type: string
        txnMinedAt:
          type: string
        updatedAt:
          type: string
        createdAt:
          type: string
    IntentReceiptSummary:
      type: object
      required:
        - intentId
        - status
        - ownerAddress
        - originChainId
        - destinationChainId
        - tradeType
        - routeProviders
        - originIntentAddress
        - originTokenAddress
        - originTokenAmount
        - originTokenMetadata
        - destinationIntentAddress
        - destinationTokenMetadata
        - destinationHasCallData
        - destinationHasCallValue
        - createdAt
        - expiresAt
      properties:
        intentId:
          type: string
        status:
          $ref: '#/components/schemas/IntentStatus'
        ownerAddress:
          type: string
        originChainId:
          type: number
        destinationChainId:
          type: number
        tradeType:
          $ref: '#/components/schemas/TradeType'
        routeProviders:
          type: array
          description: '[]RouteProvider'
          items:
            $ref: '#/components/schemas/RouteProvider'
        originIntentAddress:
          type: string
        originTokenAddress:
          type: string
        originTokenAmount:
          type: number
        originTokenMetadata:
          $ref: '#/components/schemas/TokenMetadata'
        destinationIntentAddress:
          type: string
        destinationTokenAddress:
          type: string
        destinationTokenAmount:
          type: number
        destinationToAddress:
          type: string
        destinationTokenMetadata:
          $ref: '#/components/schemas/TokenMetadata'
        destinationHasCallData:
          type: boolean
        destinationHasCallValue:
          type: boolean
        memo:
          type: string
        createdAt:
          type: string
        expiresAt:
          type: string
        startedAt:
          type: string
        finishedAt:
          type: string
    TransactionType:
      type: string
      description: Represented as uint8 on the server side
      enum:
        - UNKNOWN
        - DEPOSIT
        - ORIGIN
        - DESTINATION
        - ROUTE
        - REFUND
    TransactionContext:
      type: string
      description: Represented as uint8 on the server side
      enum:
        - NONE
        - CCTPV2_MESSAGE
        - LZ_COMPOSE
        - LZ_RECEIVE
    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
    DepositIntentEntry:
      type: object
      required:
        - intentSignature
        - feeAmount
        - feeToken
        - feeCollector
        - userNonce
        - deadline
      properties:
        intentSignature:
          type: string
        permitSignature:
          type: string
        permitDeadline:
          type: number
        permitAmount:
          type: number
        feeAmount:
          type: string
        feeToken:
          type: string
        feeCollector:
          type: string
        userNonce:
          type: number
        deadline:
          type: number
    TradeType:
      type: string
      description: Represented as string on the server side
      enum:
        - EXACT_INPUT
        - EXACT_OUTPUT
    RouteProvider:
      type: string
      description: Represented as string on the server side
      enum:
        - AUTO
        - CCTP
        - GASZIP
        - LIFI
        - LZ_OFT
        - RELAY
        - SUSHI
        - WETH
        - ZEROX
    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

````