FluentEDI Doc API

Documents (PDF, Word, Excel)

Operations 2

GET /v1/doc/extract Extract the text of a PDF, Word, Excel or other document as markdown or plain… #
POST /v1/doc/extract Extract the text of a PDF, Word, Excel or other document as markdown or plain… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fluentedi-doc-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fluentedi-doc-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FluentEDI Doc API
  version: 1.1.0
  summary: Deterministic tools for AI agents. No key, no signup, no SDK.
  description: 'A public HTTP API of deterministic tools for the work a language model cannot do reliably by reasoning: knowing the current time in any timezone and whether an instant falls inside a window, exact arithmetic, hashing and signature verification, canonicalizing and content-addressing JSON, repairing malformed JSON and pinpointing where it broke, querying and diffing structured data, parsing CSV correctly, converting units, colours and currencies at live ECB rates, testing regular expressions…'
  license:
    name: Free to use
    identifier: MIT
servers:
- url: https://fluentedi.com
tags:
- name: Doc
  description: Documents (PDF, Word, Excel)
paths:
  /v1/doc/extract:
    get:
      operationId: doc_extract_get
      summary: Extract the text of a PDF, Word, Excel or other document as markdown or plain…
      description: 'Converts a document to markdown or plain text: pass a public URL or the file itself as base64, and get back the content with headings, tables and lists preserved, at a fraction of the tokens that rendered pages cost. Use it when a harness has no native reader for the format — .docx, .xlsx, .odt and .numbers rarely have one — when a document is only a URL away, or when a long PDF''s text matters and its layout does not. Handles PDF (.pdf), Word (.docx), Excel (.xlsx, .xlsm, .xlsb, .xls), OpenDocument (.odt, .ods), Apple Numbers, CSV, HTML, XML, and plain-text formats such as .txt and .md. The format is detected from magic bytes, not trusted from the file name, so a PDF served from a .php URL still converts. Two honest limits: a scanned PDF with no text layer has nothing to extract (this is conversion, not OCR), and legacy binary .doc and .ppt files are not readable — resave them as .docx or .pptx. Images are refused rather than described. Documents up to 10 MB.'
      tags:
      - Doc
      parameters:
      - name: url
        in: query
        required: false
        description: Public URL of the document to fetch and convert.
        schema:
          description: Public URL of the document to fetch and convert.
          type: string
          maxLength: 4000
          examples:
          - https://arxiv.org/pdf/1706.03762
      - name: base64
        in: query
        required: false
        description: 'The file content as base64 (or a data: URI) instead of a URL, for documents not publicly reachable. Up to 10 MB decoded.'
        schema:
          description: 'The file content as base64 (or a data: URI) instead of a URL, for documents not publicly reachable. Up to 10 MB decoded.'
          type: string
          default: ''
          maxLength: 14000000
      - name: filename
        in: query
        required: false
        description: Original file name, e.g. "report.docx". Only needed when the format cannot be detected from the URL or the bytes.
        schema:
          description: Original file name, e.g. "report.docx". Only needed when the format cannot be detected from the URL or the bytes.
          type: string
          default: ''
          maxLength: 300
      - name: format
        in: query
        required: false
        description: 'Output style: markdown keeps headings, tables and lists; text strips them.'
        schema:
          description: 'Output style: markdown keeps headings, tables and lists; text strips them.'
          type: string
          enum:
          - markdown
          - text
          default: markdown
      - name: max_chars
        in: query
        required: false
        description: Truncate the extracted content beyond this many characters.
        schema:
          description: Truncate the extracted content beyond this many characters.
          type: integer
          default: 200000
          minimum: 100
          maximum: 2000000
      - name: timeout_ms
        in: query
        required: false
        description: Fetch timeout in milliseconds when url is used.
        schema:
          description: Fetch timeout in milliseconds when url is used.
          type: integer
          default: 15000
          minimum: 1000
          maximum: 30000
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.
    post:
      operationId: doc_extract_post
      summary: Extract the text of a PDF, Word, Excel or other document as markdown or plain…
      description: 'Converts a document to markdown or plain text: pass a public URL or the file itself as base64, and get back the content with headings, tables and lists preserved, at a fraction of the tokens that rendered pages cost. Use it when a harness has no native reader for the format — .docx, .xlsx, .odt and .numbers rarely have one — when a document is only a URL away, or when a long PDF''s text matters and its layout does not. Handles PDF (.pdf), Word (.docx), Excel (.xlsx, .xlsm, .xlsb, .xls), OpenDocument (.odt, .ods), Apple Numbers, CSV, HTML, XML, and plain-text formats such as .txt and .md. The format is detected from magic bytes, not trusted from the file name, so a PDF served from a .php URL still converts. Two honest limits: a scanned PDF with no text layer has nothing to extract (this is conversion, not OCR), and legacy binary .doc and .ppt files are not readable — resave them as .docx or .pptx. Images are refused rather than described. Documents up to 10 MB.'
      tags:
      - Doc
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  description: Public URL of the document to fetch and convert.
                  type: string
                  maxLength: 4000
                  examples:
                  - https://arxiv.org/pdf/1706.03762
                base64:
                  description: 'The file content as base64 (or a data: URI) instead of a URL, for documents not publicly reachable. Up to 10 MB decoded.'
                  type: string
                  default: ''
                  maxLength: 14000000
                filename:
                  description: Original file name, e.g. "report.docx". Only needed when the format cannot be detected from the URL or the bytes.
                  type: string
                  default: ''
                  maxLength: 300
                format:
                  description: 'Output style: markdown keeps headings, tables and lists; text strips them.'
                  type: string
                  enum:
                  - markdown
                  - text
                  default: markdown
                max_chars:
                  description: Truncate the extracted content beyond this many characters.
                  type: integer
                  default: 200000
                  minimum: 100
                  maximum: 2000000
                timeout_ms:
                  description: Fetch timeout in milliseconds when url is used.
                  type: integer
                  default: 15000
                  minimum: 1000
                  maximum: 30000
              required: []
              additionalProperties: false
      responses:
        '200':
          description: Tool result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                  tool:
                    type: string
                  result:
                    type: object
                    description: Tool-specific result payload.
        '400':
          description: Invalid input. The body carries the parameter schema and working examples.