Skip to main content
POST
/
v2
/
delta
/
orders
/
build
Build a signable Delta V2 order from a route
curl --request POST \
  --url https://api.velora.xyz/v2/delta/orders/build \
  --header 'Content-Type: application/json' \
  --data '
{
  "route": {
    "origin": {
      "input": {
        "token": {
          "chainId": 123,
          "address": "<string>"
        },
        "amount": "<string>",
        "amountUSD": "<string>"
      },
      "output": {
        "token": {
          "chainId": 123,
          "address": "<string>"
        },
        "amount": "<string>",
        "amountUSD": "<string>"
      }
    },
    "destination": {
      "input": {
        "token": {
          "chainId": 123,
          "address": "<string>"
        },
        "amount": "<string>",
        "amountUSD": "<string>"
      },
      "output": {
        "token": {
          "chainId": 123,
          "address": "<string>"
        },
        "amount": "<string>",
        "amountUSD": "<string>"
      }
    },
    "bridge": {
      "protocol": "<string>",
      "estimatedTimeMs": 123,
      "tags": [],
      "contractParams": {
        "protocolSelector": "<string>",
        "outputToken": "<string>",
        "scalingFactor": 123,
        "protocolData": "<string>"
      }
    },
    "fees": {
      "gas": {
        "token": {
          "chainId": 123,
          "address": "<string>"
        },
        "amount": "<string>",
        "amountUSD": "<string>"
      },
      "bridge": [
        {
          "token": {
            "chainId": 123,
            "address": "<string>"
          },
          "amount": "<string>",
          "amountUSD": "<string>"
        }
      ]
    }
  },
  "owner": "<string>",
  "deadline": 123,
  "side": "SELL",
  "beneficiary": "<string>",
  "nonce": "<string>",
  "permit": "<string>",
  "slippage": 100,
  "limitAmount": "<string>",
  "metadata": "0x",
  "partiallyFillable": false,
  "partnerAddress": "<string>",
  "partnerFeeBps": 0,
  "partnerTakesSurplus": false,
  "capSurplus": true,
  "orderType": "Order",
  "handler": "<string>",
  "data": "<string>",
  "strategy": "<string>",
  "useShares": true,
  "interval": 61,
  "numSlices": 3,
  "totalSrcAmount": "<string>",
  "totalDestAmount": "<string>",
  "maxSrcAmount": "<string>"
}
'
import requests

url = "https://api.velora.xyz/v2/delta/orders/build"

payload = {
    "route": {
        "origin": {
            "input": {
                "token": {
                    "chainId": 123,
                    "address": "<string>"
                },
                "amount": "<string>",
                "amountUSD": "<string>"
            },
            "output": {
                "token": {
                    "chainId": 123,
                    "address": "<string>"
                },
                "amount": "<string>",
                "amountUSD": "<string>"
            }
        },
        "destination": {
            "input": {
                "token": {
                    "chainId": 123,
                    "address": "<string>"
                },
                "amount": "<string>",
                "amountUSD": "<string>"
            },
            "output": {
                "token": {
                    "chainId": 123,
                    "address": "<string>"
                },
                "amount": "<string>",
                "amountUSD": "<string>"
            }
        },
        "bridge": {
            "protocol": "<string>",
            "estimatedTimeMs": 123,
            "tags": [],
            "contractParams": {
                "protocolSelector": "<string>",
                "outputToken": "<string>",
                "scalingFactor": 123,
                "protocolData": "<string>"
            }
        },
        "fees": {
            "gas": {
                "token": {
                    "chainId": 123,
                    "address": "<string>"
                },
                "amount": "<string>",
                "amountUSD": "<string>"
            },
            "bridge": [
                {
                    "token": {
                        "chainId": 123,
                        "address": "<string>"
                    },
                    "amount": "<string>",
                    "amountUSD": "<string>"
                }
            ]
        }
    },
    "owner": "<string>",
    "deadline": 123,
    "side": "SELL",
    "beneficiary": "<string>",
    "nonce": "<string>",
    "permit": "<string>",
    "slippage": 100,
    "limitAmount": "<string>",
    "metadata": "0x",
    "partiallyFillable": False,
    "partnerAddress": "<string>",
    "partnerFeeBps": 0,
    "partnerTakesSurplus": False,
    "capSurplus": True,
    "orderType": "Order",
    "handler": "<string>",
    "data": "<string>",
    "strategy": "<string>",
    "useShares": True,
    "interval": 61,
    "numSlices": 3,
    "totalSrcAmount": "<string>",
    "totalDestAmount": "<string>",
    "maxSrcAmount": "<string>"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    route: {
      origin: {
        input: {
          token: {chainId: 123, address: '<string>'},
          amount: '<string>',
          amountUSD: '<string>'
        },
        output: {
          token: {chainId: 123, address: '<string>'},
          amount: '<string>',
          amountUSD: '<string>'
        }
      },
      destination: {
        input: {
          token: {chainId: 123, address: '<string>'},
          amount: '<string>',
          amountUSD: '<string>'
        },
        output: {
          token: {chainId: 123, address: '<string>'},
          amount: '<string>',
          amountUSD: '<string>'
        }
      },
      bridge: {
        protocol: '<string>',
        estimatedTimeMs: 123,
        tags: [],
        contractParams: {
          protocolSelector: '<string>',
          outputToken: '<string>',
          scalingFactor: 123,
          protocolData: '<string>'
        }
      },
      fees: {
        gas: {
          token: {chainId: 123, address: '<string>'},
          amount: '<string>',
          amountUSD: '<string>'
        },
        bridge: [
          {
            token: {chainId: 123, address: '<string>'},
            amount: '<string>',
            amountUSD: '<string>'
          }
        ]
      }
    },
    owner: '<string>',
    deadline: 123,
    side: 'SELL',
    beneficiary: '<string>',
    nonce: '<string>',
    permit: '<string>',
    slippage: 100,
    limitAmount: '<string>',
    metadata: '0x',
    partiallyFillable: false,
    partnerAddress: '<string>',
    partnerFeeBps: 0,
    partnerTakesSurplus: false,
    capSurplus: true,
    orderType: 'Order',
    handler: '<string>',
    data: '<string>',
    strategy: '<string>',
    useShares: true,
    interval: 61,
    numSlices: 3,
    totalSrcAmount: '<string>',
    totalDestAmount: '<string>',
    maxSrcAmount: '<string>'
  })
};

fetch('https://api.velora.xyz/v2/delta/orders/build', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.velora.xyz/v2/delta/orders/build",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'route' => [
        'origin' => [
                'input' => [
                                'token' => [
                                                                'chainId' => 123,
                                                                'address' => '<string>'
                                ],
                                'amount' => '<string>',
                                'amountUSD' => '<string>'
                ],
                'output' => [
                                'token' => [
                                                                'chainId' => 123,
                                                                'address' => '<string>'
                                ],
                                'amount' => '<string>',
                                'amountUSD' => '<string>'
                ]
        ],
        'destination' => [
                'input' => [
                                'token' => [
                                                                'chainId' => 123,
                                                                'address' => '<string>'
                                ],
                                'amount' => '<string>',
                                'amountUSD' => '<string>'
                ],
                'output' => [
                                'token' => [
                                                                'chainId' => 123,
                                                                'address' => '<string>'
                                ],
                                'amount' => '<string>',
                                'amountUSD' => '<string>'
                ]
        ],
        'bridge' => [
                'protocol' => '<string>',
                'estimatedTimeMs' => 123,
                'tags' => [
                                
                ],
                'contractParams' => [
                                'protocolSelector' => '<string>',
                                'outputToken' => '<string>',
                                'scalingFactor' => 123,
                                'protocolData' => '<string>'
                ]
        ],
        'fees' => [
                'gas' => [
                                'token' => [
                                                                'chainId' => 123,
                                                                'address' => '<string>'
                                ],
                                'amount' => '<string>',
                                'amountUSD' => '<string>'
                ],
                'bridge' => [
                                [
                                                                'token' => [
                                                                                                                                'chainId' => 123,
                                                                                                                                'address' => '<string>'
                                                                ],
                                                                'amount' => '<string>',
                                                                'amountUSD' => '<string>'
                                ]
                ]
        ]
    ],
    'owner' => '<string>',
    'deadline' => 123,
    'side' => 'SELL',
    'beneficiary' => '<string>',
    'nonce' => '<string>',
    'permit' => '<string>',
    'slippage' => 100,
    'limitAmount' => '<string>',
    'metadata' => '0x',
    'partiallyFillable' => false,
    'partnerAddress' => '<string>',
    'partnerFeeBps' => 0,
    'partnerTakesSurplus' => false,
    'capSurplus' => true,
    'orderType' => 'Order',
    'handler' => '<string>',
    'data' => '<string>',
    'strategy' => '<string>',
    'useShares' => true,
    'interval' => 61,
    'numSlices' => 3,
    'totalSrcAmount' => '<string>',
    'totalDestAmount' => '<string>',
    'maxSrcAmount' => '<string>'
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.velora.xyz/v2/delta/orders/build"

	payload := strings.NewReader("{\n  \"route\": {\n    \"origin\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"destination\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"bridge\": {\n      \"protocol\": \"<string>\",\n      \"estimatedTimeMs\": 123,\n      \"tags\": [],\n      \"contractParams\": {\n        \"protocolSelector\": \"<string>\",\n        \"outputToken\": \"<string>\",\n        \"scalingFactor\": 123,\n        \"protocolData\": \"<string>\"\n      }\n    },\n    \"fees\": {\n      \"gas\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"bridge\": [\n        {\n          \"token\": {\n            \"chainId\": 123,\n            \"address\": \"<string>\"\n          },\n          \"amount\": \"<string>\",\n          \"amountUSD\": \"<string>\"\n        }\n      ]\n    }\n  },\n  \"owner\": \"<string>\",\n  \"deadline\": 123,\n  \"side\": \"SELL\",\n  \"beneficiary\": \"<string>\",\n  \"nonce\": \"<string>\",\n  \"permit\": \"<string>\",\n  \"slippage\": 100,\n  \"limitAmount\": \"<string>\",\n  \"metadata\": \"0x\",\n  \"partiallyFillable\": false,\n  \"partnerAddress\": \"<string>\",\n  \"partnerFeeBps\": 0,\n  \"partnerTakesSurplus\": false,\n  \"capSurplus\": true,\n  \"orderType\": \"Order\",\n  \"handler\": \"<string>\",\n  \"data\": \"<string>\",\n  \"strategy\": \"<string>\",\n  \"useShares\": true,\n  \"interval\": 61,\n  \"numSlices\": 3,\n  \"totalSrcAmount\": \"<string>\",\n  \"totalDestAmount\": \"<string>\",\n  \"maxSrcAmount\": \"<string>\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.velora.xyz/v2/delta/orders/build")
  .header("Content-Type", "application/json")
  .body("{\n  \"route\": {\n    \"origin\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"destination\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"bridge\": {\n      \"protocol\": \"<string>\",\n      \"estimatedTimeMs\": 123,\n      \"tags\": [],\n      \"contractParams\": {\n        \"protocolSelector\": \"<string>\",\n        \"outputToken\": \"<string>\",\n        \"scalingFactor\": 123,\n        \"protocolData\": \"<string>\"\n      }\n    },\n    \"fees\": {\n      \"gas\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"bridge\": [\n        {\n          \"token\": {\n            \"chainId\": 123,\n            \"address\": \"<string>\"\n          },\n          \"amount\": \"<string>\",\n          \"amountUSD\": \"<string>\"\n        }\n      ]\n    }\n  },\n  \"owner\": \"<string>\",\n  \"deadline\": 123,\n  \"side\": \"SELL\",\n  \"beneficiary\": \"<string>\",\n  \"nonce\": \"<string>\",\n  \"permit\": \"<string>\",\n  \"slippage\": 100,\n  \"limitAmount\": \"<string>\",\n  \"metadata\": \"0x\",\n  \"partiallyFillable\": false,\n  \"partnerAddress\": \"<string>\",\n  \"partnerFeeBps\": 0,\n  \"partnerTakesSurplus\": false,\n  \"capSurplus\": true,\n  \"orderType\": \"Order\",\n  \"handler\": \"<string>\",\n  \"data\": \"<string>\",\n  \"strategy\": \"<string>\",\n  \"useShares\": true,\n  \"interval\": 61,\n  \"numSlices\": 3,\n  \"totalSrcAmount\": \"<string>\",\n  \"totalDestAmount\": \"<string>\",\n  \"maxSrcAmount\": \"<string>\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.velora.xyz/v2/delta/orders/build")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"route\": {\n    \"origin\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"destination\": {\n      \"input\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"output\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      }\n    },\n    \"bridge\": {\n      \"protocol\": \"<string>\",\n      \"estimatedTimeMs\": 123,\n      \"tags\": [],\n      \"contractParams\": {\n        \"protocolSelector\": \"<string>\",\n        \"outputToken\": \"<string>\",\n        \"scalingFactor\": 123,\n        \"protocolData\": \"<string>\"\n      }\n    },\n    \"fees\": {\n      \"gas\": {\n        \"token\": {\n          \"chainId\": 123,\n          \"address\": \"<string>\"\n        },\n        \"amount\": \"<string>\",\n        \"amountUSD\": \"<string>\"\n      },\n      \"bridge\": [\n        {\n          \"token\": {\n            \"chainId\": 123,\n            \"address\": \"<string>\"\n          },\n          \"amount\": \"<string>\",\n          \"amountUSD\": \"<string>\"\n        }\n      ]\n    }\n  },\n  \"owner\": \"<string>\",\n  \"deadline\": 123,\n  \"side\": \"SELL\",\n  \"beneficiary\": \"<string>\",\n  \"nonce\": \"<string>\",\n  \"permit\": \"<string>\",\n  \"slippage\": 100,\n  \"limitAmount\": \"<string>\",\n  \"metadata\": \"0x\",\n  \"partiallyFillable\": false,\n  \"partnerAddress\": \"<string>\",\n  \"partnerFeeBps\": 0,\n  \"partnerTakesSurplus\": false,\n  \"capSurplus\": true,\n  \"orderType\": \"Order\",\n  \"handler\": \"<string>\",\n  \"data\": \"<string>\",\n  \"strategy\": \"<string>\",\n  \"useShares\": true,\n  \"interval\": 61,\n  \"numSlices\": 3,\n  \"totalSrcAmount\": \"<string>\",\n  \"totalDestAmount\": \"<string>\",\n  \"maxSrcAmount\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "toSign": {
    "domain": {
      "name": "<string>",
      "version": "<string>",
      "chainId": 123,
      "verifyingContract": "<string>"
    },
    "types": {},
    "value": {}
  },
  "orderHash": "<string>"
}

Body

application/json
route
object
required

Pass the unmodified route from GET /v2/delta/prices. The chain ID is derived from the route.

owner
string
required
deadline
integer
required

Required. Unix seconds after which the order is unfillable.

side
enum<string>
default:SELL
Available options:
SELL,
BUY
beneficiary
string

Defaults to owner.

nonce
string
permit
string

Permit / Permit2 payload, or 0x if approved on-chain.

slippage
integer
default:100

Slippage in basis points.

Required range: 0 <= x <= 10000
limitAmount
string

Override the SDK-computed destAmount (SELL) / srcAmount (BUY).

metadata
string
default:0x
partiallyFillable
boolean
default:false
partnerAddress
string

Defaults to zero address.

partnerFeeBps
integer
default:0
Required range: 0 <= x <= 200
partnerTakesSurplus
boolean
default:false
capSurplus
boolean
default:true
orderType
enum<string>
default:Order
Available options:
Order,
ProductiveOrder,
ExternalOrder,
TWAPOrder,
TWAPBuyOrder
handler
string

Required for ExternalOrder.

data
string

Required for ExternalOrder. Handler-specific encoded bytes.

strategy
string

Required for ProductiveOrder.

useShares
boolean
default:true
interval
integer

Required for TWAP. Slice interval in seconds.

Required range: x >= 60
numSlices
integer

Required for TWAP.

Required range: x >= 2
totalSrcAmount
string

Required for TWAPOrder. route.origin.input.amount must equal floor(totalSrcAmount / numSlices).

totalDestAmount
string

Required for TWAPBuyOrder. route.origin.output.amount must equal floor(totalDestAmount / numSlices).

maxSrcAmount
string

Required for TWAPBuyOrder. Maximum total source the user is willing to spend.

Response

EIP-712 typed data ready to sign.

toSign
object
orderHash
string

EIP-712 hash. Use for status lookup before the order id is assigned.

Last modified on June 14, 2026