Site catalog
JCPenney for AI Agents
jcpenney.com: 45 mapped actions across 9 screens
JCPenney is a US department store: clothing, shoes, jewelry, beauty, and home goods at jcpenney.com. Through Rindler, your agent drives it like an API. The mapped config exposes 45 actions across 9 screens, covering the full loop from search to the payment step of checkout, plus order tracking and store lookup.
Rindler handles the browser session and screen resolution. Your agent calls named actions with typed params (search_products, select_size, add_to_cart) and gets back the resulting screen, never raw HTML or CSS selectors.
What's mapped
The config covers the whole shopping loop. For discovery, search_products types a query into the header search box and works from any screen where the header is visible, and open_department opens one of nine top-level departments (women, men, juniors, baby-kids, home-store, shoes, jewelry-and-watches, beauty-and-salon, sale). On listing pages, apply_filter narrows by whatever filter groups the category exposes (color, size, brand, price range, and so on), sort_results switches between six sort orders from 'best match' to 'price high - low', and go_to_page pages through results.
On a product page your agent picks a variant with select_size and select_color, sets a quantity with set_quantity, and calls add_to_cart. Success is confirmed by the mini-cart side panel opening and the header bag counter incrementing; the site shows no toast and does not navigate. open_reviews expands the Bazaarvoice reviews region and view_size_guide opens the department-specific size guide.
In the cart, update_quantity, remove_from_cart (immediate, no confirmation dialog), save_for_later, and apply_best_coupon (applies the Best Coupon banner at the top of the cart, raising Total Savings by the advertised amount) manage the bag. Checkout runs through the sign-in/guest gate onto the shipping step: continue_as_guest, enter_shipping_address, set_delivery_mode to toggle Ship to Home vs Ship to Store, then continue_to_payment. After purchase, track_order looks up any order by order number plus phone on the public tracking page, and find_stores_near finds stores by zip, city, or city plus state.
Quirks worth knowing
These come straight from the mapped action behavior, and Rindler already compensates for each one.
**Size buttons toggle.** Re-clicking an already-selected size deselects it. select_size only clicks when the target size is not already active, so your agent never accidentally unpicks a variant.
**The main nav is hover megamenus, not links.** open_department skips the hover dance and navigates directly to the department URL. Pagination has the same problem: numbered page indicators render as generic divs, not links, so go_to_page rewrites the page parameter in the URL instead of clicking.
**The cart has two identical Checkout buttons** (a primary one and a sticky mobile one). checkout targets the first match inside the Order Summary region so the duplicate is never the one clicked.
**Filter values are case-sensitive and stock caps are real.** apply_filter values must match the on-screen label exactly ('Blush', not 'blush'; 'under $5' for price buckets), and the quantity comboboxes on both the product page and the cart are stock-capped, so a 'Hurry, 2 left!' item tops out at 2.
Signing in
Most of the surface is public. Search, browsing, product pages, the cart, order tracking, and the store locator all work with no account. Only four actions require auth in the config: checkout, save_for_later, save_to_wishlist, and view_order_detail.
The gate itself lives at jcpenney.com/cart/signin, and open_sign_in reaches it by direct URL because the header account dropdown has no accessible label. From there your agent has two lanes:
**Guest.** continue_as_guest proceeds without an account and lands directly on the shipping step of checkout. For a straight purchase this is the shortest path.
**Account.** The login action takes email and password params and fills the form itself; credentials are redacted from logs and responses. It proves success by navigating to the authed account dashboard, where an unauthenticated hit redirects back to the sign-in page. That means a wrong password or an OTP step reports as a real failure instead of a false 'you're logged in'.
The screens your agent moves through
Nine screens are mapped: homepage, department_landing, plp, pdp, cart, cart_signin, checkout_shipping, order_tracking, and store_locator.
A typical session starts on homepage, reaches plp via search or department_landing via open_department, drills into a pdp with view_product, builds the bag on cart, passes the cart_signin gate, and finishes on checkout_shipping, where address, delivery mode, and the advance to payment happen. order_tracking and store_locator stand alone and are fully public, so a track-my-order or find-a-store task never touches the purchase flow at all.
Every dispatch reports which screen the session landed on and which actions are valid there, so your agent always knows where it is without parsing the page.
Example session
start_session(url: "https://www.jcpenney.com")
# -> screen "homepage" with the mapped action list
dispatch_action(action: "search_products", params: { "query": "..." })
# -> screen "plp"
dispatch_action(action: "apply_filter", params: { "group": "color", "value": "Blush" })
# filter drawer opens, "Blush" applied, grid narrows
close_session()
Every mapped action
Generated from the live site config. 4 of 45 actions require a signed-in session.
| Action | What it does |
|---|---|
| account_addresses | |
| account_payment_methods | |
| add_to_cart | Add the currently-selected PDP variant to the bag. Requires size (and color if multiple) to be selected first. Success is signalled by the mini-cart side panel opening ('N Item Added' text) and the header bag counter incrementing. No toast or navigation otherwise. |
| apply_best_coupon | Apply the Best Coupon shown at the top of the cart page. Increases Total Savings by the advertised amount. |
| apply_filter | Apply a filter on the PLP. Opens the filter drawer if needed, expands the group, then clicks the matching option. Filter groups vary by category (examples: 'color', 'size', 'brand', 'price range', 'dress length'). Values are case-sensitive to match the on-screen label (e.g. 'Blush' not 'blush' for colors; 'under $5' for price buckets). |
| apply_promo | |
| browse_category | |
| cancel_order | |
| capture_login | |
| checkoutauth | Advance from cart to the sign-in/guest gate. IMPORTANT: the cart has two identical 'Checkout' buttons (primary + sticky mobile); this action targets the first-match in the Order Summary region. |
| clear_filter | Remove a single applied filter by clicking its chip in the Selected Filters row. Opens the drawer first if closed. |
| continue_as_guest | On the sign-in/guest gate, proceed without creating an account. Lands on the shipping step of checkout. |
| continue_to_payment | Advance past the shipping step to the payment screen. |
| enter_shipping_address | Fill the shipping address form on /checkout/shipping. |
| filter_results | |
| find_stores_near | Find JCPenney stores near a location (zip, city, or city+state). |
| go_to_page | Paginate to page N of PLP results. Prefers URL manipulation over clicking numbered page indicators (which are rendered as generic divs, not links). If the current URL already has &page=, it is replaced. |
| login | Sign in to JCPenney with email and password (#963 agent-driven credential fill). Discoverable global action; the agent supplies its own credentials, which are redacted from logs/responses. Steady-state sign-in mirrors capture_login: robust multi-selector email/password/submit + the OneTrust cookie-accept guard, then navigates to the authed /account/dashboard so the success_condition is NON-VACUOUS -- an unauthed dashboard hit 301s back to /cart/signin and fails the check, so a rejected credential (wrong password, bot wall, OTP step) is reported as a real failure instead of a false 'you're logged in'. Akamai Bot Manager guards jcpenney.com, so this runs at the site stealth_tier (tier3). |
| open_cart | Navigate to the cart page via direct URL. Always succeeds as long as navigation completes; cart page may show empty/glitch state if no items are in bag. |
| open_department | Open a top-level department landing page. The main-nav items are hover-megamenus (not links), so this action navigates directly to /d/{slug}. Valid departments: women, men, juniors, baby-kids, home-store, shoes, jewelry-and-watches, beauty-and-salon, sale. |
| open_reviews | Expand the Bazaarvoice Reviews region on the PDP. |
| open_sign_in | Navigate to the JCPenney sign-in / guest gate page. Direct URL navigation is more reliable than the header account dropdown (no aria-label on the tooltip button). |
| redeem_points | |
| remove_from_cart | Remove a line item from the cart. No confirmation dialog -- the removal is immediate. The line disappears on success. |
| return_order | |
| save_for_laterauth | Move a cart line item to the Saved For Later list. The item disappears from the active cart and appears in the Saved section below it. |
| save_to_wishlistauth | |
| search_products | Search JCPenney products. Types the query into the header search box and submits with Enter. Works from any screen with the header visible. Note: the placeholder is 'What can we help you find?' and typing must be character-by-character for React handlers to fire. |
| select_color | Click a color swatch on the PDP. JCPenney swatches identify color via data-for attribute (e.g. 'Blush', 'Navy'). The page title updates to include 'Color: <color>' after selection. |
| select_size | Click a size button on the PDP. IMPORTANT: Size buttons TOGGLE -- re-clicking an already-selected size deselects it. This action only clicks if the target size is not already active. After selection, the qty combobox, pickup availability, and ship ETA re-render. |
| select_variant | |
| set_delivery_mode | Toggle between 'Ship to Home' and 'Ship to Store' tabs on the shipping step. These are generic divs, not radios -- state is visual only. |
| set_quantity | Set the PDP quantity selector before add_to_cart. The max is stock-capped (e.g. 'Hurry, 2 left!' caps the combobox at 2). Defaults to 1 if not called. |
| sort_results | Change the sort order of the PLP product grid. Valid options: 'best match' (default), 'new arrivals', 'best sellers', 'ratings high - low', 'price low - high', 'price high - low'. |
| track_order | Look up an order by order number + phone on the public tracking page. |
| update_quantity | Change the quantity of a cart line item. Finds the line by a distinctive substring of the product name and selects the new qty in that line's combobox. The combobox is stock-capped. |
| view_cart | |
| view_loyalty_status | |
| view_order_detailauth | |
| view_order_history | |
| view_product | Open a product detail page from a PLP tile. Clicks the Nth product link (0-indexed). Falls back to any product link if index is not provided. |
| view_reviews | |
| view_size_guide | Open the size-guide overlay from the PDP. The button/link name varies by department ('Women's Size Guide', 'Men's Size Guide', etc.). |
| view_store_locator | |
| view_wishlist |
Screens and structured records
cartreturns structured fields, container recordscart_signinreturns structured fields recordscheckout_shippingreturns structured fields, container recordsdepartment_landingreturns structured fields, container recordshomepage(navigation screen)order_trackingreturns structured fields recordspdp(navigation screen)plp(navigation screen)store_locatorreturns structured fields, container records