curl 'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project' \
-H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
-H 'content-type: application/json' \
--data-raw '{"name":"Mainnet Monitoring"}'const options = {
method: 'POST',
headers: {'X-Access-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Mainnet Monitoring'})
};
fetch('https://api.tenderly.co/api/v1/account/{accountSlug}/project', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tenderly.co/api/v1/account/{accountSlug}/project"
payload = { "name": "Mainnet Monitoring" }
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/v1/account/{accountSlug}/project"
payload := strings.NewReader("{\n \"name\": \"Mainnet Monitoring\"\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))
}{
"project": {
"id": "d66fd37f-e2f8-46c3-b549-0160d60eec96",
"name": "Mainnet Monitoring",
"slug": "mainnet-monitoring",
"owner_id": "49309f73-1d60-48fc-94b3-120fd9982381",
"public": false,
"restricted": false,
"high_volume": false,
"in_transfer": false,
"is_module": false,
"created_at": "2026-09-07T16:12:22.895718Z",
"last_push_at": null,
"number_of_users": 1,
"options": null,
"owner": {
"id": "49309f73-1d60-48fc-94b3-120fd9982381",
"first_name": "",
"last_name": "",
"username": "acme",
"email": "",
"type": "organization"
}
}
}{
"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": "085677e6-49f0-4a5a-a6e6-7dd54021a24a",
"slug": "project_already_exists",
"message": "Project with this slug already exists. Please choose a different name and try again."
}
}{
"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"
}
}Create a project
Create a Tenderly project under an account via the API, open to all organization members or restricted to invited members with a member list.
curl 'https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_SLUG}/project' \
-H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \
-H 'content-type: application/json' \
--data-raw '{"name":"Mainnet Monitoring"}'const options = {
method: 'POST',
headers: {'X-Access-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Mainnet Monitoring'})
};
fetch('https://api.tenderly.co/api/v1/account/{accountSlug}/project', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tenderly.co/api/v1/account/{accountSlug}/project"
payload = { "name": "Mainnet Monitoring" }
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/v1/account/{accountSlug}/project"
payload := strings.NewReader("{\n \"name\": \"Mainnet Monitoring\"\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))
}{
"project": {
"id": "d66fd37f-e2f8-46c3-b549-0160d60eec96",
"name": "Mainnet Monitoring",
"slug": "mainnet-monitoring",
"owner_id": "49309f73-1d60-48fc-94b3-120fd9982381",
"public": false,
"restricted": false,
"high_volume": false,
"in_transfer": false,
"is_module": false,
"created_at": "2026-09-07T16:12:22.895718Z",
"last_push_at": null,
"number_of_users": 1,
"options": null,
"owner": {
"id": "49309f73-1d60-48fc-94b3-120fd9982381",
"first_name": "",
"last_name": "",
"username": "acme",
"email": "",
"type": "organization"
}
}
}{
"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": "085677e6-49f0-4a5a-a6e6-7dd54021a24a",
"slug": "project_already_exists",
"message": "Project with this slug already exists. Please choose a different name and try again."
}
}{
"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
Body
Project to create
Project name, 1 to 100 characters. The project slug is derived from the name and cannot be changed afterwards.
1 - 100"Mainnet Monitoring"
Organization accounts only. true creates a restricted project that is visible to its explicit members alone (Only invited members). Omitted or false creates a project open to every organization member (All members).
false
Organization accounts only, and only together with restricted: true. Principal IDs of accepted organization members to add as project members. The creator and the organization owner are always added.
["2f6a3c4e-1b7d-4e0a-9c11-5d2e8a7b9f30"]
Response
The project was created.
A Tenderly project.
Show child attributes
Show child attributes