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

# Tools

> LLM-callable functions used by the Custom agent step and the chat agent. Reads fetch data. Writes mutate state and run through approval policy.

Tools are LLM-callable functions. They are used by the [Custom agent step](/automations/step-types#let-an-agent-decide) inside automations and by the chat agent in the dashboard. Each tool has a kind. **Read** tools fetch data. **Write** tools mutate state and run through your configured approval policy before running.

## Customers

### Read tools

<AccordionGroup>
  <Accordion title="get_customer_details">
    Get customer details by UID or email. Returns email, full name, created\_at, and order count.

    **Input**

    <ResponseField name="customer_uid" type="string | null">
      The customer's UUID
    </ResponseField>

    <ResponseField name="email" type="string | null">
      The customer's email address
    </ResponseField>

    **Output**

    <ResponseField name="customer_uid" type="string | null" />

    <ResponseField name="email" type="string | null" />

    <ResponseField name="full_name" type="string | null" />

    <ResponseField name="created_at" type="string | null" />

    <ResponseField name="order_count" type="integer | null" />

    <ResponseField name="error" type="string | null" />
  </Accordion>
</AccordionGroup>

### Write tools

<AccordionGroup>
  <Accordion title="create_customer">
    Create a new customer record.

    **Input**

    <ResponseField name="email" type="string" required>
      Customer email address.
    </ResponseField>

    <ResponseField name="full_name" type="string" required>
      Customer full name.
    </ResponseField>

    **Output**

    <ResponseField name="customer" type="CustomerOutput | null">
      <Expandable title="properties">
        <ResponseField name="customer_id" type="integer" />

        <ResponseField name="customer_uid" type="string" />

        <ResponseField name="email" type="string" />

        <ResponseField name="full_name" type="string" />

        <ResponseField name="org_id" type="integer" />
      </Expandable>
    </ResponseField>
  </Accordion>

  <Accordion title="update_customer">
    Update a customer record.

    **Input**

    <ResponseField name="customer_id" type="integer" required>
      The customer's database ID.
    </ResponseField>

    <ResponseField name="email" type="string | null">
      New email address.
    </ResponseField>

    <ResponseField name="full_name" type="string | null">
      New full name.
    </ResponseField>

    **Output**

    <ResponseField name="customer" type="CustomerOutput | null">
      <Expandable title="properties">
        <ResponseField name="customer_id" type="integer" />

        <ResponseField name="customer_uid" type="string" />

        <ResponseField name="email" type="string" />

        <ResponseField name="full_name" type="string" />

        <ResponseField name="org_id" type="integer" />
      </Expandable>
    </ResponseField>

    <ResponseField name="changed_fields" type="string[]" />
  </Accordion>
</AccordionGroup>

## Insights

### Read tools

<AccordionGroup>
  <Accordion title="query_insights">
    Query the project's analytics data.

    **Input**

    <ResponseField name="sql_query" type="string" required />
  </Accordion>
</AccordionGroup>

## Invoices

### Read tools

<AccordionGroup>
  <Accordion title="get_invoice_details">
    Get invoice details by UID, including status, totals, line items, and billing info.

    **Input**

    <ResponseField name="invoice_uid" type="string" required>
      The invoice's UUID
    </ResponseField>

    **Output**

    <ResponseField name="success" type="boolean" />

    <ResponseField name="error" type="string | null" />

    <ResponseField name="invoice_id" type="integer | null" />

    <ResponseField name="invoice_uid" type="string | null" />

    <ResponseField name="invoice_number" type="string | null" />

    <ResponseField name="status" type="string | null" />

    <ResponseField name="source" type="string | null" />

    <ResponseField name="customer_id" type="integer | null" />

    <ResponseField name="order_id" type="integer | null" />

    <ResponseField name="currency" type="string | null" />

    <ResponseField name="subtotal" type="integer | null" />

    <ResponseField name="discount" type="integer | null" />

    <ResponseField name="tax" type="integer | null" />

    <ResponseField name="total" type="integer | null" />

    <ResponseField name="bill_to_name" type="string | null" />

    <ResponseField name="bill_to_email" type="string | null" />

    <ResponseField name="line_items" type="InvoiceLineItemOutput[]">
      <Expandable title="properties">
        <ResponseField name="line_item_id" type="integer" />

        <ResponseField name="product_id" type="integer | null" />

        <ResponseField name="title" type="string" />

        <ResponseField name="quantity" type="integer" />

        <ResponseField name="unit_price" type="integer" />

        <ResponseField name="total" type="integer" />
      </Expandable>
    </ResponseField>
  </Accordion>
</AccordionGroup>

### Write tools

<AccordionGroup>
  <Accordion title="create_invoice">
    Create an invoice for a customer.

    **Input**

    <ResponseField name="customer_id" type="integer" required>
      The customer's database ID.
    </ResponseField>

    <ResponseField name="line_items" type="object[]" required>
      List of line items, each with description, quantity, unit\_price.
    </ResponseField>

    <ResponseField name="currency" type="string">
      ISO 4217 currency code (default: usd). *Default: `"usd"`.*
    </ResponseField>

    **Output**

    <ResponseField name="invoice_id" type="integer | null" />

    <ResponseField name="invoice_uid" type="string | null" />

    <ResponseField name="status" type="string | null" />

    <ResponseField name="total" type="integer | null" />
  </Accordion>

  <Accordion title="create_invoice_line_item">
    Append a line item to an existing invoice.

    **Input**

    <ResponseField name="invoice_uid" type="string" required>
      The invoice's UUID.
    </ResponseField>

    <ResponseField name="title" type="string" required>
      Line item title.
    </ResponseField>

    <ResponseField name="quantity" type="integer" required>
      Quantity (>=1).
    </ResponseField>

    <ResponseField name="unit_price" type="integer" required>
      Unit price in the invoice's smallest currency unit.
    </ResponseField>

    <ResponseField name="product_id" type="integer | null">
      Optional product ID linking the item to a product.
    </ResponseField>

    <ResponseField name="description" type="string | null">
      Optional description.
    </ResponseField>

    **Output**

    <ResponseField name="line_item_id" type="integer | null" />

    <ResponseField name="invoice_id" type="integer | null" />
  </Accordion>
</AccordionGroup>

## Notifications

### Read tools

<AccordionGroup>
  <Accordion title="list_notifications">
    Browse project notifications with filters.

    **Input**

    <ResponseField name="categories" type="string[] | null" />

    <ResponseField name="severities" type="string[] | null" />

    <ResponseField name="include_read" type="boolean">
      *Default: `true`.*
    </ResponseField>

    <ResponseField name="include_dismissed" type="boolean">
      *Default: `false`.*
    </ResponseField>

    <ResponseField name="include_acted" type="boolean">
      *Default: `true`.*
    </ResponseField>

    <ResponseField name="since_hours" type="integer | null" />

    <ResponseField name="limit" type="integer">
      *Default: `25`.*
    </ResponseField>

    **Output**

    <ResponseField name="count" type="integer" />

    <ResponseField name="notifications" type="object[]" />
  </Accordion>
</AccordionGroup>

## Orders

### Read tools

<AccordionGroup>
  <Accordion title="get_order_details">
    Get order details by UID including line items and customer info.

    **Input**

    <ResponseField name="order_uid" type="string" required>
      The order's UUID
    </ResponseField>

    **Output**

    <ResponseField name="id" type="integer | null" />

    <ResponseField name="uid" type="string | null" />

    <ResponseField name="status" type="string | null" />

    <ResponseField name="subtotal" type="number | null" />

    <ResponseField name="total" type="number | null" />

    <ResponseField name="tax" type="number | null" />

    <ResponseField name="created_at" type="string | null" />

    <ResponseField name="customer" type="OrderCustomerInfo | null">
      <Expandable title="properties">
        <ResponseField name="id" type="integer" />

        <ResponseField name="uid" type="string" />

        <ResponseField name="email" type="string" />

        <ResponseField name="name" type="string" />
      </Expandable>
    </ResponseField>

    <ResponseField name="line_items" type="OrderLineItemInfo[] | null" />

    <ResponseField name="error" type="string | null" />
  </Accordion>

  <Accordion title="get_order_history">
    Get a customer's recent order history. Returns orders with totals, status, and line items.

    **Input**

    <ResponseField name="customer_id" type="integer" required>
      The customer's database ID
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Max orders to return (default 20) *Default: `20`.*
    </ResponseField>

    **Output**

    <ResponseField name="order_count" type="integer" />

    <ResponseField name="orders" type="OrderSummary[]">
      <Expandable title="properties">
        <ResponseField name="id" type="integer | null" />

        <ResponseField name="uid" type="string | null" />

        <ResponseField name="status" type="string | null" />

        <ResponseField name="subtotal" type="number | null" />

        <ResponseField name="total" type="number | null" />

        <ResponseField name="tax" type="number | null" />

        <ResponseField name="created_at" type="string | null" />

        <ResponseField name="customer" type="OrderCustomerInfo | null">
          <Expandable title="properties">
            <ResponseField name="id" type="integer" />

            <ResponseField name="uid" type="string" />

            <ResponseField name="email" type="string" />

            <ResponseField name="name" type="string" />
          </Expandable>
        </ResponseField>

        <ResponseField name="line_items" type="OrderLineItemInfo[] | null" />
      </Expandable>
    </ResponseField>
  </Accordion>

  <Accordion title="get_orders">
    Browse the most recent orders.

    **Input**

    <ResponseField name="limit" type="integer">
      *Default: `10`.*
    </ResponseField>
  </Accordion>
</AccordionGroup>

### Write tools

<AccordionGroup>
  <Accordion title="update_billing_address">
    Update the billing address on an order.

    **Input**

    <ResponseField name="order_uid" type="string" required>
      The order's UUID.
    </ResponseField>

    <ResponseField name="line1" type="string" required>
      Street address line 1.
    </ResponseField>

    <ResponseField name="city" type="string" required>
      City name.
    </ResponseField>

    <ResponseField name="postal_code" type="string" required>
      Postal/ZIP code.
    </ResponseField>

    <ResponseField name="country" type="string" required>
      ISO country code (e.g. 'US').
    </ResponseField>

    <ResponseField name="line2" type="string | null">
      Optional secondary address line.
    </ResponseField>

    <ResponseField name="state" type="string | null">
      Optional state/region code.
    </ResponseField>

    **Output**

    <ResponseField name="order_id" type="integer | null" />
  </Accordion>

  <Accordion title="update_order">
    Update fields on an order (whitelisted by the order's agent-updatable fields).

    **Input**

    <ResponseField name="order_id" type="integer" required>
      The order's database ID.
    </ResponseField>

    <ResponseField name="updates" type="object" required>
      Dict of writable fields to apply (subject to the order's
      agent-updatable whitelist).
    </ResponseField>

    **Output**

    <ResponseField name="message" type="string | null" />
  </Accordion>

  <Accordion title="update_order_metadata">
    Update an order's integration metadata.

    **Input**

    <ResponseField name="order_id" type="integer" required>
      The order's database ID.
    </ResponseField>

    <ResponseField name="metadata" type="object" required>
      Metadata fields to merge into the order record.
    </ResponseField>

    **Output**

    <ResponseField name="order_id" type="integer | null" />
  </Accordion>

  <Accordion title="update_order_status">
    Update an order's status. Pauses for approval before running.

    **Input**

    <ResponseField name="order_id" type="integer" required>
      The order's database ID.
    </ResponseField>

    <ResponseField name="status" type="enum (`pending`, `confirmed`, `complete`)" required>
      New status. Cannot be 'refunded' or 'cancelled' (those have dedicated flows).
    </ResponseField>

    **Output**

    <ResponseField name="order_id" type="integer | null" />

    <ResponseField name="previous_status" type="string | null" />

    <ResponseField name="new_status" type="string | null" />
  </Accordion>

  <Accordion title="update_shipping_address">
    Update the shipping address on an order.

    **Input**

    <ResponseField name="order_uid" type="string" required>
      The order's UUID.
    </ResponseField>

    <ResponseField name="line1" type="string" required>
      Street address line 1.
    </ResponseField>

    <ResponseField name="city" type="string" required>
      City name.
    </ResponseField>

    <ResponseField name="postal_code" type="string" required>
      Postal/ZIP code.
    </ResponseField>

    <ResponseField name="country" type="string" required>
      ISO country code (e.g. 'US').
    </ResponseField>

    <ResponseField name="line2" type="string | null">
      Optional secondary address line.
    </ResponseField>

    <ResponseField name="state" type="string | null">
      Optional state/region code.
    </ResponseField>

    **Output**

    <ResponseField name="order_id" type="integer | null" />
  </Accordion>
</AccordionGroup>

## Payments

### Read tools

<AccordionGroup>
  <Accordion title="get_payment_details">
    Get payment details by UID, including amount, status, and method.

    **Input**

    <ResponseField name="payment_uid" type="string" required>
      The payment's UUID
    </ResponseField>

    **Output**

    <ResponseField name="success" type="boolean" />

    <ResponseField name="error" type="string | null" />

    <ResponseField name="payment_id" type="integer | null" />

    <ResponseField name="payment_uid" type="string | null" />

    <ResponseField name="invoice_id" type="integer | null" />

    <ResponseField name="status" type="string | null" />

    <ResponseField name="amount" type="integer | null" />

    <ResponseField name="currency" type="string | null" />

    <ResponseField name="payment_provider" type="string | null" />

    <ResponseField name="payment_method" type="string | null" />

    <ResponseField name="card_brand" type="string | null" />

    <ResponseField name="card_last4" type="string | null" />

    <ResponseField name="transaction_id" type="string | null" />

    <ResponseField name="failure_code" type="string | null" />

    <ResponseField name="failure_message" type="string | null" />
  </Accordion>
</AccordionGroup>

## Products

### Read tools

<AccordionGroup>
  <Accordion title="get_product_details">
    Get product details by UID, including name, description, archive state, and default variant.

    **Input**

    <ResponseField name="product_uid" type="string" required>
      The product's UUID
    </ResponseField>

    **Output**

    <ResponseField name="success" type="boolean" />

    <ResponseField name="error" type="string | null" />

    <ResponseField name="product_id" type="integer | null" />

    <ResponseField name="product_uid" type="string | null" />

    <ResponseField name="name" type="string | null" />

    <ResponseField name="handle" type="string | null" />

    <ResponseField name="description" type="string | null" />

    <ResponseField name="is_published" type="boolean | null" />

    <ResponseField name="is_archived" type="boolean | null" />

    <ResponseField name="default_variant" type="ProductVariantOutput | null">
      <Expandable title="properties">
        <ResponseField name="uid" type="string" />

        <ResponseField name="name" type="string | null" />

        <ResponseField name="inventory_count" type="integer | null" />

        <ResponseField name="prices" type="ProductPriceOutput[]">
          <Expandable title="properties">
            <ResponseField name="uid" type="string" />

            <ResponseField name="name" type="string | null" />

            <ResponseField name="currency" type="string" />

            <ResponseField name="unit_price" type="number | null" />

            <ResponseField name="is_default" type="boolean" />
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Accordion>

  <Accordion title="get_products">
    Browse the project's products.

    **Input**

    <ResponseField name="search_term" type="string | null" />
  </Accordion>
</AccordionGroup>

### Write tools

<AccordionGroup>
  <Accordion title="archive_deliverable">
    Archive a product deliverable.

    **Input**

    <ResponseField name="deliverable_uid" type="string" required>
      The deliverable's UUID.
    </ResponseField>

    **Output**

    <ResponseField name="deliverable_uid" type="string | null" />
  </Accordion>

  <Accordion title="archive_product">
    Archive a product so it stops appearing on the storefront.

    **Input**

    <ResponseField name="product_uid" type="string" required>
      The product's UUID.
    </ResponseField>

    **Output**

    <ResponseField name="product_uid" type="string | null" />
  </Accordion>

  <Accordion title="create_deliverable">
    Create a new product deliverable.

    **Input**

    <ResponseField name="type" type="string" required>
      Deliverable type identifier.
    </ResponseField>

    <ResponseField name="name" type="string" required>
      Display name.
    </ResponseField>

    <ResponseField name="config" type="object | null">
      Optional type-specific configuration.
    </ResponseField>

    **Output**

    <ResponseField name="deliverable_uid" type="string | null" />

    <ResponseField name="name" type="string | null" />
  </Accordion>

  <Accordion title="create_price">
    Create a new price for a product variant.

    **Input**

    <ResponseField name="variant_uid" type="string" required>
      The variant's UUID.
    </ResponseField>

    <ResponseField name="amount" type="number" required>
      Unit price.
    </ResponseField>

    <ResponseField name="currency" type="string">
      ISO 4217 currency code (default: USD). *Default: `"USD"`.*
    </ResponseField>

    <ResponseField name="name" type="string | null">
      Optional human-readable name for the price.
    </ResponseField>

    <ResponseField name="recurring_interval" type="string | null">
      Optional 'month' or 'year' for subscriptions.
    </ResponseField>

    <ResponseField name="is_default" type="boolean">
      Whether to mark this as the default price for the variant. *Default: `false`.*
    </ResponseField>

    **Output**

    <ResponseField name="price_uid" type="string | null" />

    <ResponseField name="is_default" type="boolean | null" />
  </Accordion>

  <Accordion title="publish_product">
    Publish a product so it appears on the storefront.

    **Input**

    <ResponseField name="product_uid" type="string" required>
      The product's UUID.
    </ResponseField>

    **Output**

    <ResponseField name="product_uid" type="string | null" />

    <ResponseField name="name" type="string | null" />
  </Accordion>

  <Accordion title="set_default_price">
    Mark a price as the default for its variant.

    **Input**

    <ResponseField name="price_uid" type="string" required>
      The price's UUID.
    </ResponseField>

    **Output**

    <ResponseField name="price_uid" type="string | null" />
  </Accordion>

  <Accordion title="unarchive_product">
    Unarchive a product.

    **Input**

    <ResponseField name="product_uid" type="string" required>
      The product's UUID.
    </ResponseField>

    **Output**

    <ResponseField name="product_uid" type="string | null" />
  </Accordion>

  <Accordion title="update_deliverable">
    Update a product deliverable.

    **Input**

    <ResponseField name="deliverable_uid" type="string" required>
      The deliverable's UUID.
    </ResponseField>

    <ResponseField name="name" type="string | null">
      Optional new name.
    </ResponseField>

    <ResponseField name="type" type="string | null">
      Optional new type identifier.
    </ResponseField>

    <ResponseField name="config" type="object | null">
      Optional new configuration.
    </ResponseField>

    **Output**

    <ResponseField name="deliverable_uid" type="string | null" />
  </Accordion>
</AccordionGroup>

## Web search

### Read tools

<AccordionGroup>
  <Accordion title="fetch_page">
    Fetch the content of a public web page.

    **Input**

    <ResponseField name="url" type="string" required />

    <ResponseField name="query" type="string" required />
  </Accordion>

  <Accordion title="web_search">
    Search the public web.

    **Input**

    <ResponseField name="query" type="string" required />

    <ResponseField name="num_results" type="integer">
      *Default: `5`.*
    </ResponseField>
  </Accordion>
</AccordionGroup>
