Dynamiq
Connections

Create a Connection

Add credentials for LLM providers, databases, vector stores, MCP servers, and more — in the UI or through the API.

You create a Connection by picking a type, naming it, and filling in the type-specific credentials. This page walks through the flow and catalogs every connection type in the UI Type dropdown (plus one API-only type). If you are new to Connections, start with the overview.

Create a Connection in the UI

Open the Connections page

In your project, go to Connections and click Add new connection.

The Connections page with the Add new connection button in the header

Choose a type and name

In the Add new connection panel, pick the service from the Type dropdown and enter a Name. The Create button stays disabled until you provide a name.

The Add new connection side panel with Type and Name fields and type-specific config inputs below

Fill in the config fields

The fields below Name change with the selected type — an API key for most LLM providers, host and port for databases, a server URL for MCP. The per-category field notes are in the catalog below.

Create — and authorize, if OAuth

Click Create. For most types the Connection is active immediately and ready to use.

For OAuth types (Google, Dropbox, Microsoft, Box, Notion) the panel switches to Authorize connection with an Authorize button. Clicking it opens the provider's consent page in a new tab; once you grant access, the Connection's status changes to active. See OAuth Connections for details.

The Authorize connection panel with the Authorize button for an OAuth connection that is not yet active

screenshot: connections-oauth-authorize-pending

After creation, a Connection's Type and Name are fixed. You can edit the config fields (for example, rotate an API key) by opening the Connection from the list and clicking Update, or remove it with the delete action in the row menu.

Create a Connection via API

Send POST /v1/connections with name, project_id, type, and a type-specific config object. The type value is the full identifier, e.g. dynamiq.connections.OpenAI.

curl -X POST "https://api.getdynamiq.ai/v1/connections" \
  -H "Authorization: Bearer $DYNAMIQ_ACCESS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "openai-prod",
    "project_id": "'"$DYNAMIQ_PROJECT_ID"'",
    "type": "dynamiq.connections.OpenAI",
    "config": {
      "api_key": "'"$OPENAI_API_KEY"'",
      "url": "https://api.openai.com/v1"
    }
  }'
import os

import requests

response = requests.post(
    "https://api.getdynamiq.ai/v1/connections",
    headers={"Authorization": f"Bearer {os.environ['DYNAMIQ_ACCESS_KEY']}"},
    json={
        "name": "openai-prod",
        "project_id": os.environ["DYNAMIQ_PROJECT_ID"],
        "type": "dynamiq.connections.OpenAI",
        "config": {
            "api_key": os.environ["OPENAI_API_KEY"],
            "url": "https://api.openai.com/v1",
        },
    },
)
response.raise_for_status()

connection = response.json()["data"]
print(connection["id"], connection["status"])
const response = await fetch("https://api.getdynamiq.ai/v1/connections", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DYNAMIQ_ACCESS_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "openai-prod",
    project_id: process.env.DYNAMIQ_PROJECT_ID,
    type: "dynamiq.connections.OpenAI",
    config: {
      api_key: process.env.OPENAI_API_KEY,
      url: "https://api.openai.com/v1",
    },
  }),
});

const { data: connection } = await response.json();
console.log(connection.id, connection.status);
namestringrequired
Display name for the Connection.
project_idstring (UUID)required
The project the Connection belongs to.
typestringrequired
Connection type identifier, e.g. dynamiq.connections.PostgreSQL.
configobjectrequired
Type-specific credentials and settings (see the catalog below).
oauth2_client_idstring (UUID)
Optional OAuth2 client to use; only valid for OAuth2 connection types.

To update credentials later, send PUT /v1/connections/{connection_id} with the same type and the new config.

Connection type catalog

Type names below match the Type dropdown exactly.

LLM providers

Most LLM provider Connections need only an api_key; a few add provider-specific fields.

TypeConfig fields
OpenAIapi_key, url (defaults to https://api.openai.com/v1 — point it at any OpenAI-compatible endpoint)
Anthropicapi_key
Geminiapi_key
Cohereapi_key
Mistralapi_key
Groqapi_key
HuggingFaceapi_key
xAIapi_key
DeepSeekapi_key
TogetherAIapi_key
Anyscaleapi_key
Fireworks AIapi_key
Replicateapi_key
SambaNovaapi_key
Cerebrasapi_key
DeepInfraapi_key
Perplexityapi_key
Azure AIapi_key, url, api_version
IBM watsonxapi_key, project_id, url
Nvidia NIMurl, api_key
AWSaccess_key_id, secret_access_key, region (used for Amazon Bedrock and other AWS services)
VertexAIGoogle service-account JSON fields (project_id, private_key, client_email, …) plus vertex_project_id and vertex_project_location

Vector databases

TypeConfig fields
Pineconeapi_key
Weaviateapi_key, deployment_type (Weaviate cloud adds a cluster url; Custom adds HTTP and gRPC host/port fields)
Qdranturl, api_key
Milvusuri, api_key
Chromahost, port
Elasticsearchurl, api_key_id + api_key or username + password, optional cloud_id, use_ssl
AWS OpenSearchaccess_key_id, secret_access_key, region, host, port (default 443), service, use_ssl

SQL databases and warehouses

Relational databases share the host/port/credentials shape.

TypeConfig fields
PostgreSQLhost, port (default 5432), database, user, password
MySQLhost, port (default 3306), database, user, password
Amazon Redshifthost, port (default 5439), database, user, password
Snowflakeuser, password, account, warehouse, database, schema
Databricksurl, api_key

Graph databases

TypeConfig fields
Neo4juri, username, password, database, connectivity verification toggle
AWS Neptunehost, port (default 8182), HTTPS and SSL-verification toggles, timeout
Apache AGEhost, port (default 5432), database, user, password (PostgreSQL-compatible)

Search, scraping, and browsing

TypeConfig fields
Tavilyapi_key
Exaapi_key
ScaleSerpapi_key
Firecrawlapi_key
ZenRowsapi_key
Jinaapi_key
Stagehandbrowserbase_api_key, browserbase_project_id, model_api_key, extra config

Audio

TypeConfig fields
Whisperurl, api_key
ElevenLabsapi_key

Code sandboxes

TypeConfig fields
E2Bapi_key
Daytonaapi_key, url (defaults to https://app.daytona.io/api), target

MCP servers

Both MCP transports share the same config; use them to give the Agent node tools from a remote MCP server.

TypeConfig fields
MCP SSEurl, headers, timeout (default 30s), sse_read_timeout (default 300s)
MCP Streamable HTTPurl, headers, timeout (default 30s), sse_read_timeout (default 300s)

OAuth cloud providers

These types store OAuth scopes instead of secrets; you complete them with the Authorize step described above.

TypeDefault scopes
Googleuserinfo email/profile, Drive read-only
MicrosoftUser.Read, Files.Read.All, Sites.Read.All
Dropboxaccount info read, file metadata and content read
Boxroot_readwrite
Notionnone (provider-managed)

Other services

TypeConfig fields
Httpurl, method, headers, params, data — a generic HTTP endpoint definition
HttpApiKeyurl, api_key — a generic API-key-authenticated endpoint
Unstructuredurl, api_key (document parsing)
Lakeraapi_key (guardrails; API only — not in the UI Type dropdown)
Atlassianbase_url, email, api_token
GoogleCloudGoogle service-account JSON fields (project_id, private_key, client_email, …)

Connection status

The Connections table shows a STATUS badge for each row:

  • active — ready to use.
  • incomplete — an OAuth Connection that has not been authorized yet; open it and click Authorize.
  • expired — an OAuth Connection whose tokens are no longer valid; re-authorize it.

Next steps

On this page