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

# Getting Started

> Get up and running with Kadoa in 2 minutes using SDK, MCP Server, or REST API

## Prerequisites

* Create a [Kadoa account](https://kadoa.com/signup)
* Generate your API key from [Settings > General](https://kadoa.com/settings)

## Choose Your Approach

<CardGroup cols={2}>
  <Card title="SDK" icon="code">
    TypeScript/Node.js and Python SDKs for type-safe development
  </Card>

  <Card title="REST API" icon="globe">
    Language-agnostic HTTP API for any platform
  </Card>

  <Card title="CLI" icon="square-terminal">
    Manage workflows from the terminal and CI/CD pipelines
  </Card>

  <Card title="MCP Server" icon="robot">
    Use Kadoa from ChatGPT, Claude, Cursor, and other AI assistants
  </Card>
</CardGroup>

## Installation

### SDK

<Tabs>
  <Tab title="npm">
    ```bash theme={null}
    npm install @kadoa/node-sdk
    ```
  </Tab>

  <Tab title="yarn">
    ```bash theme={null}
    yarn add @kadoa/node-sdk
    ```
  </Tab>

  <Tab title="pnpm">
    ```bash theme={null}
    pnpm add @kadoa/node-sdk
    ```
  </Tab>

  <Tab title="bun">
    ```bash theme={null}
    bun add @kadoa/node-sdk
    ```
  </Tab>

  <Tab title="uv">
    ```bash theme={null}
    uv add kadoa-sdk
    ```
  </Tab>

  <Tab title="pip">
    ```bash theme={null}
    pip install kadoa-sdk
    ```
  </Tab>
</Tabs>

You can view the Kadoa SDK source code on [GitHub](https://github.com/kadoa-org/kadoa-sdks).

### CLI

<Tabs>
  <Tab title="npm">
    ```bash theme={null}
    npm install -g @kadoa/cli
    ```
  </Tab>

  <Tab title="pnpm">
    ```bash theme={null}
    pnpm add -g @kadoa/cli
    ```
  </Tab>

  <Tab title="npx (no install)">
    ```bash theme={null}
    npx @kadoa/cli <command>
    ```
  </Tab>
</Tabs>

Sign in with OAuth (or set `KADOA_ACCESS_TOKEN` for non-interactive use):

```bash theme={null}
kadoa login
```

Enable tab completions for workflow IDs, subcommands, and flags:

<Tabs>
  <Tab title="Zsh">
    ```bash theme={null}
    # Add to ~/.zshrc
    eval "$(kadoa completion zsh)"
    ```

    Zsh shows workflow names inline: `kadoa get <TAB>` displays `abc123 -- My Workflow`.
  </Tab>

  <Tab title="Bash">
    ```bash theme={null}
    # Add to ~/.bashrc
    eval "$(kadoa completion bash)"
    ```
  </Tab>
</Tabs>

See the [full CLI reference](/docs/sdk/cli) for all commands.

### MCP Server

The remote MCP server at `https://mcp.kadoa.com/mcp` requires no local install or API key; connect from your MCP client and sign in with your Kadoa account via OAuth. See [MCP Server setup](/docs/sdk/mcp) for per-client instructions.

For local use via stdio:

```bash theme={null}
npx -y @kadoa/mcp
```

## Quick Start

<CodeGroup>
  ```typescript Node SDK theme={null}
  import { KadoaClient } from '@kadoa/node-sdk';

  const client = new KadoaClient({
    apiKey: 'YOUR_API_KEY'
  });

  const result = await client.extraction.run({
    urls: ["https://sandbox.kadoa.com/ecommerce"],
    name: "My First Extraction",
    limit: 10,
  });

  console.log(result.data);
  ```

  ```python Python SDK theme={null}
  from kadoa_sdk import KadoaClient, KadoaClientConfig

  client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

  result = client.extraction.run(
      ExtractionOptions(
          urls=["https://sandbox.kadoa.com/ecommerce"],
          name="My First Extraction",
          limit=10,
      )
  )

  print(result.data)
  ```

  ```bash CLI theme={null}
  kadoa create "Extract product names and prices" \
    --url https://sandbox.kadoa.com/ecommerce \
    --name "My First Extraction"
  ```

  ```text MCP Server theme={null}
  > "Extract product names and prices from https://sandbox.kadoa.com/ecommerce"
  ```

  ```bash REST API theme={null}
  # 1. Create workflow with schema definition
  curl -X POST https://api.kadoa.com/v4/workflows \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "urls": ["https://sandbox.kadoa.com/ecommerce"],
      "name": "My First Extraction",
      "entity": "Product",
      "fields": [
        {
          "name": "title",
          "dataType": "STRING",
          "description": "Product name"
        },
        {
          "name": "price",
          "dataType": "MONEY",
          "description": "Product price"
        }
      ]
    }'

  # Response:
  # {
  #   "success": true,
  #   "workflowId": "507f1f77bcf86cd799439011"
  # }

  # 2. Check workflow status
  curl -X GET https://api.kadoa.com/v4/workflows/507f1f77bcf86cd799439011 \
    -H "x-api-key: YOUR_API_KEY"

  # 3. Get the data (once extraction is complete)
  curl -X GET https://api.kadoa.com/v4/workflows/507f1f77bcf86cd799439011/data \
    -H "x-api-key: YOUR_API_KEY"
  ```
</CodeGroup>

That's it! With the SDK, data is automatically extracted. With the API, you define the schema and then retrieve your structured data.

## Define What to Extract

For more control, specify exactly what fields you want:

<CodeGroup>
  ```typescript Node SDK theme={null}
  const workflow = await client
    .extract({
      urls: ["https://sandbox.kadoa.com/ecommerce"],
      name: "Product Monitor",
      extraction: (builder) =>
        builder
          .entity("Product")
          .field("name", "Product name", "STRING", {
            example: "MacBook Pro",
          })
          .field("price", "Price in USD", "MONEY")
          .field("inStock", "Is available", "BOOLEAN"),
    })
    .create();

  const result = await workflow.run({ limit: 10 });
  const response = await result.fetchData({});
  console.log(response.data);
  ```

  ```python Python SDK theme={null}
  extract_options = ExtractOptions(
      urls=["https://sandbox.kadoa.com/ecommerce"],
      name="Product Monitor",
      extraction=lambda builder: builder.entity("Product")
      .field("name", "Product name", "STRING", FieldOptions(example="MacBook Pro"))
      .field("price", "Price in USD", "MONEY")
      .field("inStock", "Is available", "BOOLEAN"),
  )

  workflow = client.extract(extract_options).create()
  print(f"Workflow created: {workflow.workflow_id}")

  result = workflow.run(RunWorkflowOptions(limit=10))
  response = result.fetch_data({})
  print(response.data)
  ```

  ```bash CLI theme={null}
  kadoa create "Extract product name, price, and availability" \
    --url https://sandbox.kadoa.com/ecommerce \
    --name "Product Monitor" \
    --entity "Product"
  ```

  ```text MCP Server theme={null}
  > "Extract product name, price in USD, and availability from https://sandbox.kadoa.com/ecommerce"
  ```

  ```javascript REST API theme={null}
  // POST https://api.kadoa.com/v4/workflows
  {
    "urls": ["https://sandbox.kadoa.com/ecommerce"],
    "name": "Product Monitor",
    "entity": "Product",
    "fields": [
      {
        "name": "name",
        "dataType": "STRING",
        "description": "Product name"
      },
      {
        "name": "price",
        "dataType": "MONEY",
        "description": "Price in USD"
      },
      {
        "name": "inStock",
        "dataType": "BOOLEAN",
        "description": "Is available"
      }
    ]
  }
  ```
</CodeGroup>

## Next Steps

* [Working with Schemas →](/docs/sdk/schemas/overview) - Learn about inline and reusable schemas
* [Variables →](/docs/sdk/variables/overview) - Manage reusable key-value pairs for workflow prompts
* [Templates →](/docs/sdk/templates/overview) - Create reusable, versioned workflow configurations
* [Create Workflows →](/docs/sdk/workflows/create) - Write prompts, define schemas, and configure scheduling
* [Manage Workflows →](/docs/sdk/workflows/manage) - List, retrieve, pause, and delete workflows
* [Access Data →](/docs/integrations/sdk) - Retrieve extracted data with pagination and real-time updates
