Famulor Whats App API

WhatsApp-Sender, Templates und Nachrichtenversand.

GitHub OpenAPI

Operations 5

POST /user/whatsapp/send Send WhatsApp Template Message #
POST /user/whatsapp/send-freeform Send WhatsApp Freeform Message #
GET /user/whatsapp/senders Get WhatsApp Senders #
GET /user/whatsapp/senders/{senderId}/templates Get WhatsApp Templates #
GET /user/whatsapp/session-status Get WhatsApp Session 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-whats-app-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-whats-app-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Famulor WhatsApp 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: Whats App
  description: WhatsApp-Sender, Templates und Nachrichtenversand.
paths:
  /user/whatsapp/send:
    post:
      tags:
      - Whats App
      summary: Send WhatsApp Template Message
      operationId: sendWhatsAppTemplateMessage
      description: 'Send a WhatsApp message using an approved template via Famulor


        Docs'
      externalDocs:
        description: Send WhatsApp Template Message
        url: https://docs.famulor.io/api-v1/whatsapp/send-template
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sender_id:
                  type: integer
                  description: The ID of the WhatsApp sender to send from (obtained from the [Get Senders](/en/api-reference/whatsapp/get-senders) endpoint)
                template_id:
                  type: integer
                  description: The ID of the message template to use (obtained from the [Get Templates](/en/api-reference/whatsapp/get-templates) endpoint)
                recipient_phone:
                  type: string
                  description: The recipient's phone number in international format (e.g., `+1234567890`)
                recipient_name:
                  type: string
                  description: The recipient's name, max 255 characters (used for conversation tracking and CRM purposes)
                variables:
                  type: object
                  description: 'Key-value pairs for template variables. Keys should match the variable names from the template. If the template has variables `{{1}}`, `{{2}}`, etc., provide them as `{"1": "value1", "2": "value2"}` or using the named keys from the template''s `variables` array.'
                  properties:
                    '1':
                      type: string
                      description: Value for the first template variable
                    '2':
                      type: string
                      description: Value for the second template variable
              required:
              - sender_id
              - template_id
              - recipient_phone
      responses:
        '200':
          description: Success
          content:
            application/json:
              example:
                success: true
                conversation_id: 1234
                message_id: 567
                whatsapp_message_id: 890
                message_sid: SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                status: queued
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the message was sent successfully
                  conversation_id:
                    type: integer
                    description: The ID of the conversation (new or existing) associated with this message
                  message_id:
                    type: integer
                    description: The ID of the conversation message record
                  whatsapp_message_id:
                    type: integer
                    description: The ID of the WhatsApp message record
                  message_sid:
                    type: string
                    description: The Twilio message SID for tracking delivery
                  status:
                    type: string
                    description: The initial message delivery status (e.g., `queued`, `sent`)
                  402 Insufficient Balance:
                    type: string
                  404 Not Found:
                    type: string
                  422 Unprocessable Entity:
                    type: string
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: Insufficient Balance
          content:
            application/json:
              example:
                success: false
                error: Insufficient balance. Please top up your account.
                error_code: INSUFFICIENT_BALANCE
        '404':
          description: Not Found
          content:
            application/json:
              examples:
                sender-not-found:
                  summary: Sender Not Found
                  value:
                    success: false
                    error: Sender not found or does not belong to you
                    error_code: SENDER_NOT_FOUND
                template-not-found:
                  summary: Template Not Found
                  value:
                    success: false
                    error: Template not found or does not belong to this sender
                    error_code: TEMPLATE_NOT_FOUND
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              examples:
                template-not-approved:
                  summary: Template Not Approved
                  value:
                    success: false
                    error: 'Template is not approved. Current status: pending'
                    error_code: TEMPLATE_NOT_APPROVED
                invalid-phone:
                  summary: Invalid Phone
                  value:
                    success: false
                    error: Invalid phone number format. Use E.164 format (e.g., +14155551234).
                    error_code: INVALID_PHONE
                sender-offline:
                  summary: Sender Offline
                  value:
                    success: false
                    error: 'Sender is not online. Current status: Offline'
                    error_code: SENDER_OFFLINE
  /user/whatsapp/send-freeform:
    post:
      tags:
      - Whats App
      summary: Send WhatsApp Freeform Message
      operationId: sendWhatsAppFreeformMessage
      description: 'Send a free-text WhatsApp message within an active 24-hour session via Famulor


        Docs'
      externalDocs:
        description: Send WhatsApp Freeform Message
        url: https://docs.famulor.io/api-v1/whatsapp/send-freeform
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sender_id:
                  type: integer
                  description: The ID of the WhatsApp sender to send from (obtained from the [Get Senders](/en/api-reference/whatsapp/get-senders) endpoint)
                recipient_phone:
                  type: string
                  description: The recipient's phone number in international format (e.g., `+1234567890`)
                message:
                  type: string
                  description: The message content to send (max 4096 characters)
              required:
              - sender_id
              - recipient_phone
              - message
      responses:
        '200':
          description: Success
          content:
            application/json:
              example:
                success: true
                conversation_id: 1234
                message_id: 567
                whatsapp_message_id: 890
                message_sid: SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                session_status:
                  is_open: true
                  can_send_freeform: true
                  requires_template: false
                  message: Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.
                  minutes_remaining: 1425
                  expires_at: '2026-02-25T10:30:00+00:00'
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the message was sent successfully
                  conversation_id:
                    type: integer
                    description: The ID of the conversation associated with this message
                  message_id:
                    type: integer
                    description: The ID of the conversation message record
                  whatsapp_message_id:
                    type: integer
                    description: The ID of the WhatsApp message record
                  message_sid:
                    type: string
                    description: The Twilio message SID for tracking delivery
                  session_status:
                    type: object
                    description: Updated session status after sending the message
                    properties:
                      is_open:
                        type: boolean
                        description: Whether the 24-hour messaging window is currently open
                      can_send_freeform:
                        type: boolean
                        description: Whether freeform messages can be sent right now
                      requires_template:
                        type: boolean
                        description: Whether a template message is required
                      message:
                        type: string
                        description: Human-readable description of the session state
                      minutes_remaining:
                        type: integer
                        description: Minutes remaining in the 24-hour window
                      expires_at:
                        type: string
                        description: ISO 8601 timestamp when the session expires
                    additionalProperties: true
                  402 Insufficient Balance:
                    type: string
                  403 Session Expired:
                    type: string
                  404 Not Found:
                    type: string
                  503 Sender Offline:
                    type: string
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: Insufficient Balance
          content:
            application/json:
              example:
                success: false
                error: Insufficient balance. Please top up your account.
                error_code: INSUFFICIENT_BALANCE
        '403':
          description: Session Expired
          content:
            application/json:
              example:
                success: false
                error: The 24-hour messaging window is closed. Customer must reply first, or use a template message.
                error_code: SESSION_EXPIRED
                session_status:
                  is_open: false
                  can_send_freeform: false
                  requires_template: true
                  message: Session expired. Send a template or wait for customer to reply.
                  expired_at: '2026-02-23T10:30:00+00:00'
        '404':
          description: Sender Not Found
          content:
            application/json:
              example:
                success: false
                error: Sender not found or does not belong to you
                error_code: SENDER_NOT_FOUND
        '422':
          description: Invalid Phone
          content:
            application/json:
              example:
                success: false
                error: Invalid phone number format. Use E.164 format (e.g., +14155551234).
                error_code: INVALID_PHONE
        '503':
          description: Sender Offline
          content:
            application/json:
              example:
                success: false
                error: 'Sender is not online. Current status: Offline'
                error_code: SENDER_OFFLINE
  /user/whatsapp/senders:
    get:
      tags:
      - Whats App
      summary: Get WhatsApp Senders
      operationId: getWhatsAppSenders
      description: 'List WhatsApp Business senders configured in your Famulor account


        Docs'
      externalDocs:
        description: Get WhatsApp Senders
        url: https://docs.famulor.io/api-v1/whatsapp/get-senders
      parameters:
      - name: status
        in: query
        required: false
        description: 'Filter senders by status. Default: `online`. Use `all` to return all senders regardless of status.'
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              examples:
                response:
                  summary: Response
                  value:
                    data:
                    - id: 12
                      phone_number: '+14155551234'
                      display_name: Acme Corp Support
                      status: online
                      quality_rating: GREEN
                      messaging_limit: 10000
                      messaging_limit_formatted: 10,000 / 24hr
                    - id: 15
                      phone_number: '+442071234567'
                      display_name: Acme Corp Sales
                      status: online
                      quality_rating: GREEN
                      messaging_limit: null
                      messaging_limit_formatted: Unlimited
                empty-response:
                  summary: Empty Response
                  value:
                    data: []
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: The unique identifier of the WhatsApp sender. Use this ID when sending messages.
                        phone_number:
                          type: string
                          description: The sender's phone number in E.164 format (e.g., `+14155551234`)
                        display_name:
                          type: string
                          description: The WhatsApp Business display name (business name shown to recipients)
                        status:
                          type: string
                          description: 'The sender''s current status: `online` or `offline`'
                        quality_rating:
                          type: string
                          description: 'Meta''s quality rating for this sender: `GREEN`, `YELLOW`, or `RED`'
                        messaging_limit:
                          type:
                          - integer
                          - 'null'
                          description: The current messaging limit (number of unique recipients per 24 hours). `null` means unlimited.
                        messaging_limit_formatted:
                          type: string
                          description: Human-readable messaging limit (e.g., `1,000 / 24hr`, `10,000 / 24hr`, or `Unlimited`)
                      additionalProperties: true
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /user/whatsapp/senders/{senderId}/templates:
    get:
      tags:
      - Whats App
      summary: Get WhatsApp Templates
      operationId: getWhatsAppTemplates
      description: 'List WhatsApp message templates for a specific Famulor sender


        Docs'
      externalDocs:
        description: Get WhatsApp Templates
        url: https://docs.famulor.io/api-v1/whatsapp/get-templates
      parameters:
      - name: senderId
        in: path
        required: true
        description: The ID of the WhatsApp sender (obtained from the [Get Senders](/en/api-reference/whatsapp/get-senders) endpoint)
        schema:
          type: integer
      - name: status
        in: query
        required: false
        description: 'Filter templates by approval status. Default: `approved`. Use `all` to return all templates regardless of status.'
        schema:
          type: string
      responses:
        '200':
          description: Response
          content:
            application/json:
              example:
                data:
                - id: 45
                  name: appointment_reminder
                  language: en
                  category: utility
                  status: approved
                  body_text: Hi {{1}}, this is a reminder for your appointment on {{2}} at {{3}}. Reply YES to confirm or NO to reschedule.
                  variables:
                  - customer_name
                  - date
                  - time
                  has_variables: true
                - id: 46
                  name: welcome_message
                  language: en
                  category: marketing
                  status: approved
                  body_text: Welcome to Acme Corp! We're excited to have you. How can we help you today?
                  variables: []
                  has_variables: false
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: The unique identifier of the template. Use this when sending template messages.
                        name:
                          type: string
                          description: The template name as registered with Meta (e.g., `order_confirmation`, `appointment_reminder`)
                        language:
                          type: string
                          description: The template language code (e.g., `en`, `es`, `pt_BR`)
                        category:
                          type: string
                          description: 'The template category: `marketing`, `utility`, or `authentication`'
                        status:
                          type: string
                          description: 'The approval status: `approved`, `pending`, or `rejected`'
                        body_text:
                          type: string
                          description: The template body text, with variable placeholders shown as `{{1}}`, `{{2}}`, etc.
                        variables:
                          type: array
                          description: List of variable names defined for the template. Empty array if the template has no variables.
                          items: {}
                        has_variables:
                          type: boolean
                          description: Whether this template requires variables to be provided when sending
                      additionalProperties: true
                  404 Not Found:
                    type: string
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Sender Not Found
          content:
            application/json:
              example:
                success: false
                error: Sender not found
                error_code: SENDER_NOT_FOUND
        '422':
          $ref: '#/components/responses/ValidationError'
  /user/whatsapp/session-status:
    get:
      tags:
      - Whats App
      summary: Get WhatsApp Session Status
      operationId: getWhatsAppSessionStatus
      description: 'Check the 24-hour WhatsApp messaging window status for a Famulor conversation


        Docs'
      externalDocs:
        description: Get WhatsApp Session Status
        url: https://docs.famulor.io/api-v1/whatsapp/session-status
      parameters:
      - name: sender_id
        in: query
        required: true
        description: The ID of the WhatsApp sender (obtained from the [Get Senders](/en/api-reference/whatsapp/get-senders) endpoint)
        schema:
          type: integer
      - name: recipient_phone
        in: query
        required: true
        description: The recipient's phone number in international format (e.g., `+1234567890`)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              examples:
                active-session:
                  summary: Active Session
                  value:
                    success: true
                    has_conversation: true
                    conversation_id: 1234
                    customer_name: John Doe
                    last_customer_message_at: '2026-02-24T10:30:00+00:00'
                    session_status:
                      is_open: true
                      can_send_freeform: true
                      requires_template: false
                      message: Session open (23 hr 45 min remaining). Unlimited free-form messages allowed.
                      minutes_remaining: 1425
                      expires_at: '2026-02-25T10:30:00+00:00'
                expired-session:
                  summary: Expired Session
                  value:
                    success: true
                    has_conversation: true
                    conversation_id: 1234
                    customer_name: John Doe
                    last_customer_message_at: '2026-02-22T14:00:00+00:00'
                    session_status:
                      is_open: false
                      can_send_freeform: false
                      requires_template: true
                      message: Session expired. Send a template or wait for customer to reply.
                      expired_at: '2026-02-23T14:00:00+00:00'
                no-conversation:
                  summary: No Conversation
                  value:
                    success: true
                    has_conversation: false
                    session_status:
                      is_open: false
                      can_send_freeform: false
                      requires_template: true
                      message: No conversation exists with this recipient. Send a template message first.
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the request was successful
                  has_conversation:
                    type: boolean
                    description: Whether a conversation exists with this recipient
                  conversation_id:
                    type: integer
                    description: The conversation ID (only present when `has_conversation` is `true`)
                  customer_name:
                    type: string
                    description: The customer's name if available (only present when `has_conversation` is `true`)
                  last_customer_message_at:
                    type: string
                    description: ISO 8601 timestamp of the customer's last message (only present when `has_conversation` is `true`)
                  session_status:
                    type: object
                    properties:
                      is_open:
                        type: boolean
                        description: Whether the 24-hour messaging window is currently open
                      can_send_freeform:
                        type: boolean
                        description: Whether freeform (non-template) messages can be sent right now
                      requires_template:
                        type: boolean
                        description: Whether a template message is required to message this recipient
                      message:
                        type: string
                        description: Human-readable description of the current session state
                      minutes_remaining:
                        type: integer
                        description: Minutes remaining in the 24-hour window (only present when session is open)
                      expires_at:
                        type: string
                        description: ISO 8601 timestamp when the session expires (present when session is open or no customer message exists)
                      expired_at:
                        type: string
                        description: ISO 8601 timestamp when the session expired (only present when session has expired)
                    additionalProperties: true
                  404 Not Found:
                    type: string
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Sender Not Found
          content:
            application/json:
              example:
                success: false
                error: Sender not found
                error_code: SENDER_NOT_FOUND
        '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