Skip to content

Campaigns

Manage outreach campaigns in Kayse AI.

Create Campaign

POST/v1/campaigns

Request Body Fields

FieldRequiredTypeDescription
nametrueStringCampaign name
agent_idconditionalStringRequired unless all runs are messaging_only=true
case_list_idtrueIntegerID of case list
is_obofalseBooleanOn behalf of clients
calls_scheduled_externallyfalseBooleanExternal scheduling
never_endingfalseBooleanWhen true, runs won't auto-complete when the contact list is exhausted
concurrency_limitfalseInteger0 means unlimited
self_healing_disabledfalseBooleanDisable enrichment/self-healing
form_idfalseIntegerOptional linked form
use_company_hoursfalseBooleanUse campaign-level business hours instead of per-run calling times
business_hoursconditionalArrayRequired when use_company_hours=true. Time slots for calling hours
runstrueArrayCampaign runs (at least one)
report_schedulefalseObjectOptional scheduled report created atomically with campaign

business_hours[] fields

FieldRequiredTypeDescription
start_timetrueTime (HH:mm)Slot start time (must be within 08:00–21:00)
end_timetrueTime (HH:mm)Slot end time (must be within 08:00–21:00, after start_time)

Slots must not overlap and must fall within TCPA-compliant hours (8:00 AM – 9:00 PM).

runs[] fields

FieldRequiredTypeDescription
client_run_idfalseStringClient-side run identifier for mapping report scope
start_datetrueDate (YYYY-MM-DD)Run start date
end_datetrueDate (YYYY-MM-DD)Run end date
start_timeconditionalTime (HH:mm)Required for non-messaging-only runs
end_timeconditionalTime (HH:mm)Required for non-messaging-only runs
messaging_onlyfalseBooleanIf true, call scheduling fields are not allowed
selected_daysfalseArrayOptional selected run dates
messagesfalseArrayScheduled message entries

report_schedule fields

FieldRequiredTypeDescription
nametrueStringReport schedule name
run_client_idsfalseArray[String]Must match runs[].client_run_id; omit/empty for entire campaign
frequencytrueEnumdaily, weekly, monthly
weekdayconditionalIntegerRequired for weekly (0 Sunday ... 6 Saturday)
day_of_monthconditionalIntegerRequired for monthly (1-31)
timetrueTime (HH:mm)Delivery time
recipientstrueArray[String]Recipient emails
formatfalseEnumcsv
date_rangefalseEnumcumulative, today_so_far, previous_day, previous_week, previous_month
filtersfalseObjectOptional report filters
Request
bash
curl -X POST 'https://public-api.kayse.ai/v1/campaigns' \
-H 'X-API-KEY: your_api_key' \
-H 'Content-Type: application/json' \
-d '{
  "name": "Outreach Campaign",
  "agent_id": "abc_123",
  "case_list_id": 123,
  "is_obo": false,
  "calls_scheduled_externally": false,
  "runs": [
    {
      "client_run_id": "run-1",
      "start_date": "2026-02-20",
      "end_date": "2026-02-20",
      "start_time": "09:00",
      "end_time": "17:00",
      "messaging_only": false
    }
  ],
  "report_schedule": {
    "name": "Weekly Campaign Report",
    "run_client_ids": ["run-1"],
    "frequency": "weekly",
    "weekday": 2,
    "time": "09:30",
    "recipients": ["reports@firm.com"],
    "format": "csv",
    "date_range": "cumulative",
    "filters": {}
  }
}'
Response
json
{
  "id": 1
}

Campaign Settings

GET/v1/campaigns/settings

Returns campaign feature status, the company concurrency rate, and default business hours.

Response Fields

FieldTypeDescription
is_enabledBooleanWhether campaigns are enabled for this company
concurrency_rateIntegerOutbound call limit percentage (1–100)
business_hoursArrayDefault business hour time slots (may be null if none configured)

business_hours[] fields

FieldTypeDescription
start_timeTime (HH:mm)Slot start time
end_timeTime (HH:mm)Slot end time
Request
bash
curl -X GET 'https://public-api.kayse.ai/v1/campaigns/settings' \
-H 'X-API-KEY: your_api_key'
Response
json
{
  "is_enabled": true,
  "concurrency_rate": 70,
  "business_hours": [
    { "start_time": "09:00", "end_time": "12:00" },
    { "start_time": "13:00", "end_time": "17:00" }
  ]
}

List Campaigns

GET/v1/campaigns

Query Parameters

FieldRequiredTypeDescription
keyfalseStringSearch term for filtering
Request
bash
curl -X GET 'https://public-api.kayse.ai/v1/campaigns?key=outreach' \
-H 'X-API-KEY: your_api_key'
Response
json
[
  {
    "id": 1,
    "name": "Outreach Campaign",
    "agent_id": "abc_123",
    "case_list_id": 123,
    "origin": "public_api",
    "update_origin": null,
    "stats": {
      "total_calls": 132,
      "success_calls": 85,
      "success_calls_percentage": 70.8,
      "failed_calls": 35,
      "average_sentiment_score": 0.76,
      "conversion_rate": 42.1
    }
  }
]

Turn unreachable clients into paid cases.