---
title: "Export ODT via REST API"
description: "Learn how to export Tiptap JSON documents to ODT (OpenDocument Text) format using the Tiptap Conversion REST API v2."
canonical_url: "https://tiptap.dev/docs/conversion/export/odt/rest-api"
---

# Export ODT via REST API

Learn how to export Tiptap JSON documents to ODT (OpenDocument Text) format using the Tiptap Conversion REST API v2.

- **1. Activate trial or subscribe**

  Start a [free trial](https://cloud.tiptap.dev/v2?trial=true) or [subscribe to the Start plan](https://cloud.tiptap.dev/v2/billing) in your account.
- **2. Configure Convert app**

  To use the Convert REST API retrieve your App ID and Convert secret from [your dashboard](https://cloud.tiptap.dev/v2/cloud/convert).

The ODT export API converts Tiptap JSON documents into OpenDocument Text (`.odt`) files, compatible with LibreOffice and OpenOffice.

> **Review the postman collection:**
>
> You can also experiment with the Document Conversion API by heading over to our [Postman
> Collection](https://www.postman.com/tiptap-platform/workspace/tiptap-workspace/collection/33042171-bcc93ecb-8bad-4484-8cb0-d995ee23ae60).

## Export ODT

`POST /v2/convert/export/odt`

The `/v2/convert/export/odt` endpoint converts Tiptap JSON documents into ODT format. Send a `POST` request with your document as a JSON body to receive a downloadable ODT file.

### Example (cURL)

```bash
curl --output document.odt -X POST "https://api.tiptap.dev/v2/convert/export/odt" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Hello World\"}]}]}"
    }'
```

> **Subscription required:**
>
> This endpoint requires a valid Tiptap subscription. For more details review our [pricing page](https://tiptap.dev/pricing).

### Required headers

| Name            | Description                                                                                                                               |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `Authorization` | The JWT token to authenticate the request. Example: `Bearer your-jwt-token`                                                               |
| `X-App-Id`      | The Convert App-ID from the Convert settings page: [https://cloud.tiptap.dev/v2/cloud/convert](https://cloud.tiptap.dev/v2/cloud/convert) |
| `Content-Type`  | Must be `application/json`                                                                                                                |

### Body

| Name                 | Type     | Description                                                    | Default     |
| -------------------- | -------- | -------------------------------------------------------------- | ----------- |
| `doc`                | `String` | Tiptap JSON document as a string                               | `N/A`       |
| `exportType`         | `string` | The expected export type                                       | `blob`      |
| `styleOverrides`     | `Object` | Style overrides                                                | `{}`        |
| `pageSize`           | `Object` | Page size configuration                                        | `undefined` |
| `pageMargins`        | `Object` | Page margins configuration                                     | `undefined` |
| `headers`            | `Object` | Page header configuration                                      | `undefined` |
| `footers`            | `Object` | Page footer configuration                                      | `undefined` |
| `tableOverrides`     | `Object` | Table-level rendering overrides forwarded to the DOCX step     | `undefined` |
| `paragraphOverrides` | `Object` | Paragraph-level rendering overrides forwarded to the DOCX step | `undefined` |
| `textRunOverrides`   | `Object` | Text run rendering overrides forwarded to the DOCX step        | `undefined` |
| `tableCellOverrides` | `Object` | Table cell rendering overrides forwarded to the DOCX step      | `undefined` |
| `imageOverrides`     | `Object` | Image rendering overrides forwarded to the DOCX step           | `undefined` |

#### Page Size Configuration

The `pageSize` object allows you to customize the dimensions of your exported ODT document:

| Property | Type     | Description                                                                                          | Default    |
| -------- | -------- | ---------------------------------------------------------------------------------------------------- | ---------- |
| `width`  | `string` | The width of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px).  | `"21.0cm"` |
| `height` | `string` | The height of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px). | `"29.7cm"` |

#### Page Margins Configuration

The `pageMargins` object allows you to customize the margins of your exported ODT document:

| Property | Type     | Description                                                                                                         | Default   |
| -------- | -------- | ------------------------------------------------------------------------------------------------------------------- | --------- |
| `top`    | `string` | The top margin of the page. Can be negative. Must be a number followed by a valid unit (cm, in, pt, pc, mm, px).    | `"1.0cm"` |
| `bottom` | `string` | The bottom margin of the page. Can be negative. Must be a number followed by a valid unit (cm, in, pt, pc, mm, px). | `"1.0cm"` |
| `left`   | `string` | The left margin of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px).           | `"1.0cm"` |
| `right`  | `string` | The right margin of the page. Must be a positive number followed by a valid unit (cm, in, pt, pc, mm, px).          | `"1.0cm"` |

#### Headers Configuration

The `headers` object allows you to customize the headers of your exported ODT document:

| Property             | Type      | Description                                                                                                                                                                                 |
| -------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `evenAndOddHeaders`  | `boolean` | Whether to use different headers for odd and even pages                                                                                                                                     |
| `differentFirstPage` | `boolean` | Whether to use a different header on the first page. When `true`, the `first` value is used on page one instead of `default`.                                                               |
| `default`            | `string`  | The standard default header on every page, or header on odd pages when `evenAndOddHeaders` is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting. |
| `first`              | `string`  | The header on the first page. Only used when `differentFirstPage` is set to `true`. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.                      |
| `even`               | `string`  | The header on even pages when the `evenAndOddHeaders` option is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.                               |

> **Plain text vs. Tiptap JSONContent:**
>
> Each header value can be either a **plain text string** (produces a simple unstyled header) or a **stringified Tiptap JSONContent** object (enables rich formatting such as bold, italic, links, etc.). When passing JSONContent, stringify the object with `JSON.stringify()` before sending it in the request body.

#### Footers Configuration

The `footers` object allows you to customize the footers of your exported ODT document:

| Property             | Type      | Description                                                                                                                                                                                 |
| -------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `evenAndOddFooters`  | `boolean` | Whether to use different footers for odd and even pages                                                                                                                                     |
| `differentFirstPage` | `boolean` | Whether to use a different footer on the first page. When `true`, the `first` value is used on page one instead of `default`.                                                               |
| `default`            | `string`  | The standard default footer on every page, or footer on odd pages when `evenAndOddFooters` is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting. |
| `first`              | `string`  | The footer on the first page. Only used when `differentFirstPage` is set to `true`. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.                      |
| `even`               | `string`  | The footer on even pages when the `evenAndOddFooters` option is activated. Accepts a plain text string or stringified Tiptap JSONContent for rich formatting.                               |

> **Plain text vs. Tiptap JSONContent:**
>
> Each footer value can be either a **plain text string** (produces a simple unstyled footer) or a **stringified Tiptap JSONContent** object (enables rich formatting such as bold, italic, links, etc.). When passing JSONContent, stringify the object with `JSON.stringify()` before sending it in the request body.

### Element Overrides

ODT generation goes through the DOCX pipeline, so the same five element
overrides accepted by `/export/docx` also apply here when sending Tiptap JSON.
They have **no effect** when uploading a pre-built DOCX via `docxFile`.

#### Example cURL combining multiple element overrides

```bash
curl --output document.odt -X POST "https://api.tiptap.dev/v2/convert/export/odt" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"ODT with element-level overrides\"}]}]}",
      "paragraphOverrides": {
        "spacing": { "before": 200, "after": 200 }
      },
      "textRunOverrides": {
        "font": "Arial",
        "size": 24
      }
    }'
```

### Example with custom page layout

```bash
curl --output document.odt -X POST "https://api.tiptap.dev/v2/convert/export/odt" \
    -H "Authorization: Bearer YOUR_TOKEN" \
    -H "X-App-Id: YOUR_APP_ID" \
    -H "Content-Type: application/json" \
    -d '{
      "doc": "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Hello World\"}]}]}",
      "pageSize": {
        "width": "210mm",
        "height": "297mm"
      },
      "pageMargins": {
        "top": "20mm",
        "bottom": "20mm",
        "left": "15mm",
        "right": "15mm"
      }
    }'
```

### Response

On success the API returns the ODT file as a binary download:

- **Status**: `200 OK`
- **Content-Type**: `application/vnd.oasis.opendocument.text`
- **Content-Disposition**: `attachment; filename=export-{timestamp}.odt`

### Error responses

| Status | Code                            | Description                          |
| ------ | ------------------------------- | ------------------------------------ |
| 400    | `NO_DOCUMENT_PROVIDED`          | No document was provided in the body |
| 422    | `FAILED_TO_PARSE_DOCX_FILE`     | Failed to parse JSON inputs          |
| 422    | `FAILED_TO_EXPORT_ODT_FILE`     | Failed to export intermediate format |
| 422    | `FAILED_TO_CONVERT_DOCX_TO_ODT` | Failed to convert to ODT             |
