# FramePay SDK reference

## Error handling

The FramePay SDK returns several different types of errors based on the HTTP response, ranging from 401 to 422. They are exposed and can be imported:


```js
import { RebillyErrors } from 'rebilly-js-sdk';
```

### Error types

| Type | Status code | Description |
|  --- | --- | --- |
| `RebillyRequestError` | `-` | Generic error when no response is available. |
| `RebillyTimeoutError` | `-` | The request timed out. |
| `RebillyCanceledError` | `-` | The request was canceled before being completed. |
| `RebillyForbiddenError` | `401` | Indicates an invalid API key or expired session token. |
| `RebillyNotFoundError` | `404` | Requested resource was not found. |
| `RebillyMethodNotAllowedError` | `405` | Request method not allowed on this resource. |
| `RebillyConflictError` | `409` | Requested operation triggered a conflict. |
| `RebillyValidationError` | `422` | The request payload triggered a validation error (see error details). |


## Configuration options

All client API configuration parameters are optional.
A secret API key can only be provided at instantiation.

> **API environments**
By default a client instance is always generated in the **Live** environment.
The **Sandbox** mode is only recommended while developing your integration.


| **Option** | **Type** | **Description** |
|  --- | --- | --- |
| `apiKey` | `string` | Your secret API key.
To be used only for server-side integration.
See [Developer > API Keys](https://app.rebilly.com/api-keys). |
| `sandbox` | `boolean` | Flag used to enable sandbox mode for the instance.
Enable sandbox mode to run requests without processing real transactions on your account.
Defaults to `false`. |
| `timeout` | `integer` | Define the timeout in milliseconds for API requests.
Defaults to `6000`. |
| `organizationId` | `string` | Your organization identifier in scope of which need to perform request (if not specified, the default organization will be used). |
| `urls` | `object` | Define the root URLs for `live` and `sandbox` mode.
Object must have a key for each mode that have strings for values.
Defaults to `{live: 'api.rebilly.com', sandbox: 'api-sandbox.rebilly.com'}`. |


## Collections, members, and files

All resource calls return either a File, Member, or Collection:

- `getAll` always returns a `Collection`, which contains a list of Members
- CSV or PDF downloads will return a `File`
- All other methods return a `Member`


> **Frozen objects**
Both collections and Members are **immutable** (frozen).
Attempting to modify either one directly will result in a `TypeError`.
You can retrieve a plain JSON object for mutation using the `getJSON` method.


### Collection

The collection type represents a list of Members (for example, a list of customers, a list of transactions).

Each collection instance exposes the same properties.

| Name | Type | Description |
|  --- | --- | --- |
| items | Array<Member> | An array of member entities. See the [Member type](#member) for details. |
| total | number | An integer defining the total amount of members that exist regardless of the requested limit. |
| limit | number | An integer defining the count of values returned by the API request. Reflects the `limit` value passed to the function which returned the Collection. |
| offset | number | A zero-based index defining the starting position for the requested members. |
| response | Object | The original response stripped down to the status code, status text and headers. Exposes three more properties: `{status, statusText, headers}`. |
| getJSON | Function | Returns a plain mutable JSON object exposing the `items` of the current collection instance. Discards all other property. |
| config | Object | An object literal with the original request query string parameters. |


### Member

The member type represents an instance of a single resource entity in Rebilly (for example, one customer, one transaction).

Each member instance exposes the same properties.

| Name | Type | Description |
|  --- | --- | --- |
| fields | Object | An object literal with key-value pairs for each field returned by the API in the response. |
| response | Object | The original response stripped down to the status code, status text and headers. Exposes three more properties: `{status, statusText, headers}`. |
| getJSON | Function | Returns a plain mutable JSON object exposing the `fields` of the current member instance. Discards the `response` property. |
| config | Object | An object literal with the original request query string parameters. |


### File

Use the file type to access the `arraybuffer` data from API requests that return files.
The files can be either exported CSV data or generated invoice PDFs.

You can generate a binary file to download from the file content directly in the browser, or save it locally using the file system in Node.js.

Each file instance exposes the same properties.

| Name | Type | Description |
|  --- | --- | --- |
| data | Object | An `arraybuffer` containing the file data returned by the request. See [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). |
| response | Object | The original response stripped down to the status code, status text and headers. Exposes three more properties: `{status, statusText, headers}`. |
| config | Object | An object literal with the original request query string parameters. |