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.
/api/outreach/metaRead 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
| Field | Type | Required | Details |
|---|---|---|---|
google | boolean | No | App configured |
microsoft | boolean | No | App configured |
llm | object | No | |
redirects | object | No |
curl --request GET \
--url 'https://app.drykraft.com/api/outreach/meta' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/connectionsList private provider connections
Access: Workspace member · Success: 200
Only public connection metadata is returned.
No request body is required.
Response
Connection[].
curl --request GET \
--url 'https://app.drykraft.com/api/outreach/connections' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/connections/parseInspect 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
| Field | Type | Required | Details |
|---|---|---|---|
curl | string | Yes | Literal cURL Max 50000 characters. |
Response
| Field | Type | Required | Details |
|---|---|---|---|
host | string | No | Provider host |
parameters | string[] | No | |
recipientPath | string | No | Suggested path |
messagePath | string | No | Suggested path |
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>"
}'/api/outreach/connectionsCreate 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.
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>"
}
}'/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
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Name Max 100 characters. |
enabled | boolean | Yes | Enabled |
daily_limit | integer | Yes | Rolling 24h Min 1. Max 10000. |
hourly_limit | integer | Yes | Rolling 1h Min 1. Max 2000. |
aiEnabled | boolean | No | WhatsApp only |
aiInstructions | string | No | WhatsApp business instructions Max 8000 characters. |
Response
Use Connection.
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
}'/api/outreach/connections/{id}/reconnectReplace 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
| Field | Type | Required | Details |
|---|---|---|---|
secret | SMTPSecret or SMSSecret or VoiceSecret or WhatsAppSecret | Yes |
Response
Use Connection.
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>"
}
}'/api/outreach/connections/{id}/optionsRead 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
| Field | Type | Required | Details |
|---|---|---|---|
assistants | object[] | No | |
dialers | object[] | No | |
templates | object[] | No |
curl --request GET \
--url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/options' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/connections/{id}/webhookRead 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
| Field | Type | Required | Details |
|---|---|---|---|
url | uri | No | |
verifyToken | string | No | Private token |
curl --request GET \
--url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/webhook' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/connections/{id}/syncSync 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
| Field | Type | Required | Details |
|---|---|---|---|
checked | integer | No | Headers checked |
replies | integer | No | Replies matched, may be absent when sync skipped |
curl --request POST \
--url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/sync' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/connections/{id}/subscribeSubscribe 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
| Field | Type | Required | Details |
|---|---|---|---|
subscribed | true | No |
curl --request POST \
--url 'https://app.drykraft.com/api/outreach/connections/00000000-0000-4000-8000-000000000001/subscribe' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/outreach/ai/previewPreview 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
| Field | Type | Required | Details |
|---|---|---|---|
instructions | string | Yes | Business instructions Max 8000 characters. |
message | string | Yes | Test incoming message Max 4000 characters. |
Response
| Field | Type | Required | Details |
|---|---|---|---|
reply | string | No | Generated plain text |
sent | false | No |
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>"
}'/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
| Field | Type | Required | Details |
|---|---|---|---|
url | uri | No |
curl --request POST \
--url 'https://app.drykraft.com/api/outreach/oauth/google' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'