---
title: "Create a connector"
method: POST
path: "/v1/connect/connectors"
tags: ["connect"]
---

# Create a connector

`POST /v1/connect/connectors`

Create a connector and optionally link it to a project. Use `type` with complete provider data, or use `service` with `connectionMethod` so Connect can supply the type, endpoints, templates, and defaults.

## Query parameters

- `teamId` string
- `slug` string

## Request body

- union — Create a connector with full provider configuration or with a known service connection method.
  - object
    - `data` union, required — Provider configuration. With type, provide the complete configuration for that type. With service and connectionMethod, provide only credentials and preferences; Connect supplies the type, endpoints, templates, and defaults. Other connector types accept an arbitrary object.
      - object
        - `serverUrl` string — Authorization server base URL used for discovery.
        - `serverConfig` object — Authorization server metadata. Values override discovered metadata. Empty known string fields remove their stored overrides.
          - `issuer` string — Authorization server issuer URL.
          - `authorization_endpoint` string — OAuth authorization endpoint URL.
          - `token_endpoint` string — OAuth token endpoint URL.
          - `userinfo_endpoint` string — OpenID Connect UserInfo endpoint URL.
          - `jwks_uri` string — URL of the authorization server JSON Web Key Set.
          - `jwks` object — Inline authorization server JSON Web Key Set.
            - `keys` object[], required — JSON Web Keys published by the authorization server.
              - …
          - `revocation_endpoint` string — OAuth token revocation endpoint URL.
          - `introspection_endpoint` string — OAuth token introspection endpoint URL.
          - `end_session_endpoint` string — OpenID Connect session termination endpoint URL.
          - `device_authorization_endpoint` string — OAuth device authorization endpoint URL.
          - `registration_endpoint` string — OAuth dynamic client registration endpoint URL.
          - `response_types_supported` string[] — OAuth response types supported by the server.
          - `token_endpoint_auth_methods_supported` string[] — Token endpoint client authentication methods supported by the server.
          - `token_endpoint_auth_signing_alg_values_supported` string[] — Signing algorithms supported for token endpoint authentication.
          - `scopes_supported` string[] — OAuth scopes supported by the server.
          - `grant_types_supported` string[] — OAuth grant types supported by the server.
          - `response_modes_supported` string[] — OAuth response modes supported by the server.
          - `subject_types_supported` string[] — OpenID Connect subject identifier types supported by the server.
          - `id_token_signing_alg_values_supported` string[] — Signing algorithms supported for ID tokens.
          - `id_token_encryption_alg_values_supported` string[] — Key management algorithms supported for encrypted ID tokens.
          - `id_token_encryption_enc_values_supported` string[] — Content encryption algorithms supported for encrypted ID tokens.
          - `claim_types_supported` string[] — OpenID Connect claim value types supported by the server.
          - `claims_supported` string[] — Claims that the authorization server can return.
          - `code_challenge_methods_supported` string[] — PKCE code challenge methods supported by the server.
          - `prompt_values_supported` string[] — Authorization prompt values supported by the server.
          - `claims_parameter_supported` boolean — Whether authorization requests can use the claims parameter.
          - `request_parameter_supported` boolean — Whether authorization requests can use signed request objects.
          - `request_uri_parameter_supported` boolean — Whether authorization requests can use request_uri.
          - `require_request_uri_registration` boolean — Whether request_uri values must be registered in advance.
          - `service_documentation` string — Authorization server documentation URL.
          - `op_policy_uri` string — Authorization server privacy policy URL.
          - `op_tos_uri` string — Authorization server terms of service URL.
          - `logo_uri` string — Authorization server logo URL.
          - `client_id_metadata_document_supported` boolean — Whether the server supports OAuth client ID metadata documents.
          - `authorization_details_types_supported` string[] — OAuth authorization-detail types supported by the server.
        - `clientId` string, required — OAuth client ID assigned by the provider.
        - `clientName` string — OAuth client name.
        - `clientSecret` string — OAuth client secret.
        - `tokenEndpointAuthMethod` string — OAuth token endpoint authentication method. Common values are client_secret_post, client_secret_basic, none, and private_key_jwt. If omitted, Vercel selects a supported method from serverConfig and otherwise uses client_secret_post.
        - `responseType` string — OAuth authorization response type. Defaults to code. Other provider-supported values are accepted. An empty string clears the configured type.
        - `pkceRequired` boolean — Whether user authorization must use PKCE.
        - `codeChallengeMethod` string — PKCE code challenge method. Supported values are S256 and plain. Vercel prefers S256 when the provider supports it. An empty string clears the configured method.
        - `userAuthorization` object — User authorization grant settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
        - `refreshTokens` object — Refresh token settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
        - `clientCredentials` object — Client credentials grant settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
        - `forwardedClaims` object — Allow-list of extra claims to propagate, keyed by source (idToken). Only claims named here and present in that source are exposed.
          - `idToken` string[] — ID token claim names that Connect can expose.
        - `defaultAudience` string — Default audience used when a token request omits one. An empty string clears the default.
        - `defaultTokenExpiresIn` number — Default token lifetime in seconds to use when the token response omits expires_in.
        - `authorizationUrlParams` object — Extra query parameters added to authorization URLs.
        - `jwtBearer` object — JWT bearer grant settings.
          - `enabled` boolean — Whether JWT bearer grants are enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
          - `sub` string — Default JWT subject claim.
          - `iss` string — Default JWT issuer claim.
          - `aud` string — Default JWT audience claim.
          - `additionalClaims` object — Additional claims included in generated JWT assertions.
          - `ttl` number — JWT lifetime in seconds.
          - `useClientCredentials` boolean — Whether JWT bearer requests also use client credentials.
        - `clientAssertion` object — `private_key_jwt` client assertion settings.
          - `type` string — OAuth client assertion type. Defaults to urn:ietf:params:oauth:client-assertion-type:jwt-bearer. An empty string clears the configured type.
          - `ttl` number — Client assertion lifetime in seconds.
          - `claims` object — Additional claims included in the client assertion.
      - object
        - `subjectType` 'app' | 'user' — Which subject the connector issues tokens for. Defaults to \"app\" (connector-level keys). \"user\" connectors store no connector-level values; each user supplies their own key during authorization.
        - `values` object[] — Initial API key values stored by the connector.
          - `value` string, required — API key value.
          - `scope` string — Optional scope associated with the API key value.
          - `expiresAt` integer — The timestamp when the API key value expires in milliseconds.
        - `serviceUrls` string[] — The HTTPS resources the API key authenticates against.
      - object
        - `appId` integer, required — GitHub App numeric ID.
        - `appSlug` string, required — GitHub App slug.
        - `appName` string, required — GitHub App display name.
        - `clientId` string, required — OAuth client ID assigned by GitHub.
        - `owner` object — GitHub App owner.
          - `type` 'user' | 'organization' | 'User' | 'Organization', required — GitHub App owner type.
          - `id` integer, required — GitHub App owner numeric ID.
          - `slug` string, required — GitHub App owner login.
          - `name` string — GitHub App owner display name.
        - `clientSecret` string — GitHub App OAuth client secret.
        - `privateKeyPem` string — GitHub App private key in PEM format.
        - `webhookSecret` string — GitHub App webhook secret.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `appId` string — Linear application ID.
        - `appName` string — Linear application name.
        - `clientId` string, required — OAuth client ID assigned by Linear.
        - `clientSecret` string, required — Linear OAuth client secret.
        - `webhookSecret` string — Linear webhook verification secret.
        - `appScopes` string[] — OAuth scopes requested for Linear application tokens.
        - `userScopes` string[] — OAuth scopes requested for Linear user tokens.
        - `ownerOrganization` object — Linear organization that owns the OAuth application.
          - `id` string, required — Linear organization ID.
          - `slug` string, required — Linear organization slug.
          - `name` string, required — Linear organization name.
          - `logoUrl` string, nullable — Linear organization logo URL.
        - `application` object — Linear OAuth application metadata.
          - `id` string, required — Linear OAuth application ID.
          - `clientId` string, required — Linear OAuth client ID.
          - `name` string, required — Linear OAuth application name.
          - `description` string, nullable — Linear OAuth application description.
          - `developer` string, nullable — Linear OAuth application developer name.
          - `developerUrl` string, nullable — Linear OAuth application developer URL.
          - `imageUrl` string, nullable — Linear OAuth application image URL.
          - `redirectUris` string[] — Registered redirect URIs for the Linear OAuth application.
          - `distribution` string, nullable — Linear OAuth application distribution mode.
          - `webhookResourceTypes` string[] — Linear resource types delivered to the webhook.
          - `webhookUrl` string, nullable — Linear webhook URL.
          - `webhookEnabled` boolean — Whether the Linear webhook is enabled.
          - `createdAt` string — Linear OAuth application creation timestamp.
          - `updatedAt` string — Linear OAuth application update timestamp.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `apiToken` string, required — Linq partner API token for the shared line.
        - `phoneNumbers` string[]
      - object
        - `consumerKey` string, required — Salesforce connected app consumer key.
        - `consumerSecret` string, required — Salesforce connected app consumer secret.
        - `loginHost` string, required — Salesforce login host, such as login.salesforce.com.
      - object
        - `apiKeyId` string, required — Sendblue API key id (`sb-api-key-id`).
        - `apiSecretKey` string, required — Sendblue API secret key (`sb-api-secret-key`).
        - `phoneNumbers` string[] — E.164 Sendblue lines this connector sends and receives on. Used as the connector's display name, and the only lines its webhooks are registered for; an empty array clears them, which also removes the webhook subscription.
      - object
        - `appId` string, required — Slack app ID.
        - `appName` string, required — Slack app display name.
        - `clientId` string, required — OAuth client ID assigned by Slack.
        - `clientSecret` string, required — Slack app OAuth client secret.
        - `slackTeam` object — Slack workspace metadata.
          - `id` string, required — Slack workspace ID.
          - `name` string — Slack workspace name.
          - `domain` string — Slack workspace domain.
        - `signingSecret` string — Slack request signing secret.
        - `verificationToken` string — Legacy Slack webhook verification token.
        - `botScopes` string[] — OAuth scopes requested for Slack bot tokens.
        - `userScopes` string[] — OAuth scopes requested for Slack user tokens.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `clientName` string — Snowflake OAuth client name.
        - `accountIdentifier` string, required — Snowflake account identifier.
        - `defaultSessionRole` string — Default Snowflake role for created sessions.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `clientName` string — Snowflake client name.
        - `accountIdentifier` string — Snowflake account identifier.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `projectId` string, required — Photon project ID.
        - `projectSecret` string, required — Photon project secret.
        - `webhookSecret` string — Photon webhook verification secret.
      - object
    - `icon` string — SHA-1 digest of a PNG or JPEG icon that is at least 640 by 640 pixels. This field does not accept a URL or image bytes. First compute the digest and upload the raw image with [POST /v2/files](https://vercel.com/docs/rest-api/deployments/upload-deployment-files). Send `Content-Length` and the same 40-character digest in `x-vercel-digest`. Then set `icon` to that digest. ```js import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; const VERCEL_TOKEN = process.env.VERCEL_TOKEN; const connectorId = 'scl_...'; const bytes = await readFile('icon.png'); const digest = createHash('sha1').update(bytes).digest('hex'); await fetch('https://api.vercel.com/v2/files', { method: 'POST', headers: { Authorization: `Bearer ${VERCEL_TOKEN}`, 'Content-Type': 'application/octet-stream', 'Content-Length': String(bytes.length), 'x-vercel-digest': digest, }, body: bytes, }); await fetch(`https://api.vercel.com/v2/connect/connectors/${connectorId}`, { method: 'PATCH', headers: { Authorization: `Bearer ${VERCEL_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ icon: digest }), }); ```
    - `backgroundColor` string — Branding background color (6-digit hex, for example
    - `accentColor` string — Branding accent color (6-digit hex, for example
    - `type` string, required — Connector implementation type for full configuration. Known types: api-key, discord, github, linear, linq, microsoft-entra, oauth, photon, salesforce, sendblue, slack, snowflake, snowflake-wif. Optional when service and connectionMethod select the type.
    - `service` string — Service slug or URL for which the connector is used. Required when connectionMethod is set. Service alone does not enable preset configuration.
    - `connectionMethod` string — Connection method slug of the service. Use it with service to select preset configuration.
    - `params` object — Values for the selected connection method's template fields. Requires connectionMethod.
    - `target` string — Which of the service's targets this connector is for. Requires \"connectionMethod\" and must be one that method serves. Optional.
    - `uid` string — Optional team-scoped unique identifier for the connector. If omitted or empty, Connect generates a value.
    - `name` string — Connector name. The value is trimmed and cannot contain control characters. If omitted or empty, the project name is used. A name or projectId is required. API key connectors require name.
    - `projectId` string — Project to connect during creation. If environments is omitted, the connection uses development, preview, and production.
    - `environments` union[] — Environments for the project connection. Requires projectId. Use one or more built-in environment names or stable custom environment IDs that belong to the project. Duplicate values are accepted and removed.
      - union — A built-in environment name or the stable env_* ID of a custom environment.
        - 'development' | 'preview' | 'production'
        - string
    - `triggers` boolean — Whether the triggers are enabled for this connector.
    - `triggerDestination` union — Initial trigger destination. Requires triggers to be enabled and a projectId here or at the top level. Connector responses expose the resulting set as triggerDestinations. Replace the complete set with PATCH /v1/connect/connectors/{connector}/trigger-destinations.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `branch` string, required — Git branch used to select a preview deployment.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `customEnvironmentId` string, required — Stable custom environment ID that belongs to the destination project.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
    - `events` string[] — Default trigger events for this connector.
  - object
    - `data` union, required — Provider configuration. With type, provide the complete configuration for that type. With service and connectionMethod, provide only credentials and preferences; Connect supplies the type, endpoints, templates, and defaults. Other connector types accept an arbitrary object.
      - object
        - `serverUrl` string — Authorization server base URL used for discovery.
        - `serverConfig` object — Authorization server metadata. Values override discovered metadata. Empty known string fields remove their stored overrides.
          - `issuer` string — Authorization server issuer URL.
          - `authorization_endpoint` string — OAuth authorization endpoint URL.
          - `token_endpoint` string — OAuth token endpoint URL.
          - `userinfo_endpoint` string — OpenID Connect UserInfo endpoint URL.
          - `jwks_uri` string — URL of the authorization server JSON Web Key Set.
          - `jwks` object — Inline authorization server JSON Web Key Set.
            - `keys` object[], required — JSON Web Keys published by the authorization server.
              - …
          - `revocation_endpoint` string — OAuth token revocation endpoint URL.
          - `introspection_endpoint` string — OAuth token introspection endpoint URL.
          - `end_session_endpoint` string — OpenID Connect session termination endpoint URL.
          - `device_authorization_endpoint` string — OAuth device authorization endpoint URL.
          - `registration_endpoint` string — OAuth dynamic client registration endpoint URL.
          - `response_types_supported` string[] — OAuth response types supported by the server.
          - `token_endpoint_auth_methods_supported` string[] — Token endpoint client authentication methods supported by the server.
          - `token_endpoint_auth_signing_alg_values_supported` string[] — Signing algorithms supported for token endpoint authentication.
          - `scopes_supported` string[] — OAuth scopes supported by the server.
          - `grant_types_supported` string[] — OAuth grant types supported by the server.
          - `response_modes_supported` string[] — OAuth response modes supported by the server.
          - `subject_types_supported` string[] — OpenID Connect subject identifier types supported by the server.
          - `id_token_signing_alg_values_supported` string[] — Signing algorithms supported for ID tokens.
          - `id_token_encryption_alg_values_supported` string[] — Key management algorithms supported for encrypted ID tokens.
          - `id_token_encryption_enc_values_supported` string[] — Content encryption algorithms supported for encrypted ID tokens.
          - `claim_types_supported` string[] — OpenID Connect claim value types supported by the server.
          - `claims_supported` string[] — Claims that the authorization server can return.
          - `code_challenge_methods_supported` string[] — PKCE code challenge methods supported by the server.
          - `prompt_values_supported` string[] — Authorization prompt values supported by the server.
          - `claims_parameter_supported` boolean — Whether authorization requests can use the claims parameter.
          - `request_parameter_supported` boolean — Whether authorization requests can use signed request objects.
          - `request_uri_parameter_supported` boolean — Whether authorization requests can use request_uri.
          - `require_request_uri_registration` boolean — Whether request_uri values must be registered in advance.
          - `service_documentation` string — Authorization server documentation URL.
          - `op_policy_uri` string — Authorization server privacy policy URL.
          - `op_tos_uri` string — Authorization server terms of service URL.
          - `logo_uri` string — Authorization server logo URL.
          - `client_id_metadata_document_supported` boolean — Whether the server supports OAuth client ID metadata documents.
          - `authorization_details_types_supported` string[] — OAuth authorization-detail types supported by the server.
        - `clientId` string, required — OAuth client ID assigned by the provider.
        - `clientName` string — OAuth client name.
        - `clientSecret` string — OAuth client secret.
        - `tokenEndpointAuthMethod` string — OAuth token endpoint authentication method. Common values are client_secret_post, client_secret_basic, none, and private_key_jwt. If omitted, Vercel selects a supported method from serverConfig and otherwise uses client_secret_post.
        - `responseType` string — OAuth authorization response type. Defaults to code. Other provider-supported values are accepted. An empty string clears the configured type.
        - `pkceRequired` boolean — Whether user authorization must use PKCE.
        - `codeChallengeMethod` string — PKCE code challenge method. Supported values are S256 and plain. Vercel prefers S256 when the provider supports it. An empty string clears the configured method.
        - `userAuthorization` object — User authorization grant settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
        - `refreshTokens` object — Refresh token settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
        - `clientCredentials` object — Client credentials grant settings.
          - `enabled` boolean, required — Whether this OAuth grant is enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
        - `forwardedClaims` object — Allow-list of extra claims to propagate, keyed by source (idToken). Only claims named here and present in that source are exposed.
          - `idToken` string[] — ID token claim names that Connect can expose.
        - `defaultAudience` string — Default audience used when a token request omits one. An empty string clears the default.
        - `defaultTokenExpiresIn` number — Default token lifetime in seconds to use when the token response omits expires_in.
        - `authorizationUrlParams` object — Extra query parameters added to authorization URLs.
        - `jwtBearer` object — JWT bearer grant settings.
          - `enabled` boolean — Whether JWT bearer grants are enabled.
          - `scopes` string[] — Default scopes to request when token params specify scopes: [\"*\"].
          - `sub` string — Default JWT subject claim.
          - `iss` string — Default JWT issuer claim.
          - `aud` string — Default JWT audience claim.
          - `additionalClaims` object — Additional claims included in generated JWT assertions.
          - `ttl` number — JWT lifetime in seconds.
          - `useClientCredentials` boolean — Whether JWT bearer requests also use client credentials.
        - `clientAssertion` object — `private_key_jwt` client assertion settings.
          - `type` string — OAuth client assertion type. Defaults to urn:ietf:params:oauth:client-assertion-type:jwt-bearer. An empty string clears the configured type.
          - `ttl` number — Client assertion lifetime in seconds.
          - `claims` object — Additional claims included in the client assertion.
      - object
        - `subjectType` 'app' | 'user' — Which subject the connector issues tokens for. Defaults to \"app\" (connector-level keys). \"user\" connectors store no connector-level values; each user supplies their own key during authorization.
        - `values` object[] — Initial API key values stored by the connector.
          - `value` string, required — API key value.
          - `scope` string — Optional scope associated with the API key value.
          - `expiresAt` integer — The timestamp when the API key value expires in milliseconds.
        - `serviceUrls` string[] — The HTTPS resources the API key authenticates against.
      - object
        - `appId` integer, required — GitHub App numeric ID.
        - `appSlug` string, required — GitHub App slug.
        - `appName` string, required — GitHub App display name.
        - `clientId` string, required — OAuth client ID assigned by GitHub.
        - `owner` object — GitHub App owner.
          - `type` 'user' | 'organization' | 'User' | 'Organization', required — GitHub App owner type.
          - `id` integer, required — GitHub App owner numeric ID.
          - `slug` string, required — GitHub App owner login.
          - `name` string — GitHub App owner display name.
        - `clientSecret` string — GitHub App OAuth client secret.
        - `privateKeyPem` string — GitHub App private key in PEM format.
        - `webhookSecret` string — GitHub App webhook secret.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `appId` string — Linear application ID.
        - `appName` string — Linear application name.
        - `clientId` string, required — OAuth client ID assigned by Linear.
        - `clientSecret` string, required — Linear OAuth client secret.
        - `webhookSecret` string — Linear webhook verification secret.
        - `appScopes` string[] — OAuth scopes requested for Linear application tokens.
        - `userScopes` string[] — OAuth scopes requested for Linear user tokens.
        - `ownerOrganization` object — Linear organization that owns the OAuth application.
          - `id` string, required — Linear organization ID.
          - `slug` string, required — Linear organization slug.
          - `name` string, required — Linear organization name.
          - `logoUrl` string, nullable — Linear organization logo URL.
        - `application` object — Linear OAuth application metadata.
          - `id` string, required — Linear OAuth application ID.
          - `clientId` string, required — Linear OAuth client ID.
          - `name` string, required — Linear OAuth application name.
          - `description` string, nullable — Linear OAuth application description.
          - `developer` string, nullable — Linear OAuth application developer name.
          - `developerUrl` string, nullable — Linear OAuth application developer URL.
          - `imageUrl` string, nullable — Linear OAuth application image URL.
          - `redirectUris` string[] — Registered redirect URIs for the Linear OAuth application.
          - `distribution` string, nullable — Linear OAuth application distribution mode.
          - `webhookResourceTypes` string[] — Linear resource types delivered to the webhook.
          - `webhookUrl` string, nullable — Linear webhook URL.
          - `webhookEnabled` boolean — Whether the Linear webhook is enabled.
          - `createdAt` string — Linear OAuth application creation timestamp.
          - `updatedAt` string — Linear OAuth application update timestamp.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `apiToken` string, required — Linq partner API token for the shared line.
        - `phoneNumbers` string[]
      - object
        - `consumerKey` string, required — Salesforce connected app consumer key.
        - `consumerSecret` string, required — Salesforce connected app consumer secret.
        - `loginHost` string, required — Salesforce login host, such as login.salesforce.com.
      - object
        - `apiKeyId` string, required — Sendblue API key id (`sb-api-key-id`).
        - `apiSecretKey` string, required — Sendblue API secret key (`sb-api-secret-key`).
        - `phoneNumbers` string[] — E.164 Sendblue lines this connector sends and receives on. Used as the connector's display name, and the only lines its webhooks are registered for; an empty array clears them, which also removes the webhook subscription.
      - object
        - `appId` string, required — Slack app ID.
        - `appName` string, required — Slack app display name.
        - `clientId` string, required — OAuth client ID assigned by Slack.
        - `clientSecret` string, required — Slack app OAuth client secret.
        - `slackTeam` object — Slack workspace metadata.
          - `id` string, required — Slack workspace ID.
          - `name` string — Slack workspace name.
          - `domain` string — Slack workspace domain.
        - `signingSecret` string — Slack request signing secret.
        - `verificationToken` string — Legacy Slack webhook verification token.
        - `botScopes` string[] — OAuth scopes requested for Slack bot tokens.
        - `userScopes` string[] — OAuth scopes requested for Slack user tokens.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `clientName` string — Snowflake OAuth client name.
        - `accountIdentifier` string, required — Snowflake account identifier.
        - `defaultSessionRole` string — Default Snowflake role for created sessions.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `clientName` string — Snowflake client name.
        - `accountIdentifier` string — Snowflake account identifier.
        - `extras` object — Additional provider metadata stored with the connector.
      - object
        - `projectId` string, required — Photon project ID.
        - `projectSecret` string, required — Photon project secret.
        - `webhookSecret` string — Photon webhook verification secret.
      - object
    - `icon` string — SHA-1 digest of a PNG or JPEG icon that is at least 640 by 640 pixels. This field does not accept a URL or image bytes. First compute the digest and upload the raw image with [POST /v2/files](https://vercel.com/docs/rest-api/deployments/upload-deployment-files). Send `Content-Length` and the same 40-character digest in `x-vercel-digest`. Then set `icon` to that digest. ```js import { createHash } from 'node:crypto'; import { readFile } from 'node:fs/promises'; const VERCEL_TOKEN = process.env.VERCEL_TOKEN; const connectorId = 'scl_...'; const bytes = await readFile('icon.png'); const digest = createHash('sha1').update(bytes).digest('hex'); await fetch('https://api.vercel.com/v2/files', { method: 'POST', headers: { Authorization: `Bearer ${VERCEL_TOKEN}`, 'Content-Type': 'application/octet-stream', 'Content-Length': String(bytes.length), 'x-vercel-digest': digest, }, body: bytes, }); await fetch(`https://api.vercel.com/v2/connect/connectors/${connectorId}`, { method: 'PATCH', headers: { Authorization: `Bearer ${VERCEL_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ icon: digest }), }); ```
    - `backgroundColor` string — Branding background color (6-digit hex, for example
    - `accentColor` string — Branding accent color (6-digit hex, for example
    - `type` string — Connector implementation type for full configuration. Known types: api-key, discord, github, linear, linq, microsoft-entra, oauth, photon, salesforce, sendblue, slack, snowflake, snowflake-wif. Optional when service and connectionMethod select the type.
    - `service` string, required — Service slug or URL for which the connector is used. Required when connectionMethod is set. Service alone does not enable preset configuration.
    - `connectionMethod` string, required — Connection method slug of the service. Use it with service to select preset configuration.
    - `params` object — Values for the selected connection method's template fields. Requires connectionMethod.
    - `target` string — Which of the service's targets this connector is for. Requires \"connectionMethod\" and must be one that method serves. Optional.
    - `uid` string — Optional team-scoped unique identifier for the connector. If omitted or empty, Connect generates a value.
    - `name` string — Connector name. The value is trimmed and cannot contain control characters. If omitted or empty, the project name is used. A name or projectId is required. API key connectors require name.
    - `projectId` string — Project to connect during creation. If environments is omitted, the connection uses development, preview, and production.
    - `environments` union[] — Environments for the project connection. Requires projectId. Use one or more built-in environment names or stable custom environment IDs that belong to the project. Duplicate values are accepted and removed.
      - union — A built-in environment name or the stable env_* ID of a custom environment.
        - 'development' | 'preview' | 'production'
        - string
    - `triggers` boolean — Whether the triggers are enabled for this connector.
    - `triggerDestination` union — Initial trigger destination. Requires triggers to be enabled and a projectId here or at the top level. Connector responses expose the resulting set as triggerDestinations. Replace the complete set with PATCH /v1/connect/connectors/{connector}/trigger-destinations.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `branch` string, required — Git branch used to select a preview deployment.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
      - object
        - `projectId` string — Project that receives triggers. During connector creation, omit it to use the top-level projectId.
        - `customEnvironmentId` string, required — Stable custom environment ID that belongs to the destination project.
        - `path` string — Route path on the linked project that receives forwarded trigger requests.
    - `events` string[] — Default trigger events for this connector.

## Response `201`

The connector was created.

- ConnectConnectorCreateResult — Connector created by the request.
  - `id` string, required — Stable `scl_` connector ID. Use this value directly in `{connector}`.
  - `uid` string, required — Team-scoped UID. URL-encode this value before using it in `{connector}`.
  - `defaultInstallationId` string — Installation used when a token request does not specify an installation.
  - `createdAt` number, required — Creation time in epoch milliseconds.
  - `updatedAt` number, required — Last update time in epoch milliseconds.
  - `reinstallAt` number — Time when this connector started requiring reinstallation because an installation-affecting app-token grant changed.
  - `createdBy` union — Principal that created the connector.
    - object — Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all.
      - `type` 'user', required — Principal kind.
      - `id` string, required — Vercel user ID.
    - object — Principal that originally created the connector — either a Vercel user (interactive dashboard / CLI flow) or a Vercel deployment (OIDC-authenticated project, used by runtime auto-provisioning). See {@link ConnexPrincipal}. Optional: pre-existing rows from before this shape was introduced may carry no attribution at all.
      - `type` 'project', required — Principal kind.
      - `id` string, required — Vercel project ID.
      - `environment` union, required — Deployment environment of the project principal.
        - string
        - 'development' | 'preview' | 'production'
  - `updatedBy` union — Principal that most recently updated the connector.
    - object — Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update.
      - `type` 'user', required — Principal kind.
      - `id` string, required — Vercel user ID.
    - object — Principal that most recently mutated the connector. Same shape as {@link createdBy} but tracks the most recent updater, not the original creator. At create time the two fields point at the same principal; they diverge on the first subsequent update.
      - `type` 'project', required — Principal kind.
      - `id` string, required — Vercel project ID.
      - `environment` union, required — Deployment environment of the project principal.
        - string
        - 'development' | 'preview' | 'production'
  - `creationMode` 'managed' | 'manual' — How the connector row was originally created. New create paths stamp this explicitly; older rows may omit it.
  - `managed` object — Managed connector metadata exposed without leaking the manager connector or installation identifiers.
    - `sync` false | true — Whether Vercel synchronizes provider-side configuration.
  - `type` 'api-key' | 'custom' | 'discord' | 'github' | 'linear' | 'linq' | 'microsoft-entra' | 'microsoft-teams' | 'oauth' | 'photon' | 'salesforce' | 'sendblue' | 'slack' | 'snowflake' | 'snowflake-wif', required — Connector implementation type.
  - `service` string, required — Best-effort identifier of the third-party service this connector represents, independent of `type`. Examples: `'slack'`, `'mcp.linear.app'`, and `'auth.example.com'`. Always present in API responses.
  - `connectionMethod` string — The connection method this connector was created from, when the create request named one.
  - `target` string — Which of the service's products/surfaces this connector points at.
  - `name` string, required — Connector name within the owning team.
  - `displayName` string, required — Human-readable connector name.
  - `clientUrl` string, nullable — Provider-side URL for viewing or managing the resource represented by the connector. The destination can be an app, account, phone line, or service instance, depending on the connector type.
  - `redirectUri` string — Redirect URI registered with the third-party service for this connector, if any. Used by `startAuthorization`/`startInstallation` to replay the exact URI back to the provider's token endpoint. Absent on connectors created before this field was introduced; those callers fall back to the `https://connect.vercel.com/callback` default.
  - `typeName` string, required — Human-readable name of the connector type.
  - `typeIcon` string — Icon identifier supplied by the connector type.
  - `website` string — Public website for the connected service.
  - `devsite` string — Developer website for the connected service.
  - `docsite` string — Developer documentation for the connected service.
  - `icon` string — Connector branding icon. SHA-1 hash that resolves to the uploaded icon through the Vercel avatar service. Consumers render this with `https://vercel.com/api/www/avatar/{icon}`.
  - `backgroundColor` string — Hex background color (e.g., `#000000`) for branding.
  - `accentColor` string — Hex accent color (e.g., `#000000`) for branding.
  - `supportedSubjectTypes` string[], required — Token subject types supported by the connector.
  - `appTokens` object — App-token capabilities and known grants for the connector.
    - `crossInstallation` false | true, required — Whether one app token can be used across installations.
    - `supportsRefinement` false | true, required — Whether callers can narrow app-token grants per request.
    - `requiresReinstallation` false | true — True when changing app token grants requires reinstalling the app, so tokens cannot be partitioned independently by requester environment.
    - `scopes` string[] — Known allowed app-level scopes. For Slack this is the bot scope set configured on the app; for OAuth it is the connector's enabled `clientCredentials.scopes` configuration.
    - `supportedAuthorizationDetails` string[] — Supported OAuth authorization-detail type names.
    - `permissionsUrl` string — Link to the page on the service where this connector's app-level permissions are declared and granted, when the service has one and it differs from `clientUrl`.
  - `userTokens` object — User-token capabilities and known grants for the connector.
    - `crossInstallation` false | true, required — Whether one user token can be used across installations.
    - `supportsRefinement` false | true, required — Whether callers can narrow user-token grants per request.
    - `scopes` string[] — Known allowed user-level scopes. For Slack this is the user scope set configured on the app; for OAuth it is the connector's enabled `userAuthorization.scopes` configuration.
    - `supportedAuthorizationDetails` string[] — Supported OAuth authorization-detail type names.
    - `manualCredentialInput` false | true — User authorization is completed by the Connect consent screen submitting a credential instead of an OAuth redirect.
  - `supportsInstallation` false | true, required — Whether the connector supports an installation flow.
  - `supportsRevocation` false | true, required — Whether Connect can revoke tokens for this connector.
  - `supportsTriggers` false | true, required — Whether this connector type supports trigger webhooks. Derived from the type definition; indicates that `triggers` and `triggerDestinations` may be meaningful for this connector.
  - `supportsIcon` unknown, required
  - `triggers` ConnectTriggerConfiguration — Incoming trigger configuration. Only present when enabled.
    - `enabled` false | true, required — Whether incoming triggers are enabled for the connector.
  - `events` string[] — Known events this connector subscribes to (e.g. Slack bot events, GitHub webhook events). Names are type-specific and validated by the managed-create flow when forwarded to the third-party service.
  - `triggerDestinations` ConnectTriggerDestination[] — Destinations that incoming triggers should be forwarded to. Limited to 3 entries. Set the initial destination with `triggerDestination` during creation. Replace the complete set with `PATCH /v1/connect/connectors/{connector}/trigger-destinations`.
    - `projectId` string, required — Vercel project that receives matching trigger requests.
    - `customEnvironmentId` string — Stable custom-environment ID to route this destination to. Mutually exclusive with `branch`; omitted destinations keep the legacy production behavior.
    - `branch` string — Git branch used to select a preview deployment.
    - `path` string — Route path that receives the forwarded trigger request.

## Other responses

- `400` — One of the provided values in the request body is invalid.
- `401` — The request is not authorized.
- `403` — You do not have permission to access this resource.
- `404` — The requested resource was not found.
- `409` — The request conflicts with the current resource state.
- `410` — The requested resource is no longer available.
- `422` — The request cannot be completed in the current state.
- `500` — An internal error occurred.
- `502` — A dependency returned an invalid or unsuccessful response.

## Changes

> 39 revisions in range; 26 could not be searched.

- **2026-07-31** `e20468c66692` — 1 warning, 12 info
  - added the new `discord` enum value to the `type` response property for the response status `201`
  - added the new optional request property `connectionMethod`
  - added the new optional request property `data/anyOf[subschema #1: type:oauth]/clientAssertion`
  - added the new optional request property `data/anyOf[subschema #1: type:oauth]/clientName`
  - …9 more
- **2026-07-26** `01c71864fa50` — 7 breaking, 1 warning, 17 info
  - the `environments/items/` request property type/format changed from `string`/`` to ``/``
  - added `subschema #1, subschema #2` to the `createdBy/oneOf[subschema #2]/environment` response property `oneOf` list for the response status `201`
  - added `subschema #1, subschema #2` to the `includes/projects/items/items/environments/items/` response property `oneOf` list for the response status `201`
  - added `subschema #1, subschema #2` to the `updatedBy/oneOf[subschema #2]/environment` response property `oneOf` list for the response status `201`
  - …21 more
- …earlier changes not shown

[Full history](https://skmtc.dev/vercel/apis/api/changes/v1/connect/connectors/post.md)

---

[API](https://skmtc.dev/vercel/apis/api.md) · [All operations](https://skmtc.dev/vercel/apis/api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/vercel/api/revisions/4191ba96b0c1/schema)
