# Sinch Client The *SinchClient* is the Sinch SDK entry point. It's used to configure the user’s and device’s capabilities, as well as to provide access to feature classes such as the *CallController*, *AudioController*, and *VideoController*. ## Create a *SinchClient* ```javascript const sinchClient = Sinch.getSinchClientBuilder() .applicationKey("") .environmentHost("ocra.api.sinch.com") .userId("") .build(); ``` - The *Application Key* is obtained from the [Sinch Developer Dashboard - Apps](https://dashboard.sinch.com/voice/apps). - The *User ID* should uniquely identify the user. - The term *Ocra* in the hostname `ocra.api.sinch.com` is the name of the Sinch API that SDK clients target. ## Start the Sinch client Before starting, add a client listener (see [SinchClientListener reference](https://download.sinch.com/js/latest/reference/interfaces/SinchClientListener.html)): ```javascript sinchClient.addListener({ onClientStarted: (client) => { // sinch client started successfully }, onClientFailed: (client, error) => { // sinch client start failed }, onCredentialsRequired: (client, registrationCallback) => { // registration required, get jwt token for user and register } }); sinchClient.start(); ``` ### Authorizing the client / user When `SinchClient` starts with a given user ID, you must provide an authorization token (JWT) to register with Sinch. Implement `SinchClientListener.onCredentialsRequired()` and supply a JWT signed with the Application Secret. The reference apps include a `JWT` helper showing how to create and sign the token with the Application Secret. See [Authentication & Authorization](/docs/in-app-calling/js/application-authentication) for details. Secrets in production Do not embed the Application Secret in a production app. Implement the required functionality on your backend and fetch a signed registration token when required. ### Terminate the client When you’re done, stop the client. If it’s listening for incoming events, stop listening as well. After `terminate()` any object retrieved from the client (`CallClient`, `AudioController`, etc.) is considered invalid. Terminating the client: ```javascript sinchClient.terminate(); ```