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

# Read any file into Markdown ready for a model (Word, PowerPoint, Excel, PDF, .doc/.ppt/.xls, TXT, Markdown)



## OpenAPI

````yaml /openapi.json post /extract
openapi: 3.1.0
info:
  title: Doconda API
  version: 0.1.0
  license:
    name: Proprietary
    url: https://doconda.com/terms
  description: >-
    Create, review and edit Word, PowerPoint, Excel and PDF documents for AI
    agents. `POST /documents` works like an LLM API: direct (default), `stream:
    true` (SSE) or `background: true`.

    Errors follow RFC 9457 (application/problem+json). `POST /documents` accepts
    `Idempotency-Key`.
servers:
  - url: https://api.eu.doconda.com/v1
    description: EU (API keys `ak_eu_…`)
  - url: https://api.us.doconda.com/v1
    description: US (not deployed yet)
security:
  - apiKey: []
tags:
  - name: Documents
    description: Create, review and edit documents.
  - name: Files
    description: Your own files, to use as a source or to review/edit.
  - name: Webhooks
    description: Be notified when a document is ready.
  - name: Dashboard
    description: >-
      Used by the Doconda dashboard with a signed-in user. Not available with
      API keys.
paths:
  /extract:
    post:
      tags:
        - Files
      summary: >-
        Read any file into Markdown ready for a model (Word, PowerPoint, Excel,
        PDF, .doc/.ppt/.xls, TXT, Markdown)
      operationId: extractFile
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                file:
                  anyOf:
                    - type: string
                      pattern: ^file_
                      description: A file uploaded with POST /files.
                    - type: string
                      pattern: ^doc_
                      description: >-
                        A document Doconda already made, by its id: we use its
                        Word, PowerPoint or Excel (or its PDF, if that is all it
                        has).
                    - type: object
                      properties:
                        url:
                          type: string
                          maxLength: 2048
                          format: uri
                        filename:
                          type: string
                          minLength: 1
                          maxLength: 200
                      required:
                        - url
                      additionalProperties: false
                      description: We download it (public http/https, up to 20 MB).
                    - type: object
                      properties:
                        data:
                          type: string
                          maxLength: 27962031
                          format: base64
                          contentEncoding: base64
                          pattern: >-
                            ^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$
                        filename:
                          type: string
                          minLength: 1
                          maxLength: 200
                      required:
                        - data
                        - filename
                      additionalProperties: false
                      description: >-
                        The file's bytes in base64, with its name (the extension
                        says the format).
                store:
                  default: true
                  description: 'false: its content is deleted 15 minutes after it finishes.'
                  type: boolean
              required:
                - file
              additionalProperties: false
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
      responses:
        '200':
          description: The text, as Markdown.
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    const: extraction
                  document_id:
                    type: string
                    pattern: ^doc_[0-9A-HJKMNP-TV-Z]{26}$
                  format:
                    type: string
                    enum:
                      - docx
                      - pptx
                      - xlsx
                      - pdf
                      - doc
                      - ppt
                      - xls
                      - txt
                      - md
                      - png
                      - jpg
                      - gif
                      - webp
                  markdown:
                    type: string
                    description: >-
                      Headings, lists and tables kept; one section per slide or
                      sheet; page markers in a PDF. Scanned pages and pictures
                      are read with OCR.
                  chars:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                    description: Length of the whole text, before any cut.
                  truncated:
                    type: boolean
                    description: true when longer than 2 000 000 characters.
                  pages:
                    anyOf:
                      - type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      - type: 'null'
                    description: Pages (PDF), slides (PowerPoint) or sheets (Excel).
                required:
                  - object
                  - document_id
                  - format
                  - markdown
                  - chars
                  - truncated
                  - pages
        '202':
          description: 'Past 120 s: follow the document with GET /documents/{id}.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    pattern: ^doc_[0-9A-HJKMNP-TV-Z]{26}$
                  object:
                    type: string
                    const: document
                  name:
                    description: The name you gave it (`name` when creating it).
                    type:
                      - string
                      - 'null'
                  operation:
                    type: string
                    enum:
                      - create
                      - review
                      - edit
                      - extract
                  format:
                    anyOf:
                      - type: string
                        enum:
                          - docx
                          - pdf
                          - pptx
                          - xlsx
                          - artifact
                        description: >-
                          The file you want. `docx` → Word (with a PDF too),
                          `pdf` → only the PDF, `pptx` → PowerPoint (with a
                          PDF), `xlsx` → Excel (with a PDF). `artifact` → a web
                          page that keeps data (in each visitor's browser, or
                          shared by everyone), on a signed link; with `store:
                          false`, a page to download (see the artifacts guide).
                          Without it, Doconda works it out from `prompt`.
                      - type: 'null'
                  type:
                    anyOf:
                      - type: string
                        enum:
                          - report
                          - letter
                          - contract
                          - memo
                          - minutes
                          - presentation
                          - spreadsheet
                          - artifact
                        description: >-
                          What Doconda decided the document is. It sets the
                          default look (a contract: serif, justified, numbered
                          clauses; a letter: no page numbers). You don't choose
                          it: say what you want in `prompt`, and the look in
                          `style`.
                      - type: 'null'
                  mode:
                    anyOf:
                      - type: string
                        enum:
                          - prompt
                          - content
                          - manual
                      - type: 'null'
                    description: >-
                      `manual`: a version someone edited by hand in the editor
                      (POST /documents/{id}/versions).
                  sector:
                    description: >-
                      The professional sector Doconda recognised in the request
                      (legal, healthcare, accounting…). Its guide shapes the
                      structure and conventions; what you say or send always
                      wins.
                    type:
                      - string
                      - 'null'
                  parent_id:
                    anyOf:
                      - type: string
                        pattern: ^doc_[0-9A-HJKMNP-TV-Z]{26}$
                      - type: 'null'
                    description: The document this version was edited from.
                  status:
                    type: string
                    enum:
                      - queued
                      - running
                      - ready
                      - ready_with_warnings
                      - needs_review
                      - failed
                      - canceled
                  phase:
                    type:
                      - string
                      - 'null'
                  pages:
                    anyOf:
                      - type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      - type: 'null'
                  style_applied:
                    anyOf:
                      - type: object
                        properties:
                          font:
                            type: string
                          font_size:
                            type: number
                          line_spacing:
                            type: number
                          colors:
                            type: object
                            properties:
                              title:
                                type: string
                              headings:
                                type: string
                              text:
                                type: string
                              accent:
                                type: string
                            required:
                              - title
                              - headings
                              - text
                              - accent
                          align:
                            type: object
                            properties:
                              title:
                                type: string
                                enum:
                                  - left
                                  - center
                                  - right
                                  - justify
                              headings:
                                type: string
                                enum:
                                  - left
                                  - center
                                  - right
                                  - justify
                              body:
                                type: string
                                enum:
                                  - left
                                  - center
                                  - right
                                  - justify
                            required:
                              - title
                              - headings
                              - body
                          margins_cm:
                            type: number
                          orientation:
                            type: string
                            enum:
                              - portrait
                              - landscape
                          cover_page:
                            type: boolean
                          table_of_contents:
                            type: boolean
                          page_numbers:
                            type: boolean
                          header:
                            type: string
                          footer:
                            type: string
                        required:
                          - font
                          - font_size
                          - line_spacing
                          - colors
                          - align
                          - margins_cm
                          - orientation
                          - cover_page
                          - table_of_contents
                          - page_numbers
                      - type: 'null'
                  style_unsupported:
                    type: array
                    items:
                      type: string
                  validation_summary:
                    anyOf:
                      - type: object
                        properties:
                          errors:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          warnings:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          info:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                        required:
                          - errors
                          - warnings
                          - info
                      - type: 'null'
                  repair_summary:
                    anyOf:
                      - type: object
                        properties:
                          iterations:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          applied:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          rejected:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                        required:
                          - iterations
                          - applied
                          - rejected
                      - type: 'null'
                  error:
                    anyOf:
                      - type: object
                        properties:
                          code:
                            type: string
                          message:
                            type: string
                        required:
                          - code
                          - message
                      - type: 'null'
                  versions:
                    type: object
                    properties:
                      engine:
                        type: string
                      renderer:
                        type: string
                      model:
                        type:
                          - string
                          - 'null'
                  metadata:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                  store:
                    type: boolean
                    description: >-
                      false: its content is deleted 15 minutes after it
                      finishes.
                  route:
                    anyOf:
                      - type: object
                        properties:
                          path:
                            type: string
                            enum:
                              - fast
                              - agent
                          reason:
                            type: string
                        required:
                          - path
                          - reason
                        description: >-
                          The path Doconda chose to make the file, and why.
                          `fast`: the AI writes the text and Doconda lays it out
                          (seconds). `agent`: an AI agent writes the program
                          that builds the file, looks at the pages and fixes
                          them (30 s – 2 min; any design, comments, tracked
                          changes, formulas and charts). Doconda always chooses.
                      - type: 'null'
                  quality:
                    anyOf:
                      - type: object
                        properties:
                          requested:
                            type: string
                            enum:
                              - auto
                              - fast
                              - standard
                              - best
                            description: >-
                              `auto`: Doconda picks the level the request needs
                              (when in doubt, the cheaper one).
                          level:
                            anyOf:
                              - type: string
                                enum:
                                  - fast
                                  - standard
                                  - best
                                description: >-
                                  How much work goes into the file. `fast`: one
                                  quick AI pass, seconds, the cheapest.
                                  `standard`: a careful pass and one look at the
                                  result, under a minute. `best`: an AI agent
                                  builds it like a designer would, looking at
                                  the pages and fixing them, a few minutes, the
                                  dearest.
                              - type: 'null'
                            description: The level used (null until Doconda decides it).
                          reason:
                            type:
                              - string
                              - 'null'
                        required:
                          - requested
                          - level
                          - reason
                      - type: 'null'
                    description: >-
                      create and edit: the quality level asked for and the one
                      used, which sets the price.
                  artifact:
                    anyOf:
                      - type: object
                        properties:
                          storage:
                            type: string
                            enum:
                              - local
                              - shared
                            description: >-
                              Where an artifact's page keeps its data. `local`:
                              in each visitor's browser (each one sees only
                              theirs; nothing reaches Doconda). `shared`: in
                              Doconda, the same for everyone with the link
                              (polls, team lists). A project that stores nothing
                              only allows `local`.
                        required:
                          - storage
                      - type: 'null'
                    description: 'Artifacts only: where the page keeps its data.'
                  content_deleted_at:
                    anyOf:
                      - type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                      - type: 'null'
                    description: >-
                      When its files, request, report and events were deleted
                      (`store: false`).
                  outputs:
                    description: Present once finished.
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          pattern: ^out_[0-9A-HJKMNP-TV-Z]{26}$
                        kind:
                          type: string
                          enum:
                            - docx
                            - pptx
                            - xlsx
                            - pdf
                            - preview
                            - html
                            - md
                        page:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        content_type:
                          type: string
                        bytes:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        width:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        height:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        url:
                          type: string
                          description: >-
                            Signed download URL, valid 5 minutes. For `html` (an
                            artifact), the link to the page: 1 hour, or
                            `?expires_in=` on GET /outputs; with `store: false`,
                            the page to download.
                        expires_at:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                      required:
                        - id
                        - kind
                        - content_type
                        - bytes
                        - url
                        - expires_at
                  created_at:
                    type: string
                    format: date-time
                    pattern: >-
                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                  completed_at:
                    anyOf:
                      - type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                      - type: 'null'
                required:
                  - id
                  - object
                  - name
                  - operation
                  - format
                  - type
                  - mode
                  - sector
                  - parent_id
                  - status
                  - phase
                  - pages
                  - style_applied
                  - style_unsupported
                  - validation_summary
                  - repair_summary
                  - error
                  - versions
                  - metadata
                  - store
                  - route
                  - quality
                  - artifact
                  - content_deleted_at
                  - created_at
                  - completed_at
        '401':
          description: >-
            unauthorized (missing, unknown or revoked key; expired session) or
            region_mismatch.
          content:
            application/problem+json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                  title:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  code:
                    type: string
                    description: >-
                      Stable machine code, e.g. input_invalid,
                      insufficient_balance.
                  request_id:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                      required:
                        - path
                        - message
                required:
                  - type
                  - title
                  - status
                  - code
                  - request_id
        '413':
          description: file_too_large
          content:
            application/problem+json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                  title:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  code:
                    type: string
                    description: >-
                      Stable machine code, e.g. input_invalid,
                      insufficient_balance.
                  request_id:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                      required:
                        - path
                        - message
                required:
                  - type
                  - title
                  - status
                  - code
                  - request_id
        '422':
          description: file_rejected / file_unreachable
          content:
            application/problem+json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                  title:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  code:
                    type: string
                    description: >-
                      Stable machine code, e.g. input_invalid,
                      insufficient_balance.
                  request_id:
                    type: string
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                        message:
                          type: string
                      required:
                        - path
                        - message
                required:
                  - type
                  - title
                  - status
                  - code
                  - request_id
      security:
        - apiKey: []
        - session: []
components:
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        `Authorization: Bearer ak_eu_…`. The prefix is the project's region and
        must match the server (api.eu / api.us).
    session:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Dashboard only: the Cognito ID token of the signed-in user.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.