Famulor Whats App API
WhatsApp-Sender, Templates und Nachrichtenversand.
WhatsApp-Sender, Templates und Nachrichtenversand.
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-whats-app-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 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