Install
openclaw skills install @chrischall/etix-fpxQuery etix.com (event ticketing) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the etix-mcp server — search events, venues, and performers, and pull event/venue detail, via one-shot calls through a signed-in browser tab. Use when you want Etix discovery data without the MCP, in a script, or on a machine where the MCP isn't installed.
openclaw skills install @chrischall/etix-fpxEtix fronts its whole consumer surface (www.etix.com/ticket/...) with a
DataDome bot-wall that 403s/202s any plain curl/Node request
(captcha-delivery interstitial). fpx routes the request through the
user's own signed-in browser tab (the Transporter extension), which has
already cleared DataDome, so the same request succeeds. No Etix account is
needed — this is public event-discovery data.
Etix also publishes a documented OpenAPI seller API (api.etix.com/v3),
but every endpoint requires OAuth2 password-grant with venue/box-office
credentials — it's out of reach for a consumer and out of scope here.
This is the same data the etix_* MCP tools return, reached with one CLI
call instead of a running server.
npm install -g @fetchproxy/cli # provides `fpx`
fpx profile add etix --domain etix.com # only the fetch capability is needed
fpx pair -p etix # prints a pair code → approve in Transporter
Requirements: the Transporter browser extension installed, with an open
www.etix.com tab that has finished loading (so the DataDome check
clears), and Chrome Site access allowing etix.com. Pairing persists —
after the first approval every later fpx call reuses it.
Two response shapes, both fetched with the plain get verb:
# Clean JSON — pipe straight to jq
fpx get 'https://www.etix.com/ticket/api/online/search/suggest?keywords=jazz' -p etix \
| jq '.'
# Server-rendered HTML — save it, then pull the embedded JSON-LD/microdata
fpx get 'https://www.etix.com/ticket/p/39004863' -p etix > /tmp/event.html
A POST (only geolocation/search needs one) uses post-json:
printf '{"cityOrPostalCode":"Charlotte, NC","country":"USA"}' > /tmp/geo.json
fpx post-json 'https://www.etix.com/ticket/api/online/geolocation/search' @/tmp/geo.json -p etix \
| jq '.'
Ready-to-run paths + extraction recipes (JSON jq, HTML JSON-LD/microdata
via a small node one-liner, and the page's dataLayer analytics object
via references/extract-datalayer.mjs — the same shapes etix-mcp's
src/parse.ts parses) are in references/etix-endpoints.md.
Event/venue detail take a numeric id, never a name. Always hit
search/suggest first, take the eventId/venueId, then fetch detail:
fpx get 'https://www.etix.com/ticket/api/online/search/suggest?keywords=Marion+Meadows' -p etix \
| jq -r '.events[] | "\(.eventId)\t\(.eventName)"'
The full-text POST /ticket/api/online/search endpoint returns an
encrypted/opaque (base64-looking) payload, not JSON — etix-mcp
deliberately doesn't use it, and neither should this skill. Stick to
search/suggest (clean JSON) for search.
0 — success. For HTML pages, a 0 can still be a DataDome interstitial
body (check for captcha-delivery / "Please enable JS and disable any
ad blocker" before parsing).2 — bridge unavailable: extension not connected or pairing pending →
run fpx pair -p etix, confirm an etix.com tab is open.3 — bot wall: the tab hasn't cleared DataDome → open/refresh a
www.etix.com tab, let it finish loading, and retry.4 — upstream non-2xx from Etix.fpx health -p etix shows bridge connection state when a call fails.