> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.moveworks.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.moveworks.com/_mcp/server.

# 5. Configure Catalog Items

## Overview

* **Objectives:** Configure forms ingestion for a single ServiceNow service catalog, understand what gets ingested (catalog items vs. record producers), and verify forms appear in Ingested Forms.
* **Estimated Time:** 20 minutes
* **Prerequisites:** Completed Sections 1 and 2 (ServiceNow connector configured and tested in API Playground). Your PDI must have the **IT Service Catalog** with 6-8 catalog items already created.

***

## Part 1: Basic Forms Ingestion — IT Service Catalog

### Key Concepts

Moveworks ingests forms from your ITSM's service catalogs. The two most important form types to understand:

* **Catalog Items** — Standard request forms (e.g., "Request New Laptop"). Moveworks renders these natively in-chat because the variable structure is predictable.
* **Record Producers** — Forms that create records on other tables (e.g., incidents). These often have client scripts that make them harder to render in-chat, so Moveworks may **deflect** them to the portal unless you override.

***

## 🛠️ 1: Walkthrough

**Warning:** Forms ingestion requires the ServiceNow connector from Section 2. If your connector isn't working, go back and verify it in API Playground before proceeding.

1. **Navigate** to **Forms** → **Import** → **Import Settings** in **Moveworks Setup**

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/01045317f4439e8755b74c2c5946997a10d34ce0a7e985021d2d8a747b30f336/docs/assets/images/setup-labs/lab4_0b19e90b-6e4d-4916-9875-8d515df84f8b_image.png)

2. Click **New Ingestion** (or **Edit** if a configuration already exists)

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/25d6a2d99413f2beaa6551a43e51fd7bb1fa06892fbcf6b802f937bba2143df3/docs/assets/images/setup-labs/lab4_ce3b63d0-fbe7-4709-a3d1-7a4a48b957d5_image.png)

3. **Select Connector:** Choose your `snow` connector

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/b757eaad18f8c3d6649e496583a8b99966b6a44bf5cad3054995509a5d9a3251/docs/assets/images/setup-labs/lab4_672258a6-3cd3-4f10-a4f9-bb7b9de8c3ed_image.png)

4. **Provide Configuration Name:** Give a unique name to the Form Ingestion configuration

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/3fee1ea0c4a0796544ea6da16e65f44180baf84dee3d1edeb7c52e1f162f9f79/docs/assets/images/setup-labs/lab4_11ba9f6d-f0f0-47cb-b373-0d5d09411de9_image.png)

1. **Select Form Catalog:** Choose IT Service Catalog
2. **Select Domain:** Choose `IT` — this tells Moveworks these are IT domain forms

**Note:** Each domain (IT, HR, Facilities, etc.) is configured separately. In Part 1 we only configure IT. Part 2 covers adding HR.

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/15679a863c785ac1fd0a3bf4a19b47706e75f54a6cbbfde2e7007daad03ed779/docs/assets/images/setup-labs/lab4a_select_form_catalogs.png)

5. **Provide Template URL**

   The Template URL is a template for Moveworks to use for the forms ingested in this particular ingestion configuration. Fill in the template URL with your instance URL and use `[form_id]` as a placeholder for the sys\_id of the Catalog Item:

   ```
   https://[your_demohub_domain].service-now.com/esc?id=sc_cat_item&sys_id=[form_id]
   ```

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/b569dd0e2ade25732922bb88befa364602fe678dd41851567d4d2f02c3356840/docs/assets/images/setup-labs/lab4a_sample_url_template.png)

6. Click **Next** to review Samples. You should see some examples of forms in that particular catalog. Once you confirm the forms look correct, select **Save.**

7. Click **Run Ingestion** (or wait for the next scheduled run). Ingestion typically takes **2-5 minutes** for a small catalog.

**Warning:** Requires Moveworks team to run backend job.

8. Once complete, navigate to **Forms** → **Ingested Forms** in **Moveworks Setup**

***

## ✅ 2: Verification & Next Steps

1. **Check Ingested Forms:** Navigate to **Forms** → **Ingested Forms**. You should see your IT catalog items listed:

| **Expected Form Name**           | **Fillable?**                   |
| -------------------------------- | ------------------------------- |
| Request New Laptop               | Yes                             |
| Request Software Access          | Yes                             |
| Request VPN Access               | Yes                             |
| Order Office Supplies            | Yes                             |
| Conference Room Booking          | Yes                             |
| Badge Access Request             | Yes                             |
| Request Production Server Access | Yes (restricted to IT Dept)     |
| Order Dev Tools                  | Yes (restricted to Engineering) |

2. **Check Fillability:** Click on **Request New Laptop** — verify it shows as fillable with variables (`laptop_model`, `delivery_location`, `justification`, `needed_by_date`, `urgent`).

3. **Check User Criteria:** Click on **Request Production Server Access** — verify it shows restricted access (IT Department only). If you test as a user not in the IT Department group, this form should NOT appear in search results.

4. **Test in Bot:** Open the Moveworks bot in Teams/Slack and type: `"I need a new laptop"` — Moveworks should surface the "Request New Laptop" form and begin conversational form filling.

**Note:** Check that your connector is valid (Section 2), the catalog sys\_id is correct, and the catalog items are active in your ITSM.

***

## 🪞 3: Reflecting on This Configuration

Through this guide, you've learned the following:

* How to configure forms ingestion for a single service catalog using a catalog sys\_id
* The difference between catalog items (fillable by default) and record producers (may require override)
* How user criteria carries over — restricted forms are only shown to authorized users in Moveworks
* How to verify ingested forms in **Ingested Forms** and test them through the bot

***

## ⚙️ 4: Configuration Details

Use the table below to fill in the required fields.

| **Field Name**                 | **Action / Value to Enter**                                       |
| ------------------------------ | ----------------------------------------------------------------- |
| **Integration**                | Select your `snow` connector                                      |
| **Domain**                     | `IT`                                                              |
| **Filter Type**                | Default Filter                                                    |
| **Catalog IDs**                | Paste the sys\_id of **IT Service Catalog** from your PDI         |
| **Form Requester Field Names** | `requested_for` (auto-populates the requester on submitted forms) |
| **Whitelist sys\_ids**         | Leave empty                                                       |
| **Disallowed Form IDs**        | Leave empty                                                       |

Leave all other fields at their defaults for Part 1.

***

## Part 2 (OPTIONAL): Advanced Forms Ingestion — HR Catalog, Record Producers & Overrides

## Overview

* **Objectives:** Add a second service catalog (HR), handle record producers, configure fillability overrides, use advanced query filters, and manage form exclusions.
* **Estimated Time:** 25 minutes
* **Prerequisites:** Part 1 complete (IT catalog ingested). Your PDI must have the **HR Service Catalog** with 5-6 catalog items and **2 Record Producers** already created.

***

## 🛠️ 1: Walkthrough — Add the HR Service Catalog

**Note:** Adding a second catalog with a different domain demonstrates how Moveworks handles multi-domain form ingestion. IT and HR forms are configured independently so they can have different filtering and fillability rules.

1. **Navigate** to **Forms** → **Ingestion** in **Moveworks Setup**
2. Click **Add Domain Configuration** (or **+ Add** if using the multi-domain view)
3. **Select Integration:** Same `snow` connector
4. **Select Domain:** Choose `HR`
5. Under **Filter Settings**, select **Default Filter**
6. Enter the **Catalog ID** for the HR Service Catalog

**Note:** Find it the same way as Part 1: `sc_catalog.list` in your PDI → copy the sys\_id for **HR Service Catalog**.

7. In the **Form Requester Field Names** field, enter `opened_for` — HR catalog items typically use `opened_for` instead of `requested_for`
8. Click **Save** and **Run Ingestion**

***

## ⚙️ 2: Configuration Details — HR Catalog

| **Field Name**                 | **Action / Value to Enter**                 |
| ------------------------------ | ------------------------------------------- |
| **Integration**                | Select your `snow` connector                |
| **Domain**                     | `HR`                                        |
| **Filter Type**                | Default Filter                              |
| **Catalog IDs**                | Paste the sys\_id of **HR Service Catalog** |
| **Form Requester Field Names** | `opened_for`                                |

***

## 🔍 3: Inspect Record Producers

After ingestion completes, go to **Forms** → **Ingested Forms**. You should now see both IT and HR forms. Look for the two **Record Producers**:

| **Form Name**              | **Fillable?**                      | **Why?**                                                    |
| -------------------------- | ---------------------------------- | ----------------------------------------------------------- |
| Report IT Issue (Optimal)  | Likely **No** — Deflects to portal | Record producer — client scripts may block native rendering |
| Report Issue (Non-Optimal) | Likely **No** — Deflects to portal | Same reason — plus poorly designed variables add complexity |

**Why are Record Producers unfillable by default?** Record producers often have client scripts that only run in the ITSM browser. Moveworks can't execute those scripts in-chat, so it conservatively marks them as unfillable and deflects to the portal. You can override this in the next section.

***

## 🛠️ 4: Configure Fillability Overrides

To make the **"Report IT Issue (Optimal)"** record producer fillable in-chat:

1. In **Forms** → **Ingestion** settings, scroll to the **Advanced Deflection & Fillability** section
2. Find the field **Form Filling Enabled Override**
3. This uses DSL (Domain Specific Language) rules. Enter a rule to target the specific form:

```plain text
form.sys_id EQ "[sys_id_of_Report_IT_Issue_Optimal]"
```

**Note:** To find the form's sys\_id: go to **Ingested Forms**, click the form, and copy the sys\_id from the details panel.

4. Click **Save** and **Re-run Ingestion**
5. Go back to **Ingested Forms** — **"Report IT Issue (Optimal)"** should now show as **Fillable**

**When to use this override:** Only override fillability for record producers where the client scripts are non-essential (cosmetic, auto-fill, or visual-only). If a script performs critical validation, leave the form as deflected — the user will complete it in the ITSM portal instead.

**Fillability Override Reference:**

| **Setting**                          | **Value**                   | **What It Does**                                                                                                |
| ------------------------------------ | --------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Form Filling Enabled Override**    | `form.sys_id EQ "[sys_id]"` | Forces a specific unfillable form to become fillable in-chat                                                    |
| **Form Filling Disabled**            | `form.sys_id EQ "[sys_id]"` | Forces a specific fillable form to deflect to the ITSM portal instead                                           |
| **Mark All Eligible Forms Fillable** | Enable                      | Makes all forms that pass fillability checks available for in-chat filling (use with caution)                   |
| **Form Deflection Enabled**          | Enable                      | When forms can't be filled in-chat, show a redirect link to the ITSM portal instead of hiding the form entirely |

***

## 🛠️ 5: Exclude Specific Forms

Sometimes you need to exclude specific forms from ingestion entirely (e.g., deprecated items, internal-only forms).

1. In **Forms** → **Ingestion** settings for the IT domain, find the **Disallowed Form IDs** field
2. Enter the sys\_id of **"Report Issue (Non-Optimal)"**

**Note:** Find the sys\_id in your PDI: `sc_cat_item_producer.list` → click the form → copy the sys\_id.

3. Click **Save** and **Re-run Ingestion**
4. Verify in **Ingested Forms** that **"Report Issue (Non-Optimal)"** no longer appears

| **Field**               | **When to Use**                                                                                                                                        |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Disallowed Form IDs** | Exclude specific forms by sys\_id. Takes priority over all other filter settings — even whitelisted forms. Use for deprecated or broken catalog items. |
| **Whitelist sys\_ids**  | Force specific forms to be ingested regardless of filter rules. Useful for forms outside the selected catalog that you still want available.           |

***

## 🛠️ 6: Advanced Filtering — Custom Query Filter

Instead of the Default Filter, you can use an **Advanced Filter** with a custom query.

1. Switch the **Filter Type** from Default Filter to **Advanced Filter**
2. Enter a custom query filter. For example:

```plain text
active=true^categoryISNOTEMPTY^sys_class_name=sc_cat_item
```

This example ingests only active, categorized, standard catalog items (excluding record producers and order guides).

**Use Advanced Filters carefully.** The Default Filter mirrors your ITSM portal's visibility rules, which is correct for most orgs. Advanced Filters give full control but can miss forms or over-ingest if the query isn't right. Stick with Default Filter unless you have a specific need.

3. After testing, **switch back to Default Filter** for this lab — Advanced Filters are shown here for awareness.

***

## 🛠️ 7: Handling Client Scripts

If a form has client scripts that prevent native rendering, you can tell Moveworks to ignore specific scripts:

1. In **Forms** → **Ingestion** settings, find **Script IDs to Ignore**
2. Enter the sys\_id(s) of the client scripts to skip (find these in your ITSM's script list for the catalog item)
3. After re-ingestion, the form may become fillable in-chat since the blocking scripts are ignored

**Which scripts are safe to ignore?**

* **Safe:** Scripts that auto-populate fields or toggle field visibility (cosmetic only)
* **Not safe:** Scripts that validate input formats or calculate values from other fields
* **When in doubt:** Leave the script active — the form will deflect to the portal instead

***

## ✅ 8: Verification & Next Steps

1. **Ingested Forms Check:**
   * [ ] IT catalog items: 6-8 forms (minus any excluded)
   * [ ] HR catalog items: 5-6 forms
   * [ ] "Report IT Issue (Optimal)": shows as **Fillable** (after override)
   * [ ] "Report Issue (Non-Optimal)": **Not listed** (excluded via **Disallowed Form IDs**)
2. **Access Control Check:**
   * [ ] Log into the Moveworks bot as a user **NOT** in the IT Department or Engineering group
   * [ ] Search for "production server access" — it should **not** appear
   * [ ] Search for "new laptop" — it should appear and be fillable
3. **Record Producer Check:**
   * [ ] Search for "report IT issue" in the bot
   * [ ] Moveworks should begin conversational form filling (since you enabled the override)
   * [ ] Complete the form and verify a new **Incident** record is created in your ITSM (not a RITM)

***

## 🪞 9: Reflecting on This Configuration

Through this guide, you've learned the following:

* How to configure multi-domain forms ingestion (IT + HR with separate settings)
* How Moveworks handles record producers differently from catalog items — and when to override fillability
* How to use **Disallowed Form IDs** and **Whitelists** to control which forms are ingested
* How to use **Advanced Filters** for granular control over form selection
* How to handle client scripts that block native in-chat rendering using **Script IDs to Ignore**
* How requester field mapping can differ by domain (`requested_for` vs. `opened_for`)

***

## Summary: Forms Ingestion Settings Reference

| **Setting**                      | **Where**                | **What It Controls**                                           |
| -------------------------------- | ------------------------ | -------------------------------------------------------------- |
| Catalog IDs                      | Default Filter           | Which service catalogs to pull forms from                      |
| Disallowed Form IDs              | Filter                   | Exclude specific forms (highest priority)                      |
| Whitelist sys\_ids               | Filter                   | Force-include specific forms regardless of filter              |
| Advanced Filter (sysparm\_query) | Advanced Filter          | Custom query for form selection                                |
| Form Filling Enabled Override    | Deflection & Fillability | Force unfillable forms (e.g., record producers) to be fillable |
| Form Filling Disabled            | Deflection & Fillability | Force fillable forms to deflect to portal                      |
| Form Deflection Enabled          | Deflection & Fillability | Show portal link for unfillable forms instead of hiding them   |
| Script IDs to Ignore             | Advanced                 | Skip specific client scripts that block native rendering       |
| Form Requester Field Names       | Integration              | Which field to auto-populate with the requesting user          |
| Extra sys\_class Names           | Advanced                 | Ingest forms from custom tables extending `sc_cat_item`        |

![](https://files.buildwithfern.com/moveworks.docs.buildwithfern.com/01045317f4439e8755b74c2c5946997a10d34ce0a7e985021d2d8a747b30f336/docs/assets/images/setup-labs/lab4_25af764f-a571-4487-94d0-dde8010ef5cb_image.png)