> ## Documentation Index
> Fetch the complete documentation index at: https://radarkit.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create export

> Queues an export. Charges the project owner's Export rows for the exact row count, then writes the file in the background. Keep the `id` and poll Get export until `status` is `ready`.

Answers in a `responses` export come as Markdown, the same text the prompt page shows. CSV files have a header row and a UTF-8 byte order mark. NDJSON files have one JSON object per line.

Cost: Export rows, one per row. No API credits. Rows are refunded if the export fails.

Limits: Up to 365 days. Up to 250,000 rows per file. One export at a time per person, three per project owner. 10 calls per minute per key.

Needs: Write. Your seat must be allowed to manage content.




## OpenAPI

````yaml /openapi.yaml post /projects/{project}/exports
openapi: 3.1.0
info:
  title: Radarkit API
  version: 1.0.0
  summary: Your AI visibility data, outside the dashboard.
  description: >
    Radarkit tracks how AI assistants answer the questions your customers ask,
    and what each answer says about your brand. This API gives you that data as
    JSON.


    Every request needs an API key in the `Authorization` header. Every response
    has the same shape: `data`, `meta`, `credits` and `request_id`. Most calls
    cost 1 API credit. Heavier calls cost 2. Exports spend Export rows instead,
    one per row.
  contact:
    name: Radarkit support
    email: mail@radarkit.ai
    url: https://radarkit.ai
servers:
  - url: https://api.radarkit.ai/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Your key, your plan and both balances. Free.
  - name: Projects
    description: One project is one brand or website. Every other call needs a project id.
  - name: Topics
    description: Topics group prompts. Every prompt belongs to one topic.
  - name: Prompts
    description: The questions Radarkit asks every AI model on a schedule.
  - name: Visibility
    description: The daily visibility score per model, precomputed.
  - name: Responses
    description: One row per AI answer, with everything Radarkit found in it.
  - name: Sources
    description: The web pages AI answers cite or consult.
  - name: Competitors
    description: Who the answers recommend and how often.
  - name: Rankings
    description: Recommended domains with their position in the answer.
  - name: Query fanout
    description: The web searches a model ran before answering, one row per answer.
  - name: Web search
    description: How often the models searched and what they searched for, summarised.
  - name: Sentiment
    description: How the answers talk about your brand.
  - name: Exports
    description: >
      Thousands of rows as one gzip file. Four calls in order: estimate, create,
      poll, download.


      Estimate is free and returns the exact row count. Create charges that many
      Export rows and queues the job. Poll the export until its status is
      `ready`. Download follows a redirect to a signed link that works for 30
      minutes. Files are kept for 7 days.
  - name: Content
    description: Have the Content agent write an article for a prompt, then poll the run.
paths:
  /projects/{project}/exports:
    post:
      tags:
        - Exports
      summary: Create export
      description: >
        Queues an export. Charges the project owner's Export rows for the exact
        row count, then writes the file in the background. Keep the `id` and
        poll Get export until `status` is `ready`.


        Answers in a `responses` export come as Markdown, the same text the
        prompt page shows. CSV files have a header row and a UTF-8 byte order
        mark. NDJSON files have one JSON object per line.


        Cost: Export rows, one per row. No API credits. Rows are refunded if the
        export fails.


        Limits: Up to 365 days. Up to 250,000 rows per file. One export at a
        time per person, three per project owner. 10 calls per minute per key.


        Needs: Write. Your seat must be allowed to manage content.
      operationId: createExport
      parameters:
        - $ref: '#/components/parameters/project'
      requestBody:
        $ref: '#/components/requestBodies/ExportPlan'
      responses:
        '202':
          description: The export is queued.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Export'
                  meta:
                    type: object
                    properties:
                      rows_charged:
                        type: integer
                      export_rows_remaining:
                        type: integer
                  credits:
                    $ref: '#/components/schemas/Credits'
                  request_id:
                    $ref: '#/components/schemas/RequestId'
              example:
                data:
                  id: 9b2f6a3e-1c4d-4e5f-8a9b-0c1d2e3f4a5b
                  project: 64f1a2b3c4d5e6f708192a3b
                  type: responses
                  format: csv
                  status: queued
                  from: '2026-06-01'
                  to: '2026-08-31'
                  models:
                    - chatgpt
                    - gemini
                  prompt_ids:
                    - 2048
                    - 2049
                    - 2050
                  topic_ids:
                    - 17
                  include_answer: true
                  estimated_rows: 2340
                  rows: 0
                  bytes: null
                  rows_charged: 2340
                  file_name: acme-crm-responses-2026-06-01-to-2026-08-31.csv.gz
                  download_url: null
                  error: null
                  requested_by: Ada Lovelace
                  created_at: '2026-09-03T10:15:02+00:00'
                  started_at: null
                  finished_at: null
                  expires_at: null
                meta:
                  rows_charged: 2340
                  export_rows_remaining: 27660
                credits:
                  charged: 0
                  remaining: 2945
                request_id: req_01j9x4x1d2e3f4g5h6i7j8k9l0
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '402':
          description: >-
            `INSUFFICIENT_EXPORT_ROWS`: not enough Export rows for this many
            rows. `PLAN_INACTIVE` or `OWNER_PLAN_INACTIVE`: a plan is not
            active.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            `SCOPE_MISSING`: the key has no Write permission.
            `PROJECT_FORBIDDEN`: the key cannot reach this project.
            `PERMISSION_DENIED`: your seat cannot export.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          $ref: '#/components/responses/ProjectNotFound'
        '409':
          description: >-
            `EXPORT_IN_PROGRESS`: you already have an export running, or the
            owner has three.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: >-
            `VALIDATION_FAILED`: a field is wrong, `details` says which.
            `EXPORT_EMPTY`: no rows match. `EXPORT_TOO_LARGE`: more than 250,000
            rows, split by date or topic.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    project:
      name: project
      in: path
      required: true
      description: The project id. 24 characters. From List projects.
      schema:
        type: string
        pattern: ^[0-9a-f]{24}$
      example: 64f1a2b3c4d5e6f708192a3b
  requestBodies:
    ExportPlan:
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - type
            properties:
              type:
                type: string
                enum:
                  - responses
                  - sources
                  - competitors
                  - rankings
                  - query_fanout
                description: >-
                  What to export. `responses` is one row per AI answer with
                  brand mention, position, sentiment, competitors, sources cited
                  and the answer as Markdown. `sources` is one row per page
                  cited or consulted. `competitors` is one row per competitor
                  named. `rankings` is one row per recommended domain with its
                  position. `query_fanout` is one row per search query the model
                  ran.
              format:
                type: string
                enum:
                  - csv
                  - ndjson
                default: csv
                description: >-
                  `csv` with a header row, or `ndjson` with one JSON object per
                  line.
              from:
                type: string
                format: date
                description: 'First day, `YYYY-MM-DD`. Default: 30 days ago.'
              to:
                type: string
                format: date
                description: 'Last day, `YYYY-MM-DD`, included. Default: today.'
              models:
                type: array
                maxItems: 10
                items:
                  type: string
                description: 'Models to include. Default: every model the project tracks.'
              topic_ids:
                type: array
                maxItems: 100
                items:
                  type: integer
                description: Every active prompt in these topics.
              prompt_ids:
                type: array
                maxItems: 500
                items:
                  type: integer
                description: >-
                  Only these prompts. Leave both this and topic_ids out to
                  export every prompt.
              include_answer:
                type: boolean
                default: true
                description: >-
                  `responses` only. Set false to leave the answer text out and
                  get a much smaller file.
          example:
            type: responses
            format: csv
            from: '2026-06-01'
            to: '2026-08-31'
            models:
              - chatgpt
              - gemini
            topic_ids:
              - 17
            include_answer: true
  schemas:
    Export:
      type: object
      properties:
        id:
          type: string
          format: uuid
        project:
          type: string
        type:
          type: string
          enum:
            - responses
            - sources
            - competitors
            - rankings
            - query_fanout
        format:
          type: string
          enum:
            - csv
            - ndjson
        status:
          type: string
          enum:
            - queued
            - running
            - ready
            - failed
            - expired
        from:
          type: string
          format: date
        to:
          type: string
          format: date
        models:
          type: array
          items:
            type: string
        prompt_ids:
          type: array
          items:
            type: integer
        topic_ids:
          type: array
          items:
            type: integer
        include_answer:
          type: boolean
        estimated_rows:
          type: integer
        rows:
          type: integer
          description: Rows written so far. Counts up while running.
        bytes:
          type:
            - integer
            - 'null'
          description: File size once ready.
        rows_charged:
          type: integer
        file_name:
          type: string
        download_url:
          type:
            - string
            - 'null'
          description: Set when the status is ready.
        error:
          type:
            - string
            - 'null'
        requested_by:
          type:
            - string
            - 'null'
        created_at:
          type:
            - string
            - 'null'
          format: date-time
        started_at:
          type:
            - string
            - 'null'
          format: date-time
        finished_at:
          type:
            - string
            - 'null'
          format: date-time
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
          description: When the file is deleted. 7 days after it was ready.
    Credits:
      type: object
      description: >-
        What this call cost and what is left. Also in the
        `X-RadarKit-Credits-Charged` and `X-RadarKit-Credits-Remaining` headers.
      properties:
        charged:
          type: integer
          description: API credits spent on this call.
        remaining:
          type:
            - integer
            - 'null'
          description: API credits left on the billed account. Null on free calls.
    RequestId:
      type: string
      description: >-
        A unique id for this call. Also in the `X-Request-Id` header. Quote it
        when you contact support.
      example: req_01j9x4m2p7q8r9s0t1u2v3w4x5
    Error:
      type: object
      description: Every failed call has this shape and no `data`.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable. Build on this, not on the message.
            message:
              type: string
              description: For people. May change.
            details:
              description: >-
                More when there is more to say. Which field failed, how long to
                wait, which id already exists.
              oneOf:
                - type: object
                - type: array
                  items:
                    type: object
        request_id:
          $ref: '#/components/schemas/RequestId'
  responses:
    Unauthenticated:
      description: >-
        `UNAUTHENTICATED`: no key, a wrong key, or a revoked or expired key.
        `KEY_IN_QUERY` (400) if the key was in the URL.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHENTICATED
              message: >-
                Missing or invalid API key. Send it as: Authorization: Bearer
                rk_live_YOUR_KEY
            request_id: req_01j9x4q7z8y9x0w1v2u3t4s5r6
    ProjectNotFound:
      description: '`PROJECT_NOT_FOUND`: no project with that id.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: PROJECT_NOT_FOUND
              message: No project with that id.
            request_id: req_01j9x4q7z8y9x0w1v2u3t4s5s0
    RateLimited:
      description: >-
        `RATE_LIMITED`: too many calls. Wait the seconds in `Retry-After` and
        send the same request again. Nothing was charged.
      headers:
        Retry-After:
          description: Seconds to wait.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: RATE_LIMITED
              message: Too many requests. Slow down and retry.
              details:
                retry_after: 21
            request_id: req_01j9x4r2s3t4u5v6w7x8y9z0a1
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Your API key. Create one in Settings, API keys. Send it as
        `Authorization: Bearer rk_live_YOUR_KEY`.

````