Skip to main content
POST
/
v0
/
insto
/
custody
/
vaults
/
{vault_id}
/
deposit-methods
/
{method_id}
/
addresses
Create address
curl --request POST \
  --url https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/deposit-methods/{method_id}/addresses \
  --header 'Content-Type: application/json' \
  --header 'api-key: <api-key>' \
  --header 'api-nonce: <api-key>' \
  --header 'api-otp: <api-key>' \
  --header 'api-sign: <api-key>' \
  --data '{}'
import requests

url = "https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/deposit-methods/{method_id}/addresses"

payload = {}
headers = {
"api-key": "<api-key>",
"api-sign": "<api-key>",
"api-nonce": "<api-key>",
"api-otp": "<api-key>",
"Content-Type": "application/json"
}

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

print(response.text)
const options = {
method: 'POST',
headers: {
'api-key': '<api-key>',
'api-sign': '<api-key>',
'api-nonce': '<api-key>',
'api-otp': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};

fetch('https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/deposit-methods/{method_id}/addresses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main

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

func main() {

url := "https://api.kraken.com/v0/insto/custody/vaults/{vault_id}/deposit-methods/{method_id}/addresses"

payload := strings.NewReader("{}")

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

req.Header.Add("api-key", "<api-key>")
req.Header.Add("api-sign", "<api-key>")
req.Header.Add("api-nonce", "<api-key>")
req.Header.Add("api-otp", "<api-key>")
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))

}
{
  "asset": "BTC",
  "asset_class": "currency",
  "address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "tag": "123456",
  "memo": "deposit-memo-001",
  "name": "Primary deposit",
  "expire_time": "2025-01-01T00:00:00Z",
  "is_new": true,
  "fee_amount": "0.00000000",
  "minimum": "0.00100000",
  "maximum": "100.00000000",
  "allow_new_funding_id": true,
  "max_funding_ids": 10
}
{
"type": "tag:kraken.com,2025:BadRequest",
"status": 400,
"title": "Bad Request",
"data": {
"message": "method_id is not a valid UUID"
},
"detail": "method_id is not a valid UUID",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}
{
"type": "tag:kraken.com,2025:PermissionDenied",
"status": 403,
"title": "Permission Denied",
"data": {
"message": "Caller lacks write access to vault VABCDEF234567A"
},
"detail": "The caller does not have access to the requested vault.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}
{
"type": "tag:kraken.com,2025:gateway/ReadUpstream",
"status": 500,
"title": "Internal Server Error",
"data": "<unknown>",
"detail": "Failed to read response from upstream custody service.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}
{
"type": "tag:kraken.com,2025:gateway/Connect",
"status": 503,
"title": "Service Unavailable",
"data": "<unknown>",
"detail": "Downstream custody service is temporarily unreachable; retry with backoff.",
"instance": "https://debug.kraken.com/req/01HXYZABCDEF"
}

Authorizations

api-key
string
header
required
api-sign
string
header
required
api-nonce
string
header
required
api-otp
string
header
required

Path Parameters

method_id
string
required

Deposit method identifier returned by the list deposit methods endpoint.

Example:

"11111111-1111-1111-1111-111111111111"

vault_id
string
required

Vault identifier, a V-prefixed 14-char base32 string with a final check character.

Example:

"VABCDEF234567A"

Body

application/json

Empty request body. The vault and deposit method are supplied as path parameters.

Empty request body. Pass {} or an empty object.

Response

The newly generated deposit address for the vault and deposit method.

A single deposit address entry.

asset
string
required

Asset code the address belongs to (e.g. BTC, USD).

Example:

"BTC"

asset_class
string
required

Asset class of the deposit method. Currently always currency.

Example:

"currency"

address
string

Deposit address string for the underlying chain.

Example:

"bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"

tag
string

Destination tag for assets that require it, such as XRP or XLM.

Example:

"123456"

memo
string

Memo for chains that route by memo instead of tag, such as EOS.

Example:

"deposit-memo-001"

name
string

Human-readable label assigned to the address.

Example:

"Primary deposit"

expire_time
string<date-time>

Address expiration time as an RFC 3339 UTC timestamp. Empty when the address does not expire.

Example:

"2025-01-01T00:00:00Z"

is_new
boolean

Whether this address was generated for the current request.

Example:

true

fee_amount
string

Deposit fee amount, fixed-precision decimal as string.

Example:

"0.00000000"

minimum
string

Minimum deposit amount, fixed-precision decimal as string.

Example:

"0.00100000"

maximum
string

Maximum deposit amount, fixed-precision decimal as string. Empty when there is no upper bound.

Example:

"100.00000000"

allow_new_funding_id
boolean

Whether another deposit address can be generated for this method.

Example:

true

max_funding_ids
integer<int32>

Maximum number of deposit addresses that may exist for this method.

Example:

10