---
title: Write data
description: Write time series data to InfluxDB OSS v2 buckets in line protocol format using the /api/v2/write endpoint.
url: https://docs.influxdata.com/influxdb/v2/api/write-data/
estimated_tokens: 7432
product: InfluxDB OSS v2
version: v2
---

[Download InfluxDB API Spec](/openapi/influxdb-oss-v2-api.yml)

Write time series data to InfluxDB OSS v2 buckets in line protocol format using the `/api/v2/write` endpoint.

POST `/api/v2/write`

### Write data

Writes data to a bucket.

Use this endpoint to send data in [line protocol](/influxdb/v2/reference/syntax/line-protocol/) format to InfluxDB.

#### InfluxDB Cloud

-   Does the following when you send a write request:
    
    1. Validates the request and queues the write.
    2. If queued, responds with *success* (HTTP `2xx` status code); *error* otherwise.
    3. Handles the delete asynchronously and reaches eventual consistency.
    
    To ensure that InfluxDB Cloud handles writes and deletes in the order you request them, wait for a success response (HTTP `2xx` status code) before you send the next request.
    
    Because writes and deletes are asynchronous, your change might not yet be readable when you receive the response.
    

#### InfluxDB OSS v2

-   Validates the request and handles the write synchronously.
-   If all points were written successfully, responds with HTTP `2xx` status code; otherwise, returns the first line that failed.

#### Required permissions

-   `write-buckets` or `write-bucket BUCKET_ID`.

*`BUCKET_ID`* is the ID of the destination bucket.

#### Rate limits (with InfluxDB Cloud)

`write` rate limits apply. For more information, see [limits and adjustable quotas](/influxdb/cloud/account-management/limits/).

#### Related guides

-   [Write data with the InfluxDB API](/influxdb/v2/write-data/developer-tools/api)
-   [Optimize writes to InfluxDB](/influxdb/v2/write-data/best-practices/optimize-writes/)
-   [Troubleshoot issues writing data](/influxdb/v2/write-data/troubleshoot/)

#### Parameters

##### Query parameters

`org` required string

An organization name or ID.

#### InfluxDB Cloud

-   Doesn’t use the `org` parameter or `orgID` parameter.
-   Writes data to the bucket in the organization associated with the authorization (API token).

#### InfluxDB OSS v2

-   Requires either the `org` parameter or the `orgID` parameter.
-   If you pass both `orgID` and `org`, they must both be valid.
-   Writes data to the bucket in the specified organization.

`orgID` string

An organization ID.

#### InfluxDB Cloud

-   Doesn’t use the `org` parameter or `orgID` parameter.
-   Writes data to the bucket in the organization associated with the authorization (API token).

#### InfluxDB OSS v2

-   Requires either the `org` parameter or the `orgID` parameter.
-   If you pass both `orgID` and `org`, they must both be valid.
-   Writes data to the bucket in the specified organization.

`bucket` required string

A bucket name or ID. InfluxDB writes all points in the batch to the specified bucket.

`precision` string

The precision for unix timestamps in the line protocol batch.

##### Header parameters

`Zap-Trace-Span` string

OpenTracing span context

`Content-Encoding` string

The compression applied to the line protocol in the request payload. To send a gzip payload, pass `Content-Encoding: gzip` header.

Allowed values: `gzip` , `identity`

Default: `identity`

`Content-Type` string

The format of the data in the request body. To send a line protocol payload, pass `Content-Type: text/plain; charset=utf-8`.

Allowed values: `text/plain` , `text/plain; charset=utf-8`

Default: `text/plain; charset=utf-8`

`Content-Length` integer

The size of the entity-body, in bytes, sent to InfluxDB. If the length is greater than the `max body` configuration option, the server responds with status code `413`.

`Accept` string

The content type that the client can understand. Writes only return a response body if they fail–for example, due to a formatting problem or quota limit.

#### InfluxDB Cloud

-   Returns only `application/json` for format and limit errors.
-   Returns only `text/html` for some quota limit errors.

#### InfluxDB OSS v2

-   Returns only `application/json` for format and limit errors.

#### Related guides

-   [Troubleshoot issues writing data](/influxdb/v2/write-data/troubleshoot/)

Allowed values: `application/json`

Default: `application/json`

#### Request body required

In the request body, provide data in [line protocol format](/influxdb/v2/reference/syntax/line-protocol/).

To send compressed data, do the following:

1. Use [gzip](https://www.gzip.org/) to compress the line protocol data.
2. In your request, send the compressed data and the `Content-Encoding: gzip` header.

#### Related guides

-   [Best practices for optimizing writes](/influxdb/v2/write-data/best-practices/optimize-writes/)

Content-Type: `application/json`

Example request [Ask AI about this](#)

```sh
curl --request POST \
  "http://localhost:8086/api/v2/write?org=ORG&bucket=BUCKET" \
  --header "Authorization: Bearer INFLUX_TOKEN" \
  --header "Content-Type: text/plain" \
  --data-raw 'airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.48445310567793615 1630424257000000000'
```

#### Responses

204

Success.

#### InfluxDB Cloud

-   Validated and queued the request.
-   Handles the write asynchronously - the write might not have completed yet.

#### InfluxDB OSS v2

-   Successfully wrote all points in the batch.

#### Related guides

-   [How to check for write errors](/influxdb/v2/write-data/troubleshoot/)

400

Bad request. The response body contains detail about the error.

InfluxDB returns this error if the line protocol data in the request is malformed. The response body contains the first malformed line in the data, and indicates what was expected.

#### InfluxDB Cloud

-   Returns this error for bucket schema conflicts.

#### InfluxDB OSS v2

-   Returns this error if the `org` parameter or `orgID` parameter doesn’t match an organization.

`code` required string

Code is the machine-readable error code.

Allowed: `internal error` , `not found` , `conflict` , `invalid` , `empty value` , `unavailable`

`err` string

Stack of errors that occurred during processing of the request. Useful for debugging.

`line` integer <int32>

First line in the request body that contains malformed data.

`message` string

Human-readable message.

`op` string

Describes the logical code operation when the error occurred. Useful for debugging.

401

Unauthorized. The error may indicate one of the following:

-   The `Authorization: Token` header is missing or malformed.
-   The API token value is missing from the header.
-   The token doesn’t have sufficient permissions to write to this organization and bucket.

`code` string

The HTTP status code description. Default is `unauthorized`.

Allowed: `unauthorized`

`message` string

A human-readable message that may contain detail about the error.

404

Not found. A requested resource was not found. The response body contains the requested resource type and the name value (if you passed it)–for example:

-   `"organization name \"my-org\" not found"`
-   `"organization not found"`: indicates you passed an ID that did not match an organization.

`code` required string

code is the machine-readable error code.

Allowed: `internal error` , `not implemented` , `not found` , `conflict` , `invalid` , `unprocessable entity` , `empty value` , `unavailable` , `forbidden` , `too many requests` , `unauthorized` , `method not allowed` , `request too large` , `unsupported media type`

`err` string

Stack of errors that occurred during processing of the request. Useful for debugging.

`message` string

Human-readable message.

`op` string

Describes the logical code operation when the error occurred. Useful for debugging.

413

The request payload is too large. InfluxDB rejected the batch and did not write any data.

#### InfluxDB Cloud:

-   Returns this error if the payload exceeds the 50MB size limit.
-   Returns `Content-Type: text/html` for this error.

#### InfluxDB OSS v2:

-   Returns this error only if the [Go (golang) `ioutil.ReadAll()`](https://pkg.go.dev/io/ioutil#ReadAll) function raises an error.
-   Returns `Content-Type: application/json` for this error.

`code` required string

Code is the machine-readable error code.

Allowed: `invalid`

`message` required string

Human-readable message.

422 The request was well-formed, but some or all the points were rejected due to semantic errors–for example, schema conflicts or retention policy violations. Error message contains details for one or more rejected points.

`code` required string

code is the machine-readable error code.

Allowed: `internal error` , `not implemented` , `not found` , `conflict` , `invalid` , `unprocessable entity` , `empty value` , `unavailable` , `forbidden` , `too many requests` , `unauthorized` , `method not allowed` , `request too large` , `unsupported media type`

`err` string

Stack of errors that occurred during processing of the request. Useful for debugging.

`message` string

Human-readable message.

`op` string

Describes the logical code operation when the error occurred. Useful for debugging.

429

Too many requests.

#### InfluxDB Cloud

-   Returns this error if a **read** or **write** request exceeds your plan’s [adjustable service quotas](/influxdb/cloud/account-management/limits/#adjustable-service-quotas) or if a **delete** request exceeds the maximum [global limit](/influxdb/cloud/account-management/limits/#global-limits).
-   For rate limits that reset automatically, returns a `Retry-After` header that describes when to try the write again.
-   For limits that can’t reset (for example, **cardinality limit**), doesn’t return a `Retry-After` header.

Rates (data-in (writes), queries (reads), and deletes) accrue within a fixed five-minute window. Once a rate limit is exceeded, InfluxDB returns an error response until the current five-minute window resets.

#### InfluxDB OSS v2

-   Doesn’t return this error.

500 Internal server error. The server encountered an unexpected situation.

`code` required string

code is the machine-readable error code.

Allowed: `internal error` , `not implemented` , `not found` , `conflict` , `invalid` , `unprocessable entity` , `empty value` , `unavailable` , `forbidden` , `too many requests` , `unauthorized` , `method not allowed` , `request too large` , `unsupported media type`

`err` string

Stack of errors that occurred during processing of the request. Useful for debugging.

`message` string

Human-readable message.

`op` string

Describes the logical code operation when the error occurred. Useful for debugging.

503

Service unavailable.

-   Returns this error if the server is temporarily unavailable to accept writes.
-   Returns a `Retry-After` header that describes when to try the write again.

default Non 2XX error response from server.

`code` required string

code is the machine-readable error code.

Allowed: `internal error` , `not implemented` , `not found` , `conflict` , `invalid` , `unprocessable entity` , `empty value` , `unavailable` , `forbidden` , `too many requests` , `unauthorized` , `method not allowed` , `request too large` , `unsupported media type`

`err` string

Stack of errors that occurred during processing of the request. Useful for debugging.

`message` string

Human-readable message.

`op` string

Describes the logical code operation when the error occurred. Useful for debugging.

#### Related

-   [Write data](/influxdb/v2/write-data/)
