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
Creates a project owned by the account in the path. The project slug is derived from the name and cannot be changed afterwards.
On organization accounts the creator and the organization owner are always added as project members. A project is open to every organization member by default (All members); send restricted: true to create a restricted project that only its explicit members can see, optionally seeding members.
Requires the create-project permission on the account.
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