Famulor Campaigns API

Outbound-Kampagnen verwalten und steuern.

GitHub OpenAPI

Operations 5

POST /user/campaign Create campaign #
DELETE /user/campaign/{id} Delete campaign #
GET /user/campaign/{id} Get campaign #
GET /user/campaigns List Campaigns #
POST /user/campaigns/update-status Update campaign status #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/famulor-io:famulor-io-campaigns-api"
All apis
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.

Get an API 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 Specification

famulor-io-campaigns-api-openapi.yml Raw ↑
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