WhatsApp Business messaging API
developers.facebook.com/docs/whatsapp/cloud-api ↗Query structured spec data via REST or MCP. Get exactly what your agent needs.
http://whatsapp.local
http://example.com/v1
/settings/application
If a field is not present in the request, no change is made to that setting. For example, if on_call_pager is not sent with the request, the existing configuration for on_call_pager is unchanged.
application/json
Application-Settings
| Property | Type | Required |
|---|---|---|
| media | object | optional |
| └ auto_download | array | required |
| webhooks | object | optional |
| └ url | string | optional |
| └ max_concurrent_requests | string | optional |
| sent_status | boolean | optional |
| pass_through | boolean | optional |
| on_call_pager | string | optional |
| callback_persist | boolean | optional |
| heartbeat_interval | integer | optional |
| unhealthy_interval | integer | optional |
| callback_backoff_delay_ms | string | optional |
| max_callback_backoff_delay_ms | string | optional |
PATCH /settings/application
/groups/{GroupId}/admins
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| GroupId | path | required | string | — |
application/json
Group-Admin-Request-Body
| Property | Type | Required |
|---|---|---|
| wa_ids | array | required |
PATCH /groups/{GroupId}/admins
/settings/profile/about
application/json
Profile-About
| Property | Type | Required |
|---|---|---|
| text | string | required |
PATCH /settings/profile/about
Address
{
"type": "object",
"title": "Address",
"example": {
"zip": "94025",
"city": "Menlo Park",
"type": "HOME",
"state": "CA",
"street": "1 Hacker Way",
"country": "United States",
"country_code": "us"
},
"required": [
"city",
"country",
"country_code",
"state",
"street",
"type",
"zip"
],
"properties": {
"zip": {
"type": "string",
"description": "ZIP code"
},
"city": {
"type": "string",
"description": "City name"
},
"type": {
"type": "string",
"description": "Standard Values: HOME, WORK"
},
"state": {
"type": "string",
"description": "State abbreviation"
},
"street": {
"type": "string",
"description": "Street number and name"
},
"country": {
"type": "string",
"description": "Full country name"
},
"country_code": {
"type": "string",
"description": "Two-letter country abbreviation"
}
}
}
Application-Settings
{
"type": "object",
"title": "Update-Application-Settings-Request-Body",
"example": {
"media": {
"auto_download": [
"image",
"document",
"audio"
]
},
"webhooks": {
"url": "<Webhook URL, https>",
"max_concurrent_requests": 12
},
"sent_status": false,
"pass_through": false,
"on_call_pager": "<WA_ID of valid WhatsApp contact>",
"callback_persist": true,
"callback_backoff_delay_ms": 3000,
"max_callback_backoff_delay_ms": 900000
},
"properties": {
"media": {
"$ref": "#/components/schemas/Media"
},
"webhooks": {
"$ref": "#/components/schemas/Webhooks"
},
"sent_status": {
"type": "boolean",
"default": false,
"description": "Receive a notification that a message is sent to server. When true, you will receive a message indicating that a message has been sent. If false (default), you will not receive notification."
},
"pass_through": {
"type": "boolean",
"default": true,
"description": "When true, removes messages from the local database after they are delivered to or read by the recipient. When false, saves all messages on local storage until they are explicitly deleted.\nWhen messages are sent, they are stored in a local database. This database is used as the application's history. Since the business keeps its own history, you can specify whether you want message pass_through or not. Restart required."
},
"on_call_pager": {
"type": "string",
"description": "Set to valid WhatsApp Group with users who wish to see alerts for critical errors and messages."
},
"callback_persist": {
"type": "boolean",
"default": true,
"description": "Stores callbacks on disk until they are successfully acknowledged by the Webhook or not. Restart required."
},
"heartbeat_interval": {
"type": "integer",
"default": 5,
"description": "Multiconnect: Interval of the Master node monitoring of Coreapp nodes in seconds"
},
"unhealthy_interval": {
"type": "integer",
"default": 30,
"description": "Multiconnect: Maximum amount of seconds a Master node waits for a Coreapp node to respond to a heartbeat before considering it unhealthy and starting the failover process."
},
"callback_backoff_delay_ms": {
"type": "string",
"default": "3000",
"description": "Backoff delay for a failed callback in milliseconds\nThis setting is used to configure the amount of time the backoff delays before retrying a failed callback. The backoff delay increases linearly by this value each time a callback fails to get a HTTPS 200 OK response. The backoff delay is capped by the max_callback_backoff_delay_ms setting."
},
"max_callback_backoff_delay_ms": {
"type": "string",
"default": "900000",
"description": "Maximum delay for a failed callback in milliseconds"
}
}
}
ApplicationUpdateMediaProvidersRequest
{
"type": "array",
"items": {
"$ref": "#/components/schemas/Media-Provider"
},
"description": ""
}
Audio
{
"type": "object",
"oneOf": [
{
"$ref": "#/components/schemas/AudioById"
},
{
"$ref": "#/components/schemas/AudioByProvider"
}
],
"title": "Audio",
"description": "The media object containing audio"
}
AudioById
{
"type": "object",
"title": "AudioById",
"example": {
"id": "<Media Id, from Media API>"
},
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}
AudioByProvider
{
"type": "object",
"title": "AudioByProvider",
"example": {
"link": "<Link to Audio, https>",
"provider": {
"name": "<Provider Name from Media Provider API, optional"
}
},
"required": [
"provider",
"link"
],
"properties": {
"link": {
"type": "string"
},
"provider": {
"$ref": "#/components/schemas/Provider"
}
}
}
Backup-Settings
{
"type": "object",
"title": "Root Type for Backup-Settings",
"example": {
"data": "encrypted-backup-data"
},
"properties": {
"data": {
"type": "string",
"description": "The data that has been backed up, encrypted for security."
}
},
"description": ""
}
Backup-Settings-Request-Body
{
"type": "object",
"title": "Backup-Settings-Request",
"example": {
"password": "<Password for Backup>"
},
"required": [
"password"
],
"properties": {
"password": {
"type": "string",
"description": "Used to encrypt backup data for security"
}
}
}
Backup-Settings-Response
{
"type": "object",
"title": "Root Type for Backup-Settings-Response",
"example": {
"settings": {
"data": "encrypted-backup-data"
}
},
"properties": {
"settings": {
"$ref": "#/components/schemas/Backup-Settings"
}
},
"description": "Save the data value as that will be used along with your password to restore the information."
}
Basic
{
"type": "object",
"title": "Root Type for Basic",
"example": {
"password": "your-password",
"username": "your-username"
},
"properties": {
"password": {
"type": "string"
},
"username": {
"type": "string"
}
},
"description": ""
}
Business-Profile
{
"type": "object",
"title": "Set-Business-Profile-Request",
"example": {
"email": "<Business Profile Email>",
"address": "<Business Profile Address>",
"vertical": "<Business Profile Vertical>",
"websites": [
"https://www.whatsapp.com",
"https://www.facebook.com"
],
"description": "<Business Profile Description>"
},
"required": [
"address",
"description",
"email",
"vertical",
"websites"
],
"properties": {
"email": {
"type": "string",
"description": "Email address to contact the business\nMaximum of 128 characters"
},
"address": {
"type": "string",
"description": "Address of the business\nMaximum of 256 characters"
},
"vertical": {
"type": "string",
"description": "Industry of the business\nMaximum of 128 characters"
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "URLs associated with business (e.g., website, Facebook page, Instagram)\nMaximum of 2 websites with a maximum of 256 characters each"
},
"description": {
"type": "string",
"description": "Description of the business\nMaximum of 256 characters"
}
}
}
Business-Settings
{
"type": "object",
"title": "Root Type for Business-Settings",
"example": {
"business": {
"profile": {
"email": "new-business-email",
"address": "new-business-address",
"vertical": "business-industry",
"websites": [
"website-1",
"website-2"
],
"description": "business-description"
}
}
},
"properties": {
"business": {
"$ref": "#/components/schemas/Business-Settings-Business"
}
},
"description": ""
}
Business-Settings-Business
{
"type": "object",
"title": "Root Type for Business-Settings-Business",
"example": {
"profile": {
"email": "new-business-email",
"address": "new-business-address",
"vertical": "business-industry",
"websites": [
"website-1",
"website-2"
],
"description": "business-description"
}
},
"properties": {
"profile": {
"$ref": "#/components/schemas/Business-Profile"
}
},
"description": ""
}
CertificatesDownloadCaCertificateResponse
{
"type": "string",
"format": "binary"
}
CertificatesDownloadWebhookCaCertificateResponse
{
"type": "string",
"format": "binary"
}
CertificatesUploadExternalCertificateRequest
{
"type": "string",
"format": "binary"
}
CertificatesUploadWebhookCaCertificateRequest
{
"type": "string",
"format": "binary"
}
Check-Contact
{
"type": "object",
"title": "Check-Contact",
"example": {
"input": "+1 (516) 283-7151",
"wa_id": "15162837151",
"status": "valid"
},
"properties": {
"input": {
"type": "string",
"description": "The value you sent in the contacts field of the JSON request."
},
"wa_id": {
"type": "string",
"description": "WhatsApp user identifier that can be used in other API calls. Only returned if the status is valid."
},
"status": {
"enum": [
"processing",
"valid",
"invalid"
],
"type": "string",
"description": "Status of the user.",
"x-enum-descriptions": [
"processing: Input is still being processed.",
"valid: Input determined to be a valid WhatsApp user.",
"invalid: Input determined to not be a valid WhatsApp user or the phone number is in a bad format."
]
}
},
"description": ""
}
Check-Contact-Request-Body
{
"type": "object",
"title": "Check-Contact-Request",
"example": {
"blocking": "wait",
"contacts": [
"{{Recipient-WA-ID}}"
]
},
"required": [
"contacts"
],
"properties": {
"blocking": {
"enum": [
"no_wait",
"wait"
],
"type": "string",
"default": "no_wait",
"description": "Blocking determines whether the request should wait for the processing to complete (synchronous) or not (asynchronous)."
},
"contacts": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of contact phone numbers. The numbers can be in any standard telephone number format."
}
}
}
Check-Contact-Response
{
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Response"
},
{
"type": "object",
"properties": {
"contacts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Check-Contact"
}
}
}
}
],
"title": "Check-Contact-Response",
"example": {
"contacts": [
{
"input": "1-631-555-1002",
"status": "processing"
},
{
"input": "6315551003",
"status": "processing"
},
{
"input": "+54 9 11 5612-1008",
"status": "processing"
},
{
"input": "+1 (516) 283-7151",
"wa_id": "15162837151",
"status": "valid"
}
]
},
"description": ""
}
Check-Health-Response
{
"type": "object",
"title": "Root Type for Check-Health-Response",
"example": {
"health": {
"your-hostname1:your-container-id1": {
"role": "primary_master",
"gateway_status": "connected"
},
"your-hostname2:your-container-id2": {
"role": "secondary_master",
"gateway_status": "disconnected"
}
}
},
"properties": {
"health": {
"oneOf": [
{
"$ref": "#/components/schemas/Gateway-Status"
},
{
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/Gateway-Node-Status"
}
}
]
}
},
"description": ""
}
Config
{
"oneOf": [
{
"$ref": "#/components/schemas/Config-Bearer"
},
{
"$ref": "#/components/schemas/Config-Basic"
}
],
"title": "Config"
}
Config-Basic
{
"type": "object",
"title": "Config",
"example": {
"basic": {
"password": "your-password",
"username": "your-username"
}
},
"properties": {
"basic": {
"$ref": "#/components/schemas/Basic"
}
}
}
Config-Bearer
{
"type": "object",
"title": "Config",
"example": {
"bearer": "<Bearer Auth Token>"
},
"required": [
"bearer"
],
"properties": {
"bearer": {
"type": "string"
}
}
}
Contact
{
"type": "object",
"title": "Contact",
"example": {
"org": {
"title": "Manager",
"company": "WhatsApp",
"department": "Design"
},
"name": {
"last_name": "Smith",
"first_name": "John",
"formatted_name": "John Smith"
},
"urls": [
{
"url": "https://www.facebook.com",
"type": "WORK"
}
],
"emails": [
{
"type": "WORK",
"email": "test@fb.com"
},
{
"type": "WORK",
"email": "test@whatsapp.com"
}
],
"phones": [
{
"type": "HOME",
"phone": "+1 (940) 555-1234"
},
{
"type": "WORK",
"phone": "+1 (650) 555-1234",
"wa_id": "16505551234"
}
],
"birthday": "2012-08-18T00:00:00.000Z",
"addresses": [
{
"zip": "94025",
"city": "Menlo Park",
"type": "HOME",
"state": "CA",
"street": "1 Hacker Way",
"country": "United States",
"country_code": "us"
},
{
"zip": "94025",
"city": "Menlo Park",
"type": "WORK",
"state": "CA",
"street": "200 Jefferson Dr",
"country": "United States",
"country_code": "us"
}
]
},
"properties": {
"ims": {
"type": "array",
"items": {
"type": "string"
},
"description": ""
},
"org": {
"$ref": "#/components/schemas/Org"
},
"name": {
"$ref": "#/components/schemas/Name"
},
"urls": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Url"
},
"description": "Contact URL(s)"
},
"emails": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Email"
},
"description": "Contact email address(es)"
},
"phones": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Phone"
},
"description": "Contact phone number(s)"
},
"birthday": {
"type": "string",
"description": "YYYY-MM-DD formatted string"
},
"addresses": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Address"
},
"description": "Full contact address(es)"
}
}
}
Create-Group-Request-Body
{
"type": "object",
"title": "Create-Group-Request",
"example": {
"subject": "<Group Subject>"
},
"required": [
"subject"
],
"properties": {
"subject": {
"type": "string"
}
}
}
Create-User-Request-Body
{
"type": "object",
"title": "Create-User-Request",
"example": {
"password": "password",
"username": "username"
},
"required": [
"username",
"password"
],
"properties": {
"password": {
"type": "string",
"description": "username"
},
"username": {
"type": "string",
"description": "password"
}
}
}
Currency
{
"type": "object",
"title": "Currency",
"example": {
"amount_1000": 100990,
"currency_code": "USD"
},
"required": [
"amount_1000",
"currency_code"
],
"properties": {
"amount_1000": {
"type": "integer",
"format": "int32"
},
"currency_code": {
"type": "string"
}
},
"description": ""
}
Date-Time-Component
{
"type": "object",
"title": "Date-Time-Component",
"example": {
"hour": 15,
"year": 1977,
"month": 2,
"minute": 33,
"day_of_week": 5,
"day_of_month": 25
},
"properties": {
"hour": {
"type": "integer",
"format": "int32",
"description": "The hour"
},
"year": {
"type": "integer",
"format": "int32",
"description": "The year"
},
"month": {
"type": "integer",
"format": "int32",
"description": "The month"
},
"minute": {
"type": "integer",
"format": "int32",
"description": "The minute"
},
"day_of_week": {
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"type": "string",
"format": "int32",
"description": "Both strings and numbers are accepted. If different from the value derived from the date (if specified), use the derived value.",
"x-enum-varnames": [
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
],
"x-enum-descriptions": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
]
},
"day_of_month": {
"type": "integer",
"format": "int32",
"description": "The day of month"
}
},
"description": "Date/time by component"
}
Date-Time-Object
{
"type": "object",
"title": "Date-Time",
"example": {
"component": {
"hour": 15,
"year": 1977,
"month": 2,
"minute": 33,
"day_of_week": 5,
"day_of_month": 25
}
},
"properties": {
"component": {
"$ref": "#/components/schemas/Date-Time-Component"
},
"unix_epoch": {
"$ref": "#/components/schemas/Date-Time-Unix-Epoch"
}
},
"description": "The Whatsapp Business API Client will attempt to format the date/time based on a specified localization."
}
Date-Time-Unix-Epoch
{
"type": "object",
"title": "Date-Time-Unix-Epoch",
"example": {
"timestamp": 123456789
},
"properties": {
"timestamp": {
"type": "integer",
"format": "int32",
"description": "Epoch timestamp in seconds"
}
},
"description": "Date/time by Unix epoch"
}
Detailed-User-Response
{
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Response"
},
{
"type": "object",
"properties": {
"users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Detailed-User-Response-Item"
}
}
}
}
],
"title": "Root Type for Detailed-User-Response",
"example": {
"users": [
{
"ROLES": "ROLE_USER",
"username": "username"
}
]
},
"description": ""
}
Detailed-User-Response-Item
{
"type": "object",
"title": "Root Type for Detailed-Response-Item",
"example": {
"ROLES": "ROLE_USER",
"username": "username"
},
"properties": {
"ROLES": {
"$ref": "#/components/schemas/User-Role"
},
"username": {
"type": "string"
}
},
"description": ""
}
Document
{
"type": "object",
"oneOf": [
{
"$ref": "#/components/schemas/DocumentById"
},
{
"$ref": "#/components/schemas/DocumentByProvider"
}
],
"title": "Document",
"description": "The media object containing a document"
}
DocumentById
{
"type": "object",
"title": "Document",
"example": {
"id": "<Media Id, from Media API>X",
"caption": "<Message Caption>",
"filename": "<Filename>"
},
"required": [
"caption",
"id",
"filename"
],
"properties": {
"id": {
"type": "string"
},
"caption": {
"type": "string"
},
"filename": {
"type": "string"
}
}
}
DocumentByProvider
{
"type": "object",
"title": "Document1",
"example": {
"link": "<Link to PDF, https>",
"caption": "<Message Caption>",
"filename": "<Filename>",
"provider": {
"name": "<Provider Name from Media Provider API, optional"
}
},
"required": [
"provider",
"caption",
"link",
"filename"
],
"properties": {
"link": {
"type": "string"
},
"caption": {
"type": "string"
},
"filename": {
"type": "string"
},
"provider": {
"$ref": "#/components/schemas/Provider"
}
}
}
Email
{
"type": "object",
"title": "Email",
"example": {
"type": "<Contact's Email Type>",
"email": "<Contact's Email>"
},
"required": [
"email",
"type"
],
"properties": {
"type": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
Enable-Two-Step-Request-Body
{
"type": "object",
"title": "Enable-Two-Step-Request",
"example": {
"pin": "your-6-digit-pin"
},
"required": [
"pin"
],
"properties": {
"pin": {
"type": "string"
}
}
}
Error
{
"type": "object",
"title": "Error",
"example": {
"code": 1234,
"title": "error-code-title",
"details": "optional-detailed-error-message"
},
"properties": {
"code": {
"type": "integer",
"format": "int32",
"description": "See the https://developers.facebook.com/docs/whatsapp/api/errors for more information."
},
"href": {
"type": "string",
"description": "location for error detail"
},
"title": {
"type": "string",
"description": "error title"
},
"details": {
"type": "string",
"description": "error detail"
}
},
"description": ""
}
Gateway-Node-Status
{
"type": "object",
"title": "Root Type for Gateway-Node-Status",
"example": {
"role": "coreapp",
"gateway_status": "connected"
},
"properties": {
"role": {
"enum": [
"primary_master",
"secondary_master",
"coreapp"
],
"type": "string"
},
"gateway_status": {
"type": "string"
}
},
"description": ""
}
Gateway-Status
{
"enum": [
"connected",
"connecting",
"disconnected",
"uninitialized",
"unregistered"
],
"type": "string",
"description": ""
}
Get-Business-Profile-Response
{
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Response"
},
{
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Business-Settings"
}
}
}
],
"title": "Root Type for Get-Business-Profile-Response",
"example": {
"settings": {
"business": {
"profile": {
"email": "new-business-email",
"address": "new-business-address",
"vertical": "business-industry",
"websites": [
"website-1",
"website-2"
],
"description": "business-description"
}
}
}
},
"description": ""
}
Get-Media-Providers-Response
{
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Response"
},
{
"type": "object",
"properties": {
"settings": {
"$ref": "#/components/schemas/Media-Provider-Settings"
}
}
}
],
"title": "Root Type for Get-Media-Providers-Response",
"example": {
"settings": {
"application": {
"media": {
"providers": [
{
"name": "your-first-provider",
"type": "www",
"config": {
"basic": {
"password": "your-password",
"username": "your-username"
}
}
},
{
"name": "your-second-provider",
"type": "www",
"config": {
"bearer": "your-bearer-token"
}
}
]
}
}
}
},
"description": ""
}
Get-Profile-About-Response
{
"type": "object",
"title": "Root Type for Get-Profile-About-Response",
"example": {
"settings": {
"profile": {
"about": {
"text": "your-profile-about-text"
}
}
}
},
"properties": {
"settings": {
"$ref": "#/components/schemas/Profile-About-Settings"
}
},
"description": ""
}
Get-Profile-Photo-Response
{
"type": "object",
"title": "Root Type for Get-Profile-Photo-Response",
"example": {
"settings": {
"profile": {
"photo": {
"link": "profile-photo-url"
}
}
}
},
"properties": {
"settings": {
"$ref": "#/components/schemas/Profile-Photo-Settings"
}
},
"description": ""
}
Group
{
"type": "object",
"title": "Groups-Response-Item",
"example": {
"id": "your-group-id",
"creation_time": 123456789
},
"properties": {
"id": {
"type": "string"
},
"creation_time": {
"type": "integer",
"format": "int32",
"description": "timestamp"
}
},
"description": ""
}
Group-Admin-Request-Body
{
"type": "object",
"title": "Group-Admin-Request",
"example": {
"wa_ids": [
"<Recipient WA-ID, from Contacts API>"
]
},
"required": [
"wa_ids"
],
"properties": {
"wa_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The WhatsApp IDs of the people to be added or removed as group admins"
}
}
}
Group-Info
{
"type": "object",
"title": "Group-Response-Item",
"example": {
"admins": [
"whatsapp-id-1",
"whatsapp-id-2"
],
"creator": "whatsapp-id-1",
"subject": "your-group-subject",
"participants": [
"whatsapp-id-3",
"whatsapp-id-4",
"whatsapp-id-5"
],
"creation_time": 123456789
},
"properties": {
"admins": {
"type": "array",
"items": {
"type": "string"
},
"description": "Group administrators\nLists IDs of the creator of the group and any administrators added"
},
"creator": {
"type": "string",
"description": "ID of the creator of this group"
},
"subject": {
"type": "string",
"description": "Subject of the group"
},
"participants": {
"type": "array",
"items": {
"type": "string"
},
"description": "Participants of the group\nThis is an array of all the IDs of the participants in the group. Initially, this will be the creator of the group."
},
"creation_time": {
"type": "integer",
"format": "int32",
"description": "Group creation time"
}
},
"description": ""
}
Group-Invite
{
"type": "object",
"title": "Group-Invite",
"example": {
"link": "group-invite-link"
},
"properties": {
"link": {
"type": "string"
}
},
"description": ""
}
Group-Invite-Response
{
"type": "object",
"allOf": [
{
"$ref": "#/components/schemas/Response"
},
{
"type": "object",
"properties": {
"groups": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Group-Invite"
}
}
}
}
],
"title": "Group-Invite-Response",
"example": {
"groups": [
{
"link": "group-invite-link"
}
]
},
"description": ""
}