diff --git a/content/influxdb/cloud-serverless/reference/client-libraries/v3/java.md b/content/influxdb/cloud-serverless/reference/client-libraries/v3/java.md
index 3526a718e..0e1d18412 100644
--- a/content/influxdb/cloud-serverless/reference/client-libraries/v3/java.md
+++ b/content/influxdb/cloud-serverless/reference/client-libraries/v3/java.md
@@ -3,7 +3,6 @@ title: Java client library for InfluxDB v3
list_title: Java
description: >
The InfluxDB v3 `influxdb3-java` Java client library integrates with application code to write and query data stored in an InfluxDB Cloud Serverless bucket.
-external_url: https://github.com/InfluxCommunity/influxdb3-java
menu:
influxdb_cloud_serverless:
name: Java
@@ -15,22 +14,144 @@ aliases:
- /cloud-serverless/query-data/sql/execute-queries/java/
---
-The InfluxDB v3 [`influxdb3-java` Java client library](https://github.com/InfluxCommunity/influxdb3-java) integrates with Java application code
-to write and query data stored in an {{% product-name %}} bucket.
+The InfluxDB v3 [`influxdb3-java` Java client library](https://github.com/InfluxCommunity/influxdb3-java) integrates
+with Java application code to write and query data stored in an {{% product-name %}}
+bucket.
-The documentation for this client library is available on GitHub.
+InfluxDB client libraries provide configurable batch writing of data to {{% product-name %}}.
+Client libraries can be used to construct line protocol data, transform data from other formats
+to line protocol, and batch write line protocol data to InfluxDB HTTP APIs.
-InfluxDB v3 Java client library
+InfluxDB v3 client libraries can query {{% product-name %}} using SQL or InfluxQL.
+The `influxdb3-java` Java client library wraps the Apache Arrow `org.apache.arrow.flight.FlightClient`
+in a convenient InfluxDB v3 interface for executing SQL and InfluxQL queries, requesting
+server metadata, and retrieving data from {{% product-name %}} using the Flight protocol with gRPC.
-## Setup & Installation
-
-Create a command line java application using Maven or Gradle.
-
-### Maven
-
-To use Maven to install the client library in your project, add the following to your `pom.xml`:
+- [Installation](#installation)
+ - [Using Maven](#using-maven)
+ - [Using Gradle](#using-gradle)
+- [Importing the client](#importing-the-client)
+- [API reference](#api-reference)
+- [Classes](#classes)
+- [Interface InfluxDBClient](#interface-influxdbclient)
+ - [Initialize with credential parameters](#initialize-with-credential-parameters)
+ - [InfluxDBClient instance methods](#influxdbclient-instance-methods)
+ - [InfluxDBClient.writePoint](#influxdbclientwritepoint)
+ - [InfluxDBClient.query](#influxdbclientquery)
+#### Example: write and query data
+
+The following example shows how to use `influxdb3-java` to write and query data stored in {{% product-name %}}.
+
+```java
+package com.influxdata.demo;
+
+import com.influxdb.v3.client.InfluxDBClient;
+import com.influxdb.v3.client.Point;
+import com.influxdb.v3.client.query.QueryOptions;
+import com.influxdb.v3.client.query.QueryType;
+
+import java.time.Instant;
+import java.util.stream.Stream;
+
+public class HelloInfluxDB {
+ private static final String HOST_URL = "https://{{< influxdb/host >}}"; // your Cloud Serverless region URL
+ private static final String DATABASE = "java"; // your Cloud Serverless bucket
+ private static final char[] API_TOKEN = System.getenv("API_TOKEN"); // your local environment variable that stores your API Token
+
+ // Create a client instance that writes and queries data in your bucket.
+ public static void main(String[] args) {
+ // Instantiate the client with your InfluxDB credentials
+ try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, API_TOKEN, DATABASE)) {
+ writeData(client);
+ queryData(client);
+ }
+ catch (Exception e) {
+ System.err.println("An error occurred while connecting to InfluxDB Cloud Serverless!");
+ e.printStackTrace();
+ }
+ }
+
+ // Use the Point class to construct time series data.
+ private static void writeData(InfluxDBClient client) {
+ Point point = Point.measurement("temperature")
+ .setTag("location", "London")
+ .setField("value", 30.01)
+ .setTimestamp(Instant.now().minusSeconds(10));
+ try {
+ client.writePoint(point);
+ System.out.println("Data is written to the bucket.");
+ }
+ catch (Exception e) {
+ System.err.println("Failed to write data to the bucket.");
+ e.printStackTrace();
+ }
+ }
+
+ // Use SQL to query the most recent 10 measurements
+ private static void queryData(InfluxDBClient client) {
+ System.out.printf("--------------------------------------------------------%n");
+ System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
+ System.out.printf("--------------------------------------------------------%n");
+
+ String sql = "select time,location,value from temperature order by time desc limit 10";
+ try (Stream