---
title: "Create an integration"
method: POST
path: "/v1/integrations"
tags: ["Integrations"]
---

# Create an integration

`POST /v1/integrations`

Create an integration for the current environment the user is based on the API key provided. 
    Each provider supports different credentials, check the provider documentation for more details. Only integration metadata is returned, credentials field is returned as an empty object.

## Request body

- CreateIntegrationRequestDto
  - `name` string — The name of the integration
  - `identifier` string — The unique identifier for the integration
  - `_environmentId` string, uuid — The ID of the associated environment
  - `providerId` string — The provider ID for the integration
  - `channel` 'in_app' | 'email' | 'sms' | 'chat' | 'push' | 'tool' — The channel type for the integration. Not required for agent-kind integrations.
  - `kind` 'delivery' | 'agent' — Distinguishes delivery integrations from agent-runtime integrations. Defaults to "delivery". Agent integrations do not require a channel.
  - `credentials` CredentialsDto
    - `apiKey` string
    - `user` string
    - `secretKey` string
    - `domain` string
    - `password` string
    - `host` string
    - `port` string
    - `secure` boolean
    - `region` string
    - `accountSid` string
    - `messageProfileId` string
    - `token` string
    - `from` string
    - `senderName` string
    - `projectName` string
    - `applicationId` string
    - `clientId` string
    - `requireTls` boolean
    - `ignoreTls` boolean
    - `tlsOptions` object
    - `baseUrl` string
    - `webhookUrl` string
    - `redirectUrl` string
    - `hmac` boolean
    - `serviceAccount` string
    - `ipPoolName` string
    - `apiKeyRequestHeader` string
    - `secretKeyRequestHeader` string
    - `idPath` string
    - `datePath` string
    - `apiToken` string
    - `authenticateByToken` boolean
    - `authenticationTokenKey` string
    - `instanceId` string
    - `alertUid` string
    - `title` string
    - `imageUrl` string
    - `state` string
    - `externalLink` string
    - `channelId` string
    - `phoneNumberIdentification` string
    - `accessKey` string
    - `appSid` string
    - `senderId` string
    - `tenantId` string
    - `AppIOBaseUrl` string
    - `signingSecret` string
    - `outboundIntegrationId` string
    - `outboundConnectedAt` string
    - `whatsNextCompletedAt` string — ISO timestamp marking Layer-2 What's next completion (Connected badge + guide hide). WhatsApp Business: stamped on post-connect Access Token rotation or manual confirm.
    - `useFromAddressOverride` boolean
    - `fromAddressOverride` string
    - `emailSlugPrefix` string — Agent default shared inbox slug prefix used in `{emailSlugPrefix}-{agentId}@<shared-domain>`. Only meaningful on the NovuAgent email integration.
    - `externalEnvironmentId` string — Claude Managed Agents: ID of the Anthropic environment tied to this integration. Hydrated by the API at integration provisioning time.
    - `externalVaultId` string — Claude Managed Agents: ID of the Anthropic vault (`vlt_…`) tied to this integration. Hydrated by the API at integration provisioning time and used to push OAuth-completed MCP credentials to the per-vault credentials API.
    - `externalWorkspaceId` string — Claude Managed Agents: id of the Anthropic workspace used in console deep links. Defaults to `'default'` (the Default Workspace). Set this when the API key is scoped to a custom workspace (e.g. `wrkspc_…`).
  - `active` boolean — If the integration is active, the validation on the credentials field will run
  - `check` boolean — Flag to check the integration status
  - `conditions` StepFilterDto[] — Conditions for the integration
    - `isNegated` boolean, required
    - `type` 'BOOLEAN' | 'TEXT' | 'DATE' | 'NUMBER' | 'STATEMENT' | 'LIST' | 'MULTI_LIST' | 'GROUP', required
    - `value` 'AND' | 'OR', required
    - `children` FieldFilterPartDto[], required
      - `field` string, required
      - `value` string, required
      - `operator` 'LARGER' | 'SMALLER' | 'LARGER_EQUAL' | 'SMALLER_EQUAL' | 'EQUAL' | 'NOT_EQUAL' | 'ALL_IN' | 'ANY_IN' | 'NOT_IN' | 'BETWEEN' | 'NOT_BETWEEN' | 'LIKE' | 'NOT_LIKE' | 'IN', required
      - `on` 'subscriber' | 'payload', required
  - `configurations` object — Configurations for the integration

## Response `201`

Created

- IntegrationResponseDto
  - `_id` string — The unique identifier of the integration record in the database. This is automatically generated.
  - `_environmentId` string, required — The unique identifier for the environment associated with this integration. This links to the Environment collection.
  - `_organizationId` string, required — The unique identifier for the organization that owns this integration. This links to the Organization collection.
  - `name` string, required — The name of the integration, which is used to identify it in the user interface.
  - `identifier` string, required — A unique string identifier for the integration, often used for API calls or internal references.
  - `providerId` string, required — The identifier for the provider of the integration (e.g., "mailgun", "twilio").
  - `channel` 'in_app' | 'email' | 'sms' | 'chat' | 'push' | 'tool' — The channel type for the integration, which defines how it communicates (e.g., email, SMS). Not set for agent-kind integrations.
  - `kind` 'delivery' | 'agent' — Distinguishes delivery integrations from agent-runtime integrations. Defaults to "delivery". Agent integrations do not have a channel.
  - `credentials` CredentialsDto
    - `apiKey` string
    - `user` string
    - `secretKey` string
    - `domain` string
    - `password` string
    - `host` string
    - `port` string
    - `secure` boolean
    - `region` string
    - `accountSid` string
    - `messageProfileId` string
    - `token` string
    - `from` string
    - `senderName` string
    - `projectName` string
    - `applicationId` string
    - `clientId` string
    - `requireTls` boolean
    - `ignoreTls` boolean
    - `tlsOptions` object
    - `baseUrl` string
    - `webhookUrl` string
    - `redirectUrl` string
    - `hmac` boolean
    - `serviceAccount` string
    - `ipPoolName` string
    - `apiKeyRequestHeader` string
    - `secretKeyRequestHeader` string
    - `idPath` string
    - `datePath` string
    - `apiToken` string
    - `authenticateByToken` boolean
    - `authenticationTokenKey` string
    - `instanceId` string
    - `alertUid` string
    - `title` string
    - `imageUrl` string
    - `state` string
    - `externalLink` string
    - `channelId` string
    - `phoneNumberIdentification` string
    - `accessKey` string
    - `appSid` string
    - `senderId` string
    - `tenantId` string
    - `AppIOBaseUrl` string
    - `signingSecret` string
    - `outboundIntegrationId` string
    - `outboundConnectedAt` string
    - `whatsNextCompletedAt` string — ISO timestamp marking Layer-2 What's next completion (Connected badge + guide hide). WhatsApp Business: stamped on post-connect Access Token rotation or manual confirm.
    - `useFromAddressOverride` boolean
    - `fromAddressOverride` string
    - `emailSlugPrefix` string — Agent default shared inbox slug prefix used in `{emailSlugPrefix}-{agentId}@<shared-domain>`. Only meaningful on the NovuAgent email integration.
    - `externalEnvironmentId` string — Claude Managed Agents: ID of the Anthropic environment tied to this integration. Hydrated by the API at integration provisioning time.
    - `externalVaultId` string — Claude Managed Agents: ID of the Anthropic vault (`vlt_…`) tied to this integration. Hydrated by the API at integration provisioning time and used to push OAuth-completed MCP credentials to the per-vault credentials API.
    - `externalWorkspaceId` string — Claude Managed Agents: id of the Anthropic workspace used in console deep links. Defaults to `'default'` (the Default Workspace). Set this when the API key is scoped to a custom workspace (e.g. `wrkspc_…`).
  - `configurations` ConfigurationsDto
    - `inboundWebhookEnabled` boolean
    - `inboundWebhookSigningKey` string
    - `payloadSchema` string — JSON Schema describing the payload accepted by this integration.
  - `active` boolean, required — Indicates whether the integration is currently active. An active integration will process events and messages.
  - `deleted` boolean, required — Indicates whether the integration has been marked as deleted (soft delete).
  - `deletedAt` string — The timestamp indicating when the integration was deleted. This is set when the integration is soft deleted.
  - `deletedBy` string — The identifier of the user who performed the deletion of this integration. Useful for audit trails.
  - `primary` boolean, required — Indicates whether this integration is marked as primary. A primary integration is often the default choice for processing.
  - `conditions` StepFilterDto[] — An array of conditions associated with the integration that may influence its behavior or processing logic.
    - `isNegated` boolean, required
    - `type` 'BOOLEAN' | 'TEXT' | 'DATE' | 'NUMBER' | 'STATEMENT' | 'LIST' | 'MULTI_LIST' | 'GROUP', required
    - `value` 'AND' | 'OR', required
    - `children` FieldFilterPartDto[], required
      - `field` string, required
      - `value` string, required
      - `operator` 'LARGER' | 'SMALLER' | 'LARGER_EQUAL' | 'SMALLER_EQUAL' | 'EQUAL' | 'NOT_EQUAL' | 'ALL_IN' | 'ANY_IN' | 'NOT_IN' | 'BETWEEN' | 'NOT_BETWEEN' | 'LIKE' | 'NOT_LIKE' | 'IN', required
      - `on` 'subscriber' | 'payload', required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `409` — Conflict
- `413` — Payload Too Large
- `414` — URI Too Long
- `415` — Unsupported Media Type
- `422` — Unprocessable Entity
- `429` — The client has sent too many requests in a given amount of time.
- `500` — Internal Server Error
- `503` — The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.

---

[API](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead.md) · [All operations](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/novu/deprecated-novu-api-use-openapi-json-yaml-instead/versions/986fe259fa85/schema)
