---
title: "Export an atomization"
method: GET
path: "/atomizations/{id}/export"
tags: ["Atomizations"]
---

# Export an atomization

`GET /atomizations/{id}/export`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/atomizations/{id}/export`
- Auth: API key in header `X-API-KEY`

Returns one atomization rendered for the requested `format`. Requires the `read:atomize` scope; the lookup is organization-scoped, so an id from another organization returns 404 `not_found`.

`format=json` (the default) returns the usual JSON envelope — the same record as `GET /atomizations/{id}` minus `content_id` and `organization_id`. `format=markdown` and `format=text` return the rendered document as the raw response body (`text/markdown` / `text/plain`, both `charset=utf-8`) with `Content-Disposition: attachment; filename="{type}-{first 8 chars of id}.md|.txt"` — not the JSON envelope. Plain text is a special case for `twitter_thread` (numbered tweets, no Markdown); every other type is the Markdown rendering with `#`, `*` and `_` stripped.

The Markdown and text renderers read type-specific fields straight out of the stored payload, so exporting an atomization whose generation has not finished (empty `data`) fails and returns 500 — check that `status` is past `generating` first.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `format` 'json' | 'markdown' | 'text'

## Response `200`

The exported atomization. Content type depends on `format`.

- object
  - `data` object
    - `id` string, uuid
    - `type` 'linkedin_carousel' | 'twitter_thread' | 'newsletter' | 'instagram_carousel'
    - `status` 'draft' | 'generating' | 'review' | 'published' | 'archived'
    - `data` object: The generated payload; shape depends on `type`.
    - `assets` unknown[], nullable
      - unknown
    - `published_at` string, date-time, nullable
    - `published_url` string, nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time

## Other responses

- `400`: Validation failed
- `401`: Authentication failed
- `403`: The API key lacks the `read:atomize` scope (`insufficient_scope`), the caller's IP is not allow-listed (`ip_not_allowed`), or the organization's subscription/trial is no longer active.
- `404`: Resource not found
- `429`: Rate limit exceeded
- `500`: The lookup failed, or the Markdown/text renderer could not read the stored payload (for example an atomization that is still generating).

---

[API](https://skmtc.dev/frase/apis/frase-api.md) · [All operations](https://skmtc.dev/frase/apis/frase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frase/apis/frase-api/revisions/7fb75d89f7a4?raw)
