Create an environment
Creates a new environment within the current organization. Environments allow you to manage different stages of your application development lifecycle. Each environment has its own set of API keys and configurations.
import { Novu } from "@novu/api";
const novu = new Novu({
secretKey: "YOUR_SECRET_KEY_HERE",
});
async function run() {
const result = await novu.environments.create({
name: "Production Environment",
parentId: "60d5ecb8b3b3a30015f3e1a1",
color: "#3498db",
});
console.log(result);
}
run();using Novu;
using Novu.Models.Components;
var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");
var res = await sdk.Environments.CreateAsync(createEnvironmentRequestDto: new CreateEnvironmentRequestDto() {
Name = "Production Environment",
ParentId = "60d5ecb8b3b3a30015f3e1a1",
Color = "#3498db",
});
// handle responsedeclare(strict_types=1);
require 'vendor/autoload.php';
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity(
'YOUR_SECRET_KEY_HERE'
)
->build();
$createEnvironmentRequestDto = new Components\CreateEnvironmentRequestDto(
name: 'Production Environment',
parentId: '60d5ecb8b3b3a30015f3e1a1',
color: '#3498db',
);
$response = $sdk->environments->create(
createEnvironmentRequestDto: $createEnvironmentRequestDto
);
if ($response->environmentResponseDto !== null) {
// handle response
}from novu_py import Novu
with Novu(
secret_key="YOUR_SECRET_KEY_HERE",
) as novu:
res = novu.environments.create(create_environment_request_dto={
"name": "Production Environment",
"parent_id": "60d5ecb8b3b3a30015f3e1a1",
"color": "#3498db",
})
# Handle response
print(res)package main
import(
"context"
"github.com/novuhq/novu-go/v3"
"github.com/novuhq/novu-go/v3/models/components"
"log"
)
func main() {
ctx := context.Background()
s := v3.New(
v3.WithSecurity("YOUR_SECRET_KEY_HERE"),
)
res, err := s.Environments.Create(ctx, components.CreateEnvironmentRequestDto{
Name: "Production Environment",
ParentID: v3.Pointer("60d5ecb8b3b3a30015f3e1a1"),
Color: "#3498db",
}, nil)
if err != nil {
log.Fatal(err)
}
if res.EnvironmentResponseDto != nil {
// handle response
}
}curl --request POST \
--url https://api.novu.co/v1/environments \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Production Environment",
"color": "#3498db",
"parentId": "60d5ecb8b3b3a30015f3e1a1"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Production Environment',
color: '#3498db',
parentId: '60d5ecb8b3b3a30015f3e1a1'
})
};
fetch('https://api.novu.co/v1/environments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.novu.co/v1/environments")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Production Environment\",\n \"color\": \"#3498db\",\n \"parentId\": \"60d5ecb8b3b3a30015f3e1a1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novu.co/v1/environments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Production Environment\",\n \"color\": \"#3498db\",\n \"parentId\": \"60d5ecb8b3b3a30015f3e1a1\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "60d5ecb8b3b3a30015f3e1a1",
"name": "Production Environment",
"_organizationId": "60d5ecb8b3b3a30015f3e1a2",
"identifier": "prod-env-01",
"type": "prod",
"apiKeys": [
{
"key": "sk_test_1234567890abcdef",
"_userId": "60d5ecb8b3b3a30015f3e1a4",
"hash": "hash_value_here"
}
],
"_parentId": "60d5ecb8b3b3a30015f3e1a3",
"slug": "production"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"errors": {
"fieldName1": {
"messages": [
"Field is required",
"Must be a valid email address"
],
"value": "invalidEmail"
},
"fieldName2": {
"messages": [
"Must be at least 18 years old"
],
"value": 17
},
"fieldName3": {
"messages": [
"Must be a boolean value"
],
"value": true
},
"fieldName4": {
"messages": [
"Must be a valid object"
],
"value": {
"key": "value"
}
},
"fieldName5": {
"messages": [
"Field is missing"
],
"value": null
},
"fieldName6": {
"messages": [
"Undefined value"
]
}
},
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}"API rate limit exceeded"{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}"Please wait some time, then try again."Authorizations
API key authentication. Allowed headers-- "Authorization: ApiKey <novu_secret_key>".
Headers
A header for idempotency purposes
Body
Response
Created
Unique identifier of the environment
"60d5ecb8b3b3a30015f3e1a1"
Name of the environment
"Production Environment"
Organization ID associated with the environment
"60d5ecb8b3b3a30015f3e1a2"
Unique identifier for the environment
"prod-env-01"
Type of the environment
dev, prod "prod"
List of API keys associated with the environment
Show child attributes
Show child attributes
Parent environment ID
"60d5ecb8b3b3a30015f3e1a3"
URL-friendly slug for the environment
"production"
Was this page helpful?
import { Novu } from "@novu/api";
const novu = new Novu({
secretKey: "YOUR_SECRET_KEY_HERE",
});
async function run() {
const result = await novu.environments.create({
name: "Production Environment",
parentId: "60d5ecb8b3b3a30015f3e1a1",
color: "#3498db",
});
console.log(result);
}
run();using Novu;
using Novu.Models.Components;
var sdk = new NovuSDK(secretKey: "YOUR_SECRET_KEY_HERE");
var res = await sdk.Environments.CreateAsync(createEnvironmentRequestDto: new CreateEnvironmentRequestDto() {
Name = "Production Environment",
ParentId = "60d5ecb8b3b3a30015f3e1a1",
Color = "#3498db",
});
// handle responsedeclare(strict_types=1);
require 'vendor/autoload.php';
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity(
'YOUR_SECRET_KEY_HERE'
)
->build();
$createEnvironmentRequestDto = new Components\CreateEnvironmentRequestDto(
name: 'Production Environment',
parentId: '60d5ecb8b3b3a30015f3e1a1',
color: '#3498db',
);
$response = $sdk->environments->create(
createEnvironmentRequestDto: $createEnvironmentRequestDto
);
if ($response->environmentResponseDto !== null) {
// handle response
}from novu_py import Novu
with Novu(
secret_key="YOUR_SECRET_KEY_HERE",
) as novu:
res = novu.environments.create(create_environment_request_dto={
"name": "Production Environment",
"parent_id": "60d5ecb8b3b3a30015f3e1a1",
"color": "#3498db",
})
# Handle response
print(res)package main
import(
"context"
"github.com/novuhq/novu-go/v3"
"github.com/novuhq/novu-go/v3/models/components"
"log"
)
func main() {
ctx := context.Background()
s := v3.New(
v3.WithSecurity("YOUR_SECRET_KEY_HERE"),
)
res, err := s.Environments.Create(ctx, components.CreateEnvironmentRequestDto{
Name: "Production Environment",
ParentID: v3.Pointer("60d5ecb8b3b3a30015f3e1a1"),
Color: "#3498db",
}, nil)
if err != nil {
log.Fatal(err)
}
if res.EnvironmentResponseDto != nil {
// handle response
}
}curl --request POST \
--url https://api.novu.co/v1/environments \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Production Environment",
"color": "#3498db",
"parentId": "60d5ecb8b3b3a30015f3e1a1"
}
'const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Production Environment',
color: '#3498db',
parentId: '60d5ecb8b3b3a30015f3e1a1'
})
};
fetch('https://api.novu.co/v1/environments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.novu.co/v1/environments")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Production Environment\",\n \"color\": \"#3498db\",\n \"parentId\": \"60d5ecb8b3b3a30015f3e1a1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novu.co/v1/environments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Production Environment\",\n \"color\": \"#3498db\",\n \"parentId\": \"60d5ecb8b3b3a30015f3e1a1\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "60d5ecb8b3b3a30015f3e1a1",
"name": "Production Environment",
"_organizationId": "60d5ecb8b3b3a30015f3e1a2",
"identifier": "prod-env-01",
"type": "prod",
"apiKeys": [
{
"key": "sk_test_1234567890abcdef",
"_userId": "60d5ecb8b3b3a30015f3e1a4",
"hash": "hash_value_here"
}
],
"_parentId": "60d5ecb8b3b3a30015f3e1a3",
"slug": "production"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"errors": {
"fieldName1": {
"messages": [
"Field is required",
"Must be a valid email address"
],
"value": "invalidEmail"
},
"fieldName2": {
"messages": [
"Must be at least 18 years old"
],
"value": 17
},
"fieldName3": {
"messages": [
"Must be a boolean value"
],
"value": true
},
"fieldName4": {
"messages": [
"Must be a valid object"
],
"value": {
"key": "value"
}
},
"fieldName5": {
"messages": [
"Field is missing"
],
"value": null
},
"fieldName6": {
"messages": [
"Undefined value"
]
}
},
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}"API rate limit exceeded"{
"statusCode": 404,
"timestamp": "2024-12-12T13:00:00Z",
"path": "/api/v1/resource",
"message": "xx xx xx ",
"ctx": {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
},
"errorId": "abc123"
}"Please wait some time, then try again."