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.

ActionWhat it does
account_addresses
account_payment_methods
add_to_cartAdd 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_couponApply the Best Coupon shown at the top of the cart page. Increases Total Savings by the advertised amount.
apply_filterApply 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
checkoutauthAdvance 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_filterRemove a single applied filter by clicking its chip in the Selected Filters row. Opens the drawer first if closed.
continue_as_guestOn the sign-in/guest gate, proceed without creating an account. Lands on the shipping step of checkout.
continue_to_paymentAdvance past the shipping step to the payment screen.
enter_shipping_addressFill the shipping address form on /checkout/shipping.
filter_results
find_stores_nearFind JCPenney stores near a location (zip, city, or city+state).
go_to_pagePaginate 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.
loginSign 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_cartNavigate 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_departmentOpen 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_reviewsExpand the Bazaarvoice Reviews region on the PDP.
open_sign_inNavigate 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_cartRemove a line item from the cart. No confirmation dialog -- the removal is immediate. The line disappears on success.
return_order
save_for_laterauthMove 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_productsSearch 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_colorClick 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_sizeClick 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_modeToggle between 'Ship to Home' and 'Ship to Store' tabs on the shipping step. These are generic divs, not radios -- state is visual only.
set_quantitySet 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_resultsChange 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_orderLook up an order by order number + phone on the public tracking page.
update_quantityChange 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_productOpen 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_guideOpen 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

  • cart returns structured fields, container records
  • cart_signin returns structured fields records
  • checkout_shipping returns structured fields, container records
  • department_landing returns structured fields, container records
  • homepage (navigation screen)
  • order_tracking returns structured fields records
  • pdp (navigation screen)
  • plp (navigation screen)
  • store_locator returns structured fields, container records