# Getting Started with Apimatic API
## Introduction
This API gives you programmatic access to APIMatic's Code Generation, Docs Generation and Transformation Engine
## Building
### Requirements
The SDK relies on **Node.js** and **npm** (to resolve dependencies). It also requires **Typescript version 3.9+**. You can download and install Node.js and [npm](https://www.npmjs.com/) from [the official Node.js website](https://nodejs.org/en/download/).
> **NOTE:** npm is installed by default when Node.js is installed.
### Verify Successful Installation
Run the following commands in the command prompt or shell of your choice to check if Node.js and npm are successfully installed:
* Node.js: `node --version`
* npm: `npm --version`

### Install Dependencies
- To resolve all dependencies, go to the **SDK root directory** and run the following command with npm:
```bash
npm install
```
- This will install all dependencies in the **node_modules** folder.

## Installation
The following section explains how to use the generated library in a new project.
### 1. Initialize the Node Project
- Open an IDE/text editor for JavaScript like Visual Studio Code. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.
- Click on **File** and select **Open Folder**. Select an empty folder of your project, the folder will become visible in the sidebar on the left.

- To initialize the Node project, click on **Terminal** and select **New Terminal**. Execute the following command in the terminal:
```bash
npm init --y
```

### 2. Add Dependencies to the Client Library
- The created project manages its dependencies using its `package.json` file. In order to add a dependency on the *Apimatic APILib* client library, double click on the `package.json` file in the bar on the left and add the dependency to the package in it.

- To install the package in the project, run the following command in the terminal:
```bash
npm install
```

## Test the SDK
To validate the functionality of this SDK, you can execute all tests located in the `test` directory. This SDK utilizes `Jest` as both the testing framework and test runner.
To run the tests, navigate to the root directory of the SDK and execute the following command:
```bash
npm run test
```
Or you can also run tests with coverage report:
```bash
npm run test:coverage
```
## Initialize the API Client
**_Note:_** Documentation for the client can be found [here.](doc/client.md)
The following parameters are configurable for the API Client:
| Parameter | Type | Description |
| --- | --- | --- |
| `timeout` | `number` | Timeout for API calls.<br>*Default*: `0` |
| `httpClientOptions` | `Partial<HttpClientOptions>` | Stable configurable http client options. |
| `unstableHttpClientOptions` | `any` | Unstable configurable http client options. |
| `customHeaderAuthenticationCredentials` | [`CustomHeaderAuthenticationCredentials`](doc/auth/custom-header-signature.md) | The credential object for customHeaderAuthentication |
### HttpClientOptions
| Parameter | Type | Description |
| --- | --- | --- |
| `timeout` | `number` | Timeout in milliseconds. |
| `httpAgent` | `any` | Custom http agent to be used when performing http requests. |
| `httpsAgent` | `any` | Custom https agent to be used when performing http requests. |
| `retryConfig` | `Partial<RetryConfiguration>` | Configurations to retry requests. |
### RetryConfiguration
| Parameter | Type | Description |
| --- | --- | --- |
| `maxNumberOfRetries` | `number` | Maximum number of retries. <br> *Default*: `0` |
| `retryOnTimeout` | `boolean` | Whether to retry on request timeout. <br> *Default*: `true` |
| `retryInterval` | `number` | Interval before next retry. Used in calculation of wait time for next request in case of failure. <br> *Default*: `1` |
| `maximumRetryWaitTime` | `number` | Overall wait time for the requests getting retried. <br> *Default*: `0` |
| `backoffFactor` | `number` | Used in calculation of wait time for next request in case of failure. <br> *Default*: `2` |
| `httpStatusCodesToRetry` | `number[]` | Http status codes to retry against. <br> *Default*: `[408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524, 408, 413, 429, 500, 502, 503, 504, 521, 522, 524]` |
| `httpMethodsToRetry` | `HttpMethod[]` | Http methods to retry against. <br> *Default*: `['GET', 'PUT', 'GET', 'PUT', 'GET', 'PUT']` |
The API client can be initialized as follows:
```ts
const client = new Client({
customHeaderAuthenticationCredentials: {
'Authorization': 'Authorization'
},
timeout: 0,
});
```
## Authorization
This API uses the following authentication schemes.
* [`Authorization (Custom Header Signature)`](doc/auth/custom-header-signature.md)
## List of APIs
* [APIs Management](doc/controllers/apis-management.md)
* [Code Generation-Imported APIs](doc/controllers/code-generation-imported-apis.md)
* [Code Generation-External APIs](doc/controllers/code-generation-external-apis.md)
* [Docs Portal Management](doc/controllers/docs-portal-management.md)
* [API Validation-Imported APIs](doc/controllers/api-validation-imported-apis.md)
* [API Validation-External APIs](doc/controllers/api-validation-external-apis.md)
* [Docs Portal Generation-Async](doc/controllers/docs-portal-generation-async.md)
* [Transformation](doc/controllers/transformation.md)
## Classes Documentation
* [ApiResponse](doc/api-response.md)
* [HttpRequest](doc/http-request.md)
* [ApiError](doc/api-error.md)