---
title: "Create connector"
method: POST
path: "/v1/projects/{project_id}/connectors"
tags: ["connectors"]
---

# Create connector

`POST /v1/projects/{project_id}/connectors`

## Request

- Base URL: `https://api.connic.co`
- URL: `https://api.connic.co/v1/projects/{project_id}/connectors`
- Auth: HTTP bearer

Creates a connector in an environment.

The configuration is validated for the connector type, and credential
fields are stored encrypted. Names used by connectors defined in code
return 409.

Required permission: `connectors.create`. Passing `agent_name` also requires `connectors.link`.

## Path parameters

- `project_id` string, uuid, required

## Query parameters

- `environment_id` string, uuid, required: Environment to create the connector in.
- `agent_name` string, nullable: Agent to link to the new connector in the same request.

## Request body

- ConnectorCreate: Connector to create in the environment given by `environment_id`.
  - `domain_id` string, uuid, nullable: Active custom domain of the project for the connector's URL. Not every connector type supports one.
  - `name` string, required: Must not match a connector defined in code in the same environment.
  - `type` 'http' | 'cron' | 'kafka' | 'sqs' | 'postgres' | 'websocket' | 'mcp' | 'email' | 's3' | 'stripe' | 'telegram' | 'slack' | 'twilio' | 'twilio_messaging' | 'telnyx' | 'telnyx_messaging', required: Connector type, which sets the event source or destination and the fields accepted in `config`.
  - `config` object: Configuration for the connector type, with the fields documented on that connector's docs page. For types that use Connections, `connection_id` reuses saved credentials, and credentials sent inline are stored in a matching or new Connection. Secrets such as webhook secrets are generated by connic.
  - `enabled` boolean: Set to false to create the connector paused. Some inbound stream connectors start paused unless this is sent, and any connector starts paused when the plan's active connector limit is reached.

## Response `201`

Successful Response

- ConnectorResponse: Connector in an environment, with its configuration.
  - `id` string, uuid, required
  - `project_id` string, uuid, required: Project the connector belongs to.
  - `environment_id` string, uuid, required: Environment the connector runs in.
  - `domain_id` string, uuid, nullable: Custom domain the connector's URL uses, or null for the default connector host.
  - `name` string, required
  - `type` 'http' | 'cron' | 'kafka' | 'sqs' | 'postgres' | 'websocket' | 'mcp' | 'email' | 's3' | 'stripe' | 'telegram' | 'slack' | 'twilio' | 'twilio_messaging' | 'telnyx' | 'telnyx_messaging', required: Connector type, which sets the event source or destination and the fields accepted in `config`.
  - `config` object, required: Configuration for the connector type, with the fields documented on that connector's docs page. Credential fields are masked as `********`; secrets connic generates for the connector, such as webhook secrets, are returned in full.
  - `enabled` boolean, required: False while the connector is paused. A paused connector starts no new runs.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `managed_key` string, nullable: Key of the `connectors/<key>.yaml` file that defines this connector in code, or null. Change these connectors in your codebase; the API can only pause or resume them.
  - `retired_at` string, date-time, nullable: When the active deployment stopped declaring this connector in code, or null. Retired connectors stay paused until a deployment declares them again, and can be deleted.

## Other responses

- `401`: Missing or invalid API key.
- `403`: The API key lacks the required permission or access to the environment.
- `422`: Validation Error
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/connic/apis/connic-api.md) · [All operations](https://skmtc.dev/connic/apis/connic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/connic/apis/connic-api/revisions/482932da5fbe?raw)
