Harris Teeter grocery shopping API discovered from the logged-in web app
Learn more at Harris Teeter.
Created by @jwmoss (Jonathan Moss).
Contributors: @tmchow (Trevin Chow).
Quick Start
1. Install
See Install above.
2. Authenticate
This CLI uses your browser session for authentication. Log in to .harristeeter.com in Chrome, then:
harris-teeter-pp-cli auth login --chrome
The CLI uses pycookiecheat, cookies, or cookie-scoop-cli when available. On this machine it can also fall back to the live Chrome session through agent-browser/browser-use, which matches the browser-sniff workflow used to create the CLI. If live browser fallback is unavailable, install one:
pip install pycookiecheat # Python (recommended)
brew install barnardb/cookies/cookies # Homebrew
When your session expires, run auth login --chrome again.
Product and coupon endpoints also require Harris Teeter's location/availability/fulfillment headers. The CLI defaults to the captured Beau Rivage Marketplace context (location-id=09700096, facility-id=12956). Override with HARRIS_TEETER_LOCATION_ID, HARRIS_TEETER_FACILITY_ID, HARRIS_TEETER_MODALITY_TYPE, or a full HARRIS_TEETER_LAF_OBJECT JSON value when using a different store.
3. Verify Setup
harris-teeter-pp-cli doctor
This checks your configuration and credentials.
4. Try Your First Command
harris-teeter-pp-cli cart
Unique Features
These capabilities aren't available in any other tool for this API.
Browser-backed reachability
-
auth login --chrome — Read Harris Teeter session cookies from the already logged-in Chrome session, falling back through agent-browser/browser-use when standalone cookie tools are missing.
Use this first when the CLI reports auth errors or a browser session has changed.
harris-teeter-pp-cli auth login --chrome
Store-context grocery reads
-
products search — Search Harris Teeter products using the browser-observed Atlas search endpoint with location, fulfillment method, and LAF/modality headers.
Use this to inspect current store-specific grocery results from a terminal or agent workflow.
harris-teeter-pp-cli products search --query milk --location-id 09700096 --page-size 5 --json --no-input
-
products get — Fetch full product, offer, nutrition, inventory, and variant projections by UPC/GTIN through the logged-in Atlas product endpoint.
Use this when an agent needs exact item metadata without scraping a rendered product page.
harris-teeter-pp-cli products get --upc 0007203673813 --json --no-input
Account-aware savings
-
coupons — List Harris Teeter digital coupons from the authenticated web endpoint, including optional UPC filtering.
Use this to check available savings before building a grocery list.
harris-teeter-pp-cli coupons --page-size 5 --json --no-input
-
cart — Inspect the authenticated Harris Teeter cart and shopping-list surfaces without exposing mutating checkout or order actions.
Use this when an agent needs to understand the current cart state without changing it.
harris-teeter-pp-cli cart --json --no-input
Usage
Run harris-teeter-pp-cli --help for the full command reference and flag list.
Commands
account
Inspect logged-in customer preferences and membership state.
harris-teeter-pp-cli account enrollments - List membership enrollments and benefits for the current account.
harris-teeter-pp-cli account preferences - List customer preferences for the logged-in account.
cart
Inspect the logged-in account cart.
harris-teeter-pp-cli cart list - List carts for the current logged-in Harris Teeter account.
coupons
List available digital coupons and coupon-product links.
harris-teeter-pp-cli coupons list - List available digital coupons, optionally filtered by UPC.
lists
Inspect Harris Teeter shopping lists.
harris-teeter-pp-cli lists get - Get a shopping list by ID.
harris-teeter-pp-cli lists list - List shopping lists for the current logged-in account.
products
Search Harris Teeter products, look up item details, and inspect search facets.
harris-teeter-pp-cli products get - Get full product, offer, nutrition, inventory, and variant details by UPC/GTIN.
harris-teeter-pp-cli products related-tags - Get related search tags for a query and location.
harris-teeter-pp-cli products search - Search products for a store location and fulfillment method.
harris-teeter-pp-cli products suggestions - Get search suggestions for a query and location.
harris-teeter-pp-cli products visual-navigations - Get visual navigation categories shown on search pages.
recommendations
Inspect personalized grocery recommendations from the web app.
harris-teeter-pp-cli recommendations better-for-you - Get better-for-you product recommendations.
harris-teeter-pp-cli recommendations purchase-history-homepage - Get homepage purchase-history shortcuts for the logged-in account.
harris-teeter-pp-cli recommendations start-my-cart - Get the Start My Cart product recommendations shown on the homepage.
stores
Find Harris Teeter stores and store metadata.
harris-teeter-pp-cli stores - Find stores by ZIP code, city, state, or address text.
Output Formats
# Human-readable table (default in terminal, JSON when piped)
harris-teeter-pp-cli cart
# JSON for scripting and agents
harris-teeter-pp-cli cart --json
# Filter to specific fields
harris-teeter-pp-cli cart --json --select id,name,status
# Dry run — show the request without sending
harris-teeter-pp-cli cart --dry-run
# Agent mode — JSON + compact + no prompts in one flag
harris-teeter-pp-cli cart --agent
Agent Usage
This CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--json output to stdout, errors to stderr
- Filterable -
--select id,name returns only fields you need
- Previewable -
--dry-run shows the request without sending
- Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
- Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendly is set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
Health Check
harris-teeter-pp-cli doctor
Verifies configuration, credentials, and connectivity to the API.
Configuration
Config file: ~/.config/harris-teeter-pp-cli/config.toml
Troubleshooting
Authentication errors (exit code 4)
- Run
harris-teeter-pp-cli doctor to check credentials
Not found errors (exit code 3)
- Check the resource ID is correct
- Run the
list command to see available items
HTTP Transport
This CLI uses Chrome-compatible HTTP transport for browser-facing endpoints. It does not require a resident browser process for normal API calls.
Discovery Signals
This CLI was generated with browser-captured traffic analysis.
- Target observed: https://www.harristeeter.com/ruxitagentjs_ICA15789NPQRTUVXfhqrtux_10337260504112723.js
- Capture coverage: 166 API entries from 889 total network entries
- Reachability: browser_http (78% confidence)
- Protocols: rest_json (75% confidence)
- Auth signals: bearer_token — headers: Authorization; api_key — query: filter.keyword, key
- Protection signals: cloudflare (90% confidence), akamai (75% confidence)
- Generation hints: browser_http_transport, requires_protected_client, weak_schema_confidence
- Candidate command ideas: create_EdClXAWAB — Derived from observed POST /qB1py7FxiRxje/xBaRro/nGmSVUVg/N3irhr9NJ5N5cQ/dW1ccAkbBg/G3J/EdClXAWAB traffic.; create_dont_forget_usual_products — Derived from observed POST /atlas/v1/recommendations/v1/dont-forget-usual-products traffic.; create_echoData — Derived from observed POST /clickstream/v1/echoData traffic.; create_events — Derived from observed POST /clickstream/v1/events traffic.; create_preferences — Derived from observed POST /atlas/v1/modality/preferences traffic.; create_prioritized_carousels — Derived from observed POST /atlas/v1/search/v1/prioritized-carousels traffic.; create_qESoJeGYu — Derived from observed POST /qB1py7FxiRxje/xBaRro/nGmSVUVg/p8irhr9N/Ph5ncAkbBg/V3l/qESoJeGYu traffic.; create_realtimeconversion — Derived from observed POST /track/realtimeconversion traffic.
Warnings from discovery:
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
- empty_payload: API-looking request returned an empty or null payload; schema confidence is weak.
Generated by CLI Printing Press