> This page is optimized for agents. Use the linked Markdown pages and llms.txt indexes for related API content.

# Event webhook.

- Product: Voip
- Section: VOIP
- Snapshot: Current
- Method: `POST`
- Path: `/api/voip/webhook`

## Request body

Required: no  
Content types: `application/json`  

### `event`

Type: `string`  
Required: no  
Allowed values: `call`, `reservation-change-note`  

Event type - defaults to "call" if not specified

### `reference`

Type: `string`  
Required: yes  

Unique reference for this webhook event

### `source`

Type: `string`  
Required: no  

Source phone number (required for call events)

### `destination`

Type: `string`  
Required: no  

Destination phone number (required for call events)

### `status`

Type: `string`  
Required: no  
Allowed values: `queued`, `starting`, `ringing`, `ongoing`, `busy`, `hangup`, `no-answer`  

Call status (required for call events)

### `direction`

Type: `string`  
Required: no  
Allowed values: `in`, `out`  

Call direction (required for call events)

### `beginDate`

Type: `string`  
Required: no  

Call begin date in UTC (required for call events)

### `endDate`

Type: `string`  
Required: no  

Call end date in UTC (required for call events)

### `answerDate`

Type: `string`  
Required: no  

Call answer date in UTC (required for call events)

### `answered`

Type: `boolean`  
Required: no  

Whether call was answered (required for call events)

### `duration`

Type: `number`  
Required: no  

Call duration in seconds (required for call events)

### `notes`

Type: `string`  
Required: no  

Notes content (optional - triggers reservation-change-note creation when combined with reservation.id)

### `reservation`

Type: `object`  
Required: no  

Reservation association (optional)

#### `id`

Type: `number`  
Required: yes  

Reservation ID

### `user`

Type: `object`  
Required: no  

User association (optional)

#### `id`

Type: `number`  
Required: yes  

User ID

## Execute with TypeScript

Package: `@recranet/sdk`  

```ts
import { RecranetApiClient } from "@recranet/sdk";

const client = new RecranetApiClient({ apiKey: process.env.RECRANET_API_KEY! });

const result = await client.voip.webhook({
  reference: "<reference>",
});
```

## Execute with curl

```bash
curl -X POST "https://app.recranet.com/api/voip/webhook" \
    -H "X-Api-Key: $RECRANET_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{"reference":"<reference>"}'
```

## Responses

### Response `200`

Category: success  

Successful response

#### `application/json`

##### Generated example

```json
{
  "id": 0,
  "reference": "reference",
  "status": "status",
  "source": "source",
  "destination": "destination",
  "direction": "direction",
  "beginDate": "beginDate",
  "endDate": "endDate",
  "answerDate": "answerDate",
  "answered": false,
  "duration": 0,
  "notes": "notes",
  "reservation": {
    "id": 1000
  },
  "guest": {
    "id": 1000
  },
  "user": {
    "id": 1000
  }
}
```

##### Schema

###### VoipCall

Type: `VoipCall`  

###### `id`

Type: `number`  
Required: yes  

###### `reference`

Type: `string`  
Required: yes  

###### `source`

Type: `string`  
Required: no  

###### `destination`

Type: `string`  
Required: no  

###### `status`

Type: `string`  
Required: yes  

###### `direction`

Type: `string`  
Required: no  

###### `beginDate`

Type: `string`  
Format: `date-time`  
Required: no  

###### `endDate`

Type: `string`  
Format: `date-time`  
Required: no  

###### `answerDate`

Type: `string`  
Format: `date-time`  
Required: no  

###### `answered`

Type: `boolean`  
Required: no  
Default: `false`  

###### `duration`

Type: `number`  
Required: no  
Default: `0`  

###### `notes`

Type: `string`  
Required: no  

###### `reservation`

Type: `object`  
Required: no  

###### `id`

Type: `number`  
Required: no  

###### `guest`

Type: `object`  
Required: no  

###### `id`

Type: `number`  
Required: no  

###### `user`

Type: `object`  
Required: no  

###### `id`

Type: `number`  
Required: no  

### Response `400`

Category: client-error  

Bad request

#### `application/json`

##### Example

```json
{
  "statusCode": 400,
  "description": "Bad request",
  "errors": [
    "Bad request"
  ]
}
```

##### Schema

###### object

Type: `object`  

## Related representations

- [Human documentation](/voip/methods/webhook/)
- [TypeScript Markdown](/voip/methods/webhook.md?lang=typescript)
- [curl Markdown](/voip/methods/webhook.md?lang=curl)
- [site llms.txt](/llms.txt)
- [product llms.txt](/voip/llms.txt)
- [snapshot llms.txt](/voip/llms.txt)
