---
title: Get started writing data
description: Get started writing data to InfluxDB by learning about line protocol and using tools like Telegraf, client libraries, and the InfluxDB API.
url: https://docs.influxdata.com/influxdb3/clustered/get-started/write/
estimated_tokens: 13362
publisher: InfluxData
canonical: https://docs.influxdata.com/influxdb3/clustered/get-started/write/
date: '2026-05-15T15:46:14-06:00'
lastmod: '2026-05-15T15:46:14-06:00'
---

* 2 / 3

This tutorial walks you through the fundamental of creating **line protocol**data and writing it to InfluxDB.

InfluxDB provides many different options for ingesting or writing data,
including the following:

* InfluxDB HTTP API (v1 and v2)
* Telegraf
* `influxctl` CLI
* `influx3` data CLI
* InfluxDB client libraries

If using tools like Telegraf or InfluxDB client libraries, they can build the
line protocol for you, but it’s good to understand how line protocol works.

## Line protocol

All data written to InfluxDB is written using **line protocol**, a text-based
format that lets you provide the necessary information to write a data point to
InfluxDB. *This tutorial covers the basics of line protocol, but for detailed
information, see the[Line protocol reference](/influxdb3/clustered/reference/syntax/line-protocol/).*

### Line protocol elements

Each line of line protocol contains the following elements:

\* Required

* \* **measurement**: A string that identifies the[table](/influxdb3/clustered/reference/glossary/#table) to store the data in.
* **tag set**: Comma-delimited list of key value pairs, each representing a tag.
  Tag keys and values are unquoted strings. *Spaces, commas, and equal characters
  must be escaped.*
* \* **field set**: Comma-delimited list of key value pairs, each
  representing a field.
  Field keys are unquoted strings. *Spaces and commas must be escaped.*Field values can be [strings](/influxdb3/clustered/reference/syntax/line-protocol/#string)(quoted),[floats](/influxdb3/clustered/reference/syntax/line-protocol/#float),[integers](/influxdb3/clustered/reference/syntax/line-protocol/#integer),[unsigned integers](/influxdb3/clustered/reference/syntax/line-protocol/#uinteger),
  or [booleans](/influxdb3/clustered/reference/syntax/line-protocol/#boolean).
* **timestamp**: [Unix timestamp](/influxdb3/clustered/reference/syntax/line-protocol/#unix-timestamp)associated with the data. InfluxDB supports up to nanosecond precision.*If the precision of the timestamp is not in nanoseconds, you must specify the
  precision when writing the data to InfluxDB.*

#### Line protocol element parsing

* **measurement**: Everything before the *first unescaped comma before the first
  whitespace*.
* **tag set**: Key-value pairs between the *first unescaped comma* and the *first
  unescaped whitespace*.
* **field set**: Key-value pairs between the *first and second unescaped whitespaces*.
* **timestamp**: Integer value after the *second unescaped whitespace*.
* Lines are separated by the newline character (`\n`). Line protocol is
  whitespace sensitive.

myMeasurement,tag1=val1,tag2=val2 field1="v1",field2=1i 0000000000000000000

*For schema design recommendations, see[InfluxDB schema design](/influxdb3/clustered/write-data/best-practices/schema-design/).*

## Construct line protocol

With a basic understanding of line protocol, you can now construct line protocol
and write data to InfluxDB.
Consider a use case where you collect data from sensors in your home.
Each sensor collects temperature, humidity, and carbon monoxide readings.
To collect this data, use the following schema:

* **measurement**: `home`
  * **tags**
    * `room`: Living Room or Kitchen

  * **fields**
    * `temp`: temperature in °C (float)
    * `hum`: percent humidity (float)
    * `co`: carbon monoxide in parts per million (integer)

  * **timestamp**: Unix timestamp in *second* precision

The following line protocol sample represents data collected hourly beginning at**2022-01-01T08:00:00Z (UTC)** until **2022-01-01T20:00:00Z (UTC)**.

##### Home sensor data line protocol

```text
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
```

## Write line protocol to InfluxDB

The following examples show how to write the preceding[sample data](#home-sensor-data-line-protocol), already in line protocol format,
to an InfluxDB Clustered database.

To learn more about available tools and options, see [Write data](/influxdb3/clustered/write-data/).

> [!Note]
> Some examples in this getting started tutorial assume your InfluxDB
> credentials (**URL**, **organization**, and **token**) are provided by[environment variables](/influxdb3/clustered/get-started/setup/?t=InfluxDB+API#configure-authentication-credentials).

#### influxctl CLI ####

Use the [`influxctl write` command](/influxdb3/clustered/reference/cli/influxctl/write/)to write the [home sensor sample data](#home-sensor-data-line-protocol) to your
InfluxDB cluster.
Provide the following:

* Database name using the `--database` flag
* Database token using the `--token` flag (use the `INFLUX_TOKEN` environment variable created in[Get started–Set up InfluxDB Clustered](/influxdb3/clustered/get-started/setup/#configure-authentication-credentials))
* Timestamp precision as seconds (`s`) using the `--precision` flag
* [Home sensor data line protocol](#home-sensor-data-line-protocol)

```sh
influxctl write \
  --database get-started \
  --token $INFLUX_TOKEN \
  --precision s \
  'home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200'
```

If successful, the output is the success message; otherwise, error details and
the failure message.

Use [Telegraf](/telegraf/v1/) to consume line protocol,
and then write it to InfluxDB Clustered.

1. If you haven’t already, follow the instructions to[download and install Telegraf](/telegraf/v1/install/).

2. Copy and save the [home sensor data sample](#home-sensor-data-line-protocol)to a file on your local system–for example, `home.lp`.

   ```
   cat <<- EOF > home.lp
   home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
   home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
   home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
   home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
   home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
   home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
   home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
   home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
   home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
   home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
   home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
   home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
   home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
   home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
   home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
   home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
   home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
   home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
   home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
   home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
   home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
   home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
   home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
   home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
   home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
   home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
   EOF
   ```

3. Run the following command to generate a Telegraf configuration file
   (`telegraf.conf`) that enables the `inputs.file` and `outputs.influxdb_v2`plugins:

   ```
   mkdir -p iot-project \
   && telegraf --sample-config \
     --input-filter file \
     --output-filter influxdb_v2 \
     > iot-project/telegraf.conf
   ```

4. In your editor, open `iot-project/telegraf.conf` and configure the following:

   * **`file` input plugin**: In the `[[inputs.file]].files` list, replace`"/tmp/metrics.out"` with your sample data filename. If Telegraf can’t
     find a file when started, it stops processing and exits.

     ```
     [[inputs.file]]
       ## Files to parse each interval.  Accept standard unix glob matching rules,
       ## as well as ** to match recursive files and directories.
       files = ["home.lp"]
       # Set the timestamp precision to the precision in your data.
       influx_timestamp_precision = '1s'
       ## Optionally, use the newer, more efficient line protocol parser
       influx_parser_type = 'upstream'
     ```

Write data with your existing workloads that already use the InfluxDB v1 `/write`API endpoint.

> [!Note]
> If migrating data from InfluxDB 1.x, see the[Migrate data from InfluxDB 1.x to InfluxDB
> InfluxDB Clustered](/influxdb3/clustered/guides/migrate-data/migrate-1x-to-clustered/)guide.

To write data to InfluxDB using the[InfluxDB v1 HTTP API](/influxdb3/clustered/reference/api/), send a
request to the[InfluxDB API `/write` endpoint](/influxdb3/clustered/api/data-api/write-data/)using the `POST` request method.

```
POST https://cluster-host.com/write
```

Include the following with your request:

* **Headers**:
  * **Authorization**: Bearer \<INFLUX\_TOKEN\>
  * **Content-Type**: text/plain; charset=utf-8
  * **Accept**: application/json

* **Query parameters**:
  * **db**: InfluxDB database name
  * **precision**:[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision) (default is `ns`)

* **Request body**: Line protocol as plain text

> [!Note]
> With the InfluxDB Clustered[v1 API `/write` endpoint](/influxdb3/clustered/api/data-api/write-data/),`Authorization: Bearer` and `Authorization: Token` are equivalent and you can
> use either scheme to pass a database token in your request.
> Include the word `Bearer` or `Token`, a space, and your **token** value (all case-sensitive).
> For more information
> about HTTP API token schemes, see how to[authenticate API requests](/influxdb3/clustered/guides/api-compatibility/v1/).

The following example uses cURL and the InfluxDB v1 API to write line protocol
to InfluxDB:

```sh
response=$(curl --silent --write-out "%{response_code}:-%{errormsg}" \
  "https://cluster-host.com/write?db=get-started&precision=s" \
  --header "Authorization: Bearer DATABASE_TOKEN" \
  --header "Content-type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
")

# Format the response code and error message output.
response_code=${response%%:-*}
errormsg=${response#*:-}

# Remove leading and trailing whitespace from errormsg
errormsg=$(echo "${errormsg}" | tr -d '[:space:]')

echo "$response_code"
if [[ $errormsg ]]; then
  echo "$errormsg"
fi
```

Replace the following:

* `DATABASE_TOKEN`:
  a [database token](/influxdb3/clustered/admin/tokens/#database-tokens) with
  sufficient permissions to the specified database

If successful, the output is an HTTP `204 No Content` status code; otherwise,
the error status code and failure message.

```
204
```

To write data to InfluxDB using the[InfluxDB v2 HTTP API](/influxdb3/clustered/reference/api/), send a request
to the InfluxDB API `/api/v2/write` endpoint using the `POST` request method.

```
POST https://cluster-host.com/api/v2/write
```

Include the following with your request:

* **Headers**:
  * **Authorization**: Bearer \<INFLUX\_TOKEN\>
  * **Content-Type**: text/plain; charset=utf-8
  * **Accept**: application/json

* **Query parameters**:
  * **bucket**: InfluxDB database name
  * **precision**:[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision) (default is `ns`)

* **Request body**: Line protocol as plain text

> [!Note]
> The InfluxDB Clustered v2 API `/api/v2/write` endpoint supports`Bearer` and `Token` authorization schemes and you can use either scheme to pass
> a database token in your request.
> For more information about HTTP API token
> schemes, see how to[authenticate API requests](/influxdb3/clustered/guides/api-compatibility/v2/).

The following example uses cURL and the InfluxDB v2 API to write line protocol
to InfluxDB:

```sh
response=$(curl --silent --write-out "%{response_code}:-%{errormsg}" \
  "https://cluster-host.com/api/v2/write?bucket=get-started&precision=s" \
  --header "Authorization: Bearer DATABASE_TOKEN" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800
home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400
home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400
home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000
home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000
home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600
home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600
home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200
home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200
home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800
home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800
home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400
home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400
home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000
home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000
home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600
home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600
home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200
home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200
")

# Format the response code and error message output.
response_code=${response%%:-*}
errormsg=${response#*:-}

# Remove leading and trailing whitespace from errormsg
errormsg=$(echo "${errormsg}" | tr -d '[:space:]')

echo "$response_code"
if [[ $errormsg ]]; then
  echo "$errormsg"
fi
```

Replace the following:

* `DATABASE_TOKEN`:
  a [database token](/influxdb3/clustered/admin/tokens/#database-tokens) with
  sufficient permissions to the specified database

If successful, the output is an HTTP `204 No Content` status code; otherwise,
the error status code and failure message.

```
204
```

To write data to InfluxDB Clustered using Python, use the[`influxdb_client_3` module](https://github.com/InfluxCommunity/influxdb3-python).
The following steps include setting up a Python virtual environment to scope
dependencies to your current project.

1. Create a module directory and navigate into it–for example:

   ```
   mkdir -p influxdb_py_client && cd influxdb_py_client
   ```

2. Setup your Python virtual environment.
   Inside of your module directory, enter the following command:

   ```
   python -m venv envs/virtual-env
   ```

3. Activate the virtual environment.

   ```
   source ./envs/virtual-env/bin/activate
   ```

4. Install the client library package:

   ```
   pip install influxdb3-python
   ```

   The `influxdb3-python` package provides the `influxdb_client_3` module and
   also installs the[`pyarrow` package](https://arrow.apache.org/docs/python/index.html) for
   working with Arrow data returned from queries.

5. In your terminal or editor, create a new file for your code–for example:`write.py`.

   ```
   touch write.py
   ```

6. Inside of `write.py`, enter the following sample code:

   ```
   from influxdb_client_3 import InfluxDBClient3
   import os

   # INFLUX_TOKEN is an environment variable you assigned to your
   # database WRITE token value.
   token = os.getenv('INFLUX_TOKEN')

   # host is the URL hostname without protocol or trailing slash
   client = InfluxDBClient3(
       host='cluster-host.com',
       org='',
       token=token,
       database='get-started'
   )

   lines = [
       "home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000",
       "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000",
       "home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600",
       "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600",
       "home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200",
       "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200",
       "home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800",
       "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800",
       "home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641038400",
       "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400",
       "home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641042000",
       "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000",
       "home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641045600",
       "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600",
       "home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641049200",
       "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200",
       "home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641052800",
       "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800",
       "home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641056400",
       "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400",
       "home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641060000",
       "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000",
       "home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641063600",
       "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600",
       "home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641067200",
       "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200"
   ]

   client.write(lines,write_precision='s')
   ```

   The sample does the following:

   1. Imports the `InfluxDBClient3` object from the `influxdb_client_3` module.

   2. Calls the `InfluxDBClient3()` constructor to instantiate an InfluxDB
      client configured with the following credentials:

      * **`host`**: InfluxDB cluster hostname (URL
        without protocol or trailing slash)
      * **`org`**: an empty or arbitrary string (InfluxDB ignores this
        parameter)
      * **`token`**: a[database token](/influxdb3/clustered/admin/tokens/#database-tokens)with write access to the specified database. *Store this in a secret
        store or environment variable to avoid exposing the raw token string.*
      * **`database`**: the name of the InfluxDB Clustered database to write
        to

   3. Defines a list of line protocol strings where each string represents a
      data record.

   4. Calls the `client.write()` method with the line protocol record list and
      write options.

      **Because the timestamps in the sample line protocol are in second
      precision, the example passes the `write_precision='s'` option to set the[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision)to seconds.**

7. To execute the module and write line protocol to your InfluxDB Clustered
   database, enter the following command in your terminal:

   ```
   python write.py
   ```

If successful, the output is the success message; otherwise, error details and
the failure message.

To write data to InfluxDB Clustered using Go, use the InfluxDB 3[influxdb3-go client library package](https://github.com/InfluxCommunity/influxdb3-go).

1. Inside of your project directory, create a new module directory and navigate
   into it.

   ```
   mkdir -p influxdb_go_client && cd influxdb_go_client
   ```

2. Initialize a new Go module in the directory.

   ```
   go mod init influxdb_go_client
   ```

3. In your terminal or editor, create a new file for your code–for example:`write.go`.

   ```
   touch write.go
   ```

4. Inside of `write.go`, enter the following sample code:

   ```
   package main

   import (
     "context"
     "os"
     "fmt"
     "log"

     "github.com/InfluxCommunity/influxdb3-go/v2/influxdb3"
   )

   // Write line protocol data to InfluxDB
   func WriteLineProtocol() error {
     // INFLUX_TOKEN is an environment variable you assigned to your
     // database WRITE token value.
     token := os.Getenv("INFLUX_TOKEN")
     database := os.Getenv("INFLUX_DATABASE")

     // Initialize a client with URL and token,
     // and set the timestamp precision for writes.
     client, err := influxdb3.New(influxdb3.ClientConfig{
       Host:     "https://cluster-host.com",
       Token:    token,
       Database: database,
       WriteOptions: &influxdb3.WriteOptions{Precision: lineprotocol.Second},
     })

     // Close the client when the function returns.
     defer func(client *influxdb3.Client) {
       err := client.Close()
       if err != nil {
         panic(err)
       }
     }(client)

     // Define line protocol records to write.
     // Use a raw string literal (denoted by backticks)
     // to preserve backslashes and prevent interpretation
     // of escape sequences--for example, escaped spaces in tag values.
     lines := [...]string{
       `home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641124000`,
       `home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641124000`,
       `home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641127600`,
       `home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641127600`,
       `home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641131200`,
       `home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641131200`,
       `home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641134800`,
       `home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641134800`,
       `home,room=Living\ Room temp=22.2,hum=35.9,co=0i 1641138400`,
       `home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641138400`,
       `home,room=Living\ Room temp=22.4,hum=36.0,co=0i 1641142000`,
       `home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641142000`,
       `home,room=Living\ Room temp=22.3,hum=36.1,co=0i 1641145600`,
       `home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641145600`,
       `home,room=Living\ Room temp=22.3,hum=36.1,co=1i 1641149200`,
       `home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641149200`,
       `home,room=Living\ Room temp=22.4,hum=36.0,co=4i 1641152800`,
       `home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641152800`,
       `home,room=Living\ Room temp=22.6,hum=35.9,co=5i 1641156400`,
       `home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641156400`,
       `home,room=Living\ Room temp=22.8,hum=36.2,co=9i 1641160000`,
       `home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641160000`,
       `home,room=Living\ Room temp=22.5,hum=36.3,co=14i 1641163600`,
       `home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641163600`,
       `home,room=Living\ Room temp=22.2,hum=36.4,co=17i 1641167200`,
       `home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641167200`,
     }

     // Iterate over the lines array and write each line
     // separately to InfluxDB
     for _, record := range lines {
       err = client.Write(context.Background(), []byte(record))
       if err != nil {
         log.Fatalf("Error writing line protocol: %v", err)
       }
     }

     if err != nil {
       panic(err)
     }

     fmt.Println("Data has been written successfully.")
     return nil
   }
   ```

   The sample does the following:

   1. Imports required packages.

   2. Defines a `WriteLineProtocol()` function that does the following:

      1. To instantiate the client, calls the`influxdb3.New(influxdb3.ClientConfig)` function and passes the
         following:

         * **`Host`**: the InfluxDB cluster URL

         * **`Database`**: The name of your InfluxDB Clustered database

         * **`Token`**: a[database token](/influxdb3/clustered/admin/tokens/#database-tokens)with *write* access to the specified database. *Store this in a
           secret store or environment variable to avoid exposing the raw
           token string.*

         * **`WriteOptions`**: `influxdb3.WriteOptions` options for writing
           to InfluxDB.

           **Because the timestamps in the sample line protocol are in second
           precision, the example passes the `Precision: lineprotocol.Second`option to set the[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision)to seconds.**

      2. Defines a deferred function that closes the client when the function
         returns.

      3. Defines an array of line protocol strings where each string
         represents a data record.

      4. Iterates through the array of line protocol and calls the write
         client’s `Write()` method to write each line of line protocol
         separately to InfluxDB.

5. In your editor, create a `main.go` file and enter the following sample code
   that calls the `WriteLineProtocol()` function:

   ```
   package main

   // Module main function
   func main() {
     WriteLineProtocol()
   }
   ```

6. To install dependencies and write the data to your InfluxDB Clustered
   database, enter the following command into your terminal:

   ```
   go mod tidy && go run influxdb_go_client
   ```

If successful, the output is the success message; otherwise, error details and
the failure message.

1. If you haven’t already, follow the instructions for[Downloading and installing Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)for your system.

2. In your terminal, enter the following command to create a`influxdb_js_client` directory for your project:

   ```
   mkdir influxdb_js_client && cd influxdb_js_client
   ```

3. Inside of `influxdb_js_client`, enter the following command to initialize a
   package. This example configures the package to use[ECMAScript modules (ESM)](https://nodejs.org/api/packages.html#modules-loaders).

   ```
   npm init -y; npm pkg set type="module"
   ```

4. Install the `@influxdata/influxdb3-client` JavaScript client library as a
   dependency to your project.

   ```
   npm install --save @influxdata/influxdb3-client
   ```

5. In your terminal or editor, create a `write.js` file.

   ```
   touch write.js
   ```

6. Inside of `write.js`, enter the following sample code:

   ```
   // write.js
   import { InfluxDBClient } from '@influxdata/influxdb3-client';

   /**
    * Set InfluxDB credentials.
    */
   const host = 'cluster-host.com';
   const database = 'get-started';
   /**
    * INFLUX_TOKEN is an environment variable you assigned to your
    * WRITE token value.
    */
   const token = process.env.INFLUX_TOKEN;

   /**
    * Write line protocol to InfluxDB using the JavaScript client library.
    */
   export async function writeLineProtocol() {
     /**
      * Instantiate an InfluxDBClient
      */
     const client = new InfluxDBClient({ host, token });

     /**
      * Define line protocol records to write.
      */
     const records = [
       `home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1641124000`,
       `home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641124000`,
       `home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1641127600`,
       `home,room=Kitchen temp=23.0,hum=36.2,co=0 1641127600`,
       `home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1641131200`,
       `home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641131200`,
       `home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1641134800`,
       `home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641134800`,
       `home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1641138400`,
       `home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641138400`,
       `home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1641142000`,
       `home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641142000`,
       `home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1641145600`,
       `home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641145600`,
       `home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1641149200`,
       `home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641149200`,
       `home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1641152800`,
       `home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641152800`,
       `home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1641156400`,
       `home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641156400`,
       `home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1641160000`,
       `home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641160000`,
       `home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1641163600`,
       `home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641163600`,
       `home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1641167200`,
       `home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641167200`,
     ];

     /**
      * Creates an array that contains separate write request promises
      * for all the records.
      */
     const writePromises = records.map((record) => {
       return client.write(record, database, '', { precision: 's' }).then(
         () => `Data has been written successfully: ${record}`,
         () => `Failed writing data: ${record}`
       );
     });

     /**
      * Wait for all the write promises to settle, and then output the results.
      */
     const writeResults = await Promise.allSettled(writePromises);
     writeResults.forEach((write) => console.log(write.value));

     /** Close the client to release resources. */
     await client.close();
   }
   ```

   The sample code does the following:

   1. Imports the `InfluxDBClient` class.

   2. Calls the `new InfluxDBClient()` constructor and passes a`ClientOptions` object to instantiate a client configured with InfluxDB
      credentials.

      * **`host`**: your InfluxDB cluster URL
      * **`token`**: a[database token](/influxdb3/clustered/admin/tokens/#database-tokens)with *write* access to the specified database. *Store this in a secret
        store or environment variable to avoid exposing the raw token string.*

   3. Defines a list of line protocol strings where each string represents a
      data record.

   4. Calls the client’s `write()` method for each record, defines the success
      or failure message to return, and collects the pending promises into the`writePromises` array. Each call to `write()` passes the following
      arguments:

      * **`record`**: the line protocol record
      * **`database`**: the name of the InfluxDB Clustered database to write
        to
      * **`{precision}`**: a `WriteOptions` object that sets the `precision`value.

      **Because the timestamps in the sample line protocol are in second
      precision, the example passes `s` as the `precision` value to set the
      write[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision)to seconds.**

   5. Calls `Promise.allSettled()` with the promises array to pause execution
      until the promises have completed, and then assigns the array containing
      success and failure messages to a `writeResults` constant.

   6. Iterates over and prints the messages in `writeResults`.

   7. Closes the client to release resources.

7. In your terminal or editor, create an `index.js` file.

8. Inside of `index.js`, enter the following sample code to import and call`writeLineProtocol()`:

   ```
   // index.js
   import { writeLineProtocol } from './write.js';

   /**
    * Execute the client functions.
    */
   async function main() {
     /** Write line protocol data to InfluxDB. */
     await writeLineProtocol();
   }

   main();
   ```

9. In your terminal, execute `index.js` to write to InfluxDB Clustered:

   ```
   node index.js
   ```

If successful, the output is the success message; otherwise, error details and
the failure message.

1. If you haven’t already, follow the[Microsoft.com download instructions](https://dotnet.microsoft.com/en-us/download)to install .NET and the `dotnet` CLI.

2. In your terminal, create an executable C# project using the .NET **console**template.

   ```
   dotnet new console --name influxdb_csharp_client
   ```

3. Change into the generated `influxdb_csharp_client` directory.

   ```
   cd influxdb_csharp_client
   ```

4. Run the following command to install the latest version of the InfluxDB 3
   C# client library.

   ```
   dotnet add package InfluxDB3.Client
   ```

5. In your editor, create a `Write.cs` file and enter the following sample
   code:

   ```
   // Write.cs

   using System;
   using System.Threading.Tasks;
   using InfluxDB3.Client;
   using InfluxDB3.Client.Query;

   namespace InfluxDBv3;

   public class Write
   {
     /**
       * Writes line protocol to InfluxDB using the C# .NET client
       * library.
       */
     public static async Task WriteLines()
     {
       // Set InfluxDB credentials
       const string host = "https://cluster-host.com";
       string? database = "get-started";

       /**
         * INFLUX_TOKEN is an environment variable you assigned to your
         * WRITE token value.
         */
       string? token = System.Environment
           .GetEnvironmentVariable("INFLUX_TOKEN");

       // Instantiate the InfluxDB client with credentials.
       using var client = new InfluxDBClient(
           host, token: token, database: database);

       /**
         * Define an array of line protocol strings to write.
         * Include an additional backslash to preserve backslashes
         * and prevent interpretation of escape sequences---for example,
         * escaped spaces in tag values.
         */
       string[] lines = new string[] {
             "home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1641024000",
             "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000",
             "home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1641027600",
             "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600",
             "home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1641031200",
             "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200",
             "home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1641034800",
             "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800",
             "home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1641038400",
             "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400",
             "home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1641042000",
             "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000",
             "home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1641045600",
             "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600",
             "home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1641049200",
             "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200",
             "home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1641052800",
             "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800",
             "home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1641056400",
             "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400",
             "home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1641060000",
             "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000",
             "home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1641063600",
             "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600",
             "home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1641067200",
             "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200"
       };

       // Write each record separately.
       foreach (string line in lines)
       {
         // Write the record to InfluxDB with timestamp precision in seconds.
         await client.WriteRecordAsync(
             record: line, precision: WritePrecision.S);
         Console.WriteLine(
             "Data has been written successfully: {0,-30}", line);
       }
     }
   }
   ```

   The sample does the following:

   1. Calls the `new InfluxDBClient()` constructor to instantiate a client
      configured with InfluxDB credentials.

      * **`host`**: your InfluxDB cluster URL
      * **`database`**: the name of the InfluxDB Clustered database to write
        to
      * **`token`**: a[database token](/influxdb3/clustered/admin/tokens/#database-tokens)with *write* access to the specified database. *Store this in a secret
        store or environment variable to avoid exposing the raw token string.*

      *The `using` statement ensures that the program disposes of the
      client when it’s no longer needed.*

   2. Defines an array of line protocol strings where each string represents a
      data record.

   3. Calls the client’s `WriteRecordAsync()` method to write each line
      protocol record to InfluxDB.

      **Because the timestamps in the sample line protocol are in second
      precision, the example passes the[`WritePrecision.S` enum value](https://github.com/InfluxCommunity/influxdb3-csharp/blob/main/Client/Write/WritePrecision.cs)to the `precision:` option to set
      the[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision)to seconds.**

6. In your editor, open the `Program.cs` file and replace its contents with the
   following:

   ```
   // Program.cs

   using System;
   using System.Threading.Tasks;

   namespace InfluxDBv3;

   public class Program
   {
     public static async Task Main()
     {
       await Write.WriteLineProtocol();
     }
   }
   ```

   The `Program` class shares the same `InfluxDBv3` namespace as the `Write`class you defined in the preceding step and defines a `Main()` function that
   calls `Write.WriteLineProtocol()`. The `dotnet` CLI recognizes`Program.Main()` as the entry point for your program.

7. To build and execute the program and write the line protocol to your
   InfluxDB Clustered database, enter the following command in your terminal:

   ```
   dotnet run
   ```

If successful, the output is the success message; otherwise, error details and
the failure message.

*The tutorial assumes using Maven version 3.9 and Java version \>= 15.*

1. If you haven’t already, follow the instructions to download and install the[Java JDK](https://www.oracle.com/java/technologies/downloads/) and[Maven](https://maven.apache.org/download.cgi) for your system.

2. In your terminal or editor, use Maven to generate a project–for example:

   ```
   mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate \
   -DarchetypeArtifactId="maven-archetype-quickstart" \
   -DarchetypeGroupId="org.apache.maven.archetypes" -DarchetypeVersion="1.4" \
   -DgroupId="com.influxdbv3" -DartifactId="influxdb_java_client"
   -Dversion="1.0"
   ```

   Maven creates the `<artifactId>` directory (`./influxdb_java_client`) that
   contains a `pom.xml` and scaffolding for your`com.influxdbv3.influxdb_java_client` Java application.

3. In your terminal or editor, change into the `./influxdb_java_client`directory–for example:

   ```
   cd ./influxdb_java_client
   ```

4. In your editor, open the `pom.xml` Maven configuration file and add the`com.influxdb.influxdb3-java` client library into `dependencies`.

   ```
   ...
   <dependencies>
     ...
     <dependency>
     <groupId>com.influxdb</groupId>
     <artifactId>influxdb3-java</artifactId>
     <version>0.1.0</version>
     </dependency>
     ...
   </dependencies>
   ```

5. To check your `pom.xml` for problems, run Maven’s `validate` command–for example,
   enter the following in your terminal:

   ```
   mvn validate
   ```

6. In your editor, navigate to the`./influxdb_java_client/src/main/java/com/influxdbv3` directory and create a`Write.java` file.

7. In `Write.java`, enter the following sample code:

   ```
   // Write.java
   package com.influxdbv3;

   import java.util.List;
   import com.influxdb.v3.client.InfluxDBClient;
   import com.influxdb.v3.client.write.WriteOptions;
   import com.influxdb.v3.client.write.WritePrecision;

   /**
     * Writes line protocol to InfluxDB using the Java client
     * library.
     */
   public final class Write {
       /**
       * Write data to InfluxDB 3.
       */
       private Write() {
           //not called
       }

       /**
         * @throws Exception
         */
       public static void writeLineProtocol() throws Exception {

           // Set InfluxDB credentials
           final String host = "https://cluster-host.com";
           final String database = "get-started";

           /**
             * INFLUX_TOKEN is an environment variable you assigned to your
             * WRITE token value.
             */
           final char[] token = (System.getenv("INFLUX_TOKEN")).
           toCharArray();

           // Instantiate the InfluxDB client.
           try (InfluxDBClient client = InfluxDBClient.getInstance(host,
           token, database)) {
               // Create a list of line protocol records.
               final List<String> records = List.of(
                 "home,room=Living\\ Room temp=21.1,hum=35.9,co=0i 1641024000",
                 "home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000",
                 "home,room=Living\\ Room temp=21.4,hum=35.9,co=0i 1641027600",
                 "home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600",
                 "home,room=Living\\ Room temp=21.8,hum=36.0,co=0i 1641031200",
                 "home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200",
                 "home,room=Living\\ Room temp=22.2,hum=36.0,co=0i 1641034800",
                 "home,room=Kitchen temp=22.4,hum=36.0,co=0i 1641034800",
                 "home,room=Living\\ Room temp=22.2,hum=35.9,co=0i 1641038400",
                 "home,room=Kitchen temp=22.5,hum=36.0,co=0i 1641038400",
                 "home,room=Living\\ Room temp=22.4,hum=36.0,co=0i 1641042000",
                 "home,room=Kitchen temp=22.8,hum=36.5,co=1i 1641042000",
                 "home,room=Living\\ Room temp=22.3,hum=36.1,co=0i 1641045600",
                 "home,room=Kitchen temp=22.8,hum=36.3,co=1i 1641045600",
                 "home,room=Living\\ Room temp=22.3,hum=36.1,co=1i 1641049200",
                 "home,room=Kitchen temp=22.7,hum=36.2,co=3i 1641049200",
                 "home,room=Living\\ Room temp=22.4,hum=36.0,co=4i 1641052800",
                 "home,room=Kitchen temp=22.4,hum=36.0,co=7i 1641052800",
                 "home,room=Living\\ Room temp=22.6,hum=35.9,co=5i 1641056400",
                 "home,room=Kitchen temp=22.7,hum=36.0,co=9i 1641056400",
                 "home,room=Living\\ Room temp=22.8,hum=36.2,co=9i 1641060000",
                 "home,room=Kitchen temp=23.3,hum=36.9,co=18i 1641060000",
                 "home,room=Living\\ Room temp=22.5,hum=36.3,co=14i 1641063600",
                 "home,room=Kitchen temp=23.1,hum=36.6,co=22i 1641063600",
                 "home,room=Living\\ Room temp=22.2,hum=36.4,co=17i 1641067200",
                 "home,room=Kitchen temp=22.7,hum=36.5,co=26i 1641067200"
               );

               /**
                * Write each record separately to InfluxDB with timestamp
                * precision in seconds.
                * If no error occurs, print a success message.
                * */
               for (String record : records) {
                   client.writeRecord(record, new WriteOptions(null, null,
                   WritePrecision.S));
                   System.out.printf("Data has been written successfully:
                   %s%n", record);
               }
           }
       }
   }
   ```

   The sample code does the following:

   1. Imports the following classes:

      * `java.util.List`;
      * `com.influxdb.v3.client.InfluxDBClient`
      * `com.influxdb.v3.client.write.WriteParameters`
      * `com.influxdb.v3.client.write.WritePrecision`

   2. Calls `InfluxDBClient.getInstance()` to instantiate a client configured
      with InfluxDB credentials.

      * **`host`**: your InfluxDB cluster URL
      * **`database`**: the name of the InfluxDB Clustered database to write
        to
      * **`token`**: a[database token](/influxdb3/clustered/admin/tokens/#database-tokens)with *write* access to the specified database. *Store this in a secret
        store or environment variable to avoid exposing the raw token string.*

   3. Defines a list of line protocol strings where each string represents a
      data record.

   4. Calls the client’s `writeRecord()` method to write each record
      separately to InfluxDB.

      **Because the timestamps in the sample line protocol are in second
      precision, the example passes the[`WritePrecision.S` enum value](https://github.com/InfluxCommunity/influxdb3-java/blob/main/src/main/java/com/influxdb/v3/client/write/WritePrecision.java)as the `precision` argument to set the write[timestamp precision](/influxdb3/clustered/reference/glossary/#timestamp-precision)to seconds.**

8. In your editor, open the `App.java` file (created by Maven) and replace its
   contents with the following sample code:

   ```
   // App.java

   package com.influxdbv3;

   /**
   * Execute the client functions.
   *
   */
   public class App {

       /**
       * @param args
       * @throws Exception
       */
       public static void main(final String[] args) throws Exception {
           // Write data to InfluxDB 3.
           Write.writeLineProtocol();
       }
   }
   ```

   * The `App` class and `Write` class are part of the same `com.influxdbv3`package (your project **groupId**).
   * `App` defines a `main()` function that calls `Write.writeLineProtocol()`.

9. In your terminal or editor, use Maven to install dependencies and compile
   the project code–for example:

   ```
   mvn compile
   ```

10. In your terminal or editor, execute `App.main()` to write to InfluxDB–for
   example, using Maven:

   ```
   mvn exec:java -Dexec.mainClass="com.influxdbv3.App"
   ```

If successful, the output is the success message; otherwise, error details and
the failure message.

[](#view-the-written-data)

View the written data

|        time        |   room    |co |hum |temp|
|--------------------|-----------|---|----|----|
|2022-01-01T08:00:00Z|  Kitchen  | 0 |35.9| 21 |
|2022-01-01T09:00:00Z|  Kitchen  | 0 |36.2| 23 |
|2022-01-01T10:00:00Z|  Kitchen  | 0 |36.1|22.7|
|2022-01-01T11:00:00Z|  Kitchen  | 0 | 36 |22.4|
|2022-01-01T12:00:00Z|  Kitchen  | 0 | 36 |22.5|
|2022-01-01T13:00:00Z|  Kitchen  | 1 |36.5|22.8|
|2022-01-01T14:00:00Z|  Kitchen  | 1 |36.3|22.8|
|2022-01-01T15:00:00Z|  Kitchen  | 3 |36.2|22.7|
|2022-01-01T16:00:00Z|  Kitchen  | 7 | 36 |22.4|
|2022-01-01T17:00:00Z|  Kitchen  | 9 | 36 |22.7|
|2022-01-01T18:00:00Z|  Kitchen  |18 |36.9|23.3|
|2022-01-01T19:00:00Z|  Kitchen  |22 |36.6|23.1|
|2022-01-01T20:00:00Z|  Kitchen  |26 |36.5|22.7|
|2022-01-01T08:00:00Z|Living Room| 0 |35.9|21.1|
|2022-01-01T09:00:00Z|Living Room| 0 |35.9|21.4|
|2022-01-01T10:00:00Z|Living Room| 0 | 36 |21.8|
|2022-01-01T11:00:00Z|Living Room| 0 | 36 |22.2|
|2022-01-01T12:00:00Z|Living Room| 0 |35.9|22.2|
|2022-01-01T13:00:00Z|Living Room| 0 | 36 |22.4|
|2022-01-01T14:00:00Z|Living Room| 0 |36.1|22.3|
|2022-01-01T15:00:00Z|Living Room| 1 |36.1|22.3|
|2022-01-01T16:00:00Z|Living Room| 4 | 36 |22.4|
|2022-01-01T17:00:00Z|Living Room| 5 |35.9|22.6|
|2022-01-01T18:00:00Z|Living Room| 9 |36.2|22.8|
|2022-01-01T19:00:00Z|Living Room|14 |36.3|22.5|
|2022-01-01T20:00:00Z|Living Room|17 |36.4|22.2|

**Congratulations!** You’ve written data to InfluxDB.
Next, learn how to query your data.

[Set up InfluxDB](/influxdb3/clustered/get-started/setup/)[Query data](/influxdb3/clustered/get-started/query/)

#### Related

* [Write data to InfluxDB Clustered](/influxdb3/clustered/write-data/)
* [Best practices for writing data](/influxdb3/clustered/write-data/best-practices/)
* [Line protocol reference](/influxdb3/clustered/reference/syntax/line-protocol/)
* [Use the InfluxDB v1 API with InfluxDB Clustered](/influxdb3/clustered/guides/api-compatibility/v1/)
* [Use the InfluxDB v2 API with InfluxDB Clustered](/influxdb3/clustered/guides/api-compatibility/v2/)
* [Telegraf documentation](/telegraf/v1/)
| time | room | co | hum | temp |
| --- | --- | --- | --- | --- |
| time | room | co | hum | temp |
| 2022-01-01T08:00:00Z | Kitchen | 0 | 35.9 | 21 |
| 2022-01-01T09:00:00Z | Kitchen | 0 | 36.2 | 23 |
| 2022-01-01T10:00:00Z | Kitchen | 0 | 36.1 | 22.7 |
| 2022-01-01T11:00:00Z | Kitchen | 0 | 36 | 22.4 |
| 2022-01-01T12:00:00Z | Kitchen | 0 | 36 | 22.5 |
| 2022-01-01T13:00:00Z | Kitchen | 1 | 36.5 | 22.8 |
| 2022-01-01T14:00:00Z | Kitchen | 1 | 36.3 | 22.8 |
| 2022-01-01T15:00:00Z | Kitchen | 3 | 36.2 | 22.7 |
| 2022-01-01T16:00:00Z | Kitchen | 7 | 36 | 22.4 |
| 2022-01-01T17:00:00Z | Kitchen | 9 | 36 | 22.7 |
| 2022-01-01T18:00:00Z | Kitchen | 18 | 36.9 | 23.3 |
| 2022-01-01T19:00:00Z | Kitchen | 22 | 36.6 | 23.1 |
| 2022-01-01T20:00:00Z | Kitchen | 26 | 36.5 | 22.7 |
| 2022-01-01T08:00:00Z | Living Room | 0 | 35.9 | 21.1 |
| 2022-01-01T09:00:00Z | Living Room | 0 | 35.9 | 21.4 |
| 2022-01-01T10:00:00Z | Living Room | 0 | 36 | 21.8 |
| 2022-01-01T11:00:00Z | Living Room | 0 | 36 | 22.2 |
| 2022-01-01T12:00:00Z | Living Room | 0 | 35.9 | 22.2 |
| 2022-01-01T13:00:00Z | Living Room | 0 | 36 | 22.4 |
| 2022-01-01T14:00:00Z | Living Room | 0 | 36.1 | 22.3 |
| 2022-01-01T15:00:00Z | Living Room | 1 | 36.1 | 22.3 |
| 2022-01-01T16:00:00Z | Living Room | 4 | 36 | 22.4 |
| 2022-01-01T17:00:00Z | Living Room | 5 | 35.9 | 22.6 |
| 2022-01-01T18:00:00Z | Living Room | 9 | 36.2 | 22.8 |
| 2022-01-01T19:00:00Z | Living Room | 14 | 36.3 | 22.5 |
| 2022-01-01T20:00:00Z | Living Room | 17 | 36.4 | 22.2 |
