すべてのプロダクト
Search
ドキュメントセンター

Time Series Database:HTTP API

最終更新日:Mar 29, 2026

TSDB for InfluxDB® は、インスタンスのヘルス状態の確認、データのクエリ、データの書き込みのために 3 つの HTTP エンドポイントを公開しています。すべてのリクエストはポート 3242 への HTTPS 経由で行われ、HTTP 認証 (クエリ文字列パラメーター)、基本認証、および JSON Web トークン (JWT) をサポートしています。レスポンスは、標準の HTTP ステータスコードとともに JSON 形式で返されます。

エンドポイント

エンドポイント説明
/pingインスタンスのステータスとバージョンの確認
/queryデータのクエリ、データベース、保持ポリシー (RP)、およびユーザーの管理
/writeデータベースへのデータの書き込み

/ping

/ping を使用して、インスタンスが実行中であることを確認し、そのバージョンを取得します。GET リクエストと HEAD リクエストの両方がサポートされています。

定義

GET  https://<domain-name>:3242/ping?u=<username>&p=<password>
HEAD https://<domain-name>:3242/ping?u=<username>&p=<password>

verbose オプション

デフォルトでは、/ping は空の本文を持つ HTTP 204 を返します (verbose=false)。代わりに HTTP 200 を取得するには、verbose=true を設定します。

GET https://<domain-name>:3242/ping?verbose=true&u=<username>&p=<password>

インスタンスバージョンの確認

X-Influxdb-Version レスポンスヘッダーには、実行中のバージョンが含まれています。

curl -sl -I https://<domain-name>:3242/ping?u=<username>&p=<password>

レスポンス:

HTTP/1.1 204 No Content

ステータスコード

コード説明
204 No Contentインスタンスは実行中です

/query

/query を使用して、データの読み取り、データベースの管理、ユーザーの作成など、InfluxQL クエリを実行します。GET リクエストと POST リクエストの両方がサポートされています。

定義

GET  https://<domain-name>:3242/query?u=<username>&p=<password>
POST https://<domain-name>:3242/query?u=<username>&p=<password>

GET と POST の使い分け

動詞で始まるクエリに使用
GETSELECTSHOW
POSTALTERCREATEDELETEDROPGRANTKILLREVOKE

例外: SELECT ... INTO ... は POST が必要です。

クエリ文字列パラメーター

パラメーター必須説明
q=<query>必須実行する InfluxQL ステートメント
db=<database>ほとんどの SELECT および SHOW クエリで必須対象のデータベース
u=<username>認証が有効な場合に必須データベースに対する読み取り権限が必要です。p と一緒に使用します。または、基本認証 (-u username:password) を使用します。
p=<password>認証が有効な場合に必須u
epoch=[ns,u,µ,ms,s,m,h]任意指定された精度でタイムスタンプをエポック値として返します。uµ はどちらもマイクロ秒を示します。デフォルトはナノ秒の RFC 3339 タイムスタンプです。
chunked=[true,<number>]任意単一のレスポンスの代わりに、結果をバッチでストリームします。true は、シリーズごと、または 10,000 ポイントごとにチャンクします。数値の場合は、シリーズごと、またはそのポイント数でチャンクします。このパラメーターがない場合、行は切り捨てられません。
pretty=true任意JSON 出力を整形出力します。デバッグに役立ちますが、レスポンスサイズが大きくなるため、本番環境での使用は避けてください。

リクエストボディ

すべてのクエリは URL エンコードされ、InfluxQL 構文に従う必要があります。クエリは --data-urlencode を使用して渡します:

--data-urlencode "q=<InfluxQL query>"

1 つのリクエストで複数のクエリを送信するには、セミコロン (;) で区切ります。

CSV フォーマットで結果をクエリするには、Accept: application/csv ヘッダーを追加します。CSV レスポンスは RFC 3339 の代わりにエポックタイムスタンプを使用します。

ファイルからクエリを送信するには、マルチパート POST を使用します:

curl -F "q=@<path-to-file>" -F "async=true" \
  "https://<domain-name>:3242/query?u=<username>&p=<password>"

ファイル内のクエリはセミコロンで区切る必要があります。

バインドパラメーター

バインドパラメーターを使用すると、フィールド値やタグ値をクエリ文字列に直接埋め込むことなく、WHERE 句で代入できます。

クエリ構文:

--data-urlencode 'q=SELECT [...] WHERE [<field_key>|<tag_key>] = $<placeholder_key>'

マップ構文:

--data-urlencode 'params={"<placeholder_key>": <value>}'

タグ値はダブルクォーテーション (文字列型) で囲む必要があります。数値フィールド値に引用符は不要です。複数のプレースホルダーはコンマで区切ります。

SELECT クエリの実行

curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

CLI での同じデータ:

name: mymeas
time                  myfield  mytag1  mytag2
----                  -------  ------  ------
2017-03-01T00:16:18Z  33.1
2017-03-01T00:17:18Z  12.4     12      14

SELECT ... INTO クエリの実行

SELECT ... INTO は結果を新しいメジャメントに書き込み、POST が必要です:

curl -XPOST 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * INTO "newmeas" FROM "mymeas"'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"result","columns":["time","written"],"values":[["1970-01-01T00:00:00Z",2]]}]}]}

2 つのポイントが newmeas に書き込まれました。タイムスタンプ 1970-01-01T00:00:00Z (エポック 0) は null タイムスタンプに使用されます。

整形出力された JSON の返却

curl -G 'https://<domain-name>:3242/query?db=mydb&pretty=true&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'

レスポンス:

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "mymeas",
                    "columns": ["time", "myfield", "mytag1", "mytag2"],
                    "values": [
                        ["2017-03-01T00:16:18Z", 33.1, null, null],
                        ["2017-03-01T00:17:18Z", 12.4, "12", "14"]
                    ]
                }
            ]
        }
    ]
}

エポックタイムスタンプの返却

curl -G 'https://<domain-name>:3242/query?db=mydb&epoch=s&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]}]}

複数クエリの送信

クエリはセミコロンで区切ります。レスポンス内の各結果は、0 から始まる statement_id によって識別されます。

curl -G 'https://<domain-name>:3242/query?db=mydb&epoch=s&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas";SELECT mean("myfield") FROM "mymeas"'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]},{"statement_id":1,"series":[{"name":"mymeas","columns":["time","mean"],"values":[[0,22.75]]}]}]}

CSV 出力のリクエスト

curl -H "Accept: application/csv" \
  -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'

レスポンス:

name,tags,time,myfield,mytag1,mytag2
mymeas,,1488327378000000000,33.1,mytag1,mytag2
mymeas,,1488327438000000000,12.4,12,14

空のタグ列は空白で表示されます。タイムスタンプはエポックナノ秒です。

ファイルからのクエリ送信

curl -F "q=@queries.txt" -F "async=true" \
  'https://<domain-name>:3242/query?u=<username>&p=<password>'

queries.txt の例:

SELECT * FROM "mymeas";
SELECT mean("myfield") FROM "mymeas";

タグ値パラメーターのバインド

curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value' \
  --data-urlencode 'params={"tag_value":"12"}'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

$tag_value"12" にマップされます。タグ値は文字列として保存され、ダブルクォーテーションで囲む必要があります。

数値フィールド値パラメーターのバインド

curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "myfield" > $field_value' \
  --data-urlencode 'params={"field_value":30}'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null]]}]}]}

$field_value30 にマップされます。数値に引用符は不要です。

複数パラメーターのバインド

curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value AND "myfield" < $field_value' \
  --data-urlencode 'params={"tag_value":"12","field_value":30}'

レスポンス:

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

ステータスコード

レスポンスは JSON フォーマットです。整形出力を有効にするには pretty=true を含めます。

コード説明
200 OKリクエストは成功しました。結果については JSON 出力を参照してください。
400 Bad Requestクエリを処理できませんでした。多くの場合、構文エラーが原因です。JSON 出力を参照してください。
401 Unauthorized無効な認証情報です。

成功したクエリ:

curl -i -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'
HTTP/1.1 200 OK
Content-Type: application/json
X-Influxdb-Version: 1.7.x
Transfer-Encoding: chunked

{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null],["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}

存在しないデータベースを参照するクエリも 200 を返しますが、エラーは JSON ボディに含まれます:

curl -i -G 'https://<domain-name>:3242/query?db=mydb1&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT * FROM "mymeas"'
HTTP/1.1 200 OK
...
{"results":[{"statement_id":0,"error":"database not found: mydb1"}]}

不正な形式のクエリ:

curl -i -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
  --data-urlencode 'q=SELECT *'
HTTP/1.1 400 Bad Request
...
{"error":"error parsing query: found EOF, expected FROM at line 1, char 9"}

無効な認証情報を持つクエリ:

curl -i -XPOST 'https://<domain-name>:3242/query?u=myusername&p=notmypassword' \
  --data-urlencode 'q=CREATE DATABASE "mydb"'
HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}

/write

/write を使用して、既存のデータベースにデータを書き込みます。POST リクエストのみがサポートされています。

定義

POST https://<domain-name>:3242/write?u=<username>&p=<password>

クエリ文字列パラメーター

パラメーター必須説明
db=<database>必須対象のデータベース
u=<username>認証が有効な場合に必須データベースに対する書き込み権限が必要です。p と一緒に使用します。または、基本認証を使用します。
p=<password>認証が有効な場合に必須u
precision=[ns,u,ms,s,m,h]任意提供された UNIX タイムスタンプの精度。デフォルトはナノ秒です。データに一致する最小の粒度を使用して、圧縮を最大化します。
rp=<rp-name>任意対象の保持ポリシー。デフォルトは DEFAULT RP です。

リクエストボディ

データはラインプロトコルフォーマットでバイナリエンコードする必要があります:

--data-binary '<data in line protocol format>'
重要

常に --data-binary を使用してください。-d--data-urlencode、および --data-ascii モードは、改行を削除したり、予期しないフォーマットを導入したりして、書き込みエラーを引き起こす可能性があります。

1 つのリクエストで複数のポイントを書き込むには、改行 (\n) で区切ります。ファイルから書き込むには、ファイル名の前に @ を付けます:

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
  --data-binary @data.txt

ファイル内のポイントは、ラインプロトコルフォーマットで、改行で区切る必要があります。キャリッジリターン (\r) は解析の失敗を引き起こします。

5,000 から 10,000 ポイントのバッチで書き込みます。バッチが小さいと、より多くの HTTP リクエストが生成され、スループットが低下します。

秒精度のタイムスタンプでポイントを書き込む

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&precision=s&u=<username>&p=<password>" \
  --data-binary 'mymeas,mytag=1 myfield=90 1463683075'
HTTP/1.1 204 No Content

特定の保持ポリシーにポイントを書き込む

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&rp=myrp&u=<username>&p=<password>" \
  --data-binary 'mymeas,mytag=1 myfield=90'
HTTP/1.1 204 No Content

HTTP 認証 (クエリ文字列) を使用した書き込み

有効な認証情報:

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=myusername&p=mypassword" \
  --data-binary 'mymeas,mytag=1 myfield=91'
HTTP/1.1 204 No Content

無効な認証情報:

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=myusername&p=notmypassword" \
  --data-binary 'mymeas,mytag=1 myfield=91'
HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}

基本認証を使用した書き込み

有効な認証情報:

curl -i -XPOST -u myusername:mypassword "https://<domain-name>:3242/write?db=mydb" \
  --data-binary 'mymeas,mytag=1 myfield=91'
HTTP/1.1 204 No Content

無効な認証情報:

curl -i -XPOST -u myusername:notmypassword "https://<domain-name>:3242/write?db=mydb" \
  --data-binary 'mymeas,mytag=1 myfield=91'
HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}

ナノ秒タイムスタンプでポイントを書き込む

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
  --data-binary @data.txt
HTTP/1.1 204 No Content

サーバーのタイムスタンプを使用してポイントを書き込む

タイムスタンプを省略すると、サーバーの現在のナノ秒時刻が使用されます:

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
  --data-binary 'mymeas,mytag=1 myfield=90'
HTTP/1.1 204 No Content

1 つのリクエストで複数のポイントを書き込む

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
  --data-binary 'mymeas,mytag=3 myfield=89 1463689152000000000
mymeas,mytag=2 myfield=34 1463689152000000000'
HTTP/1.1 204 No Content

ファイルからポイントを書き込む

curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
  --data-binary @data.txt

data.txt の例:

mymeas,mytag1=1 value=21 1463689680000000000
mymeas,mytag1=1 value=34 1463689690000000000
mymeas,mytag2=8 value=78 1463689700000000000
mymeas,mytag3=9 value=89 1463689710000000000

ステータスコード

コード説明
204 No Content書き込みに成功しました
400 Bad Request無効なラインプロトコル構文またはフィールド型の競合
401 Unauthorized無効な認証情報です
404 Not Found対象のデータベースが存在しません
500 Internal Server Errorシステムが過負荷または障害状態です。対象の RP が存在しないことを示している可能性があります

成功した書き込み:

HTTP/1.1 204 No Content

無効なタイムスタンプ:

HTTP/1.1 400 Bad Request
{"error":"unable to parse 'mymeas,mytag=1 myfield=91 abc123': bad timestamp"}

フィールド型の競合 (以前に浮動小数点数として保存されたフィールドに整数を書き込む):

HTTP/1.1 400 Bad Request
{"error":"field type conflict: input field \"myfield\" on measurement \"mymeas\" is type int64, already exists as type float"}

無効な認証情報:

HTTP/1.1 401 Unauthorized
{"error":"authorization failed"}

対象のデータベースが存在しません:

HTTP/1.1 404 Not Found
{"error":"database not found: \"mydb1\""}

対象の保持ポリシーが存在しません:

HTTP/1.1 500 Internal Server Error
{"error":"retention policy not found: myrp"}

InfluxDB® は InfluxData の登録商標です。InfluxData は TSDB for InfluxDB® と提携しておらず、また推奨もしていません。