Submit a claim request
curl --request POST \
--url https://relayer.api.umbraprivacy.com/v1/claims \
--header 'Content-Type: application/json' \
--data '
{
"user_pubkey": "<string>",
"mint": "<string>",
"stealth_pool_index": 123,
"max_utxo_capacity": 2,
"optional_data": "<string>",
"proof_account_data": {
"rescue_encryption_public_key": "<string>",
"encryption_nonce": "<string>",
"merkle_root": "<string>",
"tvk_timestamp": 123,
"groth16_proof_a": "<string>",
"groth16_proof_b": "<string>",
"groth16_proof_c": "<string>",
"rescue_encryption_commitment": "<string>",
"encryption_validation_polynomial": "<string>",
"rescue_encrypted_master_viewing_key_low": "<string>",
"rescue_encrypted_master_viewing_key_high": "<string>",
"rescue_encrypted_blinding_factor_low": "<string>",
"rescue_encrypted_blinding_factor_high": "<string>",
"rescue_encrypted_total_amount": "<string>",
"rescue_encrypted_relayer_commission_fee": "<string>",
"rescue_encrypted_protocol_commission_fee": "<string>",
"total_relayer_fees": 123
},
"utxo_slot_data": [
{
"slot_index": 123,
"nullifier": "<string>",
"linker_encryptions": [
"<string>"
],
"linker_key_commitments": [
"<string>"
]
}
],
"fee_proof_data": {
"amount": "<string>",
"relayer_fixed_sol_fees": "<string>",
"protocol_fees_amount_lower_bound": "<string>",
"protocol_fees_amount_upper_bound": "<string>",
"protocol_fees_base_fees_in_spl": "<string>",
"protocol_fees_commission_fee_in_spl": 123,
"protocol_fees_merkle_path": [
"<string>"
],
"protocol_fees_leaf_index": 123,
"relayer_fees_amount_lower_bound": "<string>",
"relayer_fees_amount_upper_bound": "<string>",
"relayer_fees_base_fees_in_spl": "<string>",
"relayer_fees_commission_fee_in_spl": 123,
"relayer_fees_merkle_path": [
"<string>"
],
"relayer_fees_leaf_index": 123
}
}
'import requests
url = "https://relayer.api.umbraprivacy.com/v1/claims"
payload = {
"user_pubkey": "<string>",
"mint": "<string>",
"stealth_pool_index": 123,
"max_utxo_capacity": 2,
"optional_data": "<string>",
"proof_account_data": {
"rescue_encryption_public_key": "<string>",
"encryption_nonce": "<string>",
"merkle_root": "<string>",
"tvk_timestamp": 123,
"groth16_proof_a": "<string>",
"groth16_proof_b": "<string>",
"groth16_proof_c": "<string>",
"rescue_encryption_commitment": "<string>",
"encryption_validation_polynomial": "<string>",
"rescue_encrypted_master_viewing_key_low": "<string>",
"rescue_encrypted_master_viewing_key_high": "<string>",
"rescue_encrypted_blinding_factor_low": "<string>",
"rescue_encrypted_blinding_factor_high": "<string>",
"rescue_encrypted_total_amount": "<string>",
"rescue_encrypted_relayer_commission_fee": "<string>",
"rescue_encrypted_protocol_commission_fee": "<string>",
"total_relayer_fees": 123
},
"utxo_slot_data": [
{
"slot_index": 123,
"nullifier": "<string>",
"linker_encryptions": ["<string>"],
"linker_key_commitments": ["<string>"]
}
],
"fee_proof_data": {
"amount": "<string>",
"relayer_fixed_sol_fees": "<string>",
"protocol_fees_amount_lower_bound": "<string>",
"protocol_fees_amount_upper_bound": "<string>",
"protocol_fees_base_fees_in_spl": "<string>",
"protocol_fees_commission_fee_in_spl": 123,
"protocol_fees_merkle_path": ["<string>"],
"protocol_fees_leaf_index": 123,
"relayer_fees_amount_lower_bound": "<string>",
"relayer_fees_amount_upper_bound": "<string>",
"relayer_fees_base_fees_in_spl": "<string>",
"relayer_fees_commission_fee_in_spl": 123,
"relayer_fees_merkle_path": ["<string>"],
"relayer_fees_leaf_index": 123
}
}
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({
user_pubkey: '<string>',
mint: '<string>',
stealth_pool_index: 123,
max_utxo_capacity: 2,
optional_data: '<string>',
proof_account_data: {
rescue_encryption_public_key: '<string>',
encryption_nonce: '<string>',
merkle_root: '<string>',
tvk_timestamp: 123,
groth16_proof_a: '<string>',
groth16_proof_b: '<string>',
groth16_proof_c: '<string>',
rescue_encryption_commitment: '<string>',
encryption_validation_polynomial: '<string>',
rescue_encrypted_master_viewing_key_low: '<string>',
rescue_encrypted_master_viewing_key_high: '<string>',
rescue_encrypted_blinding_factor_low: '<string>',
rescue_encrypted_blinding_factor_high: '<string>',
rescue_encrypted_total_amount: '<string>',
rescue_encrypted_relayer_commission_fee: '<string>',
rescue_encrypted_protocol_commission_fee: '<string>',
total_relayer_fees: 123
},
utxo_slot_data: [
{
slot_index: 123,
nullifier: '<string>',
linker_encryptions: ['<string>'],
linker_key_commitments: ['<string>']
}
],
fee_proof_data: {
amount: '<string>',
relayer_fixed_sol_fees: '<string>',
protocol_fees_amount_lower_bound: '<string>',
protocol_fees_amount_upper_bound: '<string>',
protocol_fees_base_fees_in_spl: '<string>',
protocol_fees_commission_fee_in_spl: 123,
protocol_fees_merkle_path: ['<string>'],
protocol_fees_leaf_index: 123,
relayer_fees_amount_lower_bound: '<string>',
relayer_fees_amount_upper_bound: '<string>',
relayer_fees_base_fees_in_spl: '<string>',
relayer_fees_commission_fee_in_spl: 123,
relayer_fees_merkle_path: ['<string>'],
relayer_fees_leaf_index: 123
}
})
};
fetch('https://relayer.api.umbraprivacy.com/v1/claims', 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://relayer.api.umbraprivacy.com/v1/claims",
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([
'user_pubkey' => '<string>',
'mint' => '<string>',
'stealth_pool_index' => 123,
'max_utxo_capacity' => 2,
'optional_data' => '<string>',
'proof_account_data' => [
'rescue_encryption_public_key' => '<string>',
'encryption_nonce' => '<string>',
'merkle_root' => '<string>',
'tvk_timestamp' => 123,
'groth16_proof_a' => '<string>',
'groth16_proof_b' => '<string>',
'groth16_proof_c' => '<string>',
'rescue_encryption_commitment' => '<string>',
'encryption_validation_polynomial' => '<string>',
'rescue_encrypted_master_viewing_key_low' => '<string>',
'rescue_encrypted_master_viewing_key_high' => '<string>',
'rescue_encrypted_blinding_factor_low' => '<string>',
'rescue_encrypted_blinding_factor_high' => '<string>',
'rescue_encrypted_total_amount' => '<string>',
'rescue_encrypted_relayer_commission_fee' => '<string>',
'rescue_encrypted_protocol_commission_fee' => '<string>',
'total_relayer_fees' => 123
],
'utxo_slot_data' => [
[
'slot_index' => 123,
'nullifier' => '<string>',
'linker_encryptions' => [
'<string>'
],
'linker_key_commitments' => [
'<string>'
]
]
],
'fee_proof_data' => [
'amount' => '<string>',
'relayer_fixed_sol_fees' => '<string>',
'protocol_fees_amount_lower_bound' => '<string>',
'protocol_fees_amount_upper_bound' => '<string>',
'protocol_fees_base_fees_in_spl' => '<string>',
'protocol_fees_commission_fee_in_spl' => 123,
'protocol_fees_merkle_path' => [
'<string>'
],
'protocol_fees_leaf_index' => 123,
'relayer_fees_amount_lower_bound' => '<string>',
'relayer_fees_amount_upper_bound' => '<string>',
'relayer_fees_base_fees_in_spl' => '<string>',
'relayer_fees_commission_fee_in_spl' => 123,
'relayer_fees_merkle_path' => [
'<string>'
],
'relayer_fees_leaf_index' => 123
]
]),
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://relayer.api.umbraprivacy.com/v1/claims"
payload := strings.NewReader("{\n \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\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://relayer.api.umbraprivacy.com/v1/claims")
.header("Content-Type", "application/json")
.body("{\n \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://relayer.api.umbraprivacy.com/v1/claims")
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 \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "received"
}Relayer API
Submit Burn
Submit a Stealth Pool Note burn request to the relayer for processing. The wire path is /v1/claims (legacy).
Submit a claim request
curl --request POST \
--url https://relayer.api.umbraprivacy.com/v1/claims \
--header 'Content-Type: application/json' \
--data '
{
"user_pubkey": "<string>",
"mint": "<string>",
"stealth_pool_index": 123,
"max_utxo_capacity": 2,
"optional_data": "<string>",
"proof_account_data": {
"rescue_encryption_public_key": "<string>",
"encryption_nonce": "<string>",
"merkle_root": "<string>",
"tvk_timestamp": 123,
"groth16_proof_a": "<string>",
"groth16_proof_b": "<string>",
"groth16_proof_c": "<string>",
"rescue_encryption_commitment": "<string>",
"encryption_validation_polynomial": "<string>",
"rescue_encrypted_master_viewing_key_low": "<string>",
"rescue_encrypted_master_viewing_key_high": "<string>",
"rescue_encrypted_blinding_factor_low": "<string>",
"rescue_encrypted_blinding_factor_high": "<string>",
"rescue_encrypted_total_amount": "<string>",
"rescue_encrypted_relayer_commission_fee": "<string>",
"rescue_encrypted_protocol_commission_fee": "<string>",
"total_relayer_fees": 123
},
"utxo_slot_data": [
{
"slot_index": 123,
"nullifier": "<string>",
"linker_encryptions": [
"<string>"
],
"linker_key_commitments": [
"<string>"
]
}
],
"fee_proof_data": {
"amount": "<string>",
"relayer_fixed_sol_fees": "<string>",
"protocol_fees_amount_lower_bound": "<string>",
"protocol_fees_amount_upper_bound": "<string>",
"protocol_fees_base_fees_in_spl": "<string>",
"protocol_fees_commission_fee_in_spl": 123,
"protocol_fees_merkle_path": [
"<string>"
],
"protocol_fees_leaf_index": 123,
"relayer_fees_amount_lower_bound": "<string>",
"relayer_fees_amount_upper_bound": "<string>",
"relayer_fees_base_fees_in_spl": "<string>",
"relayer_fees_commission_fee_in_spl": 123,
"relayer_fees_merkle_path": [
"<string>"
],
"relayer_fees_leaf_index": 123
}
}
'import requests
url = "https://relayer.api.umbraprivacy.com/v1/claims"
payload = {
"user_pubkey": "<string>",
"mint": "<string>",
"stealth_pool_index": 123,
"max_utxo_capacity": 2,
"optional_data": "<string>",
"proof_account_data": {
"rescue_encryption_public_key": "<string>",
"encryption_nonce": "<string>",
"merkle_root": "<string>",
"tvk_timestamp": 123,
"groth16_proof_a": "<string>",
"groth16_proof_b": "<string>",
"groth16_proof_c": "<string>",
"rescue_encryption_commitment": "<string>",
"encryption_validation_polynomial": "<string>",
"rescue_encrypted_master_viewing_key_low": "<string>",
"rescue_encrypted_master_viewing_key_high": "<string>",
"rescue_encrypted_blinding_factor_low": "<string>",
"rescue_encrypted_blinding_factor_high": "<string>",
"rescue_encrypted_total_amount": "<string>",
"rescue_encrypted_relayer_commission_fee": "<string>",
"rescue_encrypted_protocol_commission_fee": "<string>",
"total_relayer_fees": 123
},
"utxo_slot_data": [
{
"slot_index": 123,
"nullifier": "<string>",
"linker_encryptions": ["<string>"],
"linker_key_commitments": ["<string>"]
}
],
"fee_proof_data": {
"amount": "<string>",
"relayer_fixed_sol_fees": "<string>",
"protocol_fees_amount_lower_bound": "<string>",
"protocol_fees_amount_upper_bound": "<string>",
"protocol_fees_base_fees_in_spl": "<string>",
"protocol_fees_commission_fee_in_spl": 123,
"protocol_fees_merkle_path": ["<string>"],
"protocol_fees_leaf_index": 123,
"relayer_fees_amount_lower_bound": "<string>",
"relayer_fees_amount_upper_bound": "<string>",
"relayer_fees_base_fees_in_spl": "<string>",
"relayer_fees_commission_fee_in_spl": 123,
"relayer_fees_merkle_path": ["<string>"],
"relayer_fees_leaf_index": 123
}
}
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({
user_pubkey: '<string>',
mint: '<string>',
stealth_pool_index: 123,
max_utxo_capacity: 2,
optional_data: '<string>',
proof_account_data: {
rescue_encryption_public_key: '<string>',
encryption_nonce: '<string>',
merkle_root: '<string>',
tvk_timestamp: 123,
groth16_proof_a: '<string>',
groth16_proof_b: '<string>',
groth16_proof_c: '<string>',
rescue_encryption_commitment: '<string>',
encryption_validation_polynomial: '<string>',
rescue_encrypted_master_viewing_key_low: '<string>',
rescue_encrypted_master_viewing_key_high: '<string>',
rescue_encrypted_blinding_factor_low: '<string>',
rescue_encrypted_blinding_factor_high: '<string>',
rescue_encrypted_total_amount: '<string>',
rescue_encrypted_relayer_commission_fee: '<string>',
rescue_encrypted_protocol_commission_fee: '<string>',
total_relayer_fees: 123
},
utxo_slot_data: [
{
slot_index: 123,
nullifier: '<string>',
linker_encryptions: ['<string>'],
linker_key_commitments: ['<string>']
}
],
fee_proof_data: {
amount: '<string>',
relayer_fixed_sol_fees: '<string>',
protocol_fees_amount_lower_bound: '<string>',
protocol_fees_amount_upper_bound: '<string>',
protocol_fees_base_fees_in_spl: '<string>',
protocol_fees_commission_fee_in_spl: 123,
protocol_fees_merkle_path: ['<string>'],
protocol_fees_leaf_index: 123,
relayer_fees_amount_lower_bound: '<string>',
relayer_fees_amount_upper_bound: '<string>',
relayer_fees_base_fees_in_spl: '<string>',
relayer_fees_commission_fee_in_spl: 123,
relayer_fees_merkle_path: ['<string>'],
relayer_fees_leaf_index: 123
}
})
};
fetch('https://relayer.api.umbraprivacy.com/v1/claims', 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://relayer.api.umbraprivacy.com/v1/claims",
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([
'user_pubkey' => '<string>',
'mint' => '<string>',
'stealth_pool_index' => 123,
'max_utxo_capacity' => 2,
'optional_data' => '<string>',
'proof_account_data' => [
'rescue_encryption_public_key' => '<string>',
'encryption_nonce' => '<string>',
'merkle_root' => '<string>',
'tvk_timestamp' => 123,
'groth16_proof_a' => '<string>',
'groth16_proof_b' => '<string>',
'groth16_proof_c' => '<string>',
'rescue_encryption_commitment' => '<string>',
'encryption_validation_polynomial' => '<string>',
'rescue_encrypted_master_viewing_key_low' => '<string>',
'rescue_encrypted_master_viewing_key_high' => '<string>',
'rescue_encrypted_blinding_factor_low' => '<string>',
'rescue_encrypted_blinding_factor_high' => '<string>',
'rescue_encrypted_total_amount' => '<string>',
'rescue_encrypted_relayer_commission_fee' => '<string>',
'rescue_encrypted_protocol_commission_fee' => '<string>',
'total_relayer_fees' => 123
],
'utxo_slot_data' => [
[
'slot_index' => 123,
'nullifier' => '<string>',
'linker_encryptions' => [
'<string>'
],
'linker_key_commitments' => [
'<string>'
]
]
],
'fee_proof_data' => [
'amount' => '<string>',
'relayer_fixed_sol_fees' => '<string>',
'protocol_fees_amount_lower_bound' => '<string>',
'protocol_fees_amount_upper_bound' => '<string>',
'protocol_fees_base_fees_in_spl' => '<string>',
'protocol_fees_commission_fee_in_spl' => 123,
'protocol_fees_merkle_path' => [
'<string>'
],
'protocol_fees_leaf_index' => 123,
'relayer_fees_amount_lower_bound' => '<string>',
'relayer_fees_amount_upper_bound' => '<string>',
'relayer_fees_base_fees_in_spl' => '<string>',
'relayer_fees_commission_fee_in_spl' => 123,
'relayer_fees_merkle_path' => [
'<string>'
],
'relayer_fees_leaf_index' => 123
]
]),
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://relayer.api.umbraprivacy.com/v1/claims"
payload := strings.NewReader("{\n \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\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://relayer.api.umbraprivacy.com/v1/claims")
.header("Content-Type", "application/json")
.body("{\n \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://relayer.api.umbraprivacy.com/v1/claims")
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 \"user_pubkey\": \"<string>\",\n \"mint\": \"<string>\",\n \"stealth_pool_index\": 123,\n \"max_utxo_capacity\": 2,\n \"optional_data\": \"<string>\",\n \"proof_account_data\": {\n \"rescue_encryption_public_key\": \"<string>\",\n \"encryption_nonce\": \"<string>\",\n \"merkle_root\": \"<string>\",\n \"tvk_timestamp\": 123,\n \"groth16_proof_a\": \"<string>\",\n \"groth16_proof_b\": \"<string>\",\n \"groth16_proof_c\": \"<string>\",\n \"rescue_encryption_commitment\": \"<string>\",\n \"encryption_validation_polynomial\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_low\": \"<string>\",\n \"rescue_encrypted_master_viewing_key_high\": \"<string>\",\n \"rescue_encrypted_blinding_factor_low\": \"<string>\",\n \"rescue_encrypted_blinding_factor_high\": \"<string>\",\n \"rescue_encrypted_total_amount\": \"<string>\",\n \"rescue_encrypted_relayer_commission_fee\": \"<string>\",\n \"rescue_encrypted_protocol_commission_fee\": \"<string>\",\n \"total_relayer_fees\": 123\n },\n \"utxo_slot_data\": [\n {\n \"slot_index\": 123,\n \"nullifier\": \"<string>\",\n \"linker_encryptions\": [\n \"<string>\"\n ],\n \"linker_key_commitments\": [\n \"<string>\"\n ]\n }\n ],\n \"fee_proof_data\": {\n \"amount\": \"<string>\",\n \"relayer_fixed_sol_fees\": \"<string>\",\n \"protocol_fees_amount_lower_bound\": \"<string>\",\n \"protocol_fees_amount_upper_bound\": \"<string>\",\n \"protocol_fees_base_fees_in_spl\": \"<string>\",\n \"protocol_fees_commission_fee_in_spl\": 123,\n \"protocol_fees_merkle_path\": [\n \"<string>\"\n ],\n \"protocol_fees_leaf_index\": 123,\n \"relayer_fees_amount_lower_bound\": \"<string>\",\n \"relayer_fees_amount_upper_bound\": \"<string>\",\n \"relayer_fees_base_fees_in_spl\": \"<string>\",\n \"relayer_fees_commission_fee_in_spl\": 123,\n \"relayer_fees_merkle_path\": [\n \"<string>\"\n ],\n \"relayer_fees_leaf_index\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "received"
}This endpoint is designed to be called by the SDK’s burner factories, not directly.
The request body contains cryptographic proof data that must be generated correctly
by the ZK prover. Use
getSelfBurnableStealthPoolNoteIntoETABurnerFunction,
getReceiverBurnableStealthPoolNoteIntoETABurnerFunction, or
getSelfBurnableStealthPoolNoteIntoATABurnerFunction
from @umbra-privacy/sdk/burn instead.GET /v1/claims/{request_id} with the returned UUID to track progress.
The wire path retains the legacy
/v1/claims segment. In V18 SDK code you call it via the relayer client’s submitClaim method (or its submitBurn alias when plugged into a burner factory’s relayer dep).Burn variants
encrypted_balance— burn into anEncryptedTokenAccount. Requires additional Rescue-encrypted fee fields inproof_account_data. Each note slot has 6 linker encryptions and 6 key commitments.public_balance— burn into anAssociatedTokenAccount. Requiresfee_proof_datawith the client’s expected basis-points rates (protocol_fee_basis_points,relayer_fee_basis_points) and allowed-address PDA slots — the relayer verifies these against the on-chainFeeSchedule/RelayerFeeSchedulePDAs before submission, catching stale client config without wasting a transaction. Each note slot has 5 linker encryptions and 5 key commitments.
Validation rules
- All base58 pubkeys must decode to exactly 32 bytes.
- All nullifiers within a request must be unique (duplicates return
409 DUPLICATE_OFFSET). max_utxo_capacitymust be greater than 0.fee_proof_datais required forpublic_balancevariant only.
Idempotency / DUPLICATE_OFFSET
If a burn callback drops and you re-submit with the same request_id while the nullifier is still reserved upstream, the relayer returns HTTP 409 with code DUPLICATE_OFFSET. Wait, re-check on-chain that the nullifier has not landed, and retry only if still unspent. The SDK’s burner factories handle this internally.Body
application/json
Claim target — encrypted token account or public ATA.
Available options:
encrypted_balance, public_balance Base58-encoded Solana public key of the claiming user.
Base58-encoded token mint address.
Index of the stealth pool containing the UTXOs.
Maximum number of UTXOs in this claim batch.
Required range:
x >= 1Base64-encoded 32-byte metadata field.
Cryptographic proof data for the claim.
Show child attributes
Show child attributes
Array of UTXO slots to claim.
Minimum array length:
1Show child attributes
Show child attributes
Fee Merkle proof data. Required for public_balance variant only.
Show child attributes
Show child attributes
⌘I