> For the complete documentation index, see [llms.txt](https://developer.firmhouse.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.firmhouse.com/sdks/firmhouse-sdk/reference/classes/firmhouse-client.md).

# Class: FirmhouseClient

Client for accessing Firmhouse GraphQL api

## Example

```typescript
import { FirmhouseClient, Access } from '@firmhouse/sdk';
const client = new FirmhouseClient({
 apiToken,
 accessType: Access.write
});

const cart = await client.carts.getOrCreate();
const products = await client.products.fetchAll();
const invoices = await client.invoices.fetchAll();
```

## Type Parameters

### TAccess

`TAccess` *extends* [`Access`](/sdks/firmhouse-sdk/reference/enumerations/access.md) = [`storefront`](/sdks/firmhouse-sdk/reference/enumerations/access.md#storefront)

Access type. (Will be inferred from the config)

## Properties

| Property | Modifier   | Type                                                                                         |
| -------- | ---------- | -------------------------------------------------------------------------------------------- |
| `config` | `readonly` | [`FirmhouseConfig`](/sdks/firmhouse-sdk/reference/interfaces/firmhouse-config.md)<`TAccess`> |

## Methods

### rawRequest()

```ts
rawRequest(graphQLQuery, variables?): Promise<unknown>;
```

Sends an authenticated raw request to API. This can be used for custom field selections or bulk queries/mutations.

#### Parameters

**graphQLQuery**

`string`

The GraphQL query

**variables?**

`Record`<`string`, `unknown`>

Variables to use in query

#### Returns

`Promise`<`unknown`>

The response from the API

#### Throws

* [NotFoundError](/sdks/firmhouse-sdk/reference/errors/not-found.md) - When there is an entity not found error in the response
* [ValidationError](/sdks/firmhouse-sdk/reference/errors/validation.md) - When there are invalid fields
* [ServerError](/sdks/firmhouse-sdk/reference/errors/server.md) - When the request fails

## Resources

Resources for accessing Firmhouse API

### Available with Storefront Access

#### carts

**Get Signature**

```ts
get carts(): Carts;
```

Cart methods

**Returns**

[`Carts`](/sdks/firmhouse-sdk/reference/resources/carts.md)

***

#### plans

**Get Signature**

```ts
get plans(): Plans;
```

Plan methods

**Example**

```typescript
const plans = await client.plans.fetchAll();
```

**Returns**

[`Plans`](/sdks/firmhouse-sdk/reference/resources/plans.md)

***

#### products

**Get Signature**

```ts
get products(): Products;
```

Product methods

**Example**

```typescript
const products = await client.products.fetchAll();
```

**Returns**

[`Products`](/sdks/firmhouse-sdk/reference/resources/products.md)

***

#### selfServiceCenterToken

**Get Signature**

```ts
get selfServiceCenterToken(): SelfServiceCenterToken;
```

SelfServiceCenterToken methods

**Returns**

[`SelfServiceCenterToken`](/sdks/firmhouse-sdk/reference/resources/self-service-center-token.md)

### Only Available with Storefront Access

#### payments

**Get Signature**

```ts
get payments(): TAccess extends storefront ? Payments : never;
```

Checkout payment methods

**Example**

```typescript
const session = await client.payments.createAdyenSession(subscriptionToken, paymentToken);
```

**Returns**

`TAccess` *extends* [`storefront`](/sdks/firmhouse-sdk/reference/enumerations/access.md#storefront) ? [`Payments`](/sdks/firmhouse-sdk/reference/resources/payments.md) : `never`

### Only Available with Write Access

#### invoices

**Get Signature**

```ts
get invoices(): TAccess extends write ? Invoices : never;
```

Invoice methods

**Returns**

`TAccess` *extends* [`write`](/sdks/firmhouse-sdk/reference/enumerations/access.md#write) ? [`Invoices`](/sdks/firmhouse-sdk/reference/resources/invoices.md) : `never`

***

#### projects

**Get Signature**

```ts
get projects(): TAccess extends write ? Projects : never;
```

Project methods

**Returns**

`TAccess` *extends* [`write`](/sdks/firmhouse-sdk/reference/enumerations/access.md#write) ? [`Projects`](/sdks/firmhouse-sdk/reference/resources/projects.md) : `never`

***

#### subscriptions

**Get Signature**

```ts
get subscriptions(): TAccess extends write ? Subscriptions : never;
```

Subscription methods.

**Returns**

`TAccess` *extends* [`write`](/sdks/firmhouse-sdk/reference/enumerations/access.md#write) ? [`Subscriptions`](/sdks/firmhouse-sdk/reference/resources/subscriptions.md) : `never`
