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

# Pulse Integration for AI Agents & Workflows

> Extract text and structured content from PDFs, images, and Office files using Pulse OCR. Returns clean markdown, page counts, layout bounding boxes, chunks, and extracted figures.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/placeholder.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=a4046f9cd6d738c81259050e9833913c" alt="Pulse logo" width="72" height="72" data-path="logos/placeholder.svg" />

## Overview

Add **Pulse** to any ModuleX agent or workflow. Extract text and structured content from PDFs, images, and Office files using Pulse OCR, against the Pulse REST API (`api.runpulse.com`).

<Info>
  **Categories**: AI & Machine Learning · Document Processing · Ocr · **Auth**: API Key · **Actions**: 1
</Info>

## Authentication

### API Key Authentication

Authenticate using your Pulse API key

<Steps>
  <Step title="Step 1">
    Go to [https://www.runpulse.com](https://www.runpulse.com) and sign up or log in
  </Step>

  <Step title="Step 2">
    Open your dashboard and navigate to the API keys section
  </Step>

  <Step title="Step 3">
    Create a new API key or copy your existing one
  </Step>

  <Step title="Step 4">
    Paste the API key below
  </Step>
</Steps>

#### Required Credentials

| Field         | Description                                        | Required | Format |
| ------------- | -------------------------------------------------- | -------- | ------ |
| Pulse API Key | Your Pulse API key from the runpulse.com dashboard | Yes      | `-`    |

## Available Actions

<AccordionGroup>
  <Accordion title="parser — Parse a document (PDF, image, or Office file) from a public URL using Pulse OCR and return clean markdown, page count, layout bounding boxes, optional HTML, chunks, and figures.">
    ### Parameters

    <ResponseField name="file_url" type="string" required>
      Public HTTP(S) URL to a document to process (PDF, image, or Office file)
    </ResponseField>

    <ResponseField name="pages" type="string">
      Page range to process, 1-indexed (e.g. "1-2,5"). Omit for all pages.
    </ResponseField>

    <ResponseField name="chunking" type="string">
      Chunking strategies (comma-separated: semantic, header, page, recursive)
    </ResponseField>

    <ResponseField name="chunk_size" type="integer">
      Maximum characters per chunk when chunking is enabled
    </ResponseField>

    <ResponseField name="return_html" type="boolean">
      Whether to include HTML in the response
    </ResponseField>

    <ResponseField name="extract_figure" type="boolean">
      Whether to extract figures from the document
    </ResponseField>

    <ResponseField name="figure_description" type="boolean">
      Whether to generate descriptions/captions for extracted figures
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "PlanInfo": {
          "additionalProperties": false,
          "description": "Plan usage information returned with each extraction.",
          "properties": {
            "pages_used": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Pages Used"
            },
            "tier": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Tier"
            },
            "note": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Note"
            }
          },
          "title": "PlanInfo",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "description": "Result of parsing a document with Pulse OCR.",
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "markdown": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Markdown"
        },
        "page_count": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Page Count"
        },
        "job_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Job Id"
        },
        "plan_info": {
          "anyOf": [
            {
              "$ref": "#/$defs/PlanInfo"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "bounding_boxes": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Bounding Boxes"
        },
        "extraction_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Extraction Url"
        },
        "html": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Html"
        },
        "structured_output": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Structured Output"
        },
        "chunks": {
          "items": {},
          "title": "Chunks",
          "type": "array"
        },
        "figures": {
          "items": {},
          "title": "Figures",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ParserOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Billing**: Pulse bills in credits; each extraction is billed by
  the number of pages (or tables) processed. API keys can carry
  per-key credit caps.
* **Large documents**: documents above \~70 pages return an
  `extraction_url` pointing at the full results instead of inlining
  the markdown.
* **Error model**: non-2xx responses and timeouts are caught and
  returned as `success=False` + `error` rather than raising. Plan for
  retries on the agent side based on the error string.

## Related integrations

<CardGroup cols={3}>
  <Card title="Amazon Alexa" href="/integrations/tools/amazon-alexa" />

  <Card title="Browser Use" href="/integrations/tools/browser-use" />

  <Card title="ElevenLabs" href="/integrations/tools/elevenlabs" />
</CardGroup>

## Links

* [Pulse](https://www.runpulse.com)
