Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Changelog

## 0.7.0 — 2026-08-30

- Added coverage for all 48 Fixed Renewable Season server
operations under `Client.Seasons`, with exact path encoding and
operation-specific retry/idempotency behavior.
- Season allocations are identity-only and the API response declares host
pricing authority. Buyer rehearsal validation sends no evidence body because
SeatLayer discovers the retained hold, booking, cancellation, and delivered
webhook chain automatically.

## 0.6.1

- Documentation only. Refreshes the README, adds frequently asked
Expand Down
31 changes: 30 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ seat inventory through one typed ticketing API client.

[SeatLayer module on pkg.go.dev](https://pkg.go.dev/github.com/seatlayer/seatlayer-go) ·
[SeatLayer server SDK documentation](https://docs.seatlayer.io/server-sdk/install/) ·
[SeatLayer reserved-seating platform](https://seatlayer.io/) ·
[SeatLayer developer platform](https://seatlayer.io/developers/) ·
[SeatLayer JavaScript seat map SDK](https://www.npmjs.com/package/@seatlayer/js) ·
[SeatLayer AI Toolkit](https://github.com/seatlayer/seatlayer-ai-toolkit)

Expand Down Expand Up @@ -87,6 +87,35 @@ treated as a transient fault to back off through.

## Test vs live

## Fixed Renewable Seasons (unpublished candidate)

The source candidate exposes all 48 trusted organizer operations through
`client.Seasons`. It is not part of a published module tag and does not make a
production-support claim.

After the test hold/book/cancel journey and matching webhook deliveries,
`client.Seasons.ValidateBuyerRehearsal(ctx, seasonKey)` sends no evidence body;
SeatLayer discovers the retained chain automatically. Retrieved Season holds
contain inventory identity, not an authoritative amount—your platform owns
package price, payment, order, tax, refunds, benefits, and ticket or pass delivery.

```go
checked, err := client.Seasons.Validate(ctx, seatlayer.SeasonSelectionParams{
SourcePerformanceGroupKeys: []string{"pg_subscription_run"},
})
created, err := client.Seasons.Create(ctx, seatlayer.SeasonCreateParams{
Name: "2027 subscription",
SourcePerformanceGroupKeys: []string{"pg_subscription_run"},
IdempotencyKey: "season-create-2027",
})
```

Treat `202` as accepted work and poll `RetrieveLifecycle` with the returned
operation identity. Buyer-session minting and domain-exact booking,
cancellation, and renewal actions remain single-attempt; only declared
header-replay catalogue mutations retry automatically.


Keys carry their own mode. `sk_test_…` keys can only touch test-mode events and `sk_live_…` only
live ones; crossing them returns `403 mode_mismatch`.

Expand Down
8 changes: 8 additions & 0 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ type Client struct {
Events *EventsService
Inventory *InventoryService
PerformanceGroups *PerformanceGroupsService
Seasons *SeasonsService
Sessions *SessionsService
Templates *TemplatesService
Webhooks *WebhooksService
Expand Down Expand Up @@ -137,6 +138,7 @@ func New(secretKey string, options ...Option) (*Client, error) {
client.Events = &EventsService{client: client}
client.Inventory = &InventoryService{client: client}
client.PerformanceGroups = &PerformanceGroupsService{client: client}
client.Seasons = &SeasonsService{client: client}
client.Sessions = &SessionsService{client: client}
client.Templates = &TemplatesService{client: client}
client.Webhooks = &WebhooksService{client: client}
Expand Down Expand Up @@ -321,6 +323,12 @@ func (c *Client) postHeaderReplay(
return c.do(ctx, http.MethodPost, path, nil, body, idempotencyKey, true)
}

func (c *Client) mutationHeaderReplay(
ctx context.Context, method, path string, body any, idempotencyKey string,
) (map[string]any, error) {
return c.do(ctx, method, path, nil, body, idempotencyKey, true)
}

func (c *Client) put(ctx context.Context, path string, body any) (map[string]any, error) {
return c.Do(ctx, http.MethodPut, path, nil, body, "")
}
Expand Down
Loading
Loading