curl --request GET \
--url https://api.hel.io/v1/withdrawal-transactions/{id}/api-key \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.hel.io/v1/withdrawal-transactions/{id}/api-key"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.hel.io/v1/withdrawal-transactions/{id}/api-key', 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.hel.io/v1/withdrawal-transactions/{id}/api-key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hel.io/v1/withdrawal-transactions/{id}/api-key"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hel.io/v1/withdrawal-transactions/{id}/api-key")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hel.io/v1/withdrawal-transactions/{id}/api-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"withdrawalDetailId": "68129f9cc81cc9397e012b3a",
"state": "COMPLETED",
"sourceChain": "SOL",
"sourceToken": "USDC",
"sourceAmount": "1000000",
"destinationChain": "ETH",
"destinationToken": "USDC",
"destinationAmount": "990000",
"destinationWalletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
"txHash": "0xabc123...",
"broadcastAck": "acknowledged",
"errorReason": null,
"customerId": "cust_123",
"createdAt": "2025-04-30T22:09:32.978Z",
"updatedAt": "2025-04-30T22:10:01.120Z"
}{
"message": "Api key or token is invalid",
"code": 401
}Get a Withdrawal Transaction
Returns a single withdrawal transaction by ID for the authenticated merchant account. Requires WITHDRAWS_READ.
curl --request GET \
--url https://api.hel.io/v1/withdrawal-transactions/{id}/api-key \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.hel.io/v1/withdrawal-transactions/{id}/api-key"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.hel.io/v1/withdrawal-transactions/{id}/api-key', 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.hel.io/v1/withdrawal-transactions/{id}/api-key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hel.io/v1/withdrawal-transactions/{id}/api-key"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hel.io/v1/withdrawal-transactions/{id}/api-key")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hel.io/v1/withdrawal-transactions/{id}/api-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"withdrawalDetailId": "68129f9cc81cc9397e012b3a",
"state": "COMPLETED",
"sourceChain": "SOL",
"sourceToken": "USDC",
"sourceAmount": "1000000",
"destinationChain": "ETH",
"destinationToken": "USDC",
"destinationAmount": "990000",
"destinationWalletAddress": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0",
"txHash": "0xabc123...",
"broadcastAck": "acknowledged",
"errorReason": null,
"customerId": "cust_123",
"createdAt": "2025-04-30T22:09:32.978Z",
"updatedAt": "2025-04-30T22:10:01.120Z"
}{
"message": "Api key or token is invalid",
"code": 401
}api.hel.io/v1 and generate API keys there. For the development environment, use api.dev.hel.io/v1 and generate API keys from moonpay.dev.hel.io.Authorizations
Authentication using JWT token
Path Parameters
Withdrawal detail ID.
Query Parameters
Your API key, which can be generated from the Helio Dashboard settings page.
Response
Withdrawal transaction retrieved successfully.
Withdrawal detail ID.
QUOTED, SUBMITTING, SUBMITTED, BRIDGING, COMPLETED, FAILED, FAILED_EXPIRED, EXPIRED, REFUNDED_BY_PROVIDER Source chain symbol.
Source token symbol.
Source amount in atomic units.
Destination chain symbol.
Destination token symbol.
Destination amount in atomic units.
Destination wallet address.
Most recent transaction hash associated with the withdrawal.
acknowledged = confirmed; unacknowledged = sent, keep polling; rejected = terminal failure.
acknowledged, unacknowledged, rejected Human-readable error when the withdrawal failed.
Merchant-defined customer identifier set at prepare time, or null when omitted.
