Skip to main content
Redemption is not instant. You submit a request offering PAXGy for PAXG, and once it is fulfilled the PAXG is delivered to your wallet. Plan your UX around a pending state.
The endpoints are named withdraw because they are shared across Paxos Labs yield products. For PAXGy, a withdrawal is a redemption.
Redemption happens on Ethereum mainnet only (chainId: 1). PAXG does not exist on X Layer, so there is nothing to redeem into there. PAXGy held on X Layer must be transferred back to Ethereum before it can be redeemed.

Step 1: Quote the fee

Do this first. The fee is deducted from the PAXGy you offer, and you need it to size the approval in step 2.
feeAmount is authoritative for the amount you passed. The PAXGy redemption fee has two parts: a fixed rate charged on every redemption, plus a variable component that appears only when PAXG trades above its gold peg. That is why the rate is marked dynamic and why you should quote per request rather than caching a percentage.

Step 2: Approve the redemption queue

Approve the redemption queue, not the PAXGy token address, and approve offerAmount + feeAmount, not just offerAmount. The queue pulls the inclusive amount, so an exact-share approval reverts.
feeAmount comes back formatted ("0.0035"), not in base units, so convert it against the share token’s decimals before adding it to shareAmount:
Also bail out early when the fee is greater than or equal to shareAmount, because the post-fee math underflows on-chain and the request reverts. Compare in base units, using the converted value above.

Step 3: Prepare the redemption

Parameters

Response

Broadcast the transaction the same way as a mint.

Settlement estimate

estimatedWithdrawalLatency is how long this redemption is expected to take, as a duration string. It is banded by the total PAXG queued for redemption, meaning this order plus the pending orders ahead of it, relative to the PAXG the vault has on hand:
Splitting one large redemption into several smaller ones does not reliably land them all in the faster band: each order consumes available liquidity for the ones behind it, so later slices band slower as the queue fills.

Error handling

When the response carries estimatedWithdrawalLatencyError in place of estimatedWithdrawalLatency, the transaction is still returned and can be broadcast as usual. The error object has the same code, message and status fields as the API’s other error responses. Check for the presence of estimatedWithdrawalLatencyError rather than parsing its message.

Step 4: Track the request

Each request carries a status: You can also filter on it directly:

Next

Minting

Deposit PAXG and receive PAXGy.

Cross-chain

Move PAXGy between Ethereum and X Layer.