published on Tuesday, Jul 14, 2026 by Descope
Descope Provider
published on Tuesday, Jul 14, 2026 by Descope
Installation
The Descope provider is available as a package in all Pulumi languages:
- JavaScript/TypeScript:
@pulumi/descope - Python:
pulumi-descope - Go:
github.com/descope/pulumi-descope/sdk/go/descope - .NET:
Pulumi.Descope - Java:
com.pulumi/descope
Overview
The Descope Pulumi Provider lets you manage your Descope project configuration as infrastructure-as-code. Configure authentication methods, define roles and permissions, set up third-party connectors, manage flows, and more—all declaratively in Pulumi.
Descope is an authentication and user management platform. The Pulumi provider manages project configuration (how your project behaves), not users or tenants (use the Descope Management API or SDKs for those).
Requirements
- Pulumi 1.0 or later
- A Descope Pro or Enterprise plan
- A Management Key from Company Settings in the Descope console
Authentication
The provider authenticates with the Descope API using a management key. You can create management keys in the Company Settings section of the Descope console.
Security Note: Never hardcode your management key in Pulumi configuration files, as this risks exposing it in version control. Use environment variables or a secrets manager instead.
Environment Variables
| Variable | Description |
|---|---|
DESCOPE_MANAGEMENT_KEY | A valid management key for your Descope company |
DESCOPE_BASE_URL | Override the Descope API base URL (optional, for testing) |
export DESCOPE_MANAGEMENT_KEY="K2..."
pulumi preview
Example Usage
Minimal Configuration
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: nodejs
import * as pulumi from "@pulumi/pulumi";
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: python
import pulumi
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: dotnet
using System.Collections.Generic;
using System.Linq;
using Pulumi;
return await Deployment.RunAsync(() =>
{
});
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: go
package main
import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
return nil
})
}
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: yaml
{}
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: java
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
}
}
Example currently unavailable in this language
Creating a Project
import * as pulumi from "@pulumi/pulumi";
import * as descope from "@descope/pulumi-descope";
const example = new descope.Project("example", {
name: "my-app",
environment: "production",
tags: ["prod"],
});
import pulumi
import descope_pulumi as descope
example = descope.Project("example",
name="my-app",
environment="production",
tags=["prod"])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Descope = Descope.Pulumi.Descope;
return await Deployment.RunAsync(() =>
{
var example = new Descope.Project("example", new()
{
Name = "my-app",
Environment = "production",
Tags = new[]
{
"prod",
},
});
});
package main
import (
"github.com/descope/pulumi-descope/sdk/go/descope"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := descope.NewProject(ctx, "example", &descope.ProjectArgs{
Name: pulumi.String("my-app"),
Environment: pulumi.String("production"),
Tags: pulumi.StringArray{
pulumi.String("prod"),
},
})
if err != nil {
return err
}
return nil
})
}
resources:
example:
type: descope:Project
properties:
name: my-app
environment: production
tags:
- prod
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.descope.pulumi.descope.Project;
import com.descope.pulumi.descope.ProjectArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new Project("example", ProjectArgs.builder()
.name("my-app")
.environment("production")
.tags("prod")
.build());
}
}
pulumi {
required_providers {
descope = {
source = "pulumi/descope"
}
}
}
resource "descope_project" "example" {
name = "my-app"
environment = "production"
tags = ["prod"]
}
Full Provider Configuration
If you need to explicitly configure the provider (e.g. in a module or when not using environment variables):
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: nodejs
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
import * as pulumi from "@pulumi/pulumi";
const config = new pulumi.Config();
const descopeManagementKey = config.require("descopeManagementKey");
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: python
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
import pulumi
config = pulumi.Config()
descope_management_key = config.require("descopeManagementKey")
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: dotnet
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
using System.Collections.Generic;
using System.Linq;
using Pulumi;
return await Deployment.RunAsync(() =>
{
var config = new Config();
var descopeManagementKey = config.Require("descopeManagementKey");
});
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: go
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
package main
import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
cfg := config.New(ctx, "")
descopeManagementKey := cfg.Require("descopeManagementKey")
return nil
})
}
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: yaml
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
configuration:
descopeManagementKey:
type: string
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: java
config:
descope:managementKey:
value: 'TODO: var.descope_management_key'
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var config = ctx.config();
final var descopeManagementKey = config.require("descopeManagementKey");
}
}
variable "descopeManagementKey" {
type = string
}
Resources
| Resource | Description |
|---|---|
descope.Project | Full project configuration: authentication, RBAC, connectors, flows, and more |
descope.ManagementKey | Programmatic management keys with scoped permissions |
descope.Descoper | Descope console user accounts with role assignments |
Guides
- Quickstart – Set up the provider and manage your first project
Configuration Reference
baseUrl(String) An optional base URL for the Descope APImanagementKey(String, Sensitive) A valid management key for your Descope companyprojectId(String, Deprecated)
published on Tuesday, Jul 14, 2026 by Descope