#### `constructor`

Creates a new Skribby Client.

| Parameter | Default | Description |
| --- | --- | --- |
| `options` | _required_ | Options when creating a new client |
| `options.api_key` | _required_ | Skribby API Key found on [the platform](https://platform.skribby.io?to=api-keys) |

```ts
import { SkribbyClient } from '@skribby/sdk';

const client = new SkribbyClient({
    api_key: 'SKRIBBY_API_KEY',
});
```

## Methods

> **Error Handling**
> All methods (except `getRealtimeClient`) interact with Skribby's server.
> Refer to the [SkribbyClient API Requests Throws section](./SkribbyClient.md#throws) for more information on error handling.

### `createBot`

Create a new Meeting Bot which will join the meeting right away.

#### Parameters

This method expects an object of options which is identical to the ones in the REST API Documentation.
Please refer to the [Create Bot Endpoint](/docs/rest-api/bot-operations/createbot.md) for all options.

#### Returns

[`MeetingBot`](./MeetingBot.md)

#### Example

```ts
await client.createBot({
    bot_name: 'My Meeting Bot',
    meeting_url: 'https://meet.google.com/abc-defg-hij',
    service: 'gmeet',
    transcription_model: 'whisper',
    custom_metadata: {
        request_id: 'req_123',
        customer_id: 'acme-42',
    },
});
```

### `scheduleBot`

Schedule a Meeting Bot for later to join.

#### Parameters

This method expects an object of options which is identical to the ones in the REST API Documentation.
Please refer to the [Create Bot Endpoint](/docs/rest-api/bot-operations/createbot.md) for all options. Additionally, `scheduled_for` is required for this method.

| Parameter | Default | Description |
| --- | --- | --- |
| `options` | _required_ | All options from `createBot` |
| `options.scheduled_for` | _required_ | The scheduled time for the bot to join |

#### Returns

[`MeetingBot`](./MeetingBot.md)

#### Example

```ts
await client.scheduleBot({
  bot_name: "My Meeting Bot",
  meeting_url: "https://meet.google.com/abc-defg-hij",
  service: "gmeet",
  transcription_model: "whisper",
  scheduled_for: new Date(new Date().getTime() + 5 * 60000); // Join in 5 minutes
});
```

### `updateBot`

Update an existing Meeting Bot.

#### Parameters

| Parameter | Default | Description |
| --- | --- | --- |
| `botId` | _required_ | ID of the meeting bot to update |
| `options` | _required_ | Update options |

This method expects an object of options which is identical to the ones in the REST API Documentation.
Please refer to the [Update Bot Endpoint](/docs/rest-api/bot-operations/updatebot.md) for all options.

#### Returns

[`MeetingBot`](./MeetingBot.md)

#### Example

```ts
await client.updateBot('123456', {
    bot_name: 'Updated Bot Name',
    scheduled_start_time: new Date(new Date().getTime() + 10 * 60000),
    custom_metadata: {
        request_id: 'req_456',
        customer_id: 'acme-42',
    },
});

// Or force a scheduled bot to join immediately by clearing the schedule:
await client.updateBot('123456', {
    scheduled_start_time: null,
});
```

### `getScheduledBots`

Fetch all scheduled bots.

#### Returns

[`MeetingBot[]`](./MeetingBot.md)

#### Example

```ts
await client.getScheduledBots();
```

### `getBotById`

Fetch a bot with a specific ID.

#### Parameters

| Parameter | Default | Description |
| --- | --- | --- |
| `botId` | _required_ | ID of the meeting bot |

#### Returns

[`MeetingBot`](./MeetingBot.md)

#### Example

```ts
await client.getBotById('123456');
```

### `getBotPricing`

Fetch pricing data for a bot with a specific ID.

#### Parameters

| Parameter | Default | Description |
| --- | --- | --- |
| `botId` | _required_ | ID of the meeting bot |

#### Returns

`MeetingBotPricingData`

#### Example

```ts
const pricing = await client.getBotPricing('123456');

console.log(pricing.currency); // USD
console.log(pricing.total.rate_per_hour); // e.g. 0.92
console.log(pricing.total.amount); // null while in progress, number when finished
```

This method maps to the [Get Bot Pricing Endpoint](/docs/rest-api/bot-operations/getbotpricing.md).

### `createRecording`

Create a new Recording.

#### Parameters

This method expects an object of options which is identical to the ones in the REST API Documentation.
Please refer to the [Create Recording Endpoint](/docs/rest-api/recording-operations/createrecording.md) for all options.

#### Returns

[`Recording`](./Recording.md)

#### Example

```ts
await client.createRecording({
    // recording options
});
```

### `getRecordingById`

Fetch a recording with a specific ID.

#### Parameters

| Parameter | Default | Description |
| --- | --- | --- |
| `recordingId` | _required_ | ID of the recording |

#### Returns

[`Recording`](./Recording.md)

#### Example

```ts
await client.getRecordingById('123456');
```

### `apiRequest`

All API requests from this package happens through this method.  
This is made available in case new functionalities are provided on the REST API but not made available in the SDK yet.

#### Parameters

| Parameter | Default | Description |
| --- | --- | --- |
| endpoint | _required_ | Just the endpoint you're trying to each (eg. `/bot` for creating a new bot) |
| method | `GET` | Method to be used for the API Call |
| body | `{}` | Body contents to be used for the API Call |

#### Throws

If an API call has failed, then we'll throw an error depending on status code.  
Below is a list of predefined custom errors to make handling them easier:

- `UnauthorizedError` (401) - Provided API Key is invalid
- `NotFoundError` (404) - Requested entity not found
- `UnprocessableEntityError` (422) - Validation has failed (eg. required parameters were not provided)
- `ApiRequestError` - Global catch for other uncommon errors

The first 3 errors extend the `ApiRequestError`. So if you want a global catch you can simply use the `ApiRequestError`.
All errors will include the following properties:

- `status`
- `statusText`
- `responseBody`
- `url`
- `method`

#### Returns

Object data returned from the endpoint.