Browse documentation

Outreach connections

Current release · Updated October 2, 2026

DryKraft outreach connections API: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.

GET/api/outreach/meta

Read connector readiness

Access: Workspace member · Success: 200

Reports configured Google/Outlook app credentials and callbacks; true is not proof of completed consent. QCall LLM needs no key.

No request body is required.

Response

FieldTypeRequiredDetails
googlebooleanNoApp configured
microsoftbooleanNoApp configured
llmobjectNo
redirectsobjectNo
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/outreach/meta' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
GET/api/outreach/connections

List private provider connections

Access: Workspace member · Success: 200

Only public connection metadata is returned.

No request body is required.

Response

Connection[].

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/outreach/connections' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/outreach/connections/parse

Inspect SMS cURL fields

Access: Owner or admin · Success: 200

Parses but never executes. Returns existing primitive JSON body paths; header values are not returned. Configuration check does not verify SMS credentials.

JSON request

FieldTypeRequiredDetails
curlstringYesLiteral cURL Max 50000 characters.

Response

FieldTypeRequiredDetails
hoststringNoProvider host
parametersstring[]No
recipientPathstringNoSuggested path
messagePathstringNoSuggested path
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/connections/parse' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "curl": "<Literal cURL>"
}'
POST/api/outreach/connections

Create provider connection

Access: Owner or admin · Success: 201

SMTP verifies mail/optional IMAP access, QCall reads assistants/dialers, WhatsApp verifies phone/WABA. SMS checks public destination/config only. No test message or call is sent. Shared sample blocked.

JSON request

Use ConnectionInput.

Response

Use Connection.

Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/connections' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Example SMTP mailbox",
  "provider": "smtp",
  "daily_limit": 100,
  "hourly_limit": 20,
  "secret": {
    "email": "sender@example.com",
    "host": "smtp.example.com",
    "port": 587,
    "user": "sender@example.com",
    "password": "<APP_PASSWORD>"
  }
}'
PUT/api/outreach/connections/{id}

Update limits or AI replies

Access: Owner or admin · Success: 200

WhatsApp AI needs verified connection and nonblank instructions. Disabling connection also disables AI. Instructions/inbound text are sent to llm.qcall.ai without API key when AI is enabled.

JSON request

FieldTypeRequiredDetails
namestringYesName Max 100 characters.
enabledbooleanYesEnabled
daily_limitintegerYesRolling 24h Min 1. Max 10000.
hourly_limitintegerYesRolling 1h Min 1. Max 2000.
aiEnabledbooleanNoWhatsApp only
aiInstructionsstringNoWhatsApp business instructions Max 8000 characters.

Response

Use Connection.

Request shape (illustrative)
curl --request PUT \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "<Name>",
  "enabled": false,
  "daily_limit": 1,
  "hourly_limit": 1
}'
POST/api/outreach/connections/{id}/reconnect

Replace provider credentials

Access: Owner or admin · Success: 200

secret uses the same provider schema as connection creation. Google/Outlook must reconnect through native OAuth. WhatsApp preserves verify token and disables AI.

JSON request

FieldTypeRequiredDetails
secretSMTPSecret or SMSSecret or VoiceSecret or WhatsAppSecretYes

Response

Use Connection.

Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/reconnect' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "secret": {
    "email": "person@example.com",
    "host": "<Public SMTP hostname>",
    "port": 465,
    "user": "<Username>",
    "password": "<Password/app password>"
  }
}'
GET/api/outreach/connections/{id}/options

Read provider choices

Access: Owner, admin or member · Success: 200

QCall assistants/dialers, or approved WhatsApp templates. Disabled/unverified returns empty choices.

No request body is required.

Response

FieldTypeRequiredDetails
assistantsobject[]No
dialersobject[]No
templatesobject[]No
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/options' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
GET/api/outreach/connections/{id}/webhook

Read Meta webhook setup

Access: Owner or admin · Success: 200

WhatsApp only. Keep verifyToken private; use it in Meta configuration.

No request body is required.

Response

FieldTypeRequiredDetails
urluriNo
verifyTokenstringNoPrivate token
Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/webhook' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/outreach/connections/{id}/sync

Sync mailbox replies

Access: Owner or admin · Success: 200

IMAP/Google/Outlook matching replies stop sequences. No outgoing mail is sent. Returns {checked}; unsupported provider is 400.

No request body is required.

Response

FieldTypeRequiredDetails
checkedintegerNoHeaders checked
repliesintegerNoReplies matched, may be absent when sync skipped
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/sync' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/outreach/connections/{id}/subscribe

Subscribe WABA to app

Access: Owner or admin · Success: 200

Calls Meta subscribed_apps for WhatsApp connection. Meta must confirm success; configure callback separately.

No request body is required.

Response

FieldTypeRequiredDetails
subscribedtrueNo
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/subscribe' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/outreach/ai/preview

Preview unsent AI reply

Access: Owner or admin · Success: 200

Sends instructions and synthetic/test message to keyless llm.qcall.ai. Returns generated text; never sends to WhatsApp.

JSON request

FieldTypeRequiredDetails
instructionsstringYesBusiness instructions Max 8000 characters.
messagestringYesTest incoming message Max 4000 characters.

Response

FieldTypeRequiredDetails
replystringNoGenerated plain text
sentfalseNo
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/ai/preview' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '{
  "instructions": "<Business instructions>",
  "message": "<Test incoming message>"
}'
POST/api/outreach/oauth/{provider}

Start native mailbox consent

Access: Owner or admin · Success: 200

provider: google or microsoft. Opens a 10-minute PKCE state bound to current account/session/workspace. App credentials and registered redirect required.

No request body is required.

Response

FieldTypeRequiredDetails
urluriNo
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/outreach/oauth/google' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'