call_permission_reply webhook fieldGET /{page-id}/messenger_call_permissions?psid={psid}
| Property | Description |
|---|---|
page-id string | The delegate ID of the business Facebook Page |
psid string | Unique PSID for the consumer on this Page |
{ "permission": { "status": "has_permission", "expiration_time": 1745343479 }, "actions": [ { "action_name": "send_call_permission_request", "can_perform": false, "limits": [ { "time_period": "PT24H", "max_allowed": 2, "current_usage": 1 } ] }, { "action_name": "start_call", "can_perform": true } ] }
| Property | Description |
|---|---|
permission JSON | The current permission status:
expiration_time (included only when status is has_permission): Unix timestamp (in seconds, UTC) when the permission expires. Default expiration is 7 days after the consumer grants permission. |
actions JSON | List of actions you can take:
Each action includes can_perform (boolean) and optional limits with time_period, max_allowed, and current_usage. |
POST /{page-id}/messages { "recipient": { "id": "{psid}" }, "message": { "attachment" : { "type":"template", "payload":{ "template_type":"calling_optin" } } } }
| Property | Description |
|---|---|
recipient string | The Page-scoped ID of the consumer to whom the opt-in is requested |
template_type string | Must be calling_optin |

{ "recipient": { "id": "{psid}" }, "message_id": "{mid}" }
call_permission_reply field.{ "object": "page", "entry": [ { "sender": { "id": "{psid}" }, "recipient": { "id": "{page-id}" }, "timestamp": 1671644824, "call_permission_reply": { "response": "[approve|reject]", "expiration_timestamp": "{timestamp}" } } ] }
| Property | Description |
|---|---|
response string | The consumer’s response: approve or reject |
expiration_timestamp Unix timestamp | When the permission expires. Only included if the consumer approved the request. |