Skip to main content
POST
Create an org security profile
Creates a security profile owned by the organization. Creating a profile does not apply it to anything; bind it as a default with Set org security profile defaults.

Permissions

Requires a service user or personal access token with the ManageSecureModeProfiles permission at the organization level. Tokens used by a running Devin session are rejected, so a session cannot change the profiles that govern it.

Behavior

  • Only name is required. Profile names must be unique within the organization.
  • When net_policy is omitted, the profile starts from an allowlist containing only the git integration host (the same starting point as the settings page). An explicit null means the profile has no network opinion, not deny-all.
  • remove_github_cli_token defaults to true. Keeping the token (false) requires git_access_level: read_write and, when a network policy is set, an allowlist that includes api.github.com.
  • git_access_level defaults to read_write and enforcement_level to recommended.

Authorizations

Authorization
string
header
required

Service User credential (prefix: cog_)

Path Parameters

org_id
string
required

Organization ID (prefix: org-)

Example:

"org-abc123def456"

Body

application/json
name
string
required
Required string length: 1 - 128
devin_mcp_read_only
boolean
default:false
enforcement_level
enum<string>
default:recommended
Available options:
recommended,
mandatory
git_access_level
enum<string>
default:read_write
Available options:
read_only,
read_write
mcp_config
SecurityProfileMcpConfig · object | null
net_policy
SecurityProfileNetPolicy · object | null

Omitted = an allow list containing only the git integration host (the same default the Security Profiles UI starts from); explicit null = this profile has no network opinion (it does NOT mean deny-all). Because the default allow list does not include api.github.com, a request with remove_github_cli_token=false must supply net_policy explicitly (or null).

remove_github_cli_token
boolean
default:true
slack_channel_access
SecurityProfileSlackChannelAccess · object | null

Omitted or null = this profile has no Slack channel opinion (the organization's Slack setting applies).

slack_dm_scope
enum<string> | null

Omitted or null = this profile has no Slack DM opinion (the organization's Slack setting applies).

Available options:
disabled,
org_members,
workspace
teams_channel_access
SecurityProfileTeamsChannelAccess · object | null

Omitted or null = this profile has no Teams channel opinion (the organization's Teams Default Access applies).

teams_dm_scope
enum<string> | null

Omitted or null = this profile has no Teams DM opinion (the organization's Teams Default Access applies).

Available options:
disabled,
installed_users
teams_group_chat_scope
enum<string> | null

Omitted or null = this profile has no Teams group-chat opinion (derived from the organization's Teams Default Access like DMs).

Available options:
disabled,
origin_chat

Response

Successful Response

An organization-owned security profile.

created_at
integer
required
devin_mcp_read_only
boolean
required

When true, sessions may only call read-only Devin MCP tools (no session creation, automation management, or other write operations).

enforcement_level
enum<string>
required

recommended profiles can be overridden by descendant bindings; mandatory profiles are a floor that descendant policies only narrow.

Available options:
recommended,
mandatory
git_access_level
enum<string>
required
Available options:
read_only,
read_write
name
string
required
org_id
string
required
profile_id
string
required

The security profile's ID.

remove_github_cli_token
boolean
required

When true, the GitHub CLI token is removed from the session's machine, preventing direct GitHub API access.

updated_at
integer
required
mcp_config
SecurityProfileMcpConfig · object | null

null = this profile has no MCP opinion.

net_policy
SecurityProfileNetPolicy · object | null

null = this profile has no network opinion (it does NOT mean deny-all).

slack_channel_access
SecurityProfileSlackChannelAccess · object | null

Ceiling on the Slack channels sessions governed by this profile may read and post in. null = this profile has no opinion and the organization's Slack setting applies.

slack_dm_scope
enum<string> | null

Ceiling on who may DM Devin in Slack under this profile. null = this profile has no opinion and the organization's Slack setting applies. 'workspace' is narrowed to 'org_members' for enterprise accounts.

Available options:
disabled,
org_members,
workspace
teams_channel_access
SecurityProfileTeamsChannelAccess · object | null

Ceiling on the Microsoft Teams channels sessions governed by this profile may read and post in. null = this profile has no opinion and the organization's Teams Default Access applies.

teams_dm_scope
enum<string> | null

Ceiling on who Devin may DM in Microsoft Teams under this profile. null = this profile has no opinion and the organization's Teams Default Access applies.

Available options:
disabled,
installed_users
teams_group_chat_scope
enum<string> | null

Ceiling on which Teams group chats Devin may read under this profile; origin_chat = only the group chat the session was started from; null = no opinion, derived from the org's Teams Default Access like DMs.

Available options:
disabled,
origin_chat