Update a watchlist
curl --request PATCH \
--url https://api.messari.io/user-management/v1/watchlists/{id} \
--header 'Content-Type: */*' \
--header 'X-Messari-API-Key: <api-key>' \
--data '
{
"assetIds": [
"<string>"
],
"title": "<string>"
}
'import requests
url = "https://api.messari.io/user-management/v1/watchlists/{id}"
payload = {
"assetIds": ["<string>"],
"title": "<string>"
}
headers = {
"X-Messari-API-Key": "<api-key>",
"Content-Type": "*/*"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-Messari-API-Key': '<api-key>', 'Content-Type': '*/*'},
body: JSON.stringify({assetIds: ['<string>'], title: '<string>'})
};
fetch('https://api.messari.io/user-management/v1/watchlists/{id}', 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.messari.io/user-management/v1/watchlists/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'assetIds' => [
'<string>'
],
'title' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: */*",
"X-Messari-API-Key: <api-key>"
],
]);
$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.messari.io/user-management/v1/watchlists/{id}"
payload := strings.NewReader("{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-Messari-API-Key", "<api-key>")
req.Header.Add("Content-Type", "*/*")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.messari.io/user-management/v1/watchlists/{id}")
.header("X-Messari-API-Key", "<api-key>")
.header("Content-Type", "*/*")
.body("{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/user-management/v1/watchlists/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-Messari-API-Key"] = '<api-key>'
request["Content-Type"] = '*/*'
request.body = "{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": null,
"data": {
"id": "BA3FDA7B",
"title": "Updated Portfolio Name",
"assetIds": [
"1e31218a-e44e-4285-820c-8282ee222035",
"21c795f5-1bfd-40c3-858e-e9d7e820c6d0"
],
"createdAt": "2026-03-27T14:11:02.612968Z",
"updatedAt": "2026-03-27T14:11:08.052905Z"
}
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}Watchlists
Update Watchlist
Update a specific watchlist by ID for the authenticated user
PATCH
/
user-management
/
v1
/
watchlists
/
{id}
Update a watchlist
curl --request PATCH \
--url https://api.messari.io/user-management/v1/watchlists/{id} \
--header 'Content-Type: */*' \
--header 'X-Messari-API-Key: <api-key>' \
--data '
{
"assetIds": [
"<string>"
],
"title": "<string>"
}
'import requests
url = "https://api.messari.io/user-management/v1/watchlists/{id}"
payload = {
"assetIds": ["<string>"],
"title": "<string>"
}
headers = {
"X-Messari-API-Key": "<api-key>",
"Content-Type": "*/*"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-Messari-API-Key': '<api-key>', 'Content-Type': '*/*'},
body: JSON.stringify({assetIds: ['<string>'], title: '<string>'})
};
fetch('https://api.messari.io/user-management/v1/watchlists/{id}', 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.messari.io/user-management/v1/watchlists/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'assetIds' => [
'<string>'
],
'title' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: */*",
"X-Messari-API-Key: <api-key>"
],
]);
$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.messari.io/user-management/v1/watchlists/{id}"
payload := strings.NewReader("{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-Messari-API-Key", "<api-key>")
req.Header.Add("Content-Type", "*/*")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.messari.io/user-management/v1/watchlists/{id}")
.header("X-Messari-API-Key", "<api-key>")
.header("Content-Type", "*/*")
.body("{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.messari.io/user-management/v1/watchlists/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-Messari-API-Key"] = '<api-key>'
request["Content-Type"] = '*/*'
request.body = "{\n \"assetIds\": [\n \"<string>\"\n ],\n \"title\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": null,
"data": {
"id": "BA3FDA7B",
"title": "Updated Portfolio Name",
"assetIds": [
"1e31218a-e44e-4285-820c-8282ee222035",
"21c795f5-1bfd-40c3-858e-e9d7e820c6d0"
],
"createdAt": "2026-03-27T14:11:02.612968Z",
"updatedAt": "2026-03-27T14:11:08.052905Z"
}
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}{
"data": "<unknown>",
"error": "<string>"
}Overview
Updates a watchlist’s metadata such as its title. Only the fields provided in the request body will be updated — omitted fields remain unchanged. IfassetIds is provided, it replaces the entire asset list. If omitted, assets remain unchanged. If an empty array is provided, all assets are removed.
To add or remove individual assets without replacing the full list, use the Update Watchlist Assets endpoint instead.
Authorizations
Path Parameters
Body
*/*
⌘I

