curl 'https://api.tenderly.co/api/v2/accounts/${TENDERLY_ACCOUNT_SLUG}/projects/${TENDERLY_PROJECT_SLUG}/wallets' \
-H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
-H 'content-type: application/json' \
--data-raw '{"wallets":[{"address":"0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2","network_ids":["1","8453"],"display_name":"Treasury","tags":["treasury"]},{"address":"0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0","network_ids":["1"]}]}'const options = {
method: 'POST',
headers: {'X-Access-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallets: [
{
address: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
network_ids: ['1', '8453'],
display_name: 'Treasury',
tags: ['treasury']
},
{address: '0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0', network_ids: ['1']}
]
})
};
fetch('https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets"
payload = { "wallets": [
{
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"network_ids": ["1", "8453"],
"display_name": "Treasury",
"tags": ["treasury"]
},
{
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"network_ids": ["1"]
}
] }
headers = {
"X-Access-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets"
payload := strings.NewReader("{\n \"wallets\": [\n {\n \"address\": \"0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2\",\n \"network_ids\": [\n \"1\",\n \"8453\"\n ],\n \"display_name\": \"Treasury\",\n \"tags\": [\n \"treasury\"\n ]\n },\n {\n \"address\": \"0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0\",\n \"network_ids\": [\n \"1\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Access-Key", "<api-key>")
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))
}{
"added": [
{
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract": {
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"account": {
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"tags": [
{
"tag": "treasury",
"created_at": "2026-10-02T09:14:07.512Z"
}
],
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Treasury",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-10-02T09:14:07.498Z"
},
{
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract": {
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "8453",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"account": {
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "8453",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"tags": [
{
"tag": "treasury",
"created_at": "2026-10-02T09:14:07.512Z"
}
],
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Treasury",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-10-02T09:14:07.498Z"
}
],
"existing": [
{
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract": {
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_id": "",
"balance": "0x22b1c8c1227a0000",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2024-03-08T16:40:12Z",
"in_project": false
},
"account": {
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_id": "",
"balance": "0x22b1c8c1227a0000",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2024-03-08T16:40:12Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Ops wallet",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-07-14T11:02:51.204Z"
}
]
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "bad_request",
"message": "Bad request input parameters"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "unauthorized",
"message": "Unauthorized"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "insufficient_permissions",
"message": "Insufficient permissions"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "resource_not_found",
"message": "The resource you requested could not be found."
}
}{
"error": {
"id": "9a7bbe06-7f6f-4a45-8c78-8d64b9a9d0e1",
"slug": "too_many_requests",
"message": "API Rate limit exceeded."
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "internal_server_error",
"message": "Internal server error"
}
}Add wallets to a project in bulk
Add many wallet addresses to a project in one request. Each wallet lists one or more networks, and each address and network combination is one wallet-network pair. A request takes at most 100 pairs; a pair repeated in the request counts once.
The response sorts the requested addresses into two lists:
added: wallets this request added to the project.existing: addresses the project already had, as wallets or contracts. Their type and display name are not changed, so sending the same list again is safe.
An address is added as a wallet even when it is a contract. Every network must be a public network supported by Tenderly. An unsupported network returns 400 and nothing is added. If the new addresses would exceed your account’s address limit, the request returns 403 and nothing is added.
Tags
Tags are added on every network the wallet is listed on, including addresses the project already had. Tags the address already has are kept; this endpoint never removes tags. A request that includes tags requires the update_contract project permission in addition to add_contract. Tagged addresses can be targeted as a group by alerts.
curl 'https://api.tenderly.co/api/v2/accounts/${TENDERLY_ACCOUNT_SLUG}/projects/${TENDERLY_PROJECT_SLUG}/wallets' \
-H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
-H 'content-type: application/json' \
--data-raw '{"wallets":[{"address":"0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2","network_ids":["1","8453"],"display_name":"Treasury","tags":["treasury"]},{"address":"0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0","network_ids":["1"]}]}'const options = {
method: 'POST',
headers: {'X-Access-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
wallets: [
{
address: '0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2',
network_ids: ['1', '8453'],
display_name: 'Treasury',
tags: ['treasury']
},
{address: '0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0', network_ids: ['1']}
]
})
};
fetch('https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets"
payload = { "wallets": [
{
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"network_ids": ["1", "8453"],
"display_name": "Treasury",
"tags": ["treasury"]
},
{
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"network_ids": ["1"]
}
] }
headers = {
"X-Access-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tenderly.co/api/v2/accounts/{accountSlug}/projects/{projectSlug}/wallets"
payload := strings.NewReader("{\n \"wallets\": [\n {\n \"address\": \"0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2\",\n \"network_ids\": [\n \"1\",\n \"8453\"\n ],\n \"display_name\": \"Treasury\",\n \"tags\": [\n \"treasury\"\n ]\n },\n {\n \"address\": \"0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0\",\n \"network_ids\": [\n \"1\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Access-Key", "<api-key>")
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))
}{
"added": [
{
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract": {
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"account": {
"id": "eth:1:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"tags": [
{
"tag": "treasury",
"created_at": "2026-10-02T09:14:07.512Z"
}
],
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Treasury",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-10-02T09:14:07.498Z"
},
{
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract": {
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "8453",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"account": {
"id": "eth:8453:0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_id": "",
"balance": "0x0",
"network_id": "8453",
"public": false,
"verification_date": null,
"address": "0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2026-10-02T09:14:07Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"tags": [
{
"tag": "treasury",
"created_at": "2026-10-02T09:14:07.512Z"
}
],
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Treasury",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-10-02T09:14:07.498Z"
}
],
"existing": [
{
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract": {
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_id": "",
"balance": "0x22b1c8c1227a0000",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2024-03-08T16:40:12Z",
"in_project": false
},
"account": {
"id": "eth:1:0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_id": "",
"balance": "0x22b1c8c1227a0000",
"network_id": "1",
"public": false,
"verification_date": null,
"address": "0xb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0",
"contract_name": "",
"ens_domain": null,
"type": "wallet",
"evm_version": "",
"compiler_version": "",
"optimizations_used": false,
"optimization_runs": 0,
"libraries": null,
"compiler_settings": null,
"deployed_bytecode": "",
"creation_bytecode": "",
"data": null,
"creation_block": 0,
"creation_tx": "",
"creator_address": "",
"created_at": "2024-03-08T16:40:12Z",
"in_project": false
},
"project_id": "dfdc391a-a15d-4590-9aef-8691259c7df4",
"added_by_id": "7d5e8b1f-8bf8-4eae-a70f-fb7d354b1cc2",
"previous_versions": null,
"details_visible": true,
"include_in_transaction_listing": true,
"display_name": "Ops wallet",
"account_type": "wallet",
"verification_type": "",
"added_at": "2026-07-14T11:02:51.204Z"
}
]
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "bad_request",
"message": "Bad request input parameters"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "unauthorized",
"message": "Unauthorized"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "insufficient_permissions",
"message": "Insufficient permissions"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "resource_not_found",
"message": "The resource you requested could not be found."
}
}{
"error": {
"id": "9a7bbe06-7f6f-4a45-8c78-8d64b9a9d0e1",
"slug": "too_many_requests",
"message": "API Rate limit exceeded."
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "internal_server_error",
"message": "Internal server error"
}
}Authorizations
An API key is a token that a client provides when making API calls. Send it as the X-Access-Key request header on any endpoint:
curl '<API_ENDPOINT>' \ -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \ ...
Learn how to generate API access tokens at Tenderly Docs.
Path Parameters
Account slug of the user
Project slug of the account
Body
Wallets to add to the project
Wallets to add. Across all wallets, the request takes at most 100 wallet-network pairs (one pair per address and network). A pair repeated in the request counts once.
1Show child attributes
Show child attributes
Response
A successful response.
Every requested address and network pair, sorted by whether this request added it.
Wallets this request added to the project, one entry per wallet-network pair.
Show child attributes
Show child attributes
Requested addresses the project already had, as wallets or contracts. Their type and display name are unchanged; tags from the request are added to them.
Show child attributes
Show child attributes