ActionSet
Transaction calldata and required approvals returned by action endpoints.
transactions object[]required
Pre-trade setup transactions (e.g. e-mode switch, collateral enable). Execute these before the main swap. Empty when no setup is needed.
Which VM executes this step. ABSENT means evm, which is the only value any endpoint returns today — every EVM response is unchanged. A non-EVM chain would return a different shape (a serialized, PERISHABLE transaction rather than to/data/value) carrying its own chainType, so a client that wants to stay forward-compatible should branch on this field rather than assume to is present.
Possible values: [evm]
Target contract address
0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2Encoded calldata
0x617ba037000000000000000000000000c02aaa39b2ETH value to send with the transaction
0Human-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
alternatives object[]
DEX aggregator swap transactions sorted by best output (descending). Each entry's description is the aggregator name. The client should pick one to execute. Present on loop action endpoints.
Which VM executes this step. ABSENT means evm, which is the only value any endpoint returns today — every EVM response is unchanged. A non-EVM chain would return a different shape (a serialized, PERISHABLE transaction rather than to/data/value) carrying its own chainType, so a client that wants to stay forward-compatible should branch on this field rather than assume to is present.
Possible values: [evm]
Target contract address
0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2Encoded calldata
0x617ba037000000000000000000000000c02aaa39b2ETH value to send with the transaction
0Human-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
permissions object[]nullable
Approval/delegation transactions that must execute before both transactions and alternatives. Includes ERC20 allowances (targeting the composer contract) and lender borrow/withdrawal delegations (targeting the lending protocol contract directly). Filtered against on-chain state so only missing approvals are returned. Null when no approvals are needed.
Target contract address
Encoded calldata
ETH value
0Human-readable description of the approval (e.g. "Approve borrow for AAVE_V3", "Approve ERC20")
ERC-20 approve spender (x-chain permissions). Match it against the selected quote's approvalTarget — several bridges can share one spender, so do not match by description.
What kind of grant this is. A signatures[] offer names the type it replaces via its replaces field.
Possible values: [ERC20, Lender]
signatures object[]
EIP-712 payloads the user can sign INSTEAD of sending the corresponding permissions entry. Only present when the caller opted in with permit=auto|required and a permit path exists. Sign with eth_signTypedData_v4, then POST the same endpoint with {permits: [{permitId, signature}]} (plus builds where the response issued buildIds) — the permit executes inside the main transaction.
Opaque, self-describing handle for this permit. Round-trip it verbatim: POST {permits: [{permitId, signature}]} back to the same endpoint.
Permit flavour
Possible values: [erc2612, dai, permit2, aaveCredit, morphoAuth, cometAuth]
typedData objectrequired
Ready for eth_signTypedData_v4 (domain, types incl. EIP712Domain, primaryType, message). All numeric fields are decimal strings.
Ready for eth_signTypedData_v4 (domain, types incl. EIP712Domain, primaryType, message). All numeric fields are decimal strings.
Which permissions entry this signature replaces (ERC20 | Lender)
Who the signature authorises. Match against the permission / quote (approvalTarget) it replaces — on multi-spender responses (x-chain) only routes whose approvalTarget equals this spender are covered by the signature.
Human-readable label for this entry.
True when the grant is NOT amount-scoped (full position control until revoked) — surface this to the user.
Unix seconds after which the signature is worthless (default: 30 minutes).
permitSkipped object[]
Why a permit was NOT offered for a permission, when one was asked for (permit=auto|required). The corresponding approve transaction stands.
Which permission kind stays a transaction (ERC20 | Lender)
{
"transactions": [
{
"chainType": "evm",
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"alternatives": [
{
"chainType": "evm",
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"permissions": [
{
"to": "string",
"data": "string",
"value": "0",
"description": "string",
"spender": "string",
"type": "ERC20"
}
],
"signatures": [
{
"permitId": "string",
"kind": "erc2612",
"typedData": {},
"replaces": "string",
"spender": "string",
"description": "string",
"unscoped": true,
"deadline": "string"
}
],
"permitSkipped": [
{
"replaces": "string",
"reason": "string"
}
]
}