Famulor Campaigns API
Outbound-Kampagnen verwalten und steuern.
Outbound-Kampagnen verwalten und steuern.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/famulor-io:famulor-io-campaigns-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Famulor Campaigns API
summary: REST API für AI-Assistenten, Anrufe, Konversationen, Leads und omnichannel Kundenkommunikation.
description: 'Die Famulor Produkt-API unter `https://app.famulor.de/api`. Damit steuerst du
AI-Assistenten, startest und liest Anrufe, verwaltest Leads und Kampagnen,
versendest SMS und WhatsApp-Nachrichten, pflegst Wissensdatenbanken und
automatisierst Prozesse.
## Authentifizierung
Alle Endpunkte erwarten einen API-Key als Bearer-Token:
```
Authorization: Bearer YOUR_API_KEY
```
Den Key erstellst du in deinem Account unter im
Bereich API-Keys. Der Key wird nur einmal angezeigt.
## Webhooks
Famulor sendet Ereignisse (Post-Call, Conversation Ended, Read Receipts) an
deine URL. Die Payloads stehen im Abschnitt `webhooks` dieser Spec.
Diese Datei wird aus der offiziellen Dokumentation generiert:'
version: 1.0.0
contact:
name: Famulor Support
email: sales@famulor.io
url: https://www.famulor.io/support
license:
name: Proprietary
url: https://www.famulor.io/terms
termsOfService: https://www.famulor.io/terms
servers:
- url: https://app.famulor.de/api
description: Production
security:
- BearerAuth: []
tags:
- name: Campaigns
description: Outbound-Kampagnen verwalten und steuern.
paths:
/user/campaign:
post:
tags:
- Campaigns
summary: Create campaign
operationId: createCampaign
description: 'Create a draft call, WhatsApp, or SMS campaign in Famulor via API. Add leads, then start with Update campaign status.
Docs'
externalDocs:
description: Create campaign
url: https://docs.famulor.io/api-v1/campaigns/create
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Campaign name. Maximum 255 characters.
channel:
type: string
description: '`call`, `whatsapp`, or `sms`.'
default: call
timezone:
type: string
description: IANA timezone for the send/call window (e.g. `America/New_York`). Defaults to the assistant timezone for call campaigns, otherwise your account timezone.
schedule_windows:
type: array
description: 'Preferred schedule: one or more daily windows as objects with `start` and `end` in `HH:MM`. Overnight windows are supported when `end` is earlier than `start` (e.g. `16:00` → `02:00`).'
items: {}
allowed_hours_start_time:
type: string
description: Legacy single-window start (`HH:MM`). Used if `schedule_windows` is omitted.
default: 00:00
allowed_hours_end_time:
type: string
description: Legacy single-window end (`HH:MM`). Overnight when `end` < `start`.
default: '23:59'
scheduled_start_at:
type: string
description: Optional ISO datetime. When set, the campaign can be scheduled to auto-start at that time.
allowed_days:
type: array
description: 'Weekdays: `monday` … `sunday`.'
items: {}
max_retries:
type: integer
description: 'Max retry attempts per lead. Range: 1–5.'
default: 3
retry_interval:
type: integer
description: 'Minutes between retries. Range: 10–4320.'
default: 60
mark_complete_when_no_leads:
type: boolean
description: Automatically mark the campaign complete when no remaining work is left.
default: true
assistant_id:
type: integer
description: Required for `channel=call`. Must be an OUTBOUND assistant you own.
max_calls_in_parallel:
type: integer
description: Concurrent calls (plan-bounded, max 10).
default: 3
phone_number_ids:
type: array
description: Outbound from-number IDs available to your account.
items: {}
retry_on_voicemail:
type: boolean
description: Retry when a call hits voicemail.
retry_on_goal_incomplete:
type: boolean
description: Keep retrying until a boolean post-call goal variable is true.
goal_completion_variable:
type: string
description: Boolean post-call schema variable name used with `retry_on_goal_incomplete`.
fallback_channel:
type: string
description: 'Optional call→text follow-up after max call retries: `whatsapp` or `sms`.'
fallback_whatsapp_sender_id:
type: integer
description: Required when `fallback_channel=whatsapp`.
fallback_whatsapp_template_id:
type: integer
description: Required when `fallback_channel=whatsapp`. Must be an approved template on that sender.
fallback_sms_from_phone_number_id:
type: integer
description: Required when `fallback_channel=sms`.
fallback_sms_body:
type: string
description: Required when `fallback_channel=sms`. Supports `{{variable}}` placeholders.
fallback_variable_mapping:
type: object
description: Maps WhatsApp template placeholders (e.g. `"1"`) to lead variable keys for the fallback send.
additionalProperties: true
whatsapp_sender_id:
type: integer
description: Required for `channel=whatsapp`. Sender you own.
whatsapp_template_id:
type: integer
description: Required for `channel=whatsapp`. Approved template on that sender.
text_variable_mapping:
type: object
description: Maps template placeholders (e.g. `"1"`) to lead variable keys.
additionalProperties: true
messages_per_minute:
type: integer
description: Per-campaign send rate (1–10). WhatsApp campaigns also share a user-wide pool of 10 in-flight sends across all your active WhatsApp campaigns.
sms_from_phone_number_id:
type: integer
description: Required for `channel=sms`. Must be SMS-capable and available to you.
sms_body:
type: string
description: Required for `channel=sms`. Max 1600 characters. Supports `{{variable}}` placeholders.
required:
- name
responses:
'201':
description: Created
content:
application/json:
example:
message: Campaign created successfully
data:
id: 1
name: Product Demo Campaign
channel: call
status: draft
assistant_id: 42
timezone: Europe/Berlin
max_calls_in_parallel: 3
messages_per_minute: null
schedule_windows:
- start: 09:00
end: '17:00'
scheduled_start_at: null
allowed_hours_start_time: 09:00
allowed_hours_end_time: '17:00'
allowed_days:
- monday
- tuesday
- wednesday
- thursday
- friday
max_retries: 3
retry_interval: 60
retry_on_voicemail: false
retry_on_goal_incomplete: false
goal_completion_variable: null
mark_complete_when_no_leads: true
phone_number_ids:
- 101
whatsapp_sender_id: null
whatsapp_template_id: null
sms_from_phone_number_id: null
sms_body: null
text_variable_mapping: null
fallback_channel: null
fallback_whatsapp_sender_id: null
fallback_whatsapp_template_id: null
fallback_sms_from_phone_number_id: null
fallback_sms_body: null
fallback_variable_mapping: null
created_at: '2026-02-23T10:00:00.000000Z'
updated_at: '2026-02-23T10:00:00.000000Z'
schema:
type: object
properties:
message:
type: string
description: Success message
data:
type: object
description: Created campaign (same shape as [Get campaign](/en/api-reference/campaigns/get)), including channel, schedule, text config, and fallback fields.
additionalProperties: true
422 Unprocessable Entity:
type: string
description: Plan limit, invalid assistant/sender/template, disabled channel, or validation errors.
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'422':
description: Unprocessable Entity
content:
application/json:
example:
message: The given data was invalid.
errors:
name:
- The name field is required.
assistant_id:
- The assistant id field is required.
/user/campaign/{id}:
delete:
tags:
- Campaigns
summary: Delete campaign
operationId: deleteCampaign
description: 'Delete an outbound calling campaign via API. Running campaigns are stopped automatically before removal; leads and phone number assignments are released.
Docs'
externalDocs:
description: Delete campaign
url: https://docs.famulor.io/api-v1/campaigns/delete
parameters:
- name: id
in: path
required: true
description: The unique identifier of the campaign to delete
schema:
type: integer
responses:
'200':
description: Success Response
content:
application/json:
example:
message: Campaign deleted successfully
schema:
type: object
properties:
message:
type: string
description: Confirmation message indicating the campaign was deleted successfully
404 Not Found:
type: string
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Not Found
content:
application/json:
example:
message: Campaign not found
'422':
$ref: '#/components/responses/ValidationError'
get:
tags:
- Campaigns
summary: Get campaign
operationId: getCampaign
description: 'Get a single Famulor campaign by ID via API. Returns channel, schedule windows, WhatsApp/SMS config, and optional call→text fallback fields.
Docs'
externalDocs:
description: Get campaign
url: https://docs.famulor.io/api-v1/campaigns/get
parameters:
- name: id
in: path
required: true
description: Campaign ID
schema:
type: integer
responses:
'200':
description: Response
content:
application/json:
example:
data:
id: 1
name: New Customer Acquisition Q1 2026
channel: call
status: draft
assistant_id: 42
timezone: Europe/Berlin
max_calls_in_parallel: 3
messages_per_minute: null
schedule_windows:
- start: 09:00
end: '18:00'
scheduled_start_at: null
allowed_hours_start_time: 09:00
allowed_hours_end_time: '18:00'
allowed_days:
- monday
- tuesday
- wednesday
- thursday
- friday
max_retries: 3
retry_interval: 60
retry_on_voicemail: true
retry_on_goal_incomplete: false
goal_completion_variable: null
mark_complete_when_no_leads: true
phone_number_ids:
- 101
whatsapp_sender_id: null
whatsapp_template_id: null
sms_from_phone_number_id: null
sms_body: null
text_variable_mapping: null
fallback_channel: null
fallback_whatsapp_sender_id: null
fallback_whatsapp_template_id: null
fallback_sms_from_phone_number_id: null
fallback_sms_body: null
fallback_variable_mapping: null
created_at: '2026-01-10T08:00:00Z'
updated_at: '2026-01-10T08:00:00Z'
schema:
type: object
properties:
data:
type: object
description: Full campaign object including channel, `schedule_windows`, WhatsApp/SMS config, and fallback fields.
additionalProperties: true
404 Not Found:
type: string
description: Campaign does not exist or does not belong to you.
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Not Found
content:
application/json:
example:
message: Campaign not found
'422':
$ref: '#/components/responses/ValidationError'
/user/campaigns:
get:
tags:
- Campaigns
summary: List Campaigns
operationId: listCampaigns
description: 'List all campaigns (call, WhatsApp, SMS) in your Famulor account via API. View channel, schedule windows, WhatsApp/SMS config, and optional call→text fallback settings.
Docs'
externalDocs:
description: List Campaigns
url: https://docs.famulor.io/api-v1/campaigns/list
responses:
'200':
description: Response
content:
application/json:
example:
- id: 1
name: New Customer Acquisition Q1 2026
channel: call
status: in-progress
assistant_id: 42
timezone: Europe/Berlin
max_calls_in_parallel: 5
messages_per_minute: null
schedule_windows:
- start: 09:00
end: '18:00'
scheduled_start_at: null
allowed_hours_start_time: 09:00
allowed_hours_end_time: '18:00'
allowed_days:
- monday
- tuesday
- wednesday
- thursday
- friday
max_retries: 3
retry_interval: 60
retry_on_voicemail: true
retry_on_goal_incomplete: false
goal_completion_variable: null
mark_complete_when_no_leads: true
phone_number_ids:
- 101
- 102
whatsapp_sender_id: null
whatsapp_template_id: null
sms_from_phone_number_id: null
sms_body: null
text_variable_mapping: null
fallback_channel: whatsapp
fallback_whatsapp_sender_id: 7
fallback_whatsapp_template_id: 15
fallback_sms_from_phone_number_id: null
fallback_sms_body: null
fallback_variable_mapping:
'1': first_name
created_at: '2026-01-10T08:00:00Z'
updated_at: '2026-01-15T14:30:00Z'
schema:
type: array
items:
type: object
properties:
array:
type: array
description: Array of all campaigns
items:
type: object
properties:
id:
type: integer
description: Campaign ID
name:
type: string
description: Campaign name
channel:
type: string
description: '`call`, `whatsapp`, or `sms`'
status:
type: string
description: e.g. `draft`, `scheduled`, `in-progress`, `paused`, `completed`
assistant_id:
type: integer
description: OUTBOUND assistant ID (call campaigns). `null` for text campaigns.
timezone:
type: string
description: IANA timezone for the send/call window
max_calls_in_parallel:
type: integer
description: Concurrent call slots (call campaigns)
messages_per_minute:
type: integer
description: Per-campaign text send rate (WhatsApp/SMS). WhatsApp also uses a user-wide in-flight pool of 10.
schedule_windows:
type: array
description: 'Daily windows `[{ "start": "HH:MM", "end": "HH:MM" }]`. Overnight allowed when `end` < `start`.'
items: {}
scheduled_start_at:
type: string
description: ISO datetime for auto-start, or `null`
allowed_hours_start_time:
type: string
description: Legacy window start (kept in sync with the first schedule window)
allowed_hours_end_time:
type: string
description: Legacy window end
allowed_days:
type: array
description: Weekdays when sending/calling is allowed
items: {}
max_retries:
type: integer
description: Max retries per lead
retry_interval:
type: integer
description: Minutes between retries
retry_on_voicemail:
type: boolean
description: 'Call campaigns: retry on voicemail'
retry_on_goal_incomplete:
type: boolean
description: 'Call campaigns: retry until goal variable is true'
goal_completion_variable:
type: string
description: Boolean post-call variable name, or `null`
mark_complete_when_no_leads:
type: boolean
description: Auto-complete when no work remains
phone_number_ids:
type: array
description: Outbound from-number IDs (call campaigns)
items: {}
whatsapp_sender_id:
type: integer
description: WhatsApp sender ID, or `null`
whatsapp_template_id:
type: integer
description: WhatsApp template ID, or `null`
sms_from_phone_number_id:
type: integer
description: SMS from-number ID, or `null`
sms_body:
type: string
description: SMS body, or `null`
text_variable_mapping:
type: object
description: WhatsApp template placeholder → lead variable map, or `null`
additionalProperties: true
fallback_channel:
type: string
description: Call→text fallback channel (`whatsapp` / `sms`), or `null`
fallback_whatsapp_sender_id:
type: integer
description: Fallback WhatsApp sender, or `null`
fallback_whatsapp_template_id:
type: integer
description: Fallback WhatsApp template, or `null`
fallback_sms_from_phone_number_id:
type: integer
description: Fallback SMS from-number, or `null`
fallback_sms_body:
type: string
description: Fallback SMS body, or `null`
fallback_variable_mapping:
type: object
description: Fallback WhatsApp variable map, or `null`
additionalProperties: true
created_at:
type: string
description: Created timestamp in your account timezone
updated_at:
type: string
description: Updated timestamp in your account timezone
additionalProperties: true
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/user/campaigns/update-status:
post:
tags:
- Campaigns
summary: Update campaign status
operationId: updateCampaignStatus
description: 'Start or stop a call, WhatsApp, or SMS campaign via API. Starting validates channel config, schedule, and balance.
Docs'
externalDocs:
description: Update campaign status
url: https://docs.famulor.io/api-v1/campaigns/update-status
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
campaign_id:
type: integer
description: The ID of the campaign to update
action:
type: string
description: '`start` or `stop`'
required:
- campaign_id
- action
responses:
'200':
description: OK
content:
application/json:
examples:
campaign-started:
summary: Campaign started
value:
message: Campaign started successfully.
success: true
data:
campaign_id: 2324
status: in-progress
channel: call
campaign-stopped:
summary: Campaign stopped
value:
message: Campaign stopped successfully.
success: true
data:
campaign_id: 2324
status: paused
channel: whatsapp
schema:
type: object
properties:
message:
type: string
description: Human-readable outcome
default: Campaign started successfully.
success:
type: boolean
description: Whether the operation succeeded
default: true
data:
type: object
properties:
campaign_id:
type: integer
description: Campaign ID
status:
type: string
description: New status (e.g. `in-progress`, `paused`)
default: in-progress
channel:
type: string
description: '`call`, `whatsapp`, or `sms`'
additionalProperties: true
additionalProperties: true
'400':
description: Bad Request
content:
application/json:
examples:
invalid-action:
summary: Invalid action
value:
message: Invalid action. Must be either 'start' or 'stop'.
success: false
insufficient-balance:
summary: Insufficient balance
value:
message: Insufficient balance to start the campaign. Please top up your account.
success: false
data:
campaign_id: 2324
status: draft
channel: call
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Campaign not found
content:
application/json:
example:
message: Campaign not found.
success: false
'422':
$ref: '#/components/responses/ValidationError'
components:
responses:
ValidationError:
description: Die Anfrage ist inhaltlich ungültig.
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
example:
message: The given data was invalid.
errors:
phone_number:
- The phone number field is required.
Unauthorized:
description: Fehlender oder ungültiger API-Key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
message: Unauthenticated.
schemas:
ValidationError:
type: object
properties:
message:
type: string
errors:
type: object
description: Feldname → Liste der Fehlermeldungen.
additionalProperties:
type: array
items:
type: string
Error:
type: object
properties:
message:
type: string
description: Menschenlesbare Fehlermeldung.
error:
type: string
description: Fehlerkennung, sofern gesetzt.
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'API-Key als Bearer-Token: `Authorization: Bearer YOUR_API_KEY`. Key erstellen unter https://app.famulor.de.'
externalDocs:
description: Famulor API-Dokumentation
url: https://docs.famulor.io/api-v1/introduction