# Internal calls and meetings

> Calls between staff members inside Nexafon, group calls and scheduled voice meetings, and their plan limits.

Source: https://docs.nexafone.so/v1/calling/internal/

Besides WhatsApp calls with customers, members call each other inside Nexafon, in the browser, at no WhatsApp cost.

## Internal calls

| Kind | | Permission |
| --- | --- | --- |
| Direct (`internal_direct`) | One member calls another | `internal_calls:start` |
| Group (`internal_group`) | Several members, or a whole team, at once | `group_calls:start` |

From your page:

```js
await Nexafon.startInternalCall(['member-id-1', 'member-id-2'])
```

Member ids come from the [members API](/v1/api/members/). The callee’s softphone or app rings wherever they are signed
in; a missed staff call can be called back.

## Meetings

Scheduled voice meetings (`meeting`) have a title, a start and a length, invited members, and optional recurrence.
Members with `meetings:create` schedule and host them; `meetings:manage` changes, cancels or ends any meeting and sees
attendance. A meeting opens 10 minutes before its start (`meeting_not_open` before that). Invitees get reminders, and
your server gets `meeting.scheduled` and `meeting.ended` (with attendance) [webhooks](/v1/webhooks/events/).

## Plan limits

| Feature | Limits |
| --- | --- |
| `meetings.voice` | Whether the plan includes scheduled meetings |
| `meetings.max_minutes` | The longest meeting |
| `calls.max_participants` | People in one call or meeting |

Above a limit, starting or scheduling answers `plan_limit_reached`.
