Skip to main content
PAXGy moves between Ethereum mainnet and X Layer over Chainlink CCIP. The tokens are burned on the source chain and issued on the destination. There is no wrapped representation and no liquidity pool. Two flows:
  • Transfer. Move PAXGy you already hold, in either direction. GET /v2/amplify/bridge
  • Mint and transfer. Deposit PAXG on Ethereum and receive PAXGy on X Layer, in one transaction. GET /v2/amplify/deposit with cross-chain parameters
PAXG exists only on Ethereum, so minting and redemption are Ethereum-only. Transfers move PAXGy in both directions, but to redeem, the PAXGy has to come back to Ethereum first.

Transferring held PAXGy

Parameters

Response

The delivery fee must be exact

Cross-chain delivery costs a fee in the source chain’s native token, on top of gas. It is already set as transaction.value, and fee reports the same number for display.
Send transaction.value exactly as returned. The transaction is rejected on-chain if the value differs at all, including if it is too high, so padding it “to be safe” will fail. The quote is priced at the current block and moves with gas conditions: request it again if the user does not confirm promptly.
Show fee.formatted in your confirmation UI. A user approving a transfer sees a native-token charge they did not ask for otherwise.

Choosing messageGas

messageGas buys execution on the destination chain. Each route accepts a range, returned on every response:
A value outside that range returns a 400 naming both bounds, so you can correct it without guessing. If you have no reason to pick otherwise, request messageGasLimit.

Minting onto X Layer

Because PAXG only exists on Ethereum, the mint leg always starts there, so chainId is 1. Pass the cross-chain fields to have the PAXGy issued on X Layer instead of Ethereum, in the same transaction:
Three differences from a plain mint:
  • transaction.value carries the delivery fee, with the same exactness rule.
  • No mint fee applies on this route.
  • to and permitSignature are rejected with a 400. The PAXGy is issued on the destination chain, so a source-chain to cannot be honoured. Use destinationChainReceiver instead. And a single transaction cannot both consume a permit and transfer across chains, so approve PAXG first.

Errors

A 403 is a property of the wallet, not a transient failure, so retrying will not help. Cross-chain transfers are enabled per address as part of access approval.

Settlement time

The source transaction confirming does not mean the PAXGy has arrived. CCIP finalizes on its own schedule, and the destination balance appears after that. Model the gap explicitly: show the transfer as in-flight and poll the destination balance rather than assuming completion on the source receipt.

Next

Minting

Deposit PAXG and receive PAXGy.

Direct Contract

The same transfer without the API.