Create an external address
curl --request POST \
--url https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "eip155"
}
'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses"
payload = {
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "eip155"
}
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({address: '0x1234567890abcdef1234567890abcdef12345678', namespace: 'eip155'})
};
fetch('https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses', 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.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses",
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([
'address' => '0x1234567890abcdef1234567890abcdef12345678',
'namespace' => 'eip155'
]),
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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses"
payload := strings.NewReader("{\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses")
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 \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "cm4voycw2001f68veade3tr0i",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "EIP155",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Alert Webhooks
Create an external address
Add an external blockchain address to receive alert webhook notifications for. The address is validated for correct format based on the selected namespace. Blackhole addresses (such as null or dead addresses) are rejected.
Supported namespaces:
eip155— EVM-compatible addressessolana— Solana addresses
POST
/
custodians
/
me
/
alerts
/
webhooks
/
external-addresses
Create an external address
curl --request POST \
--url https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "eip155"
}
'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses"
payload = {
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "eip155"
}
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({address: '0x1234567890abcdef1234567890abcdef12345678', namespace: 'eip155'})
};
fetch('https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses', 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.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses",
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([
'address' => '0x1234567890abcdef1234567890abcdef12345678',
'namespace' => 'eip155'
]),
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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses"
payload := strings.NewReader("{\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/external-addresses")
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 \"address\": \"0x1234567890abcdef1234567890abcdef12345678\",\n \"namespace\": \"eip155\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "cm4voycw2001f68veade3tr0i",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"namespace": "EIP155",
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Portal API Key (Custodian API Key). Pass as a Bearer token in the Authorization header.
Body
application/json
Response
External address created successfully
Show child attributes
Show child attributes
Was this page helpful?
⌘I