seatschart 0.4.0 → 0.5.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +44 -9
  3. data/lib/seatschart/api/audit_api.rb +2 -2
  4. data/lib/seatschart/api/auth_api.rb +4 -4
  5. data/lib/seatschart/api/billing_api.rb +93 -12
  6. data/lib/seatschart/api/charts_api.rb +52 -52
  7. data/lib/seatschart/api/events_api.rb +110 -104
  8. data/lib/seatschart/api/seasons_api.rb +88 -88
  9. data/lib/seatschart/api/seats_api.rb +6 -6
  10. data/lib/seatschart/api/usage_api.rb +4 -4
  11. data/lib/seatschart/api/workspace_api.rb +52 -40
  12. data/lib/seatschart/models/{api_error.rb → api_error_body.rb} +7 -7
  13. data/lib/seatschart/models/delete_api_workspaces_by_workspace_id_members_by_user_id200_response.rb +221 -0
  14. data/lib/seatschart/models/get_api_workspaces_by_workspace_id_invitations200_response.rb +239 -0
  15. data/lib/seatschart/models/get_api_workspaces_by_workspace_id_invitations200_response_invitations_inner.rb +286 -0
  16. data/lib/seatschart/models/get_api_workspaces_by_workspace_id_members200_response.rb +239 -0
  17. data/lib/seatschart/models/get_api_workspaces_by_workspace_id_members200_response_members_inner.rb +288 -0
  18. data/lib/seatschart/models/get_api_workspaces_overview200_response.rb +288 -0
  19. data/lib/seatschart/models/get_api_workspaces_overview200_response_account.rb +270 -0
  20. data/lib/seatschart/models/get_api_workspaces_overview200_response_account_charts.rb +233 -0
  21. data/lib/seatschart/models/get_api_workspaces_overview200_response_account_plan.rb +237 -0
  22. data/lib/seatschart/models/get_api_workspaces_overview200_response_items_inner.rb +439 -0
  23. data/lib/seatschart/models/get_api_workspaces_overview200_response_items_inner_revenue.rb +234 -0
  24. data/lib/seatschart/models/get_api_workspaces_overview200_response_items_inner_usage.rb +271 -0
  25. data/lib/seatschart/models/get_api_workspaces_overview200_response_seats.rb +431 -0
  26. data/lib/seatschart/models/get_api_workspaces_overview200_response_seats_overage.rb +233 -0
  27. data/lib/seatschart/models/get_api_workspaces_overview200_response_seats_projected.rb +237 -0
  28. data/lib/seatschart/models/get_api_workspaces_overview200_response_totals.rb +318 -0
  29. data/lib/seatschart/models/get_api_workspaces_overview200_response_totals_revenue.rb +238 -0
  30. data/lib/seatschart/models/get_api_workspaces_overview200_response_totals_seats.rb +253 -0
  31. data/lib/seatschart/models/post_api_billing_actions_change_plan_request.rb +256 -0
  32. data/lib/seatschart/models/post_api_events_by_event_id_actions_update_extra_data_request_objects_inner.rb +0 -2
  33. data/lib/seatschart/models/post_api_sandboxes201_response.rb +0 -4
  34. data/lib/seatschart/models/post_api_sandboxes_by_sandbox_id_actions_reset200_response.rb +0 -2
  35. data/lib/seatschart/models/post_api_workspaces200_response.rb +0 -4
  36. data/lib/seatschart/models/post_api_workspaces_by_workspace_id_invitations201_response.rb +238 -0
  37. data/lib/seatschart/models/post_api_workspaces_by_workspace_id_invitations201_response_invitation.rb +286 -0
  38. data/lib/seatschart/version.rb +1 -1
  39. data/lib/seatschart/workspaces.rb +172 -0
  40. data/lib/seatschart.rb +23 -3
  41. metadata +25 -5
  42. data/lib/seatschart/models/get_api_workspaces_created_by_api_parameter.rb +0 -103
  43. data/lib/seatschart/models/get_api_workspaces_overview_created_by_api_parameter.rb +0 -103
@@ -374,7 +374,7 @@ module SeatsChart
374
374
  end
375
375
 
376
376
  # Hold GA area capacity (Redis)
377
- # Places a temporary hold on unnumbered GA capacity. **Idempotency-Key** is required; repeats within ~24h return the cached hold response. Optional `ticketBuyerId` is stored on the GA hold token and inherited by `POST /ga/confirm`. The organizer's booking limits cap `quantity` (designer *Max GA tickets per order*, else *Max seats per order*; strictest with the sales-channel default): 409 `booking_limit_exceeded` (`limit`, `current`, `requested`, `kind: \"ga\"`). GA tables sold as a whole (`shape.bookAs: \"whole\"`) take every place in one hold: any other `quantity` answers 409 `ga_table_whole` (`capacity`, `requested`). Areas sold as a whole (`areaType` `fixedOccupancy` / `variableOccupancy`) are held for one buyer in one piece: `quantity` is the number of people (fixed: exactly the capacity; variable: `minOccupancy`..capacity), every place of the area is held atomically and a second buyer can never hold part of it. Any other quantity answers 400 `ga_area_whole` (`areaType`, `capacity`, `minOccupancy`, `maxOccupancy`, `requested`); an area already held, sold or partly withheld answers 409 `conflict`. A whole area counts as one object against the booking limits (its capacity, at most 50, caps it); its people count against quotas, lots and per-buyer limits. The response adds `places`, `people` and `areaType`.
377
+ # Places a temporary hold on unnumbered GA capacity. **Idempotency-Key** is required; repeats within ~24h return the cached hold response. Optional `ticketBuyerId` is stored on the GA hold token and inherited by `POST /ga/confirm`. The organizer's booking limits cap `quantity` (designer *Max GA tickets per order*, else *Max seats per order*; strictest with the sales-channel default): 409 `booking_limit_exceeded` (`limit`, `current`, `requested`, `kind: \"ga\"`). **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. GA tables sold as a whole (`shape.bookAs: \"whole\"`) take every place in one hold: any other `quantity` answers 409 `ga_table_whole` (`capacity`, `requested`). Areas sold as a whole (`areaType` `fixedOccupancy` / `variableOccupancy`) are held for one buyer in one piece: `quantity` is the number of people (fixed: exactly the capacity; variable: `minOccupancy`..capacity), every place of the area is held atomically and a second buyer can never hold part of it. Any other quantity answers 400 `ga_area_whole` (`areaType`, `capacity`, `minOccupancy`, `maxOccupancy`, `requested`); an area already held, sold or partly withheld answers 409 `conflict`. A whole area counts as one object against the booking limits (its capacity, at most 50, caps it); its people count against quotas, lots and per-buyer limits. The response adds `places`, `people` and `areaType`.
378
378
  # @param idempotency_key [String] Required. Reuse with the same request on retry; a different payload conflicts. Seat confirmation binds this key durably in PostgreSQL; hold mutations use bounded Redis receipts.
379
379
  # @param post_api_ga_reserve_request [PostApiGaReserveRequest]
380
380
  # @param [Hash] opts the optional parameters
@@ -385,7 +385,7 @@ module SeatsChart
385
385
  end
386
386
 
387
387
  # Hold GA area capacity (Redis)
388
- # Places a temporary hold on unnumbered GA capacity. **Idempotency-Key** is required; repeats within ~24h return the cached hold response. Optional `ticketBuyerId` is stored on the GA hold token and inherited by `POST /ga/confirm`. The organizer's booking limits cap `quantity` (designer *Max GA tickets per order*, else *Max seats per order*; strictest with the sales-channel default): 409 `booking_limit_exceeded` (`limit`, `current`, `requested`, `kind: \"ga\"`). GA tables sold as a whole (`shape.bookAs: \"whole\"`) take every place in one hold: any other `quantity` answers 409 `ga_table_whole` (`capacity`, `requested`). Areas sold as a whole (`areaType` `fixedOccupancy` / `variableOccupancy`) are held for one buyer in one piece: `quantity` is the number of people (fixed: exactly the capacity; variable: `minOccupancy`..capacity), every place of the area is held atomically and a second buyer can never hold part of it. Any other quantity answers 400 `ga_area_whole` (`areaType`, `capacity`, `minOccupancy`, `maxOccupancy`, `requested`); an area already held, sold or partly withheld answers 409 `conflict`. A whole area counts as one object against the booking limits (its capacity, at most 50, caps it); its people count against quotas, lots and per-buyer limits. The response adds `places`, `people` and `areaType`.
388
+ # Places a temporary hold on unnumbered GA capacity. **Idempotency-Key** is required; repeats within ~24h return the cached hold response. Optional `ticketBuyerId` is stored on the GA hold token and inherited by `POST /ga/confirm`. The organizer's booking limits cap `quantity` (designer *Max GA tickets per order*, else *Max seats per order*; strictest with the sales-channel default): 409 `booking_limit_exceeded` (`limit`, `current`, `requested`, `kind: \"ga\"`). **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. GA tables sold as a whole (`shape.bookAs: \"whole\"`) take every place in one hold: any other `quantity` answers 409 `ga_table_whole` (`capacity`, `requested`). Areas sold as a whole (`areaType` `fixedOccupancy` / `variableOccupancy`) are held for one buyer in one piece: `quantity` is the number of people (fixed: exactly the capacity; variable: `minOccupancy`..capacity), every place of the area is held atomically and a second buyer can never hold part of it. Any other quantity answers 400 `ga_area_whole` (`areaType`, `capacity`, `minOccupancy`, `maxOccupancy`, `requested`); an area already held, sold or partly withheld answers 409 `conflict`. A whole area counts as one object against the booking limits (its capacity, at most 50, caps it); its people count against quotas, lots and per-buyer limits. The response adds `places`, `people` and `areaType`.
389
389
  # @param idempotency_key [String] Required. Reuse with the same request on retry; a different payload conflicts. Seat confirmation binds this key durably in PostgreSQL; hold mutations use bounded Redis receipts.
390
390
  # @param post_api_ga_reserve_request [PostApiGaReserveRequest]
391
391
  # @param [Hash] opts the optional parameters
@@ -621,7 +621,7 @@ module SeatsChart
621
621
  end
622
622
 
623
623
  # Suggest or atomically hold best available seats
624
- # Returns seat IDs for the requested quantity, preferring adjacent same-row groups near the map center. Filter the candidate pool by `category` (or ordered `categories`, max 10: windows of the first category are tried before the second, and so on), optional `sectionId` (layout section id or name) and optional `zone` (layout zone id or name; seats resolve explicit zone assignment, then their section zone, then the zone outline) before ranking. `tryToPreventOrphanSeats` (default **true**) skips adjacent windows that would leave a single empty seat at either end of the run, falling back to them only when nothing else fits. `ticketTypes` (`{ ticketTypeId: count }`) sets `quantity` to the sum, restricts the search to categories whose ticket catalog offers every requested type, and returns `ticketTypes` (seatId → ticketTypeId) ready to send as `seatTicketTypes` on confirm; events without ticket types reject it. `accessibleSeats` (N) only returns windows containing at least N seats flagged `accessibility.wheelchair` in the published seat structure (409 when no such window exists). `channel` is salesChannel order limits only. Pass **`x-channel-key`** for inventory partitions — do not send the secret in the body. **`hold: false` (default):** suggest only — does not lock. **`hold: true`:** ranks up to 32 candidate windows across the category preferences, locks the first fit in one Lua call each (all-or-nothing per window), then O(cart) PG gates (available/forSale/channel; seats that are not for sale are never picked, not even resale-listed ones of non-propagating season members: those are bought by holding the seats of the listing); on gate failure releases only the locks it added. Requires **Idempotency-Key**, and `userId` unless `holdToken` is given. `holdToken` appends the seats to that existing hold session (same expiry bound; 409 `hold_token_conflict` when the session is expired, foreign, confirming or full). `extraData` is stored on the held seats (requires hold). Returns `hold_token` for confirm. The organizer's booking limits (designer *Max seats per order*) cap `quantity` and, with `holdToken`, the seats already on the token: best-available never picks more than allowed (409 `booking_limit_exceeded` with `limit`, `current`, `requested`). `sections` (max 20 section ids or names, XOR with `sectionId`) ranks across the union of those sections. **API keys / dashboard sessions only:** `channelKeys` (channel secret keys or ids) restricts the pool to public seats plus those channels, `ignoreChannels: true` allows every channel (both replace `x-channel-key`; buyers get 403). `orderId` (with `hold`) is stored on the held seats as `extraData.orderId` and echoed in the response; pass it as `externalOrderId` on confirm. **`status: \"booked\"`** (API keys with the `bookings` scope, or dashboard sessions allowed to change object statuses; buyers get 403) books the best window directly instead of holding it: the same administrative booking as POST /events/{eventId}/actions/book (one SQL transaction under the seat row locks; a seat held by a buyer is never taken; when a ranked window was taken meanwhile the next one is tried). Requires **Idempotency-Key**: the booking order id is derived from it, so a retry returns the same booking. `ticketTypes` are recorded per seat, `extraData` and `orderId` (as `extraData.orderId`) are stored on the booked seats. Response: `status: \"booked\"`, `booked: true`, `bookingOrderId` (cancel with POST /orders/{orderId}/cancel) and `objects` (status, extraData, orderId, ticketType per seat). `status: \"reservedByToken\"` is the same as `hold: true`. **`keepExtraData: true`** (hold or booked) keeps the seats' stored extraData and merges `extraData` / `orderId` on top instead of replacing it.
624
+ # Returns seat IDs for the requested quantity, preferring adjacent same-row groups near the map center. **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. Filter the candidate pool by `category` (or ordered `categories`, max 10: windows of the first category are tried before the second, and so on), optional `sectionId` (layout section id or name) and optional `zone` (layout zone id or name; seats resolve explicit zone assignment, then their section zone, then the zone outline) before ranking. `tryToPreventOrphanSeats` (default **true**) skips adjacent windows that would leave a single empty seat at either end of the run, falling back to them only when nothing else fits. `ticketTypes` (`{ ticketTypeId: count }`) sets `quantity` to the sum, restricts the search to categories whose ticket catalog offers every requested type, and returns `ticketTypes` (seatId → ticketTypeId) ready to send as `seatTicketTypes` on confirm; events without ticket types reject it. `accessibleSeats` (N) only returns windows containing at least N seats flagged `accessibility.wheelchair` in the published seat structure (409 when no such window exists). `channel` is salesChannel order limits only. Pass **`x-channel-key`** for inventory partitions — do not send the secret in the body. **`hold: false` (default):** suggest only — does not lock. **`hold: true`:** ranks up to 32 candidate windows across the category preferences, locks the first fit in one Lua call each (all-or-nothing per window), then O(cart) PG gates (available/forSale/channel; seats that are not for sale are never picked, not even resale-listed ones of non-propagating season members: those are bought by holding the seats of the listing); on gate failure releases only the locks it added. Requires **Idempotency-Key**, and `userId` unless `holdToken` is given. `holdToken` appends the seats to that existing hold session (same expiry bound; 409 `hold_token_conflict` when the session is expired, foreign, confirming or full). `extraData` is stored on the held seats (requires hold). Returns `hold_token` for confirm. The organizer's booking limits (designer *Max seats per order*) cap `quantity` and, with `holdToken`, the seats already on the token: best-available never picks more than allowed (409 `booking_limit_exceeded` with `limit`, `current`, `requested`). `sections` (max 20 section ids or names, XOR with `sectionId`) ranks across the union of those sections. **API keys / dashboard sessions only:** `channelKeys` (channel secret keys or ids) restricts the pool to public seats plus those channels, `ignoreChannels: true` allows every channel (both replace `x-channel-key`; buyers get 403). `orderId` (with `hold`) is stored on the held seats as `extraData.orderId` and echoed in the response; pass it as `externalOrderId` on confirm. **`status: \"booked\"`** (API keys with the `bookings` scope, or dashboard sessions allowed to change object statuses; buyers get 403) books the best window directly instead of holding it: the same administrative booking as POST /events/{eventId}/actions/book (one SQL transaction under the seat row locks; a seat held by a buyer is never taken; when a ranked window was taken meanwhile the next one is tried). Requires **Idempotency-Key**: the booking order id is derived from it, so a retry returns the same booking. `ticketTypes` are recorded per seat, `extraData` and `orderId` (as `extraData.orderId`) are stored on the booked seats. Response: `status: \"booked\"`, `booked: true`, `bookingOrderId` (cancel with POST /orders/{orderId}/cancel) and `objects` (status, extraData, orderId, ticketType per seat). `status: \"reservedByToken\"` is the same as `hold: true`. **`keepExtraData: true`** (hold or booked) keeps the seats' stored extraData and merges `extraData` / `orderId` on top instead of replacing it.
625
625
  # @param post_api_seats_best_available_request [PostApiSeatsBestAvailableRequest]
626
626
  # @param [Hash] opts the optional parameters
627
627
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
@@ -632,7 +632,7 @@ module SeatsChart
632
632
  end
633
633
 
634
634
  # Suggest or atomically hold best available seats
635
- # Returns seat IDs for the requested quantity, preferring adjacent same-row groups near the map center. Filter the candidate pool by `category` (or ordered `categories`, max 10: windows of the first category are tried before the second, and so on), optional `sectionId` (layout section id or name) and optional `zone` (layout zone id or name; seats resolve explicit zone assignment, then their section zone, then the zone outline) before ranking. `tryToPreventOrphanSeats` (default **true**) skips adjacent windows that would leave a single empty seat at either end of the run, falling back to them only when nothing else fits. `ticketTypes` (`{ ticketTypeId: count }`) sets `quantity` to the sum, restricts the search to categories whose ticket catalog offers every requested type, and returns `ticketTypes` (seatId → ticketTypeId) ready to send as `seatTicketTypes` on confirm; events without ticket types reject it. `accessibleSeats` (N) only returns windows containing at least N seats flagged `accessibility.wheelchair` in the published seat structure (409 when no such window exists). `channel` is salesChannel order limits only. Pass **`x-channel-key`** for inventory partitions — do not send the secret in the body. **`hold: false` (default):** suggest only — does not lock. **`hold: true`:** ranks up to 32 candidate windows across the category preferences, locks the first fit in one Lua call each (all-or-nothing per window), then O(cart) PG gates (available/forSale/channel; seats that are not for sale are never picked, not even resale-listed ones of non-propagating season members: those are bought by holding the seats of the listing); on gate failure releases only the locks it added. Requires **Idempotency-Key**, and `userId` unless `holdToken` is given. `holdToken` appends the seats to that existing hold session (same expiry bound; 409 `hold_token_conflict` when the session is expired, foreign, confirming or full). `extraData` is stored on the held seats (requires hold). Returns `hold_token` for confirm. The organizer's booking limits (designer *Max seats per order*) cap `quantity` and, with `holdToken`, the seats already on the token: best-available never picks more than allowed (409 `booking_limit_exceeded` with `limit`, `current`, `requested`). `sections` (max 20 section ids or names, XOR with `sectionId`) ranks across the union of those sections. **API keys / dashboard sessions only:** `channelKeys` (channel secret keys or ids) restricts the pool to public seats plus those channels, `ignoreChannels: true` allows every channel (both replace `x-channel-key`; buyers get 403). `orderId` (with `hold`) is stored on the held seats as `extraData.orderId` and echoed in the response; pass it as `externalOrderId` on confirm. **`status: \"booked\"`** (API keys with the `bookings` scope, or dashboard sessions allowed to change object statuses; buyers get 403) books the best window directly instead of holding it: the same administrative booking as POST /events/{eventId}/actions/book (one SQL transaction under the seat row locks; a seat held by a buyer is never taken; when a ranked window was taken meanwhile the next one is tried). Requires **Idempotency-Key**: the booking order id is derived from it, so a retry returns the same booking. `ticketTypes` are recorded per seat, `extraData` and `orderId` (as `extraData.orderId`) are stored on the booked seats. Response: `status: \"booked\"`, `booked: true`, `bookingOrderId` (cancel with POST /orders/{orderId}/cancel) and `objects` (status, extraData, orderId, ticketType per seat). `status: \"reservedByToken\"` is the same as `hold: true`. **`keepExtraData: true`** (hold or booked) keeps the seats' stored extraData and merges `extraData` / `orderId` on top instead of replacing it.
635
+ # Returns seat IDs for the requested quantity, preferring adjacent same-row groups near the map center. **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. Filter the candidate pool by `category` (or ordered `categories`, max 10: windows of the first category are tried before the second, and so on), optional `sectionId` (layout section id or name) and optional `zone` (layout zone id or name; seats resolve explicit zone assignment, then their section zone, then the zone outline) before ranking. `tryToPreventOrphanSeats` (default **true**) skips adjacent windows that would leave a single empty seat at either end of the run, falling back to them only when nothing else fits. `ticketTypes` (`{ ticketTypeId: count }`) sets `quantity` to the sum, restricts the search to categories whose ticket catalog offers every requested type, and returns `ticketTypes` (seatId → ticketTypeId) ready to send as `seatTicketTypes` on confirm; events without ticket types reject it. `accessibleSeats` (N) only returns windows containing at least N seats flagged `accessibility.wheelchair` in the published seat structure (409 when no such window exists). `channel` is salesChannel order limits only. Pass **`x-channel-key`** for inventory partitions — do not send the secret in the body. **`hold: false` (default):** suggest only — does not lock. **`hold: true`:** ranks up to 32 candidate windows across the category preferences, locks the first fit in one Lua call each (all-or-nothing per window), then O(cart) PG gates (available/forSale/channel; seats that are not for sale are never picked, not even resale-listed ones of non-propagating season members: those are bought by holding the seats of the listing); on gate failure releases only the locks it added. Requires **Idempotency-Key**, and `userId` unless `holdToken` is given. `holdToken` appends the seats to that existing hold session (same expiry bound; 409 `hold_token_conflict` when the session is expired, foreign, confirming or full). `extraData` is stored on the held seats (requires hold). Returns `hold_token` for confirm. The organizer's booking limits (designer *Max seats per order*) cap `quantity` and, with `holdToken`, the seats already on the token: best-available never picks more than allowed (409 `booking_limit_exceeded` with `limit`, `current`, `requested`). `sections` (max 20 section ids or names, XOR with `sectionId`) ranks across the union of those sections. **API keys / dashboard sessions only:** `channelKeys` (channel secret keys or ids) restricts the pool to public seats plus those channels, `ignoreChannels: true` allows every channel (both replace `x-channel-key`; buyers get 403). `orderId` (with `hold`) is stored on the held seats as `extraData.orderId` and echoed in the response; pass it as `externalOrderId` on confirm. **`status: \"booked\"`** (API keys with the `bookings` scope, or dashboard sessions allowed to change object statuses; buyers get 403) books the best window directly instead of holding it: the same administrative booking as POST /events/{eventId}/actions/book (one SQL transaction under the seat row locks; a seat held by a buyer is never taken; when a ranked window was taken meanwhile the next one is tried). Requires **Idempotency-Key**: the booking order id is derived from it, so a retry returns the same booking. `ticketTypes` are recorded per seat, `extraData` and `orderId` (as `extraData.orderId`) are stored on the booked seats. Response: `status: \"booked\"`, `booked: true`, `bookingOrderId` (cancel with POST /orders/{orderId}/cancel) and `objects` (status, extraData, orderId, ticketType per seat). `status: \"reservedByToken\"` is the same as `hold: true`. **`keepExtraData: true`** (hold or booked) keeps the seats' stored extraData and merges `extraData` / `orderId` on top instead of replacing it.
636
636
  # @param post_api_seats_best_available_request [PostApiSeatsBestAvailableRequest]
637
637
  # @param [Hash] opts the optional parameters
638
638
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
@@ -1006,7 +1006,7 @@ module SeatsChart
1006
1006
  end
1007
1007
 
1008
1008
  # Place a temporary Redis hold (Lua TTL) before payment
1009
- # JSON body: `eventId`, `seatIds` (1–64 UUIDs, unique; up to the workspace `maxSeatsPerHoldToken` with large group holds), `userId`, optional `holdToken` capability to append seats to an existing session. `userId` is customer metadata, never ownership proof. Renew/append share a two-hour maximum session lifetime. Optional `ticketBuyerId` (opaque partner buyer id) is stored on a new hold token and inherited by its confirmation. `eventId` also accepts the event key. Headers: **x-api-key** (B2B) *or* **Authorization: Bearer** (HS256 JWT); optional **x-tenant-id**; **`Idempotency-Key` is required** (1–255 chars after trim; use a fresh UUID v4 per checkout attempt). Repeats with the same key within ~24h return the cached HTTP status and JSON without re-running the Lua lock. Applies Redis TTL locks (**default 600 s**, overridden by **`SEAT_HOLD_TTL_SEC`**, or by the workspace **hold period** setting — `PATCH /workspace/settings`) with SSE `seat` → **`locked`**; Postgres remains **`available`** until **`POST /api/seats/confirm`** persists **`sold`** via the reservation worker. A hold token holds at most the workspace `maxSeatsPerHoldToken` seats (409 `seat_limit`). **Large group holds (opt-in):** a workspace `maxSeatsPerHoldToken` above 64 (up to 1000, `PATCH /workspace/settings`) lets one request and one hold token hold that many seats of one event; the request is still one atomic lock — every seat of the group is held under the token, or none is (409 `SEAT_LOCKED` when any seat is taken, nothing locked). The sales-channel defaults (web 8, box office 20, partner 64) then step aside; the organizer's booking limits and the workspace cap still apply. Season and multi-event holds keep the 64-lock limit. **Booking limits:** the organizer's *Max seats per order* (designer → Booking limits, stored as `layoutMeta.bookingRules` of the published chart/event layout) caps the seats one hold token holds, appends included, checked in the same atomic call as the locks (parallel appends cannot exceed it); the strictest of the sales-channel default, this limit, the per-buyer limit and `maxSeatsPerHoldToken` wins. Refused with 409 `booking_limit_exceeded` (`limit`, `current` seats already on the token, `requested`, `kind: \"seats\"`). Holds placed before a lower limit was published keep their seats and stay confirmable; they only cannot grow. With ticket buyer validation on, buyer tokens must carry a bound ticket buyer id (403 `ticket_buyer_required` / `ticket_buyer_mismatch`). Seats that are not for sale are refused with 409 `SEAT_NOT_FOR_SALE`, except a seat with an active **resale** listing in a season member whose for-sale configuration does not propagate (`forSalePropagated: false`, e.g. a season-ticket seat its holder resells for one game); the confirmation and the order commit apply the same rule.
1009
+ # JSON body: `eventId`, `seatIds` (1–64 UUIDs, unique; up to the workspace `maxSeatsPerHoldToken` with large group holds), `userId`, optional `holdToken` capability to append seats to an existing session. `userId` is customer metadata, never ownership proof. Renew/append share a two-hour maximum session lifetime. Optional `ticketBuyerId` (opaque partner buyer id) is stored on a new hold token and inherited by its confirmation. `eventId` also accepts the event key. Headers: **x-api-key** (B2B) *or* **Authorization: Bearer** (HS256 JWT); optional **x-tenant-id**; **`Idempotency-Key` is required** (1–255 chars after trim; use a fresh UUID v4 per checkout attempt). Repeats with the same key within ~24h return the cached HTTP status and JSON without re-running the Lua lock. Applies Redis TTL locks (**default 600 s**, overridden by **`SEAT_HOLD_TTL_SEC`**, or by the workspace **hold period** setting — `PATCH /workspace/settings`) with SSE `seat` → **`locked`**; Postgres remains **`available`** until **`POST /api/seats/confirm`** persists **`sold`** via the reservation worker. A hold token holds at most the workspace `maxSeatsPerHoldToken` seats (409 `seat_limit`). **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. **Large group holds (opt-in):** a workspace `maxSeatsPerHoldToken` above 64 (up to 1000, `PATCH /workspace/settings`) lets one request and one hold token hold that many seats of one event; the request is still one atomic lock — every seat of the group is held under the token, or none is (409 `SEAT_LOCKED` when any seat is taken, nothing locked). The sales-channel defaults (web 8, box office 20, partner 64) then step aside; the organizer's booking limits and the workspace cap still apply. Season and multi-event holds keep the 64-lock limit. **Booking limits:** the organizer's *Max seats per order* (designer → Booking limits, stored as `layoutMeta.bookingRules` of the published chart/event layout) caps the seats one hold token holds, appends included, checked in the same atomic call as the locks (parallel appends cannot exceed it); the strictest of the sales-channel default, this limit, the per-buyer limit and `maxSeatsPerHoldToken` wins. Refused with 409 `booking_limit_exceeded` (`limit`, `current` seats already on the token, `requested`, `kind: \"seats\"`). Holds placed before a lower limit was published keep their seats and stay confirmable; they only cannot grow. With ticket buyer validation on, buyer tokens must carry a bound ticket buyer id (403 `ticket_buyer_required` / `ticket_buyer_mismatch`). Seats that are not for sale are refused with 409 `SEAT_NOT_FOR_SALE`, except a seat with an active **resale** listing in a season member whose for-sale configuration does not propagate (`forSalePropagated: false`, e.g. a season-ticket seat its holder resells for one game); the confirmation and the order commit apply the same rule.
1010
1010
  # @param idempotency_key [String] Required deduplication key (max 255 chars after trim; UUID v4 recommended). 24h idempotent cache replay in Redis per tenant.
1011
1011
  # @param post_api_seats_reserve_request [PostApiSeatsReserveRequest]
1012
1012
  # @param [Hash] opts the optional parameters
@@ -1018,7 +1018,7 @@ module SeatsChart
1018
1018
  end
1019
1019
 
1020
1020
  # Place a temporary Redis hold (Lua TTL) before payment
1021
- # JSON body: `eventId`, `seatIds` (1–64 UUIDs, unique; up to the workspace `maxSeatsPerHoldToken` with large group holds), `userId`, optional `holdToken` capability to append seats to an existing session. `userId` is customer metadata, never ownership proof. Renew/append share a two-hour maximum session lifetime. Optional `ticketBuyerId` (opaque partner buyer id) is stored on a new hold token and inherited by its confirmation. `eventId` also accepts the event key. Headers: **x-api-key** (B2B) *or* **Authorization: Bearer** (HS256 JWT); optional **x-tenant-id**; **`Idempotency-Key` is required** (1–255 chars after trim; use a fresh UUID v4 per checkout attempt). Repeats with the same key within ~24h return the cached HTTP status and JSON without re-running the Lua lock. Applies Redis TTL locks (**default 600 s**, overridden by **`SEAT_HOLD_TTL_SEC`**, or by the workspace **hold period** setting — `PATCH /workspace/settings`) with SSE `seat` → **`locked`**; Postgres remains **`available`** until **`POST /api/seats/confirm`** persists **`sold`** via the reservation worker. A hold token holds at most the workspace `maxSeatsPerHoldToken` seats (409 `seat_limit`). **Large group holds (opt-in):** a workspace `maxSeatsPerHoldToken` above 64 (up to 1000, `PATCH /workspace/settings`) lets one request and one hold token hold that many seats of one event; the request is still one atomic lock — every seat of the group is held under the token, or none is (409 `SEAT_LOCKED` when any seat is taken, nothing locked). The sales-channel defaults (web 8, box office 20, partner 64) then step aside; the organizer's booking limits and the workspace cap still apply. Season and multi-event holds keep the 64-lock limit. **Booking limits:** the organizer's *Max seats per order* (designer → Booking limits, stored as `layoutMeta.bookingRules` of the published chart/event layout) caps the seats one hold token holds, appends included, checked in the same atomic call as the locks (parallel appends cannot exceed it); the strictest of the sales-channel default, this limit, the per-buyer limit and `maxSeatsPerHoldToken` wins. Refused with 409 `booking_limit_exceeded` (`limit`, `current` seats already on the token, `requested`, `kind: \"seats\"`). Holds placed before a lower limit was published keep their seats and stay confirmable; they only cannot grow. With ticket buyer validation on, buyer tokens must carry a bound ticket buyer id (403 `ticket_buyer_required` / `ticket_buyer_mismatch`). Seats that are not for sale are refused with 409 `SEAT_NOT_FOR_SALE`, except a seat with an active **resale** listing in a season member whose for-sale configuration does not propagate (`forSalePropagated: false`, e.g. a season-ticket seat its holder resells for one game); the confirmation and the order commit apply the same rule.
1021
+ # JSON body: `eventId`, `seatIds` (1–64 UUIDs, unique; up to the workspace `maxSeatsPerHoldToken` with large group holds), `userId`, optional `holdToken` capability to append seats to an existing session. `userId` is customer metadata, never ownership proof. Renew/append share a two-hour maximum session lifetime. Optional `ticketBuyerId` (opaque partner buyer id) is stored on a new hold token and inherited by its confirmation. `eventId` also accepts the event key. Headers: **x-api-key** (B2B) *or* **Authorization: Bearer** (HS256 JWT); optional **x-tenant-id**; **`Idempotency-Key` is required** (1–255 chars after trim; use a fresh UUID v4 per checkout attempt). Repeats with the same key within ~24h return the cached HTTP status and JSON without re-running the Lua lock. Applies Redis TTL locks (**default 600 s**, overridden by **`SEAT_HOLD_TTL_SEC`**, or by the workspace **hold period** setting — `PATCH /workspace/settings`) with SSE `seat` → **`locked`**; Postgres remains **`available`** until **`POST /api/seats/confirm`** persists **`sold`** via the reservation worker. A hold token holds at most the workspace `maxSeatsPerHoldToken` seats (409 `seat_limit`). **Free (test plan) out of seats:** once the workspace used its 50 seats of the month, new holds (appends included) answer 409 `holds_paused` with a neutral message until the next UTC month or an upgrade; holds already taken can still be confirmed. **Large group holds (opt-in):** a workspace `maxSeatsPerHoldToken` above 64 (up to 1000, `PATCH /workspace/settings`) lets one request and one hold token hold that many seats of one event; the request is still one atomic lock — every seat of the group is held under the token, or none is (409 `SEAT_LOCKED` when any seat is taken, nothing locked). The sales-channel defaults (web 8, box office 20, partner 64) then step aside; the organizer's booking limits and the workspace cap still apply. Season and multi-event holds keep the 64-lock limit. **Booking limits:** the organizer's *Max seats per order* (designer → Booking limits, stored as `layoutMeta.bookingRules` of the published chart/event layout) caps the seats one hold token holds, appends included, checked in the same atomic call as the locks (parallel appends cannot exceed it); the strictest of the sales-channel default, this limit, the per-buyer limit and `maxSeatsPerHoldToken` wins. Refused with 409 `booking_limit_exceeded` (`limit`, `current` seats already on the token, `requested`, `kind: \"seats\"`). Holds placed before a lower limit was published keep their seats and stay confirmable; they only cannot grow. With ticket buyer validation on, buyer tokens must carry a bound ticket buyer id (403 `ticket_buyer_required` / `ticket_buyer_mismatch`). Seats that are not for sale are refused with 409 `SEAT_NOT_FOR_SALE`, except a seat with an active **resale** listing in a season member whose for-sale configuration does not propagate (`forSalePropagated: false`, e.g. a season-ticket seat its holder resells for one game); the confirmation and the order commit apply the same rule.
1022
1022
  # @param idempotency_key [String] Required deduplication key (max 255 chars after trim; UUID v4 recommended). 24h idempotent cache replay in Redis per tenant.
1023
1023
  # @param post_api_seats_reserve_request [PostApiSeatsReserveRequest]
1024
1024
  # @param [Hash] opts the optional parameters
@@ -87,7 +87,7 @@ module SeatsChart
87
87
  end
88
88
 
89
89
  # Monthly usage: used objects, charts and events
90
- # Sandboxes (`isTest: true`) are metered so their usage can be seen, but never billed and never held to plan limits (`limit: null`). `usedObjects.count` is the number of distinct objects booked in the UTC calendar month (seats.io-style billing unit): every seat that became booked counts once per month however often it is retried, released and re-booked; each sold general-admission place counts as one. Holds, test events and replays never count. Map-only renders (`bringYourOwnBackend`) count every object of the rendered chart once per chart and month (`byEvent` entry with the chart id and `mapOnly: true`). `history` has exactly 12 months ending at `month` (zero-filled); `byEvent` lists the top 100 events of the month. `charts`/`events` are current totals against the plan limits. Dashboard JWT (any role) or an API key with the `reports` scope.
90
+ # Sandboxes (`isTest: true`) are metered so their usage can be seen, but never billed and never held to plan limits (`limit: null`). `usedObjects.count` is the number of distinct objects booked in the UTC calendar month (seats.io-style billing unit): every seat that became booked counts once per month however often it is retried, released and re-booked; each sold general-admission place counts as one. Holds, test events and replays never count. Map-only renders (`bringYourOwnBackend`) count every object of the rendered chart once per chart and month (`byEvent` entry with the chart id and `mapOnly: true`). `history` has exactly 12 months ending at `month` (zero-filled); `byEvent` lists the top 100 events of the month. `charts`/`events` are this workspace's current totals; the plan limits count every production workspace of the billing account together (`account.charts` / `account.events`). `account`: the billing account the workspace belongs to (one plan for all its workspaces) with `ownerEmail`, `isOwner`, `workspaceCount` and the account totals `charts`, `events` and `usedSeats` of the month; `null` in a sandbox or without an account. `seats`: the used seats (the billing unit: one per event, object and month; the same seat sold in two events counts twice) of the billing account in the month — every production workspace of the account, an organizer workspace of a ticketing platform with the platform — with `includedSeats`, `mode` (`overage`: paid plan, extra seats billed per seat; `allowance`: Free, new events and putting events on sale pause above it; `on_demand`: Ultra On-Demand, every seat billed by the SeatsChart team), `overage` { seats, costCents } so far, `projected` (current month at the current pace) and `allowanceExceeded`; `null` in a test workspace. Dashboard JWT (any role) or an API key with the `reports` scope.
91
91
  # @param [Hash] opts the optional parameters
92
92
  # @option opts [String] :month UTC calendar month `YYYY-MM` (default: current month).
93
93
  # @return [nil]
@@ -97,7 +97,7 @@ module SeatsChart
97
97
  end
98
98
 
99
99
  # Monthly usage: used objects, charts and events
100
- # Sandboxes (`isTest: true`) are metered so their usage can be seen, but never billed and never held to plan limits (`limit: null`). `usedObjects.count` is the number of distinct objects booked in the UTC calendar month (seats.io-style billing unit): every seat that became booked counts once per month however often it is retried, released and re-booked; each sold general-admission place counts as one. Holds, test events and replays never count. Map-only renders (`bringYourOwnBackend`) count every object of the rendered chart once per chart and month (`byEvent` entry with the chart id and `mapOnly: true`). `history` has exactly 12 months ending at `month` (zero-filled); `byEvent` lists the top 100 events of the month. `charts`/`events` are current totals against the plan limits. Dashboard JWT (any role) or an API key with the `reports` scope.
100
+ # Sandboxes (`isTest: true`) are metered so their usage can be seen, but never billed and never held to plan limits (`limit: null`). `usedObjects.count` is the number of distinct objects booked in the UTC calendar month (seats.io-style billing unit): every seat that became booked counts once per month however often it is retried, released and re-booked; each sold general-admission place counts as one. Holds, test events and replays never count. Map-only renders (`bringYourOwnBackend`) count every object of the rendered chart once per chart and month (`byEvent` entry with the chart id and `mapOnly: true`). `history` has exactly 12 months ending at `month` (zero-filled); `byEvent` lists the top 100 events of the month. `charts`/`events` are this workspace's current totals; the plan limits count every production workspace of the billing account together (`account.charts` / `account.events`). `account`: the billing account the workspace belongs to (one plan for all its workspaces) with `ownerEmail`, `isOwner`, `workspaceCount` and the account totals `charts`, `events` and `usedSeats` of the month; `null` in a sandbox or without an account. `seats`: the used seats (the billing unit: one per event, object and month; the same seat sold in two events counts twice) of the billing account in the month — every production workspace of the account, an organizer workspace of a ticketing platform with the platform — with `includedSeats`, `mode` (`overage`: paid plan, extra seats billed per seat; `allowance`: Free, new events and putting events on sale pause above it; `on_demand`: Ultra On-Demand, every seat billed by the SeatsChart team), `overage` { seats, costCents } so far, `projected` (current month at the current pace) and `allowanceExceeded`; `null` in a test workspace. Dashboard JWT (any role) or an API key with the `reports` scope.
101
101
  # @param [Hash] opts the optional parameters
102
102
  # @option opts [String] :month UTC calendar month `YYYY-MM` (default: current month).
103
103
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
@@ -478,7 +478,7 @@ module SeatsChart
478
478
  end
479
479
 
480
480
  # Monthly used objects across my workspaces (admin view)
481
- # Every workspace the caller administers (role admin), with its plan, status and used objects of the month against the plan limit (`null` for sandboxes, which are metered but never billed), plus the total of the production workspaces (`usedObjects`) and, separately, of the sandboxes (`sandboxUsedObjects`). Dashboard session, or a **workspace admin API key** (the admin it is bound to); other API keys: 403 `ERR_PARTNER_SCOPE`. One grouped read of the metering table.
481
+ # Every workspace the caller administers (role admin), with its plan, status and used objects of the month against the plan limit (`null` for sandboxes, which are metered but never billed), plus the total of the production workspaces (`usedObjects`) and, separately, of the sandboxes (`sandboxUsedObjects`). Each item names its billing account (`billingOwnerUserId`); `accounts` lists those accounts (the caller's own first) with the owner, the plan and the totals of every production workspace of the account (`workspaceCount`, `charts`, `events`, `usedObjects` against the plan's included seats), since one plan covers them all. Dashboard session, or a **workspace admin API key** (the admin it is bound to); other API keys: 403 `ERR_PARTNER_SCOPE`. One grouped read of the metering table.
482
482
  # @param [Hash] opts the optional parameters
483
483
  # @option opts [String] :month UTC calendar month &#x60;YYYY-MM&#x60; (default: current month).
484
484
  # @return [nil]
@@ -488,7 +488,7 @@ module SeatsChart
488
488
  end
489
489
 
490
490
  # Monthly used objects across my workspaces (admin view)
491
- # Every workspace the caller administers (role admin), with its plan, status and used objects of the month against the plan limit (&#x60;null&#x60; for sandboxes, which are metered but never billed), plus the total of the production workspaces (&#x60;usedObjects&#x60;) and, separately, of the sandboxes (&#x60;sandboxUsedObjects&#x60;). Dashboard session, or a **workspace admin API key** (the admin it is bound to); other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. One grouped read of the metering table.
491
+ # Every workspace the caller administers (role admin), with its plan, status and used objects of the month against the plan limit (&#x60;null&#x60; for sandboxes, which are metered but never billed), plus the total of the production workspaces (&#x60;usedObjects&#x60;) and, separately, of the sandboxes (&#x60;sandboxUsedObjects&#x60;). Each item names its billing account (&#x60;billingOwnerUserId&#x60;); &#x60;accounts&#x60; lists those accounts (the caller&#39;s own first) with the owner, the plan and the totals of every production workspace of the account (&#x60;workspaceCount&#x60;, &#x60;charts&#x60;, &#x60;events&#x60;, &#x60;usedObjects&#x60; against the plan&#39;s included seats), since one plan covers them all. Dashboard session, or a **workspace admin API key** (the admin it is bound to); other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. One grouped read of the metering table.
492
492
  # @param [Hash] opts the optional parameters
493
493
  # @option opts [String] :month UTC calendar month &#x60;YYYY-MM&#x60; (default: current month).
494
494
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
@@ -107,10 +107,10 @@ module SeatsChart
107
107
  # @param invitation_id [String]
108
108
  # @param [Hash] opts the optional parameters
109
109
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
110
- # @return [nil]
110
+ # @return [DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response]
111
111
  def delete_api_workspaces_by_workspace_id_invitations_by_invitation_id(workspace_id, invitation_id, opts = {})
112
- delete_api_workspaces_by_workspace_id_invitations_by_invitation_id_with_http_info(workspace_id, invitation_id, opts)
113
- nil
112
+ data, _status_code, _headers = delete_api_workspaces_by_workspace_id_invitations_by_invitation_id_with_http_info(workspace_id, invitation_id, opts)
113
+ data
114
114
  end
115
115
 
116
116
  # Revoke a pending invitation of a workspace you administer
@@ -119,7 +119,7 @@ module SeatsChart
119
119
  # @param invitation_id [String]
120
120
  # @param [Hash] opts the optional parameters
121
121
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
122
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
122
+ # @return [Array<(DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response, Integer, Hash)>] DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response data, response status code and response headers
123
123
  def delete_api_workspaces_by_workspace_id_invitations_by_invitation_id_with_http_info(workspace_id, invitation_id, opts = {})
124
124
  if @api_client.config.debugging
125
125
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.delete_api_workspaces_by_workspace_id_invitations_by_invitation_id ...'
@@ -156,6 +156,8 @@ module SeatsChart
156
156
 
157
157
  # header parameters
158
158
  header_params = opts[:header_params] || {}
159
+ # HTTP header 'Accept' (if needed)
160
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
159
161
  header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
160
162
 
161
163
  # form parameters
@@ -165,7 +167,7 @@ module SeatsChart
165
167
  post_body = opts[:debug_body]
166
168
 
167
169
  # return_type
168
- return_type = opts[:debug_return_type]
170
+ return_type = opts[:debug_return_type] || 'DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response'
169
171
 
170
172
  # auth_names
171
173
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -281,10 +283,10 @@ module SeatsChart
281
283
  # @param user_id [String]
282
284
  # @param [Hash] opts the optional parameters
283
285
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
284
- # @return [nil]
286
+ # @return [DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response]
285
287
  def delete_api_workspaces_by_workspace_id_members_by_user_id(workspace_id, user_id, opts = {})
286
- delete_api_workspaces_by_workspace_id_members_by_user_id_with_http_info(workspace_id, user_id, opts)
287
- nil
288
+ data, _status_code, _headers = delete_api_workspaces_by_workspace_id_members_by_user_id_with_http_info(workspace_id, user_id, opts)
289
+ data
288
290
  end
289
291
 
290
292
  # Remove a member from a workspace you administer
@@ -293,7 +295,7 @@ module SeatsChart
293
295
  # @param user_id [String]
294
296
  # @param [Hash] opts the optional parameters
295
297
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
296
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
298
+ # @return [Array<(DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response, Integer, Hash)>] DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response data, response status code and response headers
297
299
  def delete_api_workspaces_by_workspace_id_members_by_user_id_with_http_info(workspace_id, user_id, opts = {})
298
300
  if @api_client.config.debugging
299
301
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.delete_api_workspaces_by_workspace_id_members_by_user_id ...'
@@ -330,6 +332,8 @@ module SeatsChart
330
332
 
331
333
  # header parameters
332
334
  header_params = opts[:header_params] || {}
335
+ # HTTP header 'Accept' (if needed)
336
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
333
337
  header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
334
338
 
335
339
  # form parameters
@@ -339,7 +343,7 @@ module SeatsChart
339
343
  post_body = opts[:debug_body]
340
344
 
341
345
  # return_type
342
- return_type = opts[:debug_return_type]
346
+ return_type = opts[:debug_return_type] || 'DeleteApiWorkspacesByWorkspaceIdMembersByUserId200Response'
343
347
 
344
348
  # auth_names
345
349
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -705,7 +709,7 @@ module SeatsChart
705
709
  # @option opts [String] :filter Case-insensitive substring of the workspace name or id (seats.io &#x60;filter&#x60;).
706
710
  # @option opts [String] :status &#x60;active&#x60; (seats.io listActive), &#x60;inactive&#x60; (deactivated; seats.io listInactive) or &#x60;all&#x60; (default).
707
711
  # @option opts [String] :external_id Only the workspace with this external id (your organizer id; exact match).
708
- # @option opts [GetApiWorkspacesCreatedByApiParameter] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key; &#x60;false&#x60;: only the others.
712
+ # @option opts [Boolean] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key; &#x60;false&#x60;: only the others.
709
713
  # @return [GetApiWorkspaces200Response]
710
714
  def get_api_workspaces(opts = {})
711
715
  data, _status_code, _headers = get_api_workspaces_with_http_info(opts)
@@ -718,7 +722,7 @@ module SeatsChart
718
722
  # @option opts [String] :filter Case-insensitive substring of the workspace name or id (seats.io &#x60;filter&#x60;).
719
723
  # @option opts [String] :status &#x60;active&#x60; (seats.io listActive), &#x60;inactive&#x60; (deactivated; seats.io listInactive) or &#x60;all&#x60; (default).
720
724
  # @option opts [String] :external_id Only the workspace with this external id (your organizer id; exact match).
721
- # @option opts [GetApiWorkspacesCreatedByApiParameter] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key; &#x60;false&#x60;: only the others.
725
+ # @option opts [Boolean] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key; &#x60;false&#x60;: only the others.
722
726
  # @return [Array<(GetApiWorkspaces200Response, Integer, Hash)>] GetApiWorkspaces200Response data, response status code and response headers
723
727
  def get_api_workspaces_with_http_info(opts = {})
724
728
  if @api_client.config.debugging
@@ -943,16 +947,16 @@ module SeatsChart
943
947
  # List the pending invitations of a workspace you administer
944
948
  # @param workspace_id [String] Workspace id or its external id.
945
949
  # @param [Hash] opts the optional parameters
946
- # @return [nil]
950
+ # @return [GetApiWorkspacesByWorkspaceIdInvitations200Response]
947
951
  def get_api_workspaces_by_workspace_id_invitations(workspace_id, opts = {})
948
- get_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, opts)
949
- nil
952
+ data, _status_code, _headers = get_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, opts)
953
+ data
950
954
  end
951
955
 
952
956
  # List the pending invitations of a workspace you administer
953
957
  # @param workspace_id [String] Workspace id or its external id.
954
958
  # @param [Hash] opts the optional parameters
955
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
959
+ # @return [Array<(GetApiWorkspacesByWorkspaceIdInvitations200Response, Integer, Hash)>] GetApiWorkspacesByWorkspaceIdInvitations200Response data, response status code and response headers
956
960
  def get_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, opts = {})
957
961
  if @api_client.config.debugging
958
962
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.get_api_workspaces_by_workspace_id_invitations ...'
@@ -977,6 +981,8 @@ module SeatsChart
977
981
 
978
982
  # header parameters
979
983
  header_params = opts[:header_params] || {}
984
+ # HTTP header 'Accept' (if needed)
985
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
980
986
 
981
987
  # form parameters
982
988
  form_params = opts[:form_params] || {}
@@ -985,7 +991,7 @@ module SeatsChart
985
991
  post_body = opts[:debug_body]
986
992
 
987
993
  # return_type
988
- return_type = opts[:debug_return_type]
994
+ return_type = opts[:debug_return_type] || 'GetApiWorkspacesByWorkspaceIdInvitations200Response'
989
995
 
990
996
  # auth_names
991
997
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -1082,17 +1088,17 @@ module SeatsChart
1082
1088
  # Dashboard members with role, join date and `twoFactorEnabled`. Dashboard session or a workspace admin API key.
1083
1089
  # @param workspace_id [String] Workspace id or its external id.
1084
1090
  # @param [Hash] opts the optional parameters
1085
- # @return [nil]
1091
+ # @return [GetApiWorkspacesByWorkspaceIdMembers200Response]
1086
1092
  def get_api_workspaces_by_workspace_id_members(workspace_id, opts = {})
1087
- get_api_workspaces_by_workspace_id_members_with_http_info(workspace_id, opts)
1088
- nil
1093
+ data, _status_code, _headers = get_api_workspaces_by_workspace_id_members_with_http_info(workspace_id, opts)
1094
+ data
1089
1095
  end
1090
1096
 
1091
1097
  # List the members of a workspace you administer
1092
1098
  # Dashboard members with role, join date and &#x60;twoFactorEnabled&#x60;. Dashboard session or a workspace admin API key.
1093
1099
  # @param workspace_id [String] Workspace id or its external id.
1094
1100
  # @param [Hash] opts the optional parameters
1095
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1101
+ # @return [Array<(GetApiWorkspacesByWorkspaceIdMembers200Response, Integer, Hash)>] GetApiWorkspacesByWorkspaceIdMembers200Response data, response status code and response headers
1096
1102
  def get_api_workspaces_by_workspace_id_members_with_http_info(workspace_id, opts = {})
1097
1103
  if @api_client.config.debugging
1098
1104
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.get_api_workspaces_by_workspace_id_members ...'
@@ -1117,6 +1123,8 @@ module SeatsChart
1117
1123
 
1118
1124
  # header parameters
1119
1125
  header_params = opts[:header_params] || {}
1126
+ # HTTP header 'Accept' (if needed)
1127
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
1120
1128
 
1121
1129
  # form parameters
1122
1130
  form_params = opts[:form_params] || {}
@@ -1125,7 +1133,7 @@ module SeatsChart
1125
1133
  post_body = opts[:debug_body]
1126
1134
 
1127
1135
  # return_type
1128
- return_type = opts[:debug_return_type]
1136
+ return_type = opts[:debug_return_type] || 'GetApiWorkspacesByWorkspaceIdMembers200Response'
1129
1137
 
1130
1138
  # auth_names
1131
1139
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -1148,34 +1156,34 @@ module SeatsChart
1148
1156
  end
1149
1157
 
1150
1158
  # Consolidated overview of the organizer workspaces you administer
1151
- # One call for the platform view: every production workspace the caller administers (for a workspace admin key: its admin), newest first, with charts (not archived), events, seats `sold` / `held` / `available` (numbered seats for sale plus general admission places; held = numbered seats under a hold now, read from Redis for current and upcoming events), `revenue` and the used objects of `month`, plus `totals` over every workspace matching the filters (not only this page). `revenue.cents` is the catalog price of the sold seats and is known only when the workspace takes prices from SeatsChart (`pricingSource: seatschart_catalog`); with partner or synced pricing the platform owns the amounts (`known: false`, `cents: null`; `totals.revenue.complete` says whether every workspace was known). Sold and available come from PostgreSQL, holds from Redis. Filters: `externalId`, `status`, `createdByApi`, creation date range `createdFrom` / `createdTo`. Paginated with `limit` / `nextCursor`. Dashboard session or a workspace admin API key.
1159
+ # One call for the platform view: every production workspace the caller administers (for a workspace admin key: its admin), newest first, with charts (not archived), events, seats `sold` / `held` / `available` (numbered seats for sale plus general admission places; held = numbered seats under a hold now, read from Redis for current and upcoming events), `revenue` and the used objects of `month`, plus `totals` over every workspace matching the filters (not only this page). `revenue.cents` is the catalog price of the sold seats and is known only when the workspace takes prices from SeatsChart (`pricingSource: seatschart_catalog`); with partner or synced pricing the platform owns the amounts (`known: false`, `cents: null`; `totals.revenue.complete` says whether every workspace was known). Sold and available come from PostgreSQL, holds from Redis. `usage.usedSeats` is each workspace's used seats of the month (the billing unit) and `usage.projectedSeats` its projection at the current pace. `seats` is the seat billing of the caller's billing account for the month: the seats of every production workspace of the account (its own and the organizer workspaces it provisioned) together, against the account's plan (`includedSeats`, `overage` and `projected` with their cost); `account` holds the account's totals (`workspaceCount`, `plan`, `charts` and `events` against the plan caps, which count them together); both `null` when the caller has no billing account. Filters: `externalId`, `status`, `createdByApi`, creation date range `createdFrom` / `createdTo`. Paginated with `limit` / `nextCursor`. Dashboard session or a workspace admin API key.
1152
1160
  # @param [Hash] opts the optional parameters
1153
1161
  # @option opts [String] :external_id Only this organizer.
1154
1162
  # @option opts [String] :status Default &#x60;all&#x60;.
1155
- # @option opts [GetApiWorkspacesOverviewCreatedByApiParameter] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key.
1163
+ # @option opts [Boolean] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key.
1156
1164
  # @option opts [String] :created_from Workspaces created at or after this date / date-time (ISO 8601).
1157
1165
  # @option opts [String] :created_to Workspaces created at or before this date (whole UTC day) / date-time.
1158
1166
  # @option opts [String] :month Usage month &#x60;YYYY-MM&#x60; (default: the current UTC month).
1159
1167
  # @option opts [Float] :limit Page size (1..200, default 50).
1160
1168
  # @option opts [String] :cursor Opaque &#x60;nextCursor&#x60; of the previous page.
1161
- # @return [nil]
1169
+ # @return [GetApiWorkspacesOverview200Response]
1162
1170
  def get_api_workspaces_overview(opts = {})
1163
- get_api_workspaces_overview_with_http_info(opts)
1164
- nil
1171
+ data, _status_code, _headers = get_api_workspaces_overview_with_http_info(opts)
1172
+ data
1165
1173
  end
1166
1174
 
1167
1175
  # Consolidated overview of the organizer workspaces you administer
1168
- # One call for the platform view: every production workspace the caller administers (for a workspace admin key: its admin), newest first, with charts (not archived), events, seats &#x60;sold&#x60; / &#x60;held&#x60; / &#x60;available&#x60; (numbered seats for sale plus general admission places; held &#x3D; numbered seats under a hold now, read from Redis for current and upcoming events), &#x60;revenue&#x60; and the used objects of &#x60;month&#x60;, plus &#x60;totals&#x60; over every workspace matching the filters (not only this page). &#x60;revenue.cents&#x60; is the catalog price of the sold seats and is known only when the workspace takes prices from SeatsChart (&#x60;pricingSource: seatschart_catalog&#x60;); with partner or synced pricing the platform owns the amounts (&#x60;known: false&#x60;, &#x60;cents: null&#x60;; &#x60;totals.revenue.complete&#x60; says whether every workspace was known). Sold and available come from PostgreSQL, holds from Redis. Filters: &#x60;externalId&#x60;, &#x60;status&#x60;, &#x60;createdByApi&#x60;, creation date range &#x60;createdFrom&#x60; / &#x60;createdTo&#x60;. Paginated with &#x60;limit&#x60; / &#x60;nextCursor&#x60;. Dashboard session or a workspace admin API key.
1176
+ # One call for the platform view: every production workspace the caller administers (for a workspace admin key: its admin), newest first, with charts (not archived), events, seats &#x60;sold&#x60; / &#x60;held&#x60; / &#x60;available&#x60; (numbered seats for sale plus general admission places; held &#x3D; numbered seats under a hold now, read from Redis for current and upcoming events), &#x60;revenue&#x60; and the used objects of &#x60;month&#x60;, plus &#x60;totals&#x60; over every workspace matching the filters (not only this page). &#x60;revenue.cents&#x60; is the catalog price of the sold seats and is known only when the workspace takes prices from SeatsChart (&#x60;pricingSource: seatschart_catalog&#x60;); with partner or synced pricing the platform owns the amounts (&#x60;known: false&#x60;, &#x60;cents: null&#x60;; &#x60;totals.revenue.complete&#x60; says whether every workspace was known). Sold and available come from PostgreSQL, holds from Redis. &#x60;usage.usedSeats&#x60; is each workspace&#39;s used seats of the month (the billing unit) and &#x60;usage.projectedSeats&#x60; its projection at the current pace. &#x60;seats&#x60; is the seat billing of the caller&#39;s billing account for the month: the seats of every production workspace of the account (its own and the organizer workspaces it provisioned) together, against the account&#39;s plan (&#x60;includedSeats&#x60;, &#x60;overage&#x60; and &#x60;projected&#x60; with their cost); &#x60;account&#x60; holds the account&#39;s totals (&#x60;workspaceCount&#x60;, &#x60;plan&#x60;, &#x60;charts&#x60; and &#x60;events&#x60; against the plan caps, which count them together); both &#x60;null&#x60; when the caller has no billing account. Filters: &#x60;externalId&#x60;, &#x60;status&#x60;, &#x60;createdByApi&#x60;, creation date range &#x60;createdFrom&#x60; / &#x60;createdTo&#x60;. Paginated with &#x60;limit&#x60; / &#x60;nextCursor&#x60;. Dashboard session or a workspace admin API key.
1169
1177
  # @param [Hash] opts the optional parameters
1170
1178
  # @option opts [String] :external_id Only this organizer.
1171
1179
  # @option opts [String] :status Default &#x60;all&#x60;.
1172
- # @option opts [GetApiWorkspacesOverviewCreatedByApiParameter] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key.
1180
+ # @option opts [Boolean] :created_by_api &#x60;true&#x60;: only workspaces provisioned by a workspace admin key.
1173
1181
  # @option opts [String] :created_from Workspaces created at or after this date / date-time (ISO 8601).
1174
1182
  # @option opts [String] :created_to Workspaces created at or before this date (whole UTC day) / date-time.
1175
1183
  # @option opts [String] :month Usage month &#x60;YYYY-MM&#x60; (default: the current UTC month).
1176
1184
  # @option opts [Float] :limit Page size (1..200, default 50).
1177
1185
  # @option opts [String] :cursor Opaque &#x60;nextCursor&#x60; of the previous page.
1178
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1186
+ # @return [Array<(GetApiWorkspacesOverview200Response, Integer, Hash)>] GetApiWorkspacesOverview200Response data, response status code and response headers
1179
1187
  def get_api_workspaces_overview_with_http_info(opts = {})
1180
1188
  if @api_client.config.debugging
1181
1189
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.get_api_workspaces_overview ...'
@@ -1255,6 +1263,8 @@ module SeatsChart
1255
1263
 
1256
1264
  # header parameters
1257
1265
  header_params = opts[:header_params] || {}
1266
+ # HTTP header 'Accept' (if needed)
1267
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
1258
1268
 
1259
1269
  # form parameters
1260
1270
  form_params = opts[:form_params] || {}
@@ -1263,7 +1273,7 @@ module SeatsChart
1263
1273
  post_body = opts[:debug_body]
1264
1274
 
1265
1275
  # return_type
1266
- return_type = opts[:debug_return_type]
1276
+ return_type = opts[:debug_return_type] || 'GetApiWorkspacesOverview200Response'
1267
1277
 
1268
1278
  # auth_names
1269
1279
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']
@@ -1927,7 +1937,7 @@ module SeatsChart
1927
1937
  end
1928
1938
 
1929
1939
  # Create a workspace (provision an organizer)
1930
- # Provisions a workspace and admin membership for the caller: a dashboard admin session, or a **full-access workspace admin API key** (`POST /api/keys` with `workspaceAdmin: true`), whose bound admin becomes the admin of the new workspace. Other API keys: 403 `ERR_PARTNER_SCOPE`. **Ticketing platforms (one workspace per organizer):** send `externalId` (your organizer id), `templateWorkspaceId` (a workspace whose integration settings, embed domains and webhooks to copy) and `issueKey` (mint the organizer's API key in the same call). A workspace created by a workspace admin key is marked `createdByApi`, starts on the platform account plan (`default_plan_id` of the admin, e.g. Ultra On-Demand) and is billed to the platform: its members never see checkout or upgrade prompts. Without a template it starts with partner pricing and the platform defaults. Then call any partner route in it with the same admin key and `X-Workspace-Key: <workspaceId or externalId>`. **Idempotency:** send `Idempotency-Key` (1–255 characters): the same key and body within 24 hours returns the first result with `idempotentReplay: true` and every secret `null` (secrets are never stored; rotate the key if the first response was lost). The same key with another body: 422 `idempotency_key_reused`; while the first call still runs: 409. `isTest: true` creates a test workspace linked to the current production workspace (`parentWorkspaceId`), optionally copying its charts (`copyCharts`). Written to the audit log of the current workspace (`workspace.create` / `workspace.create_test`) and, for a production workspace, of the new one. Returns a new `publicKey`: not a secret and not a Bearer substitute.
1940
+ # Provisions a workspace and admin membership for the caller: a dashboard admin session, or a **full-access workspace admin API key** (`POST /api/keys` with `workspaceAdmin: true`), whose bound admin becomes the admin of the new workspace. Other API keys: 403 `ERR_PARTNER_SCOPE`. **Ticketing platforms (one workspace per organizer):** send `externalId` (your organizer id), `templateWorkspaceId` (a workspace whose integration settings, embed domains and webhooks to copy) and `issueKey` (mint the organizer's API key in the same call). A workspace created by a workspace admin key is marked `createdByApi`, joins the platform admin's billing account (one plan for every workspace of the account, e.g. Ultra On-Demand: its charts, events and seats count with the others) and is billed to the platform: its members never see checkout or upgrade prompts. A workspace created in the dashboard joins the creator's billing account the same way, and a sandbox its parent's. Without a template it starts with partner pricing and the platform defaults. Then call any partner route in it with the same admin key and `X-Workspace-Key: <workspaceId or externalId>`. **Idempotency:** send `Idempotency-Key` (1–255 characters): the same key and body within 24 hours returns the first result with `idempotentReplay: true` and every secret `null` (secrets are never stored; rotate the key if the first response was lost). The same key with another body: 422 `idempotency_key_reused`; while the first call still runs: 409. `isTest: true` creates a test workspace linked to the current production workspace (`parentWorkspaceId`), optionally copying its charts (`copyCharts`). Written to the audit log of the current workspace (`workspace.create` / `workspace.create_test`) and, for a production workspace, of the new one. Returns a new `publicKey`: not a secret and not a Bearer substitute.
1931
1941
  # @param post_api_workspaces_request [PostApiWorkspacesRequest]
1932
1942
  # @param [Hash] opts the optional parameters
1933
1943
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
@@ -1938,7 +1948,7 @@ module SeatsChart
1938
1948
  end
1939
1949
 
1940
1950
  # Create a workspace (provision an organizer)
1941
- # Provisions a workspace and admin membership for the caller: a dashboard admin session, or a **full-access workspace admin API key** (&#x60;POST /api/keys&#x60; with &#x60;workspaceAdmin: true&#x60;), whose bound admin becomes the admin of the new workspace. Other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. **Ticketing platforms (one workspace per organizer):** send &#x60;externalId&#x60; (your organizer id), &#x60;templateWorkspaceId&#x60; (a workspace whose integration settings, embed domains and webhooks to copy) and &#x60;issueKey&#x60; (mint the organizer&#39;s API key in the same call). A workspace created by a workspace admin key is marked &#x60;createdByApi&#x60;, starts on the platform account plan (&#x60;default_plan_id&#x60; of the admin, e.g. Ultra On-Demand) and is billed to the platform: its members never see checkout or upgrade prompts. Without a template it starts with partner pricing and the platform defaults. Then call any partner route in it with the same admin key and &#x60;X-Workspace-Key: &lt;workspaceId or externalId&gt;&#x60;. **Idempotency:** send &#x60;Idempotency-Key&#x60; (1–255 characters): the same key and body within 24 hours returns the first result with &#x60;idempotentReplay: true&#x60; and every secret &#x60;null&#x60; (secrets are never stored; rotate the key if the first response was lost). The same key with another body: 422 &#x60;idempotency_key_reused&#x60;; while the first call still runs: 409. &#x60;isTest: true&#x60; creates a test workspace linked to the current production workspace (&#x60;parentWorkspaceId&#x60;), optionally copying its charts (&#x60;copyCharts&#x60;). Written to the audit log of the current workspace (&#x60;workspace.create&#x60; / &#x60;workspace.create_test&#x60;) and, for a production workspace, of the new one. Returns a new &#x60;publicKey&#x60;: not a secret and not a Bearer substitute.
1951
+ # Provisions a workspace and admin membership for the caller: a dashboard admin session, or a **full-access workspace admin API key** (&#x60;POST /api/keys&#x60; with &#x60;workspaceAdmin: true&#x60;), whose bound admin becomes the admin of the new workspace. Other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. **Ticketing platforms (one workspace per organizer):** send &#x60;externalId&#x60; (your organizer id), &#x60;templateWorkspaceId&#x60; (a workspace whose integration settings, embed domains and webhooks to copy) and &#x60;issueKey&#x60; (mint the organizer&#39;s API key in the same call). A workspace created by a workspace admin key is marked &#x60;createdByApi&#x60;, joins the platform admin&#39;s billing account (one plan for every workspace of the account, e.g. Ultra On-Demand: its charts, events and seats count with the others) and is billed to the platform: its members never see checkout or upgrade prompts. A workspace created in the dashboard joins the creator&#39;s billing account the same way, and a sandbox its parent&#39;s. Without a template it starts with partner pricing and the platform defaults. Then call any partner route in it with the same admin key and &#x60;X-Workspace-Key: &lt;workspaceId or externalId&gt;&#x60;. **Idempotency:** send &#x60;Idempotency-Key&#x60; (1–255 characters): the same key and body within 24 hours returns the first result with &#x60;idempotentReplay: true&#x60; and every secret &#x60;null&#x60; (secrets are never stored; rotate the key if the first response was lost). The same key with another body: 422 &#x60;idempotency_key_reused&#x60;; while the first call still runs: 409. &#x60;isTest: true&#x60; creates a test workspace linked to the current production workspace (&#x60;parentWorkspaceId&#x60;), optionally copying its charts (&#x60;copyCharts&#x60;). Written to the audit log of the current workspace (&#x60;workspace.create&#x60; / &#x60;workspace.create_test&#x60;) and, for a production workspace, of the new one. Returns a new &#x60;publicKey&#x60;: not a secret and not a Bearer substitute.
1942
1952
  # @param post_api_workspaces_request [PostApiWorkspacesRequest]
1943
1953
  # @param [Hash] opts the optional parameters
1944
1954
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
@@ -2170,7 +2180,7 @@ module SeatsChart
2170
2180
  end
2171
2181
 
2172
2182
  # Delete a workspace
2173
- # Soft delete: the workspace and every chart, event, order and audit entry stay in the database, but it leaves every list and switcher (including GET /workspaces), its members lose access, and its API keys, embed and viewer tokens and public reads are refused like a deactivated workspace (403 `workspace_deactivated`, at once on every API instance); `X-Workspace-Key` calls to it answer 404. Its sandboxes are deleted with it. It cannot be reactivated from the product (restoring is a support request). Dashboard session, or a **workspace admin API key** (offboarding an organizer; it cannot delete its own workspace: 409 `own_workspace`); other API keys: 403 `ERR_PARTNER_SCOPE`. The caller must be an **admin** of the workspace (403 `ERR_FORBIDDEN_ROLE`; 404 when not a member or already deleted). Send `confirmName` (the workspace name) or `confirmWorkspaceId` (its id); a mismatch answers 400 `confirmation_mismatch`. Refused while a paid subscription is active (409 `subscription_active`: cancel it in Billing first), for your only remaining workspace (409 `last_workspace`) and for a sandbox (409 `sandbox_workspace`). When it is the workspace of the calling session, `switchTo` names the workspace to switch to. Written to the audit log (`workspace.delete`) of the deleted workspace and of the one the session switches to.
2183
+ # Soft delete: the workspace and every chart, event, order and audit entry stay in the database, but it leaves every list and switcher (including GET /workspaces), its members lose access, and its API keys, embed and viewer tokens and public reads are refused like a deactivated workspace (403 `workspace_deactivated`, at once on every API instance); `X-Workspace-Key` calls to it answer 404. Its sandboxes are deleted with it. It cannot be reactivated from the product (restoring is a support request). Dashboard session, or a **workspace admin API key** (offboarding an organizer; it cannot delete its own workspace: 409 `own_workspace`); other API keys: 403 `ERR_PARTNER_SCOPE`. The caller must be an **admin** of the workspace (403 `ERR_FORBIDDEN_ROLE`; 404 when not a member or already deleted). Send `confirmName` (the workspace name) or `confirmWorkspaceId` (its id); a mismatch answers 400 `confirmation_mismatch`. Refused for the last workspace of a billing account whose paid subscription is active (409 `subscription_active`: cancel it in Billing first), for your only remaining workspace (409 `last_workspace`) and for a sandbox (409 `sandbox_workspace`). When it is the workspace of the calling session, `switchTo` names the workspace to switch to. Written to the audit log (`workspace.delete`) of the deleted workspace and of the one the session switches to.
2174
2184
  # @param workspace_id [String]
2175
2185
  # @param post_api_workspaces_by_workspace_id_actions_delete_request [PostApiWorkspacesByWorkspaceIdActionsDeleteRequest]
2176
2186
  # @param [Hash] opts the optional parameters
@@ -2182,7 +2192,7 @@ module SeatsChart
2182
2192
  end
2183
2193
 
2184
2194
  # Delete a workspace
2185
- # Soft delete: the workspace and every chart, event, order and audit entry stay in the database, but it leaves every list and switcher (including GET /workspaces), its members lose access, and its API keys, embed and viewer tokens and public reads are refused like a deactivated workspace (403 &#x60;workspace_deactivated&#x60;, at once on every API instance); &#x60;X-Workspace-Key&#x60; calls to it answer 404. Its sandboxes are deleted with it. It cannot be reactivated from the product (restoring is a support request). Dashboard session, or a **workspace admin API key** (offboarding an organizer; it cannot delete its own workspace: 409 &#x60;own_workspace&#x60;); other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. The caller must be an **admin** of the workspace (403 &#x60;ERR_FORBIDDEN_ROLE&#x60;; 404 when not a member or already deleted). Send &#x60;confirmName&#x60; (the workspace name) or &#x60;confirmWorkspaceId&#x60; (its id); a mismatch answers 400 &#x60;confirmation_mismatch&#x60;. Refused while a paid subscription is active (409 &#x60;subscription_active&#x60;: cancel it in Billing first), for your only remaining workspace (409 &#x60;last_workspace&#x60;) and for a sandbox (409 &#x60;sandbox_workspace&#x60;). When it is the workspace of the calling session, &#x60;switchTo&#x60; names the workspace to switch to. Written to the audit log (&#x60;workspace.delete&#x60;) of the deleted workspace and of the one the session switches to.
2195
+ # Soft delete: the workspace and every chart, event, order and audit entry stay in the database, but it leaves every list and switcher (including GET /workspaces), its members lose access, and its API keys, embed and viewer tokens and public reads are refused like a deactivated workspace (403 &#x60;workspace_deactivated&#x60;, at once on every API instance); &#x60;X-Workspace-Key&#x60; calls to it answer 404. Its sandboxes are deleted with it. It cannot be reactivated from the product (restoring is a support request). Dashboard session, or a **workspace admin API key** (offboarding an organizer; it cannot delete its own workspace: 409 &#x60;own_workspace&#x60;); other API keys: 403 &#x60;ERR_PARTNER_SCOPE&#x60;. The caller must be an **admin** of the workspace (403 &#x60;ERR_FORBIDDEN_ROLE&#x60;; 404 when not a member or already deleted). Send &#x60;confirmName&#x60; (the workspace name) or &#x60;confirmWorkspaceId&#x60; (its id); a mismatch answers 400 &#x60;confirmation_mismatch&#x60;. Refused for the last workspace of a billing account whose paid subscription is active (409 &#x60;subscription_active&#x60;: cancel it in Billing first), for your only remaining workspace (409 &#x60;last_workspace&#x60;) and for a sandbox (409 &#x60;sandbox_workspace&#x60;). When it is the workspace of the calling session, &#x60;switchTo&#x60; names the workspace to switch to. Written to the audit log (&#x60;workspace.delete&#x60;) of the deleted workspace and of the one the session switches to.
2186
2196
  # @param workspace_id [String]
2187
2197
  # @param post_api_workspaces_by_workspace_id_actions_delete_request [PostApiWorkspacesByWorkspaceIdActionsDeleteRequest]
2188
2198
  # @param [Hash] opts the optional parameters
@@ -2350,10 +2360,10 @@ module SeatsChart
2350
2360
  # @param post_api_workspaces_by_workspace_id_invitations_request [PostApiWorkspacesByWorkspaceIdInvitationsRequest]
2351
2361
  # @param [Hash] opts the optional parameters
2352
2362
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
2353
- # @return [nil]
2363
+ # @return [PostApiWorkspacesByWorkspaceIdInvitations201Response]
2354
2364
  def post_api_workspaces_by_workspace_id_invitations(workspace_id, post_api_workspaces_by_workspace_id_invitations_request, opts = {})
2355
- post_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, post_api_workspaces_by_workspace_id_invitations_request, opts)
2356
- nil
2365
+ data, _status_code, _headers = post_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, post_api_workspaces_by_workspace_id_invitations_request, opts)
2366
+ data
2357
2367
  end
2358
2368
 
2359
2369
  # Invite a person to a workspace you administer
@@ -2362,7 +2372,7 @@ module SeatsChart
2362
2372
  # @param post_api_workspaces_by_workspace_id_invitations_request [PostApiWorkspacesByWorkspaceIdInvitationsRequest]
2363
2373
  # @param [Hash] opts the optional parameters
2364
2374
  # @option opts [String] :idempotency_key Required on transactional routes. Reuse the same key for every retry of one logical operation; the API replays the stored outcome.
2365
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
2375
+ # @return [Array<(PostApiWorkspacesByWorkspaceIdInvitations201Response, Integer, Hash)>] PostApiWorkspacesByWorkspaceIdInvitations201Response data, response status code and response headers
2366
2376
  def post_api_workspaces_by_workspace_id_invitations_with_http_info(workspace_id, post_api_workspaces_by_workspace_id_invitations_request, opts = {})
2367
2377
  if @api_client.config.debugging
2368
2378
  @api_client.config.logger.debug 'Calling API: WorkspaceApi.post_api_workspaces_by_workspace_id_invitations ...'
@@ -2399,6 +2409,8 @@ module SeatsChart
2399
2409
 
2400
2410
  # header parameters
2401
2411
  header_params = opts[:header_params] || {}
2412
+ # HTTP header 'Accept' (if needed)
2413
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', 'multipart/form-data', 'text/plain']) unless header_params['Accept']
2402
2414
  # HTTP header 'Content-Type'
2403
2415
  content_type = @api_client.select_header_content_type(['application/json', 'multipart/form-data', 'text/plain'])
2404
2416
  if !content_type.nil?
@@ -2413,7 +2425,7 @@ module SeatsChart
2413
2425
  post_body = opts[:debug_body] || @api_client.object_to_http_body(post_api_workspaces_by_workspace_id_invitations_request)
2414
2426
 
2415
2427
  # return_type
2416
- return_type = opts[:debug_return_type]
2428
+ return_type = opts[:debug_return_type] || 'PostApiWorkspacesByWorkspaceIdInvitations201Response'
2417
2429
 
2418
2430
  # auth_names
2419
2431
  auth_names = opts[:debug_auth_names] || ['ApiKeyAuth', 'BearerAuth']