tixbit 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +241 -47
- package/dist/cli.js +1050 -69
- package/dist/index.d.ts +240 -14
- package/dist/index.js +526 -37
- package/package.json +12 -6
- package/skills/tixbit/SKILL.md +86 -0
package/README.md
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
# tixbit
|
|
2
2
|
|
|
3
|
-
Search events, view seatmaps, browse listings, and
|
|
3
|
+
Search events, view seatmaps, browse listings, get browser checkout links, and purchase through MPP on [TixBit](https://www.tixbit.com) — from the terminal, your code, or an AI agent.
|
|
4
4
|
|
|
5
|
-
No API key
|
|
5
|
+
No command requires a TixBit developer API key. Public discovery and links need no credentials. Purchases require user-approved payment; selling requires user sign-in and seller access.
|
|
6
|
+
|
|
7
|
+
### User authorization, not API keys
|
|
8
|
+
|
|
9
|
+
Run `tixbit auth` for public browser sign-in and wallet setup links. This command does not create a CLI session. Open the returned TixBit sign-in page, then complete checkout or selling in your browser. Do not copy browser cookies or bearer tokens.
|
|
10
|
+
|
|
11
|
+
The public service currently has no supported browser-to-CLI seller session exchange. Website sign-in therefore does not unlock seller API calls from this CLI. The `buy` web checkout route does not issue Link spend requests; it expects a token from an authorized integration.
|
|
12
|
+
|
|
13
|
+
For wallet setup, use [official Link onboarding](https://link.com/agents): install `@stripe/link-cli` and run `link-cli onboard`. This requires your Link account, not a developer API key. A Link spend request is a separate approval for a selected purchase. See [Link agent checkout](#link-agent-checkout).
|
|
14
|
+
|
|
15
|
+
| Operation | Required user authorization |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Search, browse, listings, quote, seatmap, URL, checkout link | None |
|
|
18
|
+
| `buy` quote | Buyer email via `--email` or optional `TIXBIT_EMAIL` |
|
|
19
|
+
| Browser purchase | Sign in and approve the final payment in the browser |
|
|
20
|
+
| MPP `purchase` | Your mppx wallet, buyer email, confirmation, total cap, recovery UUID |
|
|
21
|
+
| Automatic Link payment | User-approved payment credential from an authorized integration |
|
|
22
|
+
| Seller API | Signed-in user credential and seller access |
|
|
6
23
|
|
|
7
24
|
## Install
|
|
8
25
|
|
|
@@ -26,7 +43,7 @@ npm install tixbit
|
|
|
26
43
|
tixbit search "Taylor Swift"
|
|
27
44
|
tixbit search "Hawks" --state GA --size 5
|
|
28
45
|
tixbit search --city "New York" --category nba-basketball
|
|
29
|
-
tixbit search --
|
|
46
|
+
tixbit search --league NBA --parking exclude
|
|
30
47
|
```
|
|
31
48
|
|
|
32
49
|
### Browse local events
|
|
@@ -39,80 +56,148 @@ tixbit browse --lat 33.749 --lng -84.388 --category CONCERT
|
|
|
39
56
|
### Get ticket listings
|
|
40
57
|
|
|
41
58
|
```sh
|
|
42
|
-
tixbit listings
|
|
43
|
-
tixbit listings
|
|
59
|
+
tixbit listings <event-id>
|
|
60
|
+
tixbit listings <event-id> --size 5 --sort asc
|
|
44
61
|
```
|
|
45
62
|
|
|
46
63
|
### Buy tickets
|
|
47
64
|
|
|
48
65
|
```sh
|
|
49
66
|
# Get a checkout link for a listing
|
|
50
|
-
tixbit checkout
|
|
67
|
+
tixbit checkout <listing-id> --quantity 2
|
|
68
|
+
|
|
69
|
+
# Or pay from an agent/terminal with MPP
|
|
70
|
+
npx mppx account create
|
|
71
|
+
tixbit purchase <listing-id> \
|
|
72
|
+
--quantity 2 \
|
|
73
|
+
--email buyer@example.com \
|
|
74
|
+
--confirm --max-price 300.00 \
|
|
75
|
+
--idempotency-key 11111111-1111-4111-8111-111111111111 \
|
|
76
|
+
--json
|
|
51
77
|
```
|
|
52
78
|
|
|
79
|
+
`checkout` remains link-only: it creates a `https://www.tixbit.com/checkout/process` URL for browser completion. `purchase` is the separate public MPP machine surface. It uses the official `mppx` client to answer the server's HTTP 402 challenge and currently selects the Tempo one-time charge rail configured by the server.
|
|
80
|
+
|
|
81
|
+
### Stripe Link machine checkout
|
|
82
|
+
|
|
83
|
+
Sign in to Link once, then start a purchase with a total price limit:
|
|
84
|
+
|
|
85
|
+
TixBit 0.2.0 needs Node.js 22 or later. The included Link CLI uses your local Link sign-in; TixBit does not ask for a developer API key.
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
npx @stripe/link-cli auth login
|
|
89
|
+
tixbit link start <listing-id> --quantity 1 --email buyer@example.com --max-price 25.00
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`link start` returns the exact server total and an `approvalUrl`. Open that URL and approve the spend request in Link. Then use the returned order reference:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
tixbit link complete <order-reference>
|
|
53
96
|
```
|
|
54
|
-
🎟 Checkout Link
|
|
55
97
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
98
|
+
The second command checks approval, sends one Stripe MPP credential, and reports whether the ticket was issued. If approval is still pending, it returns the same URL without sending payment. If the payment result is uncertain, use `link complete` with the same order reference. The CLI stores the purchase key in a private file under `~/.local/state/tixbit/link` (or `XDG_STATE_HOME`) and never prints or saves the Link payment token. Keep that file until the order is settled. Each command returns JSON; `approval_required` and payment failures use exit code 2.
|
|
99
|
+
|
|
100
|
+
`--email` is always required and is never inferred from git or local account state. If a request times out or returns `pending` or `manual_review_required`, reuse the same idempotency key and follow the returned `action`; do not start another payment.
|
|
101
|
+
|
|
102
|
+
### Link agent checkout
|
|
60
103
|
|
|
61
|
-
|
|
104
|
+
Stripe's [Link CLI](https://github.com/stripe/link-cli) provides the spend-request and MPP payment tools. An agent host that supports local MCP servers can add it alongside TixBit:
|
|
62
105
|
|
|
63
|
-
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"link": {
|
|
110
|
+
"command": "npx",
|
|
111
|
+
"args": ["@stripe/link-cli", "--mcp"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
64
115
|
```
|
|
65
116
|
|
|
66
|
-
|
|
117
|
+
The buyer signs in with `link-cli auth login` and approves each spend request in Link. For a TixBit purchase, first POST the selected listing, quantity, buyer email, and a new UUID v4 idempotency key to `https://mcp.tixbit.com/api/purchase`. Inspect the `402` order total and Stripe challenge. Create a `shared_payment_token` spend request for that challenge's `network_id` and total in cents. After Link reports approval, use `link-cli mpp pay` with the same URL and identical POST body, including the original idempotency key. Link CLI handles the one-time credential; do not print or copy an SPT. Treat `pending` or `manual_review_required` as non-final and reconcile by the original idempotency key.
|
|
118
|
+
|
|
119
|
+
This flow requires the TixBit MCP server to advertise Stripe in its `402` challenge. The published `tixbit purchase` command still selects Tempo. The `tixbit buy --confirm` command still uses the separate web checkout integration and cannot create a Link spend request. An agent host must expose Link's spend-request and MPP tools to its agent; this package cannot add tools to a third-party host such as Muse.
|
|
120
|
+
|
|
121
|
+
### Live inventory, Stripe Link, and seller commands
|
|
122
|
+
|
|
123
|
+
These commands are in `tixbit@0.1.2`.
|
|
67
124
|
|
|
68
125
|
```sh
|
|
69
|
-
|
|
70
|
-
tixbit
|
|
126
|
+
# Refreshed listings, not a reservation. Fails if live freshness is unavailable.
|
|
127
|
+
tixbit quote <eventId> --page 1 --size 100
|
|
128
|
+
|
|
129
|
+
# Buyer email is explicit; no API key or payment credential is needed.
|
|
130
|
+
tixbit buy <listingId> --quantity 2 --max-price 300.00 --email buyer@example.com
|
|
131
|
+
|
|
132
|
+
# Without payment authorization, returns a browser checkout handoff.
|
|
133
|
+
# No payment is sent; review and approve the final total in the browser.
|
|
134
|
+
tixbit buy <listingId> --quantity 2 --max-price 300.00 --email buyer@example.com --confirm
|
|
135
|
+
|
|
136
|
+
# Without a signed-in integration, returns browser sign-in and seller links.
|
|
137
|
+
tixbit sell list
|
|
71
138
|
```
|
|
72
139
|
|
|
140
|
+
A handoff returns `success: false`, `status: "authorization_required"`, and exit code 2. It is not a completed purchase, listing, or CLI login. The CLI cap is not transferred to browser checkout; review and approve the final total there.
|
|
141
|
+
|
|
142
|
+
### Optional advanced integrations
|
|
143
|
+
|
|
144
|
+
Authorized applications may supply a user-approved Link payment credential or a signed-in seller's Privy access token. Optional `TIXBIT_LINK_TOKEN` and `TIXBIT_ACCESS_TOKEN` injection is for these integrations only, not normal onboarding. Neither is a TixBit API key, and no developer or infrastructure key can replace user authorization. Never pass credentials in arguments, log them, or extract them from browser storage. Seller integrations use `tixbit sell create --confirm < listing.json`.
|
|
145
|
+
|
|
146
|
+
`--max-price` is the total USD charge ceiling including ticket fees, not a per-ticket price or a bid. Link checkout sends `maxAmountCents` in both POST requests and refuses payment unless the quote advertises `maxAmountCentsSupported: true`. Payment requires a public checkout deployment that advertises and enforces the total cap. The backend rechecks its actual charge before payment. Link currently accepts only 4-12 alphanumeric listing IDs. Native `sl_UUID` listings are not supported by this payment backend; use link-only `checkout` for browser completion instead.
|
|
147
|
+
|
|
148
|
+
No Link payment request is automatically retried. An uncertain Link response returns `status: "unknown"` and requires reconciliation with TixBit support and Stripe Link before another attempt. A successful payment response is not a guarantee of completed ticket delivery. No negotiation API or command is provided.
|
|
149
|
+
|
|
150
|
+
Seller JSON uses the existing web API schema. Example after seller approval:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{"externalEventId":"AbCd12","section":"GA","quantity":2,"generalAdmission":true,"priceCents":10000,"termsAccepted":true}
|
|
73
154
|
```
|
|
74
|
-
🏟 State Farm Arena
|
|
75
|
-
NBA - Atlanta Hawks
|
|
76
|
-
Capacity: 18,118
|
|
77
155
|
|
|
78
|
-
|
|
79
|
-
101 102 103 ... 122
|
|
156
|
+
`priceCents` is the seller's per-ticket asking price, unlike the buyer's total cap. Optional fields include `row`, `seatNumbers`, `faceValueCents`, `assetPaths`, `disclosures`, and `notes`; the server validates them and enforces seller access. Creation requires both `--confirm` and `termsAccepted: true`. Submission is not a claim that the listing is live. After uncertain creation, inspect `sell list` before retrying.
|
|
80
157
|
|
|
81
|
-
|
|
82
|
-
201 202 203 ▸214◂ ... 227S
|
|
158
|
+
MPP `purchase` retains the official mppx path but now requires `--confirm`, `--max-price`, and an explicit `--idempotency-key` before wallet loading. Its challenge hook checks the pathUSD atomic amount before any credential is created, rejects unknown assets/recurring intents, and permits only one payment challenge. The cap covers the ticket charge; network fees, if any, are managed separately by the wallet. SDK callers who inject their own `paymentFetch` own its authorization policy: use `assertMppChallenge` in `onChallenge` as shown below and get user approval before calling `purchaseTickets`. Do not register credential-producing event handlers that bypass this hook.
|
|
83
159
|
|
|
84
|
-
|
|
160
|
+
### View venue seatmap
|
|
85
161
|
|
|
86
|
-
|
|
162
|
+
```sh
|
|
163
|
+
tixbit seatmap <event-id>
|
|
164
|
+
tixbit seatmap <event-id> --section <section-name>
|
|
87
165
|
```
|
|
88
166
|
|
|
89
167
|
### JSON output (for agents / scripting)
|
|
90
168
|
|
|
91
|
-
Every command
|
|
169
|
+
Every command now emits JSON by default, including help, version, parser errors, and request errors. `--json` remains accepted. Successful discovery results keep their existing fields and add `success: true`. Exit codes: 0 for success, 1 for invalid input/request failure, 2 for a non-final or unsuccessful result.
|
|
92
170
|
|
|
93
|
-
> Event IDs are
|
|
171
|
+
> Event and listing IDs are case-sensitive. Copy the full ID from discovery. The SDK no longer changes case, strips prefixes, or repairs whitespace in purchase IDs.
|
|
94
172
|
|
|
95
173
|
```sh
|
|
96
174
|
tixbit search "concert" --state NY --json
|
|
97
|
-
tixbit listings
|
|
98
|
-
tixbit seatmap
|
|
99
|
-
tixbit checkout
|
|
175
|
+
tixbit listings <event-id> --json
|
|
176
|
+
tixbit seatmap <event-id> --json
|
|
177
|
+
tixbit checkout <listing-id> --quantity 2 --json
|
|
178
|
+
tixbit purchase <listing-id> --quantity 2 --email buyer@example.com --confirm --max-price 300.00 --idempotency-key <uuid-v4> --json
|
|
100
179
|
```
|
|
101
180
|
|
|
102
181
|
### All commands
|
|
103
182
|
|
|
104
183
|
| Command | Description |
|
|
105
184
|
|---|---|
|
|
185
|
+
| `auth` | Public browser sign-in and wallet setup; no CLI session is created |
|
|
106
186
|
| `search [query]` | Search events by keyword, city, state, category, or date |
|
|
107
187
|
| `browse` | Browse upcoming events near a location |
|
|
108
188
|
| `listings <eventId>` | Get available ticket listings for an event |
|
|
109
189
|
| `checkout <listingId>` | Get a checkout link to buy tickets |
|
|
190
|
+
| `purchase <listingId>` | Buy a selected listing through MPP with explicit confirmation and total cap |
|
|
191
|
+
| `link start <listingId>` / `link complete <orderReference>` | Approve and pay for a ticket with Stripe Link |
|
|
192
|
+
| `quote <eventId>` | Refresh live listings, with freshness metadata |
|
|
193
|
+
| `buy <listingId>` | Quote or confirm a capped Stripe Link purchase |
|
|
194
|
+
| `sell list` / `sell create` | Use the existing gated seller API |
|
|
110
195
|
| `seatmap <eventId>` | Show the venue seating chart with all sections |
|
|
111
196
|
| `url <slug>` | Print the TixBit event page URL |
|
|
112
197
|
|
|
113
198
|
## SDK
|
|
114
199
|
|
|
115
|
-
Use the client programmatically in
|
|
200
|
+
Use the client programmatically in a supported Node.js project:
|
|
116
201
|
|
|
117
202
|
```ts
|
|
118
203
|
import { TixBitClient } from "tixbit";
|
|
@@ -126,22 +211,34 @@ const { events } = await tixbit.searchEvents({
|
|
|
126
211
|
size: 5,
|
|
127
212
|
});
|
|
128
213
|
|
|
214
|
+
const event = events[0];
|
|
215
|
+
if (!event) throw new Error("No matching events");
|
|
216
|
+
|
|
217
|
+
// Get public event detail
|
|
218
|
+
const detail = await tixbit.getEvent(event.external_event_id);
|
|
219
|
+
|
|
129
220
|
// Get listings
|
|
130
221
|
const { listings } = await tixbit.getListings({
|
|
131
|
-
eventId:
|
|
222
|
+
eventId: event.external_event_id,
|
|
132
223
|
});
|
|
133
224
|
|
|
225
|
+
const listing = listings[0];
|
|
226
|
+
if (!listing) throw new Error("No available listings");
|
|
227
|
+
|
|
228
|
+
// Get current public details for one listing
|
|
229
|
+
const listingDetail = await tixbit.getListing(listing.id);
|
|
230
|
+
|
|
134
231
|
// Create a checkout link
|
|
135
232
|
const checkout = tixbit.createCheckoutLink({
|
|
136
|
-
listingId:
|
|
233
|
+
listingId: listingDetail.listing.id,
|
|
137
234
|
quantity: 2,
|
|
138
235
|
});
|
|
139
236
|
console.log(checkout.url);
|
|
140
|
-
//
|
|
237
|
+
// Open this TixBit URL in a browser to complete checkout.
|
|
141
238
|
|
|
142
239
|
// View seatmap
|
|
143
240
|
const seatmap = await tixbit.getSeatmap({
|
|
144
|
-
eventId:
|
|
241
|
+
eventId: event.external_event_id,
|
|
145
242
|
});
|
|
146
243
|
console.log(seatmap.venue_name); // "State Farm Arena"
|
|
147
244
|
console.log(seatmap.section_names); // ["101", "102", ...]
|
|
@@ -153,8 +250,42 @@ const nearby = await tixbit.browse({
|
|
|
153
250
|
});
|
|
154
251
|
|
|
155
252
|
// Event URL
|
|
156
|
-
const url = tixbit.eventUrl(
|
|
157
|
-
|
|
253
|
+
const url = tixbit.eventUrl(event.external_event_id);
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### SDK machine purchase
|
|
257
|
+
|
|
258
|
+
Wire the official `mppx` client into `paymentFetch`. The private payment key stays in the mppx account/keychain or `MPPX_PRIVATE_KEY`; it is never passed to TixBit SDK configuration.
|
|
259
|
+
|
|
260
|
+
```ts
|
|
261
|
+
import { TixBitClient, assertMppChallenge } from "tixbit";
|
|
262
|
+
import { Mppx, tempo } from "mppx/client";
|
|
263
|
+
import { resolveAccount } from "mppx/cli";
|
|
264
|
+
|
|
265
|
+
const account = await resolveAccount();
|
|
266
|
+
const payments = Mppx.create({
|
|
267
|
+
methods: [tempo({ account })],
|
|
268
|
+
polyfill: false,
|
|
269
|
+
maxPaymentRetries: 1,
|
|
270
|
+
onChallenge: async (challenge) => {
|
|
271
|
+
assertMppChallenge(challenge, 30000); // approved TOTAL, in USD cents
|
|
272
|
+
return undefined;
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
const tixbit = new TixBitClient({
|
|
276
|
+
paymentFetch: (input, init) => payments.fetch(input, init),
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
const result = await tixbit.purchaseTickets({
|
|
280
|
+
listingId: "LISTING123",
|
|
281
|
+
quantity: 2,
|
|
282
|
+
email: "buyer@example.com",
|
|
283
|
+
idempotencyKey: "11111111-1111-4111-8111-111111111111",
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
console.log(JSON.stringify(result, null, 2));
|
|
287
|
+
// fulfilled: { status, orderReference, receiptUrl, order, ... }
|
|
288
|
+
// recovery: { status: "pending" | "manual_review_required", action, ... }
|
|
158
289
|
```
|
|
159
290
|
|
|
160
291
|
## API Reference
|
|
@@ -163,9 +294,12 @@ const url = tixbit.eventUrl("4BKJMDZ");
|
|
|
163
294
|
|
|
164
295
|
| Option | Type | Default |
|
|
165
296
|
|---|---|---|
|
|
166
|
-
| `baseUrl` | `string` | `https://tixbit.com` |
|
|
297
|
+
| `baseUrl` | `string` | `https://www.tixbit.com` |
|
|
167
298
|
| `timeoutMs` | `number` | `15000` |
|
|
168
|
-
| `
|
|
299
|
+
| `paymentEndpoint` | `string` | `https://mcp.tixbit.com/api/purchase`; canonical endpoint or loopback QA only |
|
|
300
|
+
| `paymentFetch` | `typeof fetch` | Fetch used for MPP; supply the official `mppx.fetch` |
|
|
301
|
+
|
|
302
|
+
All public TixBit SDK operations require no TixBit API key. MPP payment credentials are handled by the configured payment client and are sent only in the standard payment authorization header.
|
|
169
303
|
|
|
170
304
|
### `searchEvents(params?)`
|
|
171
305
|
|
|
@@ -175,10 +309,23 @@ const url = tixbit.eventUrl("4BKJMDZ");
|
|
|
175
309
|
| `city` | `string` | City name |
|
|
176
310
|
| `state` | `string` | 2-letter state code |
|
|
177
311
|
| `category` | `string` | Category slug (e.g. `nba-basketball`) |
|
|
312
|
+
| `league` | `string` | League abbreviation |
|
|
313
|
+
| `categoryEventType` | `string` | `SPORT`, `CONCERT`, `THEATER`, or `ALL` |
|
|
314
|
+
| `performerId` | `string` | Public performer ID |
|
|
315
|
+
| `venueId` | `string` | Public venue ID |
|
|
316
|
+
| `parkingFilter` | `string` | `exclude`, `only`, or `include` |
|
|
317
|
+
| `nearLat` / `nearLng` | `number` | Coordinates for manual location filtering |
|
|
318
|
+
| `locationMode` | `string` | `inferred`, `manual`, or `none` |
|
|
178
319
|
| `startDate` | `string` | ISO date — events on/after |
|
|
179
320
|
| `endDate` | `string` | ISO date — events on/before |
|
|
180
321
|
| `page` | `number` | Page number (default: 1) |
|
|
181
|
-
| `size` | `number` | Results per page (default: 25) |
|
|
322
|
+
| `size` | `number` | Results per page, max 200 (default: 25) |
|
|
323
|
+
|
|
324
|
+
The result includes normalized events plus `page`, `size`, nullable `total`/`totalPages`, `hasNext`, `hasPrev`, and `totalExact` pagination metadata.
|
|
325
|
+
|
|
326
|
+
### `getEvent(eventId)`
|
|
327
|
+
|
|
328
|
+
Returns the sanitized public event detail for an external event ID or event slug.
|
|
182
329
|
|
|
183
330
|
### `browse(params?)`
|
|
184
331
|
|
|
@@ -189,20 +336,37 @@ const url = tixbit.eventUrl("4BKJMDZ");
|
|
|
189
336
|
| `latitude` | `number` | Latitude |
|
|
190
337
|
| `longitude` | `number` | Longitude |
|
|
191
338
|
| `categoryEventType` | `string` | `SPORT`, `CONCERT`, `THEATER`, or `ALL` |
|
|
339
|
+
| `page` | `number` | Page number (default: 1) |
|
|
192
340
|
| `size` | `number` | Number of results (default: 18) |
|
|
341
|
+
| `query` | `string` | Optional free-text query |
|
|
342
|
+
| `category` | `string` | Category slug |
|
|
343
|
+
| `league` | `string` | League abbreviation |
|
|
344
|
+
| `context` | `string` | `homepage`, `events`, or `category` |
|
|
345
|
+
| `recommendation` | `string` | `upcoming` or `trending` |
|
|
346
|
+
| `parkingFilter` | `string` | `exclude`, `only`, or `include` |
|
|
347
|
+
|
|
348
|
+
The result preserves the public browse endpoint's `total`, `totalExact`, `hasMore`, `page`, `pageSize`, and optional `degraded` metadata.
|
|
193
349
|
|
|
194
350
|
### `getListings(params)`
|
|
195
351
|
|
|
196
352
|
| Param | Type | Description |
|
|
197
353
|
|---|---|---|
|
|
198
354
|
| `eventId` | `string` | External event ID |
|
|
199
|
-
| `size` | `number` | Page size (default: 50) |
|
|
355
|
+
| `size` | `number` | Page size, max 100 (default: 50) |
|
|
200
356
|
| `page` | `number` | Page number (default: 1) |
|
|
201
357
|
| `orderByDirection` | `string` | `asc` or `desc` by price |
|
|
358
|
+
| `includeAll` | `boolean` | Request all available listings |
|
|
359
|
+
| `refresh` | `boolean` | Bypass cached listings for this request |
|
|
360
|
+
|
|
361
|
+
The result includes cache state, freshness, expiry, and pagination metadata when returned by the public endpoint.
|
|
362
|
+
|
|
363
|
+
### `getListing(listingId)`
|
|
364
|
+
|
|
365
|
+
Returns one sanitized public listing and any public disclosures for it.
|
|
202
366
|
|
|
203
367
|
### `createCheckoutLink(params)`
|
|
204
368
|
|
|
205
|
-
Create a checkout URL for a listing. The user opens this in a browser to complete
|
|
369
|
+
Create a checkout URL for a listing. The user opens this in a browser to review and complete the purchase on TixBit. This link-only method is unchanged by machine checkout.
|
|
206
370
|
|
|
207
371
|
| Param | Type | Description |
|
|
208
372
|
|---|---|---|
|
|
@@ -211,28 +375,58 @@ Create a checkout URL for a listing. The user opens this in a browser to complet
|
|
|
211
375
|
|
|
212
376
|
Returns `{ url, listingId, quantity }`.
|
|
213
377
|
|
|
378
|
+
### `purchaseTickets(params)`
|
|
379
|
+
|
|
380
|
+
Purchase a selected listing and quantity through the public MPP endpoint. TixBit prepares inventory and determines the listing price, currency, fees, and final amount on the server before issuing the challenge.
|
|
381
|
+
|
|
382
|
+
| Param | Type | Description |
|
|
383
|
+
|---|---|---|
|
|
384
|
+
| `listingId` | `string` | Listing ID selected from current listings |
|
|
385
|
+
| `quantity` | `number` | Number of tickets (1–8) |
|
|
386
|
+
| `email` | `string` | Required buyer email; normalized and validated before the request |
|
|
387
|
+
| `name` | `string` | Optional buyer/recipient name |
|
|
388
|
+
| `idempotencyKey` | `string` | Unguessable UUID v4 retry/recovery identity; generated when omitted |
|
|
389
|
+
|
|
390
|
+
Returns agent-readable JSON with `status`, `idempotencyKey`, `orderReference`, `receiptUrl` when available, optional server-authoritative `order`, and an `action` for non-final states. Network ambiguity resolves to `pending` instead of claiming failure.
|
|
391
|
+
|
|
392
|
+
### Agent SDK methods
|
|
393
|
+
|
|
394
|
+
- `quoteListings(params: GetListingsParams)` requests refreshed listings and requires live freshness. It preserves the existing listings result shape.
|
|
395
|
+
- `buyTickets({ listingId, quantity, email, maxAmountCents, confirm?, sharedPaymentToken? })` quotes by default. `confirm: true` requires a Link token and server cap support. It never retries a payment; ambiguous outcomes return `success: false`, `status: "unknown"`, and a recovery action.
|
|
396
|
+
- `getAuthorizationInfo()` returns public browser sign-in and wallet setup links without creating a CLI session.
|
|
397
|
+
- `listSellerListings(accessToken?)` reads the gated seller API, or returns browser sign-in guidance when no user credential is supplied.
|
|
398
|
+
- `createSellerListing(body, accessToken, confirm)` requires `confirm === true` and explicit `termsAccepted: true`. The web API remains the seller schema and access authority.
|
|
399
|
+
- `assertMppChallenge(challenge, maxAmountCents)` rejects unsupported or over-cap MPP challenges. Use it before credential creation in an official mppx `onChallenge` hook, not after `paymentFetch` returns.
|
|
400
|
+
|
|
214
401
|
### `getSeatmap(params)`
|
|
215
402
|
|
|
216
403
|
| Param | Type | Description |
|
|
217
404
|
|---|---|---|
|
|
218
405
|
| `eventId` | `string` | External event ID |
|
|
219
406
|
|
|
220
|
-
Returns venue info, section list, zone groupings,
|
|
407
|
+
Returns venue info, section list, zone groupings, first-party asset URLs (`background_image`, `coordinates_url`), and per-section `shape_path` data for overlay rendering.
|
|
221
408
|
|
|
222
409
|
### `eventUrl(slugOrId)`
|
|
223
410
|
|
|
224
|
-
Returns the full URL to the event page on tixbit.com
|
|
411
|
+
Returns the full URL to the event page on `www.tixbit.com`.
|
|
225
412
|
|
|
226
413
|
## Environment Variables
|
|
227
414
|
|
|
228
415
|
| Variable | Description | Default |
|
|
229
416
|
|---|---|---|
|
|
230
|
-
| `TIXBIT_BASE_URL` |
|
|
231
|
-
| `
|
|
417
|
+
| `TIXBIT_BASE_URL` | Discovery URL; credential requests accept only the canonical origin or loopback QA | `https://www.tixbit.com` |
|
|
418
|
+
| `TIXBIT_EMAIL` | Optional alternative to `buy --email` | none |
|
|
419
|
+
| `TIXBIT_LINK_TOKEN` | Optional advanced integration: user-approved Link credential; never an argument | none |
|
|
420
|
+
| `TIXBIT_ACCESS_TOKEN` | Optional advanced integration: signed-in seller user credential, not an API key | none |
|
|
421
|
+
| `TIXBIT_PAYMENT_URL` | Canonical MPP endpoint or loopback QA URL; no credentials, query, fragment, or redirects | `https://mcp.tixbit.com/api/purchase` |
|
|
422
|
+
| `MPPX_PRIVATE_KEY` | Optional mppx account source; prefer the OS keychain | mppx keychain |
|
|
232
423
|
|
|
233
424
|
## Requirements
|
|
234
425
|
|
|
235
|
-
- Node.js 20
|
|
426
|
+
- Runtime/tooling range: Node.js `^20.19.0 || >=22.12.0`
|
|
427
|
+
- CI compatibility matrix: Node.js 20.19, 22, 24, and 26
|
|
428
|
+
|
|
429
|
+
Node.js 20 is end-of-life and remains in CI only as a compatibility floor. Node.js 22 and 24 are LTS releases; Node.js 26 is the current release line.
|
|
236
430
|
|
|
237
431
|
## License
|
|
238
432
|
|