> ## 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.

# SDK

> Access and retrieve extracted data using the Kadoa SDK

## Basic Usage

Retrieve your data using the SDK's built-in methods.

<CodeGroup>
  ```typescript Node SDK theme={null}
  const result = await client.extraction.run({
    urls: ["https://sandbox.kadoa.com/ecommerce"],
    name: "Product Extraction",
  });

  // Data is included in the result
  console.log(result.data); // Array of extracted items
  console.log(result.pagination); // { page, limit, total, totalPages }
  ```

  ```python Python SDK theme={null}
  from kadoa_sdk import ExtractionOptions

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

  # Data is included in the result
  print(result.data)  # Array of extracted items
  print(result.pagination)  # { page, limit, totalCount, totalPages }
  ```
</CodeGroup>

## Fetch Data

If you have an existing workflow, you can fetch its data directly using the workflow ID:

<CodeGroup>
  ```typescript Node SDK theme={null}
  // Simplest way to fetch workflow data
  const data = await client.extraction.fetchData({
    workflowId: workflowId,
  });
  console.log(data.data);
  ```

  ```python Python SDK theme={null}
  from kadoa_sdk import FetchDataOptions

  # Simplest way to fetch workflow data
  data = client.extraction.fetch_data(FetchDataOptions(workflow_id=workflow_id))
  print(data.data)
  ```
</CodeGroup>

For more control, you can specify all available options:

<CodeGroup>
  ```typescript Node SDK theme={null}
  const data = await client.extraction.fetchData({
    workflowId: workflowId,
    page: 1,
    limit: 10,
  });

  console.log(data.data); // Array of extracted items
  console.log(data.pagination); // { page, limit, total, totalPages }
  ```

  ```python Python SDK theme={null}
  from kadoa_sdk import FetchDataOptions

  data = client.extraction.fetch_data(
      FetchDataOptions(
          workflow_id=workflow_id,
          page=1,
          limit=10,
      )
  )

  print(data.data)
  print(data.pagination)
  ```
</CodeGroup>

## Pagination

Handle large datasets efficiently using the SDK's pagination methods:

<CodeGroup>
  ```typescript Node SDK theme={null}
  // Option 1: Iterate page by page
  for await (const page of client.extraction.fetchDataPages({
    workflowId: workflowId,
  })) {
    console.log("Page data:", page.data);
    console.log("Page number:", page.pagination.page);
  }

  // Option 2: Get everything at once
  const allData = await client.extraction.fetchAllData({
    workflowId: workflowId,
  });
  console.log("All data:", allData);
  ```

  ```python Python SDK theme={null}
  from kadoa_sdk import FetchDataOptions

  # Option 1: Iterate page by page
  async def iterate_pages() -> None:
      async for page in client.extraction.fetch_data_pages(
          FetchDataOptions(workflow_id=workflow_id)
      ):
          print("Page data:", page.data)
          if page.pagination:
              print("Page number:", page.pagination.page)

  asyncio.run(iterate_pages())

  # Option 2: Get everything at once
  all_data = client.extraction.fetch_all_data(FetchDataOptions(workflow_id=workflow_id))
  print("All data:", all_data)
  ```
</CodeGroup>

## Response Format

Data returned by the SDK follows this structure:

<CodeGroup>
  ```json theme={null}
  {
    data: [
      {
        // Your extracted fields
        title: "Product Name",
        price: "$99.99",
        inStock: true
      }
    ],
    pagination: {
      page: 1,
      limit: 50,
      total: 150,
      totalPages: 3
    }
  }
  ```

  ```json theme={null}
  response_format = {
      "data": [
          {
              "title": "Product Name",
              "price": "$99.99",
              "inStock": True,
          }
      ],
      "pagination": {"page": 1, "limit": 50, "total": 150, "totalPages": 3},
  }
  print(response_format)
  ```
</CodeGroup>
