Documentation

Use the InfluxDB v1 API with InfluxDB Clustered

Limited availability

InfluxDB Clustered is currently only available to a limited group of InfluxData customers. If interested in being part of the limited access group, please contact the InfluxData Sales team.

Use the InfluxDB v1 API /write and /query endpoints with v1 workloads that you bring to InfluxDB Clustered. The v1 endpoints work with username/password authentication and existing InfluxDB 1.x tools and code. The InfluxDB v1 API /write endpoint works with InfluxDB 1.x client libraries and the Telegraf v1 Output Plugin. The InfluxDB v1 API /query endpoint supports InfluxQL and third-party integrations like Grafana.

Learn how to authenticate requests, adjust request parameters for existing v1 workloads, and find compatible tools for writing and querying data stored in an InfluxDB Clustered database.

Authenticate API requests

InfluxDB Clustered requires each API request to be authenticated with a database token. With the InfluxDB v1 API, you can use database tokens in InfluxDB 1.x username and password schemes, in the InfluxDB v2 Authorization: Token scheme, or in the OAuth Authorization: Bearer scheme.

Authenticate with a username and password scheme

With the InfluxDB v1 API, you can use the InfluxDB 1.x convention of username and password to authenticate database reads and writes by passing a database token as the password credential. When authenticating requests to the v1 API /write and /query endpoints, InfluxDB Clustered checks that the password (p) value is an authorized database token. InfluxDB Clustered ignores the username (u) parameter in the request.

Use one of the following authentication schemes with clients that support Basic authentication or query parameters (that don’t support token authentication):

Basic authentication

Use the Authorization header with the Basic scheme to authenticate v1 API /write and /query requests. When authenticating requests, InfluxDB Clustered checks that the password part of the decoded credential is an authorized database token. InfluxDB Clustered ignores the username part of the decoded credential.

Syntax
Authorization: Basic <base64-encoded [USERNAME]:DATABASE_TOKEN>

Encode the [USERNAME]:DATABASE_TOKEN credential using base64 encoding, and then append the encoded string to the Authorization: Basic header.

Most HTTP clients provide a Basic authentication option that accepts the <username>:<password> syntax and encodes the credentials before sending the request.

Example

The following example shows how to use cURL with the Basic authentication scheme and a database token:

curl --get "https://cluster-host.com/query" \
  --user "":"
DATABASE_TOKEN
"
\
--data-urlencode "db=
DATABASE_NAME
"
\
--data-urlencode "q=SELECT * FROM MEASUREMENT"

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database

Query string authentication

In the URL, pass the p query parameter to authenticate /write and /query requests. When authenticating requests, InfluxDB Clustered checks that the p (password) value is an authorized database token and ignores the u (username) parameter.

Syntax
https://cluster-host.com/query/?[u=any]&p=DATABASE_TOKEN
https://cluster-host.com/write/?[u=any]&p=DATABASE_TOKEN
Example

The following example shows how to use cURL with query string authentication and database token.

curl --get "https://cluster-host.com/query" \
  --data-urlencode "p=
DATABASE_TOKEN
"
\
--data-urlencode "db=
DATABASE_NAME
"
\
--data-urlencode "q=SELECT * FROM MEASUREMENT"

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database

Authenticate with a token scheme

Use the Authorization: Bearer or the Authorization: Token scheme to pass a database token for authenticating v1 API /write and /query requests.

Bearer and Token are equivalent in InfluxDB Clustered. The Token scheme is used in the InfluxDB 2.x API. Bearer is defined by the OAuth 2.0 Framework. Support for one or the other may vary across InfluxDB API clients.

Syntax

Authorization: Bearer DATABASE_TOKEN
Authorization: Token DATABASE_TOKEN

Examples

Use Bearer to authenticate a write request:

curl -i "https://cluster-host.com/write?db=
DATABASE_NAME
&precision=s"
\
--header "Authorization: Bearer
DATABASE_TOKEN
"
\
--header "Content-type: text/plain; charset=utf-8" \ --data-binary 'home,room=kitchen temp=72 1641024000'

Use Token to authenticate a write request:

curl -i "https://cluster-host.com/write?db=
DATABASE_NAME
&precision=s"
\
--header "Authorization: Token
DATABASE_TOKEN
"
\
--header "Content-type: text/plain; charset=utf-8" \ --data-binary 'home,room=kitchen temp=72 1641024000'

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database

Responses

InfluxDB API responses use standard HTTP status codes. For successful writes, InfluxDB responds with a 204 No Content status code. Error responses contain a JSON object with code and message properties that describe the error. Response body messages may differ across InfluxDB Clustered v1 API, v2 API, InfluxDB Cloud, and InfluxDB OSS.

Error examples

  • Invalid namespace name:

    400 Bad Request
    
    { "code":"invalid",
      "message":"namespace name length must be between 1 and 64 characters"
    }
    

    The ?db= parameter value is missing in the request. Provide the database name.

  • Failed to deserialize db/rp/precision

    400 Bad Request
    
    { "code":"invalid",
      "message":"failed to deserialize db/rp/precision in request: unknown variant `u`, expected one of `s`, `ms`, `us`, `ns`"
    }
    

    The ?precision= parameter contains an unknown value. Provide a timestamp precision.

Write data

Write data with your existing workloads that already use the InfluxDB v1 or v1.x-compatibility /write API endpoint.

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

v1 API /write parameters

For InfluxDB Clustered v1 API /write requests, set parameters as listed in the following table:

Parameter Allowed in Ignored Value
consistency Query string Ignored N/A
db * Query string Honored Database name
precision Query string Honored Timestamp precision
rp Query string Honored, but discouraged Retention policy
u Query string Ignored For query string authentication, any arbitrary string
p Query string Honored For query string authentication, a database token with permission to write to the database
Content-Encoding Header Honored gzip (compressed data) or identity (uncompressed)
Authorization Header Honored Bearer DATABASE_TOKEN, Token DATABASE_TOKEN, or Basic <base64 [USERNAME]:DATABASE_TOKEN>
* = Required

Timestamp precision

Use one of the following precision values in v1 API /write requests:

  • ns: nanoseconds
  • us: microseconds
  • ms: milliseconds
  • s: seconds
  • m: minutes
  • h: hours

Tools for writing to the v1 API

The following tools work with the InfluxDB Clustered /write endpoint:

Telegraf

If you have existing v1 workloads that use Telegraf, you can use the InfluxDB v1.x influxdb Telegraf output plugin to write data.

See how to use Telegraf and the v2 API for new workloads that don’t already use the v1 API.

The following table shows outputs.influxdb plugin parameters and values for writing to the InfluxDB Clustered v1 API:

Parameter Ignored Value
database Honored Database name
retention_policy Honored, but discouraged Duration
username Ignored String or empty
password Honored database token with permission to write to the database
content_encoding Honored gzip (compressed data) or identity (uncompressed)
skip_database_creation Ignored N/A (see how to create a database)

To configure the v1.x output plugin for writing to InfluxDB Clustered, add the following outputs.influxdb configuration in your telegraf.conf file:

[[outputs.influxdb]]
  urls = ["https://cluster-host.com"]
  database = "
DATABASE_NAME
"
skip_database_creation = true retention_policy = "" username = "ignored" password = "
DATABASE_TOKEN
"
content_encoding = "gzip

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database
Other Telegraf configuration options

influx_uint_support: supported in InfluxDB v3.

For more plugin options, see influxdb on GitHub.

Interactive clients

To test InfluxDB v1 API writes interactively from the command line, use common HTTP clients such as cURL and Postman.

Include the following in your request:

The following example shows how to use the cURL command line tool and the InfluxDB Clustered v1 API to write line protocol data to a database:

curl -i 'https://cluster-host.com/write?db=
DATABASE_NAME
&precision=s'
\
--header 'Authorization: Bearer
DATABASE_TOKEN
'
\
--header "Content-type: text/plain; charset=utf-8" \ --data-binary 'home,room=kitchen temp=72 1641024000'

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database
v1 CLI (not supported)

Don’t use the v1 CLI with InfluxDB Clustered. While it may coincidentally work, it isn’t officially supported.

Client libraries

Use language-specific v1 client libraries and your custom code to write data to InfluxDB. v1 client libraries send data in line protocol syntax to the v1 API /write endpoint.

The following samples show how to configure v1 client libraries for writing to InfluxDB Clustered:

Create a v1 API client using the node-influx JavaScript client library:

const Influx = require('influx')

// Instantiate a client for writing to InfluxDB Clustered v1 API
const client = new Influx.InfluxDB({
  host: 'cluster-host.com',
  port: 443,
  protocol: 'https'
  database: '
DATABASE_NAME
'
,
username: 'ignored', password: '
DATABASE_TOKEN
'
})

Create a v1 API client using the influxdb-python Python client library:

from influxdb import InfluxDBClient

# Instantiate a client for writing to InfluxDB Clustered v1 API
client = InfluxDBClient(
  host='cluster-host.com',
  ssl=True,
  database='
DATABASE_NAME
'
,
username='', password='
DATABASE_TOKEN
'
headers={'Content-Type': 'text/plain; charset=utf-8'} )

Replace the following:

  • DATABASE_NAME: your InfluxDB Clustered database
  • DATABASE_TOKEN: a database token with sufficient permissions to the specified database

Query data

InfluxDB Clustered provides the following protocols for executing a query:

  • Flight+gRPC request that contains an SQL or InfluxQL query. To learn how to query InfluxDB Clustered using Flight and SQL, see the Get started tutorial.
  • InfluxDB v1 API /query request that contains an InfluxQL query. Use this endpoint with InfluxDB Clustered when you bring InfluxDB 1.x workloads that already use InfluxQL and the v1 API /query endpoint.

Tools to execute queries

InfluxDB Clustered supports many different tools for querying data, including:

v1 API /query parameters

For InfluxDB Clustered v1 API /query requests, set parameters as listed in the following table:

Parameter Allowed in Ignored Value
chunked Ignored N/A (Note that an unbounded query might return a large amount of data)
db Query string Honored Database name
epoch Query string Honored Timestamp precision
p Query string Honored Database token
pretty Query string Ignored N/A
u Query string Ignored For query string authentication, any arbitrary string
p Query string Honored For query string authentication, a database token with permission to write to the database
rp Query string Honored, but discouraged Retention policy

When bringing v1 API workloads to InfluxDB Clustered, you’ll need to adjust request parameters in your client configuration or code.

Timestamp precision

Use one of the following values for timestamp precision:

  • ns: nanoseconds
  • us: microseconds
  • ms: milliseconds
  • s: seconds
  • m: minutes
  • h: hours

Database management with InfluxQL (not supported)

InfluxDB Clustered doesn’t allow InfluxQL commands for managing or modifying databases. You can’t use the following InfluxQL commands:

SELECT INTO
CREATE
DELETE
DROP
GRANT
EXPLAIN
REVOKE
ALTER
SET
KILL

Was this page helpful?

Thank you for your feedback!


The future of Flux

Flux is going into maintenance mode. You can continue using it as you currently are without any changes to your code.

Flux is going into maintenance mode and will not be supported in InfluxDB 3.0. This was a decision based on the broad demand for SQL and the continued growth and adoption of InfluxQL. We are continuing to support Flux for users in 1.x and 2.x so you can continue using it with no changes to your code. If you are interested in transitioning to InfluxDB 3.0 and want to future-proof your code, we suggest using InfluxQL.

For information about the future of Flux, see the following: