Versusgame API

Production REST API for the Versus interactive gaming platform. 239 operations across 190 paths covering authentication (email/password plus Apple, Google, Facebook and Microsoft social login), games and gameplays, gamesets and gameset plays, leaderboards and prize awards, creator tooling (games, playlists, widgets, custom URLs), embeddable widget delivery, categories, products, assets, keyframes, wallets and ledger, Stripe and GCOW payments/payouts, meter ads, partner domains, notifications, profiles and personal information, plus the "autogame" AI pipeline (article ingestion, OpenAI chat completions, Google search, ElevenLabs/Polly speech, Remotion rendering). Bearer JWT for user/creator/admin calls and an x-api-key header for internal service-to-service calls. Twelve write operations require an x-idempotency-key.

OpenAPI Specification

versusgame-openapi-original.json Raw ↑
{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_greeting","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["App"]}},"/healthcheck":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"tags":["Health"]}},"/auth/identify":{"post":{"operationId":"AuthController_identify","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyExternalUser"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SigninDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/change_password":{"post":{"operationId":"AuthController_changePassword","parameters":[{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"security":[{"refreshToken":[]},{"refreshToken":[]}],"tags":["auth"]}},"/auth/reset_password":{"post":{"operationId":"AuthController_resetPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordDto"}}}},"responses":{"204":{"description":""}},"tags":["auth"]}},"/auth/reset_password/set_new":{"post":{"operationId":"AuthController_resetPasswordSetNew","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordSetNewDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/reset_password/verify_token":{"post":{"operationId":"AuthController_resetPasswordVerifyToken","parameters":[],"responses":{"204":{"description":""}},"tags":["auth"]}},"/auth/confirm_invite":{"post":{"operationId":"AuthController_confirmInvite","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmInviteDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/verify_email":{"post":{"operationId":"AuthController_verifyEmail","parameters":[],"responses":{"200":{"description":""}},"tags":["auth"]}},"/auth/signup":{"post":{"operationId":"AuthController_signup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/resend_email_verification":{"post":{"operationId":"AuthController_resendEmailVerification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendEmailVerificationDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"tags":["auth"]}},"/auth/refresh":{"post":{"operationId":"AuthController_refresh","parameters":[{"name":"authorization","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"security":[{"refreshToken":[]},{"refreshToken":[]}],"tags":["auth"]}},"/auth/logout":{"post":{"operationId":"AuthController_logout","parameters":[],"responses":{"204":{"description":""}},"security":[{"refreshToken":[]},{"refreshToken":[]}],"tags":["auth"]}},"/auth/validate_email":{"post":{"operationId":"AuthController_validateEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateEmailDto"}}}},"responses":{"204":{"description":""},"400":{"description":""},"409":{"description":""}},"tags":["auth"]}},"/auth/sign_tos":{"post":{"operationId":"AuthController_signTos","parameters":[],"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/auth/payout_email":{"patch":{"operationId":"AuthController_updatePayoutEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePayoutEmailDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePayoutEmailEntity"}}}}},"security":[{"access-token":[]}],"tags":["auth"]}},"/auth/payout_email_verification":{"post":{"operationId":"AuthController_payoutEmailVerification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutEmailVerificationDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/auth/microsoft_rewards":{"post":{"operationId":"AuthController_microsoftRewards","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MicrosoftRewardsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsEntity"}}}}},"security":[{"access-token":[]}],"tags":["auth"]}},"/admin/auth/invite":{"post":{"operationId":"AdminController_invite","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminInviteUserDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/admin/auth/users":{"get":{"operationId":"AdminController_list","parameters":[{"name":"asc","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListUsersEntity"}}}}},"security":[{"access-token":[]}],"tags":["auth"]}},"/admin/auth/users/{userId}/set_creator":{"post":{"operationId":"AdminController_setCreator","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCreatorDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/admin/auth/users/{userId}":{"patch":{"operationId":"AdminController_updateUser","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/superadmin/auth/role/{userId}":{"post":{"operationId":"SuperAdminController_addRole","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRoleDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]},"delete":{"operationId":"SuperAdminController_deleteRole","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRoleDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["auth"]}},"/privacy-policy/{language}":{"get":{"operationId":"LegalController_privacy","parameters":[{"name":"language","required":true,"in":"path","schema":{}}],"responses":{"200":{"description":""}},"tags":["Legal"]}},"/rules/{language}":{"get":{"operationId":"LegalController_rules","parameters":[{"name":"language","required":true,"in":"path","schema":{}}],"responses":{"200":{"description":""}},"tags":["Legal"]}},"/tos/{language}":{"get":{"operationId":"LegalController_tos","parameters":[{"name":"language","required":true,"in":"path","schema":{}}],"responses":{"200":{"description":""}},"tags":["Legal"]}},"/promotional-rules/{language}":{"get":{"operationId":"LegalController_promotional","parameters":[{"name":"language","required":true,"in":"path","schema":{}}],"responses":{"200":{"description":""}},"tags":["Legal"]}},"/business-service-terms/{language}":{"get":{"operationId":"LegalController_businessServiceTerms","parameters":[{"name":"language","required":true,"in":"path","schema":{}}],"responses":{"200":{"description":""}},"tags":["Legal"]}},"/auth/apple":{"get":{"operationId":"socialControllerAuthapple","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/apple/callback":{"get":{"operationId":"socialControllerAuthCallbackGetapple","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]},"post":{"operationId":"socialControllerAuthCallbackPostapple","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/facebook":{"get":{"operationId":"socialControllerAuthfacebook","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/facebook/callback":{"get":{"operationId":"socialControllerAuthCallbackGetfacebook","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]},"post":{"operationId":"socialControllerAuthCallbackPostfacebook","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/google":{"get":{"operationId":"socialControllerAuthgoogle","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/google/callback":{"get":{"operationId":"socialControllerAuthCallbackGetgoogle","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]},"post":{"operationId":"socialControllerAuthCallbackPostgoogle","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/microsoft":{"get":{"operationId":"socialControllerAuthmicrosoft","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/auth/microsoft/callback":{"get":{"operationId":"socialControllerAuthCallbackGetmicrosoft","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]},"post":{"operationId":"socialControllerAuthCallbackPostmicrosoft","parameters":[],"responses":{"200":{"description":""}},"summary":"","tags":["auth"]}},"/internal/user/info":{"get":{"operationId":"InternalController_userInfo","parameters":[{"name":"token","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}}},"security":[{"x-api-key":[]}],"tags":["internal"]}},"/internal/users/find":{"post":{"operationId":"InternalController_FindUsers","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindUserslDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Profile"}}}}}},"security":[{"x-api-key":[]}],"tags":["internal"]}},"/autogame/upload":{"post":{"operationId":"AutogameController_createUpload","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUploadDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/polly/voice":{"post":{"operationId":"PollyController_voice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SynthesizeSpeechDto"}}}},"responses":{"200":{"description":"","content":{"audio/mp3":{"schema":{"type":"string","format":"binary"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/polly/voice-asset":{"post":{"operationId":"PollyController_voiceAsset","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePollyAssetDto"}}}},"responses":{"200":{"description":""}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/polly/speech_marks":{"post":{"operationId":"PollyController_speechMarks","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SynthesizeSpeechDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSpeechMark"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/polly":{"get":{"operationId":"PollyController_describeVoices","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListVoices"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/google_search":{"get":{"operationId":"GoogleSearchController_search","parameters":[{"name":"c2coff","required":false,"in":"query","description":"Enables or disables [Simplified and Traditional Chinese Search](https://developers.google.com/custom-search/docs/json_api_reference#chineseSearch). The default value for this parameter is 0 (zero), meaning that the feature is enabled. Supported values are: * `1`: Disabled * `0`: Enabled (default)","schema":{"type":"string"}},{"name":"cr","required":false,"in":"query","description":"Restricts search results to documents originating in a particular country. You may use [Boolean operators](https://developers.google.com/custom-search/docs/json_api_reference#booleanOperators) in the cr parameter's value. Google Search determines the country of a document by analyzing: * the top-level domain (TLD) of the document's URL * the geographic location of the Web server's IP address See the [Country Parameter Values](https://developers.google.com/custom-search/docs/json_api_reference#countryCollections) page for a list of valid values for this parameter.","schema":{"type":"string"}},{"name":"cx","required":false,"in":"query","description":"The Programmable Search Engine ID to use for this request.","schema":{"type":"string"}},{"name":"dateRestrict","required":false,"in":"query","description":"Restricts results to URLs based on date. Supported values include: * `d[number]`: requests results from the specified number of past days. * `w[number]`: requests results from the specified number of past weeks. * `m[number]`: requests results from the specified number of past months. * `y[number]`: requests results from the specified number of past years.","schema":{"type":"string"}},{"name":"exactTerms","required":false,"in":"query","description":"Identifies a phrase that all documents in the search results must contain.","schema":{"type":"string"}},{"name":"excludeTerms","required":false,"in":"query","description":"Identifies a word or phrase that should not appear in any documents in the search results.","schema":{"type":"string"}},{"name":"fileType","required":false,"in":"query","description":"Restricts results to files of a specified extension. A list of file types indexable by Google can be found in Search Console [Help Center](https://support.google.com/webmasters/answer/35287).","schema":{"type":"string"}},{"name":"filter","required":false,"in":"query","description":"Controls turning on or off the duplicate content filter. * See [Automatic Filtering](https://developers.google.com/custom-search/docs/json_api_reference#automaticFiltering) for more information about Google's search results filters. Note that host crowding filtering applies only to multi-site searches. * By default, Google applies filtering to all search results to improve the quality of those results. Acceptable values are: * `0`: Turns off duplicate content filter. * `1`: Turns on duplicate content filter.","schema":{"type":"string"}},{"name":"gl","required":false,"in":"query","description":"Geolocation of end user. * The `gl` parameter value is a two-letter country code. The `gl` parameter boosts search results whose country of origin matches the parameter value. See the [Country Codes](https://developers.google.com/custom-search/docs/json_api_reference#countryCodes) page for a list of valid values. * Specifying a `gl` parameter value should lead to more relevant results. This is particularly true for international customers and, even more specifically, for customers in English- speaking countries other than the United States.","schema":{"type":"string"}},{"name":"googlehost","required":false,"in":"query","description":"**Deprecated**. Use the `gl` parameter for a similar effect. The local Google domain (for example, google.com, google.de, or google.fr) to use to perform the search.","schema":{"type":"string"}},{"name":"highRange","required":false,"in":"query","description":"Specifies the ending value for a search range. * Use `lowRange` and `highRange` to append an inclusive search range of `lowRange...highRange` to the query.","schema":{"type":"string"}},{"name":"hl","required":false,"in":"query","description":"Sets the user interface language. * Explicitly setting this parameter improves the performance and the quality of your search results. * See the [Interface Languages](https://developers.google.com/custom-search/docs/json_api_reference#wsInterfaceLanguages) section of [Internationalizing Queries and Results Presentation](https://developers.google.com/custom-search/docs/json_api_reference#wsInternationalizing) for more information, and [Supported Interface Languages](https://developers.google.com/custom-search/docs/json_api_reference#interfaceLanguages) for a list of supported languages.","schema":{"type":"string"}},{"name":"hq","required":false,"in":"query","description":"Appends the specified query terms to the query, as if they were combined with a logical AND operator.","schema":{"type":"string"}},{"name":"imgColorType","required":false,"in":"query","description":"Returns black and white, grayscale, transparent, or color images. Acceptable values are: * `\"color\"` * `\"gray\"` * `\"mono\"`: black and white * `\"trans\"`: transparent background","schema":{"type":"string"}},{"name":"imgDominantColor","required":false,"in":"query","description":"Returns images of a specific dominant color. Acceptable values are: * `\"black\"` * `\"blue\"` * `\"brown\"` * `\"gray\"` * `\"green\"` * `\"orange\"` * `\"pink\"` * `\"purple\"` * `\"red\"` * `\"teal\"` * `\"white\"` * `\"yellow\"`","schema":{"type":"string"}},{"name":"imgSize","required":false,"in":"query","description":"Returns images of a specified size. Acceptable values are: * `\"huge\"` * `\"icon\"` * `\"large\"` * `\"medium\"` * `\"small\"` * `\"xlarge\"` * `\"xxlarge\"`","schema":{"type":"string"}},{"name":"imgType","required":false,"in":"query","description":"Returns images of a type. Acceptable values are: * `\"clipart\"` * `\"face\"` * `\"lineart\"` * `\"stock\"` * `\"photo\"` * `\"animated\"`","schema":{"type":"string"}},{"name":"linkSite","required":false,"in":"query","description":"Specifies that all search results should contain a link to a particular URL.","schema":{"type":"string"}},{"name":"lowRange","required":false,"in":"query","description":"Specifies the starting value for a search range. Use `lowRange` and `highRange` to append an inclusive search range of `lowRange...highRange` to the query.","schema":{"type":"string"}},{"name":"lr","required":false,"in":"query","description":"Restricts the search to documents written in a particular language (e.g., `lr=lang_ja`). Acceptable values are: * `\"lang_ar\"`: Arabic * `\"lang_bg\"`: Bulgarian * `\"lang_ca\"`: Catalan * `\"lang_cs\"`: Czech * `\"lang_da\"`: Danish * `\"lang_de\"`: German * `\"lang_el\"`: Greek * `\"lang_en\"`: English * `\"lang_es\"`: Spanish * `\"lang_et\"`: Estonian * `\"lang_fi\"`: Finnish * `\"lang_fr\"`: French * `\"lang_hr\"`: Croatian * `\"lang_hu\"`: Hungarian * `\"lang_id\"`: Indonesian * `\"lang_is\"`: Icelandic * `\"lang_it\"`: Italian * `\"lang_iw\"`: Hebrew * `\"lang_ja\"`: Japanese * `\"lang_ko\"`: Korean * `\"lang_lt\"`: Lithuanian * `\"lang_lv\"`: Latvian * `\"lang_nl\"`: Dutch * `\"lang_no\"`: Norwegian * `\"lang_pl\"`: Polish * `\"lang_pt\"`: Portuguese * `\"lang_ro\"`: Romanian * `\"lang_ru\"`: Russian * `\"lang_sk\"`: Slovak * `\"lang_sl\"`: Slovenian * `\"lang_sr\"`: Serbian * `\"lang_sv\"`: Swedish * `\"lang_tr\"`: Turkish * `\"lang_zh-CN\"`: Chinese (Simplified) * `\"lang_zh-TW\"`: Chinese (Traditional)","schema":{"type":"string"}},{"name":"num","required":false,"in":"query","description":"Number of search results to return. * Valid values are integers between 1 and 10, inclusive.","schema":{"type":"number"}},{"name":"orTerms","required":false,"in":"query","description":"Provides additional search terms to check for in a document, where each document in the search results must contain at least one of the additional search terms.","schema":{"type":"string"}},{"name":"q","required":true,"in":"query","description":"Query","schema":{"type":"string"}},{"name":"relatedSite","required":false,"in":"query","description":"Specifies that all search results should be pages that are related to the specified URL.","schema":{"type":"string"}},{"name":"rights","required":false,"in":"query","description":"Filters based on licensing. Supported values include: `cc_publicdomain`, `cc_attribute`, `cc_sharealike`, `cc_noncommercial`, `cc_nonderived` and combinations of these. See [typical combinations](https://wiki.creativecommons.org/wiki/CC_Search_integration).","schema":{"type":"string"}},{"name":"safe","required":false,"in":"query","description":"Search safety level. Acceptable values are: * `\"active\"`: Enables SafeSearch filtering. * `\"off\"`: Disables SafeSearch filtering. (default)","schema":{"type":"string"}},{"name":"searchType","required":false,"in":"query","description":"Specifies the search type: `image`. If unspecified, results are limited to webpages. Acceptable values are: * `\"image\"`: custom image search.","schema":{"type":"string"}},{"name":"siteSearch","required":false,"in":"query","description":"Specifies a given site which should always be included or excluded from results (see `siteSearchFilter` parameter, below).","schema":{"type":"string"}},{"name":"siteSearchFilter","required":false,"in":"query","description":"Controls whether to include or exclude results from the site named in the `siteSearch` parameter. Acceptable values are: * `\"e\"`: exclude * `\"i\"`: include","schema":{"type":"string"}},{"name":"sort","required":false,"in":"query","description":"The sort expression to apply to the results. The sort parameter specifies that the results be sorted according to the specified expression i.e. sort by date. [Example: sort=date](https://developers.google.com/custom-search/docs/structured_search#sort-by-attribute).","schema":{"type":"string"}},{"name":"start","required":false,"in":"query","description":"The index of the first result to return. The default number of results per page is 10, so `&start=11` would start at the top of the second page of results. **Note**: The JSON API will never return more than 100 results, even if more than 100 documents match the query, so setting the sum of `start + num` to a number greater than 100 will produce an error. Also note that the maximum value for `num` is 10.","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearch"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]},"post":{"operationId":"GoogleSearchController_insert","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsertRawSearchDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearch"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/google_search/{id}":{"get":{"operationId":"GoogleSearchController_byId","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearch"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/openai/chat_completions":{"post":{"operationId":"OpenAIController_chatCompletionCreate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionsDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/scraper":{"get":{"operationId":"ScraperController_scrape","parameters":[{"name":"url","required":true,"in":"query","schema":{"format":"uri","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParsedDocument"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/proxy":{"get":{"operationId":"ProxyController_proxy","parameters":[{"name":"url","required":true,"in":"query","schema":{"format":"uri","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/remotion/render":{"post":{"operationId":"RemotionController_render","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/chat-history":{"post":{"operationId":"ChatHistoryController_createChatHistory","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatHistoryDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatHistory"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]},"get":{"operationId":"ChatHistoryController_listChatHistories","parameters":[{"name":"creatorId","required":true,"in":"query","schema":{"type":"string"}},{"name":"gameCreated","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatHistoryList"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/chat-history/{id}":{"get":{"operationId":"ChatHistoryController_GetChatHistoryById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatHistory"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]},"patch":{"operationId":"ChatHistoryController_updateChatHistory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChatHistoryDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatHistory"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article":{"post":{"operationId":"ArticleController_createArticle","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateArticleDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Article"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts/{id}/game_index/{gameIndex}":{"get":{"operationId":"ArticleController_draftById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"gameIndex","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameDraft"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts":{"get":{"operationId":"ArticleController_listGameDrafts","parameters":[{"name":"state","required":true,"in":"query","schema":{"$ref":"#/components/schemas/GameDraftState"}},{"name":"gameType","required":false,"in":"query","schema":{"$ref":"#/components/schemas/GameType"}},{"name":"id","required":false,"in":"query","schema":{"type":"string"}},{"name":"text","required":false,"in":"query","schema":{"type":"string"}},{"name":"gameIndex","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"systemMessageNames","required":false,"in":"query","schema":{"type":"array","items":{"type":"string"}}},{"name":"lock","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"asc","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"articleId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListGameDraft"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts/versions":{"get":{"operationId":"ArticleController_listGameDraftVersions","parameters":[{"name":"id","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"asc","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"start","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListGameDraftVersion"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts/{id}":{"post":{"operationId":"ArticleController_createDraft","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"version","required":true,"in":"query","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameDraft"}}}}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts/{id}/game_index/{gameIndex}/set_state":{"post":{"operationId":"ArticleController_setState","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"gameIndex","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetStateDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/drafts/{id}/game_index/{gameIndex}/version":{"post":{"operationId":"ArticleController_newVersion","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"gameIndex","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewVersionDto"}}}},"responses":{"204":{"description":""}},"security":[{"access-token":[]}],"tags":["autogame"]}},"/autogame/article/{id}":{"get":{"operationId":"ArticleController_articleById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"strin

# --- truncated at 32 KB (205 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/versusgame/refs/heads/main/openapi/versusgame-openapi-original.json