Overview
An intent is a signed, machine-verifiable request to execute a swap under the constraints of an accepted quote.POST /intents
Creates an intent from a valid quote and user addresses. Utexo creates the intent off-chain and returns chain-specific approval data.
Authentication: X-API-Key
approvalMechanism. Exactly one of permit2, htlc, or cosign contains approval data in a successful response.
POST /intents/{id}/approvals
Attaches signed approval data to an existing intent and authorizes execution. Exactly one approval payload must be provided.
Authentication: X-API-Key
Permit2 example:
GET /intents/{id}/status
Returns the combined progress of an intent and its related swap.
Authentication: X-API-Key
Status lifecycle
Chain-specific intent approval
Always use the approval mechanism returned byPOST /intents. Do not convert approval data between network types.
EVM networks
EVM networks use Permit2. Before submitting the off-chain Permit2 signature, ensure that the ERC-20 token allowance for the Permit2 contract is sufficient.- Confirm that
approvalMechanismispermit2. - Read the payload from the
permit2response object. - Create and sign the EIP-712 Permit2 payload locally.
- Submit the signature as the
permit2value toPOST /intents/{id}/approvals.
preparePermit2Approval from @hot-pot/hotpot-sdk-ts.
Tron
Tron also uses Permit2, but the user signs a TIP-712 payload with TronWeb.- Confirm that
approvalMechanismispermit2. - Read the payload from the
permit2response object. - Derive the user source address from the signing key.
- Create and sign the TIP-712 Permit2 payload.
- Submit the signature as
permit2.
POST /intents/{id}/approvals in the same { "permit2": "..." } shape used for EVM approvals.
Solana
Solana uses a cosigned versioned transaction. Utexo returns a hex-encoded transaction incosign.transaction.
The signing process must preserve signature ordering:
- Resolver signature: position
0 - User signature: position
1 - Optional backend signature: position
2
approval to POST /intents/{id}/approvals.
Bitcoin
Bitcoin uses a PSBT to authorize a Taproot HTLC deposit.- Confirm that
approvalMechanismishtlc. - Read the Base64-encoded PSBT from
htlc.psbt. - Read the required input indexes from
htlc.inputs. - Sign only those inputs.
- Preserve unrelated transaction data and existing partial signatures.
- Serialize the updated PSBT in Base64 format.
- Submit it as the
psbtvalue toPOST /intents/{id}/approvals.
POST /intents.