# How to Authenticate to the API

NVIDIA Run:ai APIs are accessed using *bearer tokens*. A token can be obtained by creating an **Application** through the NVIDIA Run:ai user interface.

An application contains a client ID and a client secret. With the client credentials you can obtain a token and use it within subsequent API calls.

* To create applications for your organization, see [Applications](https://app.gitbook.com/s/lZD4O0TqiQ8mlhnxho0w/infrastructure-setup/authentication/applications)
* To create your own user applications, see [User Applications](https://app.gitbook.com/s/lZD4O0TqiQ8mlhnxho0w/settings/user-settings/user-applications)

## Assign Access Rules

After you have created a new application, you will need to assign it access rules. To assign access rules to the service account, see [Access rules](https://app.gitbook.com/s/lZD4O0TqiQ8mlhnxho0w/infrastructure-setup/authentication/accessrules). Make sure you assign the correct rules to your service account. Use the [Roles](https://app.gitbook.com/s/lZD4O0TqiQ8mlhnxho0w/infrastructure-setup/authentication/roles) to assign the correct access rules.

## Request an API Token

Use the client credentials created to get a temporary token to access NVIDIA Run:ai as follows.

### Example Command to Get an API Token

Replace `<COMPANY-URL>` below with:

* For SaaS installations, use `<tenant-name>.run.ai`
* For self-hosted use the NVIDIA Run:ai user interface URL.

{% tabs %}
{% tab title="cURL" %}

```bash
curl -X POST \ 
  'https://<COMPANY-URL>/api/v1/token' \ 
  --header 'Accept: */*' \ 
  --header 'Content-Type: application/json' \ 
  --data-raw '{ 
  "grantType":"client_credentials", 
  "clientId":"<CLIENT ID>", 
  "clientSecret" : "<CLIENT SECRET>" 
}'
```

{% endtab %}

{% tab title="Python" %}

```python
import requests 
import json 
reqUrl = "https://<COMPANY-URL>/api/v1/token" 
headersList = { 
 "Accept": "*/*", 
 "Content-Type": "application/json" 
} 
payload = json.dumps({ 
  "grantType":"client_credentials", 
  "clientId":"<CLIENT ID>", 
  "clientSecret" : "<CLIENT SECRET>" 
}) 
response = requests.request("POST", reqUrl, data=payload, headers=headersList) 
print(response.text)
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    url := "https://<COMPANY-URL>/api/v1/token"
    payload := map[string]string{
        "grantType":    "client_credentials",
        "clientId":     "<CLIENT ID>",
        "clientSecret": "<CLIENT SECRET>",
    }
    jsonPayload, err := json.Marshal(payload)
    if err != nil {
        panic(err)
    }

    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
    if err != nil {
        panic(err)
    }
    req.Header.Set("Accept", "*/*")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(body))
}
```

{% endtab %}
{% endtabs %}

### Response

The API response will look as follows:

```json
{
  "accessToken": "<TOKEN>", 
}
```

To call NVIDIA Run:ai REST APIs, the application must pass the retrieved `accessToken` as a *Bearer token* in the Authorization header of your HTTP request.

## Additional Code Examples

For more comprehensive code examples demonstrating how to authenticate and interact with the NVIDIA Run:ai API, visit the official [NVIDIA Run:ai API Examples repository](https://github.com/run-ai/docs/tree/master/examples/api) on GitHub.

This repository contains ready-to-use code samples in multiple programming languages, including:

* [Python examples](https://github.com/run-ai/docs/tree/master/examples/api/python_client)
* [Go examples](https://github.com/run-ai/docs/tree/master/examples/api/go_client)

These examples cover common authentication flows, API requests, and best practices for securely accessing the NVIDIA Run:ai platform. You can use them as a reference or starting point for your own integrations.
