curl --request PATCH \
--url https://carboncopy.inc/api/v1/portfolio/traders/{wallet} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"copyPercentage": 50,
"maxCopyAmount": 123,
"notificationsEnabled": true,
"copyTradingEnabled": true
}
'import requests
url = "https://carboncopy.inc/api/v1/portfolio/traders/{wallet}"
payload = {
"copyPercentage": 50,
"maxCopyAmount": 123,
"notificationsEnabled": True,
"copyTradingEnabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
copyPercentage: 50,
maxCopyAmount: 123,
notificationsEnabled: true,
copyTradingEnabled: true
})
};
fetch('https://carboncopy.inc/api/v1/portfolio/traders/{wallet}', 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://carboncopy.inc/api/v1/portfolio/traders/{wallet}",
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([
'copyPercentage' => 50,
'maxCopyAmount' => 123,
'notificationsEnabled' => true,
'copyTradingEnabled' => true
]),
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://carboncopy.inc/api/v1/portfolio/traders/{wallet}"
payload := strings.NewReader("{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://carboncopy.inc/api/v1/portfolio/traders/{wallet}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://carboncopy.inc/api/v1/portfolio/traders/{wallet}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"walletAddress": "0xAbCd1234...",
"copyTradingEnabled": true,
"copyPercentage": 25,
"username": "sharptrader",
"maxCopyAmount": 500,
"totalCopied": 14,
"pnl": 128.4,
"notificationsEnabled": true,
"followedAt": 1741500000000,
"recentTrades": [
{
"id": "k17abc123def456",
"traderWallet": "0xAbCd1234...",
"marketId": "0x1234abcd...",
"side": "YES",
"amount": 50,
"status": "open",
"createdAt": 1741550000000,
"marketQuestion": "Will BTC exceed $100k by end of 2025?",
"price": 0.62,
"pnl": 12.5
}
]
}{
"error": {
"code": "bad_request",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key."
}
}{
"error": {
"code": "forbidden",
"message": "This key does not have the required scope."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 30 seconds."
}
}Update follow settings
Update copy-trading settings. All fields are optional — only provided fields are changed.
curl --request PATCH \
--url https://carboncopy.inc/api/v1/portfolio/traders/{wallet} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"copyPercentage": 50,
"maxCopyAmount": 123,
"notificationsEnabled": true,
"copyTradingEnabled": true
}
'import requests
url = "https://carboncopy.inc/api/v1/portfolio/traders/{wallet}"
payload = {
"copyPercentage": 50,
"maxCopyAmount": 123,
"notificationsEnabled": True,
"copyTradingEnabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
copyPercentage: 50,
maxCopyAmount: 123,
notificationsEnabled: true,
copyTradingEnabled: true
})
};
fetch('https://carboncopy.inc/api/v1/portfolio/traders/{wallet}', 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://carboncopy.inc/api/v1/portfolio/traders/{wallet}",
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([
'copyPercentage' => 50,
'maxCopyAmount' => 123,
'notificationsEnabled' => true,
'copyTradingEnabled' => true
]),
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://carboncopy.inc/api/v1/portfolio/traders/{wallet}"
payload := strings.NewReader("{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://carboncopy.inc/api/v1/portfolio/traders/{wallet}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://carboncopy.inc/api/v1/portfolio/traders/{wallet}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"copyPercentage\": 50,\n \"maxCopyAmount\": 123,\n \"notificationsEnabled\": true,\n \"copyTradingEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"walletAddress": "0xAbCd1234...",
"copyTradingEnabled": true,
"copyPercentage": 25,
"username": "sharptrader",
"maxCopyAmount": 500,
"totalCopied": 14,
"pnl": 128.4,
"notificationsEnabled": true,
"followedAt": 1741500000000,
"recentTrades": [
{
"id": "k17abc123def456",
"traderWallet": "0xAbCd1234...",
"marketId": "0x1234abcd...",
"side": "YES",
"amount": 50,
"status": "open",
"createdAt": 1741550000000,
"marketQuestion": "Will BTC exceed $100k by end of 2025?",
"price": 0.62,
"pnl": 12.5
}
]
}{
"error": {
"code": "bad_request",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key."
}
}{
"error": {
"code": "forbidden",
"message": "This key does not have the required scope."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 30 seconds."
}
}Authorizations
API key in the format cc_<64 hex characters>. Obtain from the Dashboard under Settings → API Keys.
Path Parameters
Trader's Ethereum wallet address.
"0xAbCd1234..."
Body
Response
Updated trader.
Trader's Ethereum wallet address.
"0xAbCd1234..."
true if copy trading is currently active for this trader.
Percentage of each trade to copy.
0 <= x <= 10025
Trader's display name.
"sharptrader"
Maximum USDC to deploy per copied trade. null means no cap.
500
Total number of trades copied from this trader.
14
P&L in USDC from trades copied from this trader.
128.4
Whether notifications are enabled for this trader's activity.
Unix timestamp (ms) when you started following this trader.
1741500000000
The 10 most recent trades by this trader.
Show child attributes
Show child attributes
Was this page helpful?

