> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API Concepts

<a id="api-label" />

## Native

* [C++ API Documentation](/content/api/cpp) | [C++ GitHub Repo](https://github.com/kineticadb/kinetica-api-cpp)
* [C# API Documentation](/content/api/cs) | [C# GitHub Repo](https://github.com/kineticadb/kinetica-api-cs)
* [Java API Documentation](/content/api/java) | [Java GitHub Repo](https://github.com/kineticadb/kinetica-api-java)
* [JavaScript API Documentation](/content/api/javascript) | [JavaScript GitHub Repo](https://github.com/kineticadb/kinetica-api-javascript)
* [Node.js API Documentation](/content/api/nodejs) | [Node.js GitHub Repo](https://github.com/kineticadb/kinetica-api-javascript)
* [Python API Documentation](/content/api/python) | [Python GitHub Repo](https://github.com/kineticadb/kinetica-api-python)
* [REST API Documentation](/content/api/rest)

<a id="api-conn" />

## Connecting via API

The following shows the means of connecting to *Kinetica* via the various APIs
available.

### HTTP Connections

<CodeGroup>
  ```c++ C++ theme={null}
  #include "gpudb/GPUdb.hpp"

  gpudb::GPUdb::Options options = gpudb::GPUdb::Options();
  options.setUsername("<username>");
  options.setPassword("<password>");

  gpudb::GPUdb kinetica("http://<db.host>:9191", options);
  ```

  ```c# C# theme={null}
  using kinetica;

  Kinetica.Options options = new Kinetica.Options();
  options.Username = "<username>";
  options.Password = "<password>";

  Kinetica kinetica = new Kinetica("http://<db.host>:9191", options );
  ```

  ```java Java theme={null}
  import com.gpudb.GPUdb;

  GPUdb.Options options = new GPUdb.Options()
      .setUsername("<username>")
      .setPassword("<password>");

  GPUdb kinetica = new GPUdb("http://<db.host>:9191", options);
  ```

  ```html JavaScript theme={null}
  <script type="text/javascript" src="GPUdb.js"></script>
  <script type="text/javascript">
  var kinetica = new GPUdb(
      "http://<db.host>:9191",
      {
          username: "<username>",
          password: "<password>"
      }
  );
  </script>
  ```

  ```javascript Node.js theme={null}
  // To install Kinetica, first run this from the CLI: npm i @kinetica/gpudb
  var GPUdb = require("@kinetica/gpudb");
  var kinetica = new GPUdb(
      ["http://<db.host>:9191"],
      {
          username: "<username>",
          password: "<password>"
      }
  );
  ```

  ```python Python theme={null}
  import gpudb

  options = gpudb.GPUdb.Options()
  options.username = "<username>"
  options.password = "<password>"

  kinetica = gpudb.GPUdb(
      host=["http://<db.host>:9191"],
      options = options
  )
  ```

  ```bash REST theme={null}
  # Example call invoking the /show/system/properties endpoint
  #   and requesting the database's version number
  curl --location --request POST \
       'http://<db.host>:9191/show/system/properties' \
       --user <username>:<password> \
       --data '{"options": {"properties": "version.gpudb_core_version"}}' \
       --header 'cache-control: no-cache' \
       --header 'content-type: application/json'
  ```
</CodeGroup>

<a id="https-with-certificate-validation" />

### HTTPS Connections with Certificate Validation

<CodeGroup>
  ```c++ C++ theme={null}
  #include "gpudb/GPUdb.hpp"

  gpudb::GPUdb::Options options = gpudb::GPUdb::Options();
  options.setUsername("<username>");
  options.setPassword("<password>");

  gpudb::GPUdb kinetica("https://<db.host>:8082/gpudb-0", options);
  ```

  ```c# C# theme={null}
  using kinetica;

  Kinetica.Options options = new Kinetica.Options();
  options.Username = "<username>";
  options.Password = "<password>";

  Kinetica kinetica = new Kinetica("https://<db.host>:8082/gpudb-0", options );
  ```

  ```java Java theme={null}
  import com.gpudb.GPUdb;

  GPUdb.Options options = new GPUdb.Options()
      .setUsername("<username>")
      .setPassword("<password>");

  // By default, the Java system CA trust store will be used;
  //   to specify a different trust store, use these options:
  options.setTrustStoreFilePath("</path/to/truststore.jks>");
  options.setTrustStorePassword("<trustStorePassword>");

  GPUdb kinetica = new GPUdb("https://<db.host>:8082/gpudb-0", options);
  ```

  ```html JavaScript theme={null}
  <script type="text/javascript" src="GPUdb.js"></script>
  <script type="text/javascript">
  var kinetica = new GPUdb(
      "https://<db.host>:8082/gpudb-0",
      {
          username: "<username>",
          password: "<password>"
      }
  );
  </script>
  ```

  ```javascript Node.js theme={null}
  // To install Kinetica, first run this from the CLI: npm i @kinetica/gpudb
  var GPUdb = require("@kinetica/gpudb");
  var kinetica = new GPUdb(
      ["https://<db.host>:8082/gpudb-0"],
      {
          username: "<username>",
          password: "<password>"
      }
  );
  ```

  ```python Python theme={null}
  import gpudb

  options = gpudb.GPUdb.Options()
  options.username = "<username>"
  options.password = "<password>"

  kinetica = gpudb.GPUdb(
      host=["https://<db.host>:8082/gpudb-0"],
      options = options
  )
  ```

  ```bash REST theme={null}
  # Example call invoking the /show/system/properties endpoint
  #   and requesting the database's version number
  curl --location --request POST \
       'https://<db.host>:8082/gpudb-0/show/system/properties' \
       --user <username>:<password> \
       --data '{"options": {"properties": "version.gpudb_core_version"}}' \
       --header 'cache-control: no-cache' \
       --header 'content-type: application/json'
  ```
</CodeGroup>

<a id="https-without-certificate-validation" />

### HTTPS Connections without Certificate Validation

<Info>
  Using these setups, no certificate validation of any kind will be
  performed; not recommended for production deployments.

  To bypass certificate checks in JDBC, see
  [Secure Connections](/content/connectors/sql_guide#jdbc-connecting-secure).  To bypass certificate checks
  in *KiSQL*, see [Parameterized Options](/content/tools/kisql#kisql-conn-opt).
</Info>

<CodeGroup>
  ```java Java theme={null}
  import com.gpudb.GPUdb;

  GPUdb.Options options = new GPUdb.Options()
      .setBypassSslCertCheck(true)
      .setUsername("<username>")
      .setPassword("<password>");

  GPUdb kinetica = new GPUdb("https://<db.host>:8082/gpudb-0", options);
  ```

  ```python Python theme={null}
  import gpudb

  options = gpudb.GPUdb.Options()
  options.username = "<username>"
  options.password = "<password>"
  options.skip_ssl_cert_verification = True

  kinetica = gpudb.GPUdb(
      host=["https://<db.host>:8082/gpudb-0"],
      options = options
  )
  ```

  ```bash REST theme={null}
  # Example call invoking the /show/system/properties endpoint
  #   and requesting the database's version number
  curl --location --request POST \
       'https://<db.host>:8082/gpudb-0/show/system/properties' \
       --user <username>:<password> \
       --data '{"options": {"properties": "version.gpudb_core_version"}}' \
       --insecure \
       --header 'cache-control: no-cache' \
       --header 'content-type: application/json'
  ```
</CodeGroup>

<a id="https-with-oauth" />

### HTTPS Connections with OIDC/OAuth Authentication

<CodeGroup>
  ```c++ C++ theme={null}
  #include "gpudb/GPUdb.hpp"

  gpudb::GPUdb::Options options = gpudb::GPUdb::Options();
  options.setOauthToken("<oauthToken>");

  gpudb::GPUdb kinetica("https://<db.host>:8082/gpudb-0", options);
  ```

  ```c# C# theme={null}
  using kinetica;

  Kinetica.Options options = new Kinetica.Options();
  options.OauthToken = "<oauthToken>";

  Kinetica kinetica = new Kinetica("https://<db.host>:8082/gpudb-0", options );
  ```

  ```java Java theme={null}
  import com.gpudb.GPUdb;

  GPUdb.Options options = new GPUdb.Options()
      .setOauthToken("<oauthToken>");

  GPUdb kinetica = new GPUdb("https://<db.host>:8082/gpudb-0", options);
  ```

  ```html JavaScript theme={null}
  <script type="text/javascript" src="GPUdb.js"></script>
  <script type="text/javascript">
  var kinetica = new GPUdb(
      "https://<db.host>:8082/gpudb-0",
      {
          oauth_token: "<oauthToken>"
      }
  );
  </script>
  ```

  ```javascript Node.js theme={null}
  // To install Kinetica, first run this from the CLI: npm i @kinetica/gpudb
  var GPUdb = require("@kinetica/gpudb");
  var kinetica = new GPUdb(
      ["https://<db.host>:8082/gpudb-0"],
      {
          oauth_token: "<oauthToken>"
      }
  );
  ```

  ```python Python theme={null}
  import gpudb

  options = gpudb.GPUdb.Options()
  options.oauth_token = "<oauthToken>"

  kinetica = gpudb.GPUdb(
      host=["https://<db.host>:8082/gpudb-0"],
      options = options
  )
  ```

  ```bash REST theme={null}
  # Example call invoking the /show/system/properties endpoint
  #   and requesting the database's version number
  curl --location --request POST \
       'https://<db.host>:8082/gpudb-0/show/system/properties' \
       --oauth2-bearer "<token>" \
       --data '{"options": {"properties": "version.gpudb_core_version"}}' \
       --header 'cache-control: no-cache' \
       --header 'content-type: application/json'
  ```
</CodeGroup>

<br />

<a id="api-compatibility" />

## Compatibility Matrix

The following chart shows the version compatibilities between the various APIs
and a target database server.  While only the major & minor version numbers
*(6.2, 7.0, 7.1, 7.2)* must match to achieve interoperability, the complete
feature set for a given database version can only be utilized via the
corresponding API version, depicted below.

| Database | C++    | C#     | Java   | Javascript | Node.js | Python |
| -------- | ------ | ------ | ------ | ---------- | ------- | ------ |
| 6.2      | 6.2.\* | 6.2.\* | 6.2.\* | 6.2.\*     | 6.2.\*  | 6.2.\* |
| 7.0.X    | 7.0.X  | 7.0.X  | 7.0.X  | 7.0.X      | 7.0.X   | 7.0.X  |
| 7.1.X    | 7.1.X  | 7.1.X  | 7.1.X  | 7.1.X      | 7.1.X   | 7.1.X  |
| 7.2.X    | 7.2.X  | 7.2.X  | 7.2.X  | 7.2.X      | 7.2.X   | 7.2.X  |

<br />

## Dynamic Schemas

When working with APIs, it is helpful to have an understanding of how data is
returned by the database.  For a detailed breakdown in Java & Python, see
[Dynamic Schemas](/content/api/dynamic_schemas).
