diff --git a/static/openapi/catalog.json b/static/openapi/catalog.json index bdf9032..1ce528e 100644 --- a/static/openapi/catalog.json +++ b/static/openapi/catalog.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "title": "viagogo Catalog API", - "version": "1.0.0.40", + "version": "1.0.0.48", "x-logo": { "url": "https://img.vggcdn.net/img/assets/logo/viagogo_logo_apidocs.png", "backgroundColor": "#222222" @@ -1034,6 +1034,584 @@ ] } }, + "/catalog/listingoffers": { + "post": { + "tags": [ + "Listing Offers" + ], + "summary": "Create a new instant liquidity offer (buyer bid) for a specific event.", + "operationId": "ListingOffers_CreateOffer", + "requestBody": { + "x-name": "body", + "content": { + "application/json": { + "schema": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/CreateListingOfferRequest" + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "400": { + "$ref": "#/components/responses/validation_failed", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/listingoffers/event/{eventId}": { + "get": { + "tags": [ + "Listing Offers" + ], + "summary": "List caller's live offers (Active + Paused) for a specific event.\nRequires exactly one seating dimension: sectionId (+ optional rowId) OR ticketClassId.", + "operationId": "ListingOffers_ListOffers", + "parameters": [ + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "sectionId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + { + "name": "rowId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + { + "name": "ticketClassId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found", + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/listingoffers/event/{eventId}/all": { + "get": { + "tags": [ + "Listing Offers" + ], + "summary": "All offers (non-deleted) for a specific event — active, paused, fulfilled and expired.\nRequires exactly one seating dimension: sectionId (+ optional rowId) OR ticketClassId.", + "operationId": "ListingOffers_GetAllOffers", + "parameters": [ + { + "name": "eventId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "sectionId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + { + "name": "rowId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + }, + { + "name": "ticketClassId", + "in": "query", + "schema": { + "type": "integer", + "format": "int32", + "nullable": true + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found", + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/listingoffers/{id}": { + "get": { + "tags": [ + "Listing Offers" + ], + "summary": "Get a single offer by ID.", + "operationId": "ListingOffers_GetOffer", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found", + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + }, + "delete": { + "tags": [ + "Listing Offers" + ], + "summary": "Soft-delete an offer.", + "operationId": "ListingOffers_DeleteOffer", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "204": { + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + }, + "patch": { + "tags": [ + "Listing Offers" + ], + "summary": "Update mutable fields on an Active or Paused offer.", + "operationId": "ListingOffers_UpdateOffer", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "x-name": "body", + "content": { + "application/json": { + "schema": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/PatchListingOfferRequest" + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "400": { + "$ref": "#/components/responses/validation_failed", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/listingoffers/{id}/state": { + "patch": { + "tags": [ + "Listing Offers" + ], + "summary": "Transition offer state: Active (1) to resume, Paused (4) to pause.", + "operationId": "ListingOffers_SetOfferState", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "x-name": "body", + "content": { + "application/json": { + "schema": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/SetOfferStateRequest" + } + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "400": { + "$ref": "#/components/responses/validation_failed", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/listingoffers/bidderbalance": { + "get": { + "tags": [ + "Listing Offers" + ], + "summary": "Get the caller's outstanding bidder balance — total redeemable coupon value\nprojected into the requested currency. This is the spendable amount used by\nthe matching service when gating bids; eligibility (opt-in / daily-limit /\nblocks) is intentionally not applied here.", + "operationId": "ListingOffers_GetBidderBalance", + "parameters": [ + { + "name": "currencyCode", + "in": "query", + "schema": { + "type": "string", + "default": "USD" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found", + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "manage:listingoffers" + ] + } + ] + } + }, + "/catalog/venues/configurations/{configId}": { + "get": { + "tags": [ + "Venue Configurations" + ], + "summary": "Get a venue configuration", + "operationId": "VenueConfigurations_GetVenueConfiguration", + "parameters": [ + { + "name": "configId", + "in": "path", + "required": true, + "description": "The venue configuration identifier", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/hal+json": { + "schema": { + "$ref": "#/components/schemas/VenueConfigurationResource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/not_found", + "description": null + }, + "403": { + "$ref": "#/components/responses/forbidden", + "description": null + }, + "401": { + "$ref": "#/components/responses/requires_authentication", + "description": null + }, + "500": { + "$ref": "#/components/responses/internal_server_error", + "description": null + } + }, + "security": [ + { + "OAuth2": [ + "read:venue_configurations" + ] + } + ] + } + }, "/catalog/venues": { "get": { "tags": [ @@ -1375,6 +1953,11 @@ "type": "string", "description": "The status of the event. Can be `Normal`, `Postponed`, `Cancelled`, `Rescheduled`, `Relocated`, `RelocatedAndRescheduled`, `Draft`, `Contingent` and `Deleted`" }, + "venue_config_id": { + "type": "integer", + "description": "The venue configuration identifier for this event.", + "format": "int32" + }, "_links": { "nullable": true, "oneOf": [ @@ -2034,6 +2617,203 @@ } } }, + "CreateListingOfferRequest": { + "type": "object", + "additionalProperties": false, + "required": [ + "EventId", + "Quantity", + "TicketBidPrice", + "BidCurrencyCode" + ], + "properties": { + "EventId": { + "type": "integer", + "format": "int32" + }, + "Quantity": { + "type": "integer", + "format": "int32", + "maximum": 20.0, + "minimum": 1.0 + }, + "TicketBidPrice": { + "type": "number", + "format": "decimal", + "minimum": 1.0 + }, + "BidCurrencyCode": { + "type": "string", + "maxLength": 3, + "minLength": 3 + }, + "AutoRelistEnabled": { + "type": "boolean" + }, + "RelistMarginPercentage": { + "type": "number", + "format": "decimal", + "minimum": 0.0 + }, + "OfferCount": { + "type": "integer", + "format": "int32", + "maximum": 100.0, + "minimum": 1.0 + }, + "SectionId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "RowId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "TicketClassId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "ExpiresAt": { + "type": "string", + "format": "date-time", + "nullable": true + } + } + }, + "PatchListingOfferRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "TicketBidPrice": { + "type": "number", + "format": "decimal", + "minimum": 1.0, + "nullable": true + }, + "Quantity": { + "type": "integer", + "format": "int32", + "maximum": 20.0, + "minimum": 1.0, + "nullable": true + }, + "ExpiresAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "AutoRelistEnabled": { + "type": "boolean", + "nullable": true + }, + "RelistMarginPercentage": { + "type": "number", + "format": "decimal", + "minimum": 0.0, + "nullable": true + }, + "OfferCount": { + "type": "integer", + "format": "int32", + "maximum": 100.0, + "minimum": 1.0, + "nullable": true + } + } + }, + "SetOfferStateRequest": { + "type": "object", + "additionalProperties": false, + "required": [ + "State" + ], + "properties": { + "State": { + "description": "Target state: Active (1) to resume, Paused (4) to pause.", + "oneOf": [ + { + "$ref": "#/components/schemas/InstantLiquidityOfferState" + } + ] + } + } + }, + "InstantLiquidityOfferState": { + "type": "integer", + "description": "", + "x-enumNames": [ + "Active", + "Fulfilled", + "Deleted", + "Paused" + ], + "enum": [ + 1, + 2, + 3, + 4 + ] + }, + "VenueConfigurationResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "config_id": { + "type": "integer", + "format": "int32" + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VenueConfigSectionResource" + } + } + } + }, + "VenueConfigSectionResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "section_id": { + "type": "integer", + "format": "int32" + }, + "section_name": { + "type": "string" + }, + "rows": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VenueConfigSectionRowResource" + } + } + } + }, + "VenueConfigSectionRowResource": { + "type": "object", + "additionalProperties": false, + "properties": { + "row_id": { + "type": "integer", + "format": "int32" + }, + "row_name": { + "type": "string" + }, + "ticket_class_id": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "ticket_class_name": { + "type": "string", + "nullable": true + } + } + }, "Venues": { "type": "object", "additionalProperties": false, @@ -2278,8 +3058,10 @@ "security": [ { "OAuth2": [ + "manage:listingoffers", "read:categories", "read:events", + "read:venue_configurations", "read:venues" ] } @@ -2298,6 +3080,10 @@ "name": "Events", "description": "View events on the viagogo platform" }, + { + "name": "Listing Offers", + "description": "Manage instant liquidity offers (buyer bids) on the viagogo platform" + }, { "name": "Resource_Event", "description": "An event on the viagogo platform.\n", @@ -2318,11 +3104,20 @@ "description": "An venue on the viagogo platform.\n", "x-displayName": "Venue" }, + { + "name": "Resource_VenueConfigurationResource", + "description": "\n", + "x-displayName": "VenueConfigurationResource" + }, { "name": "Resource_Venues", "description": "\n", "x-displayName": "Venues" }, + { + "name": "Venue Configurations", + "description": "View venue configurations on the viagogo platform" + }, { "name": "Venues", "description": "View venues on the viagogo platform" @@ -2334,6 +3129,8 @@ "tags": [ "Categories", "Events", + "Listing Offers", + "Venue Configurations", "Venues" ] }, @@ -2350,6 +3147,7 @@ "Resource_Events", "Resource_MapEventResponseModel", "Resource_Venue", + "Resource_VenueConfigurationResource", "Resource_Venues" ] }