Plan a cross-venue collateral transfer as ordered caller-signed legs.
const url = 'https://data.predictefy.com/v1/funding/transfer-plan?fromVenue=example&toVenue=example&amount=example&owner=example&exchange=ctf';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://data.predictefy.com/v1/funding/transfer-plan?fromVenue=example&toVenue=example&amount=example&owner=example&exchange=ctf' \ --header 'Authorization: Bearer <token>'Venues are custody islands: Predictefy moves no funds between them and operates no cross-venue transfer. This read composes the caller-signed building blocks the other funding routes already expose into one ordered leg list, so the whole route is visible before any of it starts. Every leg carries signer=caller; Predictefy signs nothing, submits nothing, and stores nothing about the plan. The route reads only the static funding registry — no database row and no provider call — so it cannot fail on an upstream outage and returns no expiring data. For hyperliquid->polymarket the legs are: (1) the deterministic withdraw3 typed data for the caller’s own Arbitrum address, which the caller signs and POSTs to https://api.hyperliquid.xyz/exchange itself, noting that arrival takes the venue’s own bridge time and its dispute window applies; (2) a fully-parameterized reference to GET /v1/bridge/quote rather than an embedded quote, because leg 1 must land before that quote can be paid and quotes expire in the meantime; and (3) the finite pUSD approval built by the same builder POST /v1/funding/polymarket/steps uses. Amounts after leg 1 are net of the venue’s flat 1 USDC withdrawal fee. Each pair is an evidence-verified composition rather than a lookup, so the plan pins the registry values it composes against — both venues’ chain and collateral token, and the destination’s bridge provider — and returns 400 TRANSFER_PLAN_UNSUPPORTED if any of them has drifted, instead of bridging one token while approving another. Unsupported venue pairs return the same code, naming every supported direction.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Human decimal six-place amount withdrawn from fromVenue, before its flat fee. It must exceed that fee or nothing would arrive.
The caller’s own address; it is the withdrawal destination and bridge payer.
Destination exchange for the final finite approval. Defaults to ctf.
Decimal fraction forwarded to the bridge leg, bounded to LI.FI’s documented range of 0 to 1 inclusive, where 0.005 means 0.5%. A plain number such as 50 is refused because LI.FI would read it as 5000%.
Responses
Section titled “Responses”The ordered caller-signed legs for the requested pair.
object
object
What the bridge and approval legs move, after the withdrawal fee.
States plainly that the caller signs and submits every leg and no funds transit Predictefy.
object
Always caller; Predictefy signs and submits nothing on this surface.
object
object
Equals action.time; the venue rejects a withdraw whose nonce is not its time.
object
object
Arbitrum is the signing domain only; the withdrawal settles from L1.
object
object
object
Flat fee the venue takes out of the withdrawal itself.
What arrives on the destination chain — the requested amount minus feeUsdc.
Where the CALLER posts the signed request; Predictefy never submits it.
object
object
object
What to watch for before starting the next leg.
object
A parameterized reference rather than an embedded quote: the withdraw leg must land before this quote can be paid, and quotes expire in the meantime.
object
object
The destination venue’s collateral, resolved from the funding registry.
object
object
object
Complete Polygon transaction for caller-side review, signing, and broadcast.
object
Example
{ "data": { "legs": [ { "kind": "venue_withdraw", "signer": "caller", "withdraw": { "action": { "type": "withdraw3", "hyperliquidChain": "Mainnet", "signatureChainId": "0xa4b1" }, "typedData": { "domain": { "name": "HyperliquidSignTransaction", "version": "1", "chainId": 42161, "verifyingContract": "0x0000000000000000000000000000000000000000" }, "primaryType": "HyperliquidTransaction:Withdraw", "message": { "hyperliquidChain": "Mainnet" } }, "feeUsdc": "1", "submission": { "method": "POST", "url": "https://api.hyperliquid.xyz/exchange", "body": { "signature": "<caller-signed>" } } } } ] }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}Enveloped error.
object
object
Always present on errors; quote this id when reporting a failed request.
Present only when a venue error is attributed to a specific exchange.
Example
{ "success": false, "error": { "code": "VALIDATION_ERROR" }}