Skip to main content
Swap and Earn activities expose request fields through activity.params. See the activity parameter reference for the full field list and Transaction Management for product flows. Use activity.kind when you want policies to survive activity version upgrades. Pin activity.type when you rely on fields that exist only on a specific version (for example destination_address on ACTIVITY_TYPE_CREATE_SWAP_QUOTE_V2, ACTIVITY_TYPE_CREATE_SWAP_QUOTE_V3, ACTIVITY_TYPE_EXECUTE_SWAP_V3, and ACTIVITY_TYPE_EXECUTE_SWAP_V4). A policy that pins activity.type does not match a newer version: a condition on ACTIVITY_TYPE_EXECUTE_SWAP_V3 does not apply to ACTIVITY_TYPE_EXECUTE_SWAP_V4, and a condition on ACTIVITY_TYPE_CREATE_SWAP_QUOTE_V2 does not apply to ACTIVITY_TYPE_CREATE_SWAP_QUOTE_V3, which the SDKs send by default.

Swap quotes

Cap slippage on swap quote requests

When slippage_bps is omitted on the intent, accessing activity.params.slippage_bps fails with FieldNotUsed rather than evaluating as zero.

Restrict quote output tokens to an allowlist

Require organization-controlled destinations on cross-chain quotes

Swap execution

Deny execution into unapproved output assets

Require two approvers for large trades (base units)

Compare input_amount as a uint in token base units.

Deny sponsored swap execution

Restrict execute destination (V3 and V4)

Market swaps

Market swaps are ACTIVITY_TYPE_EXECUTE_SWAP_V4 activities with activity.params.mode set to MARKET. Bound swaps on that activity type have the mode BOUND_QUOTE. Policies that use activity.kind, activity.resource, or activity.action cover both modes, so a broad ALLOW also allows market swaps. Root quorum approvals skip policies, including these DENY rules.

Deny market swaps

Cap slippage on market swaps

Use quote_slippage_bps rather than slippage_bps. It is derived from the verified quote, so it applies when the provider chose the slippage. slippage_bps fails with FieldNotUsed when the intent omits it, so a DENY on it does not fire.

Require a price floor on market swaps

An omitted minOutputAmount reads as 0.

Swap fee sponsorship and fixed rate

Swap fee sponsorship and fixed rate bill your parent organization and count against its spend limits. fee_sponsorship and fixed_rate exist on ACTIVITY_TYPE_CREATE_SWAP_QUOTE_V3 and ACTIVITY_TYPE_EXECUTE_SWAP_V4 only, so pin those types. On ACTIVITY_TYPE_EXECUTE_SWAP_V4, both fields come from the verified quote, so they apply to bound and market swaps.

Deny fee-sponsored and fixed-rate swaps

Earn deposits and withdrawals

Allow deposits only on approved chains

Restrict deposits to approved wrappers

EVM wrapper addresses in policies should use lowercase 0x hex to match normalized activity.params.wrapper_address values.

Deny sponsored Earn deposits

Cap deposit size (base units)

activity.params.assets compares as a uint in raw on-chain units, like swap input_amount.

Gate full-position withdrawals

amount_value is a string; the API accepts the literal MAX to withdraw an entire position.

Earn administration

Cap client fee on wrapper deployment

client_fee_bps is exposed as a uint in whole basis points (the API intent carries a decimal string). client_fee_wallet remains a string; allowlist it for treasury controls.

Require an approved fee recipient on wrapper deployment

Require elevated approval to re-enable deposits

Allow fee claims only for approved wrappers