curl --request POST \
--url https://hedgin.xyz/api/external/v1/transactions/vault/initialize \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Example vault",
"depositMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"performanceFeeBps": 2000,
"managementFeeBps": 200,
"depositCap": "1000000000000",
"minDeposit": "10000000",
"minWithdrawalShares": "1"
}
'import requests
url = "https://hedgin.xyz/api/external/v1/transactions/vault/initialize"
payload = {
"name": "Example vault",
"depositMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"performanceFeeBps": 2000,
"managementFeeBps": 200,
"depositCap": "1000000000000",
"minDeposit": "10000000",
"minWithdrawalShares": "1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Example vault',
depositMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
performanceFeeBps: 2000,
managementFeeBps: 200,
depositCap: '1000000000000',
minDeposit: '10000000',
minWithdrawalShares: '1'
})
};
fetch('https://hedgin.xyz/api/external/v1/transactions/vault/initialize', 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://hedgin.xyz/api/external/v1/transactions/vault/initialize",
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([
'name' => 'Example vault',
'depositMint' => 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
'performanceFeeBps' => 2000,
'managementFeeBps' => 200,
'depositCap' => '1000000000000',
'minDeposit' => '10000000',
'minWithdrawalShares' => '1'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://hedgin.xyz/api/external/v1/transactions/vault/initialize"
payload := strings.NewReader("{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://hedgin.xyz/api/external/v1/transactions/vault/initialize")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hedgin.xyz/api/external/v1/transactions/vault/initialize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}"
response = http.request(request)
puts response.read_body{
"vault": "So11111111111111111111111111111111111111112",
"result": {
"transaction": "aSDinaTvuI8gbWludGxpZnk=",
"simulation": {
"unitsConsumed": 123,
"deferred": true
},
"ticket": "<string>",
"blockhash": "<string>",
"vault": "So11111111111111111111111111111111111111112",
"sendConcurrently": true,
"next": {
"path": "jupiter/sweep",
"body": {}
}
}
}{
"error": {
"code": "Validation",
"message": "vault must be a public key"
}
}{
"error": {
"code": "Unauthorized",
"message": "Invalid API key"
}
}{
"error": {
"code": "Forbidden",
"message": "Action is not enabled for this key"
}
}{
"error": {
"code": "NotFound",
"message": "Vault not found"
}
}{
"error": {
"code": "Stale",
"message": "pool price moved; refresh before flipping"
}
}{
"error": {
"code": "BodyTooLarge",
"message": "Request body is too large"
}
}{
"error": {
"code": "SlippageToleranceExceeded",
"message": "Transaction rejected during simulation or preflight"
}
}{
"error": {
"code": "RateLimited",
"message": "Too many requests, slow down"
}
}{
"error": {
"code": "Internal",
"message": "Service temporarily unavailable"
}
}{
"error": {
"code": "JupiterQuoteFailed",
"message": "Service temporarily unavailable"
}
}{
"error": {
"code": "RpcUnavailable",
"message": "Service temporarily unavailable"
}
}Create vault
Requires key scope vault/initialize.
Returns an unsigned v0 transaction for the manager to sign. Do not send payer: the API sets it to the key’s manager and rejects a body that contains it. Unknown fields are ignored.
Creates a vault managed by the key’s manager. The body has no vault. The key must have no vault allowlist (403 otherwise), and the manager must be whitelisted on chain (403 otherwise). The step’s vault field and the response’s top-level vault name the new vault. That address comes from the protocol’s next vault id, so a vault that someone else creates first makes this transaction fail. Build again in that case.
curl --request POST \
--url https://hedgin.xyz/api/external/v1/transactions/vault/initialize \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Example vault",
"depositMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"performanceFeeBps": 2000,
"managementFeeBps": 200,
"depositCap": "1000000000000",
"minDeposit": "10000000",
"minWithdrawalShares": "1"
}
'import requests
url = "https://hedgin.xyz/api/external/v1/transactions/vault/initialize"
payload = {
"name": "Example vault",
"depositMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"performanceFeeBps": 2000,
"managementFeeBps": 200,
"depositCap": "1000000000000",
"minDeposit": "10000000",
"minWithdrawalShares": "1"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Example vault',
depositMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
performanceFeeBps: 2000,
managementFeeBps: 200,
depositCap: '1000000000000',
minDeposit: '10000000',
minWithdrawalShares: '1'
})
};
fetch('https://hedgin.xyz/api/external/v1/transactions/vault/initialize', 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://hedgin.xyz/api/external/v1/transactions/vault/initialize",
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([
'name' => 'Example vault',
'depositMint' => 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
'performanceFeeBps' => 2000,
'managementFeeBps' => 200,
'depositCap' => '1000000000000',
'minDeposit' => '10000000',
'minWithdrawalShares' => '1'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://hedgin.xyz/api/external/v1/transactions/vault/initialize"
payload := strings.NewReader("{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://hedgin.xyz/api/external/v1/transactions/vault/initialize")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hedgin.xyz/api/external/v1/transactions/vault/initialize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Example vault\",\n \"depositMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n \"performanceFeeBps\": 2000,\n \"managementFeeBps\": 200,\n \"depositCap\": \"1000000000000\",\n \"minDeposit\": \"10000000\",\n \"minWithdrawalShares\": \"1\"\n}"
response = http.request(request)
puts response.read_body{
"vault": "So11111111111111111111111111111111111111112",
"result": {
"transaction": "aSDinaTvuI8gbWludGxpZnk=",
"simulation": {
"unitsConsumed": 123,
"deferred": true
},
"ticket": "<string>",
"blockhash": "<string>",
"vault": "So11111111111111111111111111111111111111112",
"sendConcurrently": true,
"next": {
"path": "jupiter/sweep",
"body": {}
}
}
}{
"error": {
"code": "Validation",
"message": "vault must be a public key"
}
}{
"error": {
"code": "Unauthorized",
"message": "Invalid API key"
}
}{
"error": {
"code": "Forbidden",
"message": "Action is not enabled for this key"
}
}{
"error": {
"code": "NotFound",
"message": "Vault not found"
}
}{
"error": {
"code": "Stale",
"message": "pool price moved; refresh before flipping"
}
}{
"error": {
"code": "BodyTooLarge",
"message": "Request body is too large"
}
}{
"error": {
"code": "SlippageToleranceExceeded",
"message": "Transaction rejected during simulation or preflight"
}
}{
"error": {
"code": "RateLimited",
"message": "Too many requests, slow down"
}
}{
"error": {
"code": "Internal",
"message": "Service temporarily unavailable"
}
}{
"error": {
"code": "JupiterQuoteFailed",
"message": "Service temporarily unavailable"
}
}{
"error": {
"code": "RpcUnavailable",
"message": "Service temporarily unavailable"
}
}Authorizations
API key issued by a Hedgin administrator, in the form hv1_<id>_<secret>. <id> is 1 to 48 characters and <secret> is 32 to 128 characters, both from [A-Za-z0-9_-].
Body
At most 32 UTF-8 bytes.
1Base58 Solana public key. The server decodes it and rejects anything that is not 32 bytes.
^[1-9A-HJ-NP-Za-km-z]{32,44}$"So11111111111111111111111111111111111111112"
0 <= x <= 50000 <= x <= 500Deposit-token base units.
20^\d+$"1000000"
Deposit-token base units.
20^\d+$"1000000"
Share base units.
20^\d+$"1000000"
Response
Build result. One step.
Base58 Solana public key. The server decodes it and rejects anything that is not 32 bytes.
^[1-9A-HJ-NP-Za-km-z]{32,44}$"So11111111111111111111111111111111111111112"
One unsigned transaction and its ticket. Builders can add action metadata fields next to these.
Show child attributes
Show child attributes
