# TypeScript SDK

Follow these steps to get started with the Suger TS SDK.

## Step 1: Install the SDK

To include the Suger SDK in your project, you can use npm in your terminal:

```bash
npm install suger-sdk-ts --save
```

## Step 2: Get an OAuth access token

The Suger API uses the OAuth 2.0 client-credentials flow. First, create an
[OAuth App](https://doc.suger.io/get-started/oauth-app/) in your organization
settings to get a **Client ID** and **Client Secret**. Then exchange them for a
short-lived (1 hour) bearer token:

```ts
// Exchange OAuth App credentials for a bearer token. Cache it in memory and
// request a new one when it expires (default lifetime: 1 hour).
async function getAccessToken(clientId: string, clientSecret: string): Promise<string> {
    const res = await fetch("https://apiv2.suger.cloud/oauth2/token", {
        method: "POST",
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
        body: new URLSearchParams({
            grant_type: "client_credentials",
            client_id: clientId,
            client_secret: clientSecret,
            resource: "https://api.suger.cloud",
        }),
    })
    const { access_token } = await res.json()
    return access_token
}
```

The `resource=https://api.suger.cloud` parameter is required — it scopes the
issued JWT to the Suger API. See [API Access](https://doc.suger.io/get-started/oauth-app/)
for the full token exchange, caching, and rotation details.

## Step 3: Create Config for Api

Create a configuration and attach the bearer token. `APIKeyAuth` writes the
`Authorization` header verbatim, so pass the OAuth token as `Bearer <token>`:

```ts
const accessToken = await getAccessToken("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")
const server = new ServerConfiguration<{}>("https://api.suger.cloud", {})
const authConfig: api.AuthMethodsConfiguration = {
    APIKeyAuth: "Bearer " + accessToken,
}

// Create configuration parameter object
const configurationParameters = {
    baseServer: server, // First server is default
    authMethods: authConfig,
}
const configuration = new Configuration(configurationParameters)
```

## Step 4: Create Api and Call APIs

Now you can use the configuration object to create an API instance and access Suger services:

```ts
const offerApi = new OfferApi(configuration);
const orgId = 'your_org_id'
const offerId = "your_offer_id"
const offer = await offerApi.getOffer(orgId, offerId)
```

## Legacy authentication (API key)

:::warning
API-key authentication is **deprecated**. New integrations should use the OAuth
access token shown above. The API-key example below is retained only for
existing integrations.
:::

To authenticate an existing integration with an API key, pass it as `Key <key>`
instead of a bearer token:

```ts
const authConfig: api.AuthMethodsConfiguration = {
    APIKeyAuth: "Key " + "your-api-key",
}
```

## Conclusion

You are now ready to use the Suger TS SDK in your application! For more detailed information and advanced usage, please refer to the official documentation.
