From 2f41c2f87ed64c6de60f209246ab13b1ddf56e1c Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Sun, 9 Nov 2025 09:45:08 -0500
Subject: [PATCH 01/28] Clean up
---
examples/oauth-example/package.json | 1 +
examples/oauth-example/src/index.ts | 24 ++-
examples/oauth-example/src/routes/index.ts | 166 +++++++++++++++++-
.../oauth-example/src/routes/iracing/utils.ts | 37 ----
examples/oauth-example/src/routes/oauth.ts | 164 -----------------
packages/api-router/package.json | 15 ++
packages/api-router/src/index.ts | 26 +++
packages/api-router/src/middleware.ts | 47 +++++
.../api-router/src/routes}/auth/index.ts | 0
.../api-router/src/routes}/data/car-class.ts | 0
.../api-router/src/routes}/data/car.ts | 0
.../api-router/src/routes}/data/constants.ts | 0
.../src/routes}/data/driver-stats.ts | 20 ---
.../api-router/src/routes}/data/hosted.ts | 0
.../api-router/src/routes}/data/index.ts | 0
.../api-router/src/routes}/data/league.ts | 0
.../api-router/src/routes}/data/lookup.ts | 0
.../api-router/src/routes}/data/member.ts | 0
.../api-router/src/routes}/data/season.ts | 0
.../api-router/src/routes}/data/series.ts | 0
.../api-router/src/routes}/data/stats.ts | 0
.../api-router/src/routes}/data/team.ts | 0
.../src/routes}/data/time-attack.ts | 0
.../api-router/src/routes}/data/track.ts | 0
.../api-router/src/routes}/index.ts | 0
.../api-router/src/routes}/schema.ts | 0
packages/api-router/src/routes/utils.ts | 6 +
packages/api-router/tsconfig.build.json | 11 ++
packages/api-router/tsconfig.json | 9 +
29 files changed, 299 insertions(+), 227 deletions(-)
delete mode 100644 examples/oauth-example/src/routes/iracing/utils.ts
delete mode 100644 examples/oauth-example/src/routes/oauth.ts
create mode 100644 packages/api-router/package.json
create mode 100644 packages/api-router/src/index.ts
create mode 100644 packages/api-router/src/middleware.ts
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/auth/index.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/car-class.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/car.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/constants.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/driver-stats.ts (55%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/hosted.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/index.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/league.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/lookup.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/member.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/season.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/series.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/stats.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/team.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/time-attack.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/data/track.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/index.ts (100%)
rename {examples/oauth-example/src/routes/iracing => packages/api-router/src/routes}/schema.ts (100%)
create mode 100644 packages/api-router/src/routes/utils.ts
create mode 100644 packages/api-router/tsconfig.build.json
create mode 100644 packages/api-router/tsconfig.json
diff --git a/examples/oauth-example/package.json b/examples/oauth-example/package.json
index b51fc3f..1db75a6 100644
--- a/examples/oauth-example/package.json
+++ b/examples/oauth-example/package.json
@@ -9,6 +9,7 @@
},
"dependencies": {
"@iracing-data/api": "workspace:*",
+ "@iracing-data/api-router": "workspace:*",
"@iracing-data/oauth-client": "workspace:*",
"axios": "^1.7.9",
"better-call": "^1.0.24",
diff --git a/examples/oauth-example/src/index.ts b/examples/oauth-example/src/index.ts
index 900b8f3..de55755 100644
--- a/examples/oauth-example/src/index.ts
+++ b/examples/oauth-example/src/index.ts
@@ -1,11 +1,27 @@
-import { toNodeHandler } from "better-call/node";
+import { createNodeHandler } from "@iracing-data/api-router";
import express from "express";
import cookieParser from "cookie-parser";
import { page } from "./page";
import { PORT } from "./config";
-import router from "./router";
+
+const iracingRouter = createNodeHandler({
+ basePath: "/iracing",
+ openapi: {
+ path: "/reference",
+ },
+ onRequest: (request) => {
+ console.debug("Making request:", request);
+ },
+ onResponse: (response) => {
+ console.debug("Response", response);
+ },
+ onError: (error) => {
+ console.debug("Error!", error);
+ },
+});
const app = express();
+
app.use(express.urlencoded({ extended: true }), cookieParser());
app.get("/", (req, res) => {
@@ -17,12 +33,12 @@ app.get("/", (req, res) => {
page(
hasToken
? `
Authenticated with iRacing
Sign out`
- : `Login
Login with iRacing`
+ : `Login
Login with iRacing`
)
);
});
-app.use(toNodeHandler(router.handler));
+app.use("/iracing", iracingRouter);
app.listen(PORT, () => {
console.info(`Example app listening on port ${PORT}`);
diff --git a/examples/oauth-example/src/routes/index.ts b/examples/oauth-example/src/routes/index.ts
index 9c4ffc9..b67a25a 100644
--- a/examples/oauth-example/src/routes/index.ts
+++ b/examples/oauth-example/src/routes/index.ts
@@ -1,2 +1,164 @@
-export * from "./iracing";
-export * from "./oauth";
+import client from "@/oauth-client";
+import { BASE_URL } from "@iracing-data/oauth-client";
+import { createEndpoint } from "better-call";
+import path from "path";
+import { z } from "zod";
+
+// TODO: Add routes for session management
+
+export const oauthSignIn = createEndpoint(
+ "/oauth/iracing/login",
+ {
+ method: "GET",
+ },
+ async (context) => {
+ const { url } = await client.authorize();
+ return context.redirect(url.toString());
+ }
+);
+
+export const oauthCallback = createEndpoint(
+ "/oauth/iracing/callback",
+ {
+ method: "GET",
+ query: z.object({
+ code: z.string(),
+ state: z.string(),
+ }),
+ },
+ async (context) => {
+ const token = await client.callback(new URLSearchParams(context.query));
+
+ /**
+ * TODO: Write some sort of handler at the top-level that consumers can provide to process the token
+ * before redirecting.
+ */
+ context.setCookie("iracing-token", token.access_token, {
+ httpOnly: true,
+ path: "/",
+ maxAge: token.expires_in,
+ });
+
+ context.setHeader("X-IRACING-ACCESS-TOKEN", token.access_token);
+ context.setHeader(
+ "X-IRACING-ACCESS-TOKEN-EXPIRES-IN",
+ token.expires_in.toString()
+ );
+
+ if (token.scope) {
+ context.setHeader("X-IRACING-SCOPE", token.scope);
+ }
+
+ if (token.refresh_token) {
+ context.setHeader("X-IRACING-REFRESH-TOKEN", token.refresh_token);
+ }
+
+ if (token.refresh_token_expires_in) {
+ context.setHeader(
+ "X-IRACING-REFRESH-TOKEN-EXPIRES-IN",
+ token.refresh_token_expires_in.toString()
+ );
+ }
+
+ return context.redirect("/");
+ }
+);
+
+export const oauthSignOut = createEndpoint(
+ "/oauth/iracing/logout",
+ {
+ method: "GET",
+ },
+ async (context) => {
+ context.setCookie("iracing-token", "", {
+ httpOnly: true,
+ path: "/",
+ maxAge: 0,
+ });
+
+ return context.redirect("/");
+ }
+);
+
+export const oauthSessions = createEndpoint(
+ "/oauth/sessions",
+ {
+ method: "GET",
+ },
+ async (context) => {
+ const accessToken =
+ context.getHeader("X-IRACING-ACCESS-TOKEN") ||
+ context.getCookie("iracing-token");
+
+ return fetch(path.join(BASE_URL, "sessions"), {
+ headers: {
+ Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
+ },
+ });
+ }
+);
+
+export const revokeCurrentOauthSession = createEndpoint(
+ "/oauth/revoke/current",
+ {
+ method: "POST",
+ body: z.object({
+ forgetBrowser: z.boolean().optional(),
+ }),
+ },
+ async (context) => {
+ const accessToken =
+ context.getHeader("X-IRACING-ACCESS-TOKEN") ||
+ context.getCookie("iracing-token");
+
+ return fetch(path.join(BASE_URL, "revoke", "current"), {
+ body: JSON.stringify(context.body),
+ headers: {
+ Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ });
+ }
+);
+
+export const revokeOauthSessions = createEndpoint(
+ "/oauth/revoke/current",
+ {
+ method: "POST",
+ body: z.object({
+ sessionIds: z.array(z.string()),
+ }),
+ },
+ async (context) => {
+ const accessToken =
+ context.getHeader("X-IRACING-ACCESS-TOKEN") ||
+ context.getCookie("iracing-token");
+
+ return fetch(path.join(BASE_URL, "revoke", "current"), {
+ body: JSON.stringify({ session_ids: context.body.sessionIds.join(",") }),
+ headers: {
+ Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ });
+ }
+);
+
+export const revokeClientOauthSessions = createEndpoint(
+ "/oauth/revoke/client",
+ {
+ method: "POST",
+ },
+ async (context) => {
+ const accessToken =
+ context.getHeader("X-IRACING-ACCESS-TOKEN") ||
+ context.getCookie("iracing-token");
+
+ return fetch(path.join(BASE_URL, "revoke", "client"), {
+ headers: {
+ Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
+ "Content-Type": "application/x-www-form-urlencoded",
+ },
+ });
+ }
+);
diff --git a/examples/oauth-example/src/routes/iracing/utils.ts b/examples/oauth-example/src/routes/iracing/utils.ts
deleted file mode 100644
index ed3ae82..0000000
--- a/examples/oauth-example/src/routes/iracing/utils.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { IRacingAPIClient } from "@iracing-data/api";
-import axios from "axios";
-import {
- createEndpoint as createEndpointFn,
- createMiddleware,
-} from "better-call";
-
-export const iracingClientMiddleware = createMiddleware(async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- const network = axios.create({
- baseURL: "https://members-ng.iracing.com/",
- });
-
- network.interceptors.request.use((config) => {
- /**
- * Only sign requests if an access token is provided
- */
- if (accessToken) {
- config.headers.Authorization = `Bearer ${accessToken}`;
- }
-
- return config;
- });
-
- const iracing = new IRacingAPIClient(network);
-
- return {
- iracing,
- };
-});
-
-export const createEndpoint = createEndpointFn.create({
- use: [iracingClientMiddleware],
-});
diff --git a/examples/oauth-example/src/routes/oauth.ts b/examples/oauth-example/src/routes/oauth.ts
deleted file mode 100644
index 0d58d0d..0000000
--- a/examples/oauth-example/src/routes/oauth.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-import client from "@/oauth-client";
-import { BASE_URL } from "@iracing-data/oauth-client";
-import { createEndpoint } from "better-call";
-import path from "path";
-import { z } from "zod";
-
-// TODO: Add routes for session management
-
-export const oauthSignIn = createEndpoint(
- "/login",
- {
- method: "GET",
- },
- async (context) => {
- const { url } = await client.authorize();
- return context.redirect(url.toString());
- }
-);
-
-export const oauthCallback = createEndpoint(
- "/oauth/iracing/callback",
- {
- method: "GET",
- query: z.object({
- code: z.string(),
- state: z.string(),
- }),
- },
- async (context) => {
- const token = await client.callback(new URLSearchParams(context.query));
-
- /**
- * TODO: Write some sort of handler at the top-level that consumers can provide to process the token
- * before redirecting.
- */
- context.setCookie("iracing-token", token.access_token, {
- httpOnly: true,
- path: "/",
- maxAge: token.expires_in,
- });
-
- context.setHeader("X-IRACING-ACCESS-TOKEN", token.access_token);
- context.setHeader(
- "X-IRACING-ACCESS-TOKEN-EXPIRES-IN",
- token.expires_in.toString()
- );
-
- if (token.scope) {
- context.setHeader("X-IRACING-SCOPE", token.scope);
- }
-
- if (token.refresh_token) {
- context.setHeader("X-IRACING-REFRESH-TOKEN", token.refresh_token);
- }
-
- if (token.refresh_token_expires_in) {
- context.setHeader(
- "X-IRACING-REFRESH-TOKEN-EXPIRES-IN",
- token.refresh_token_expires_in.toString()
- );
- }
-
- return context.redirect("/");
- }
-);
-
-export const oauthSignOut = createEndpoint(
- "/logout",
- {
- method: "GET",
- },
- async (context) => {
- context.setCookie("iracing-token", "", {
- httpOnly: true,
- path: "/",
- maxAge: 0,
- });
-
- return context.redirect("/");
- }
-);
-
-export const oauthSessions = createEndpoint(
- "/oauth/sessions",
- {
- method: "GET",
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "sessions"), {
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- },
- });
- }
-);
-
-export const revokeCurrentOauthSession = createEndpoint(
- "/oauth/revoke/current",
- {
- method: "POST",
- body: z.object({
- forgetBrowser: z.boolean().optional(),
- }),
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "current"), {
- body: JSON.stringify(context.body),
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
-
-export const revokeOauthSessions = createEndpoint(
- "/oauth/revoke/current",
- {
- method: "POST",
- body: z.object({
- sessionIds: z.array(z.string()),
- }),
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "current"), {
- body: JSON.stringify({ session_ids: context.body.sessionIds.join(",") }),
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
-
-export const revokeClientOauthSessions = createEndpoint(
- "/oauth/revoke/client",
- {
- method: "POST",
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "client"), {
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
diff --git a/packages/api-router/package.json b/packages/api-router/package.json
new file mode 100644
index 0000000..e6fb8fe
--- /dev/null
+++ b/packages/api-router/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@iracing-data/api-router",
+ "version": "0.0.1-alpha.0",
+ "description": "better-call based router for the iRacing `/data` API.",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "@iracing-data/api": "workspace:*",
+ "axios": "^1.7.9",
+ "better-call": "^1.0.26",
+ "zod": "^4.1.12"
+ }
+}
\ No newline at end of file
diff --git a/packages/api-router/src/index.ts b/packages/api-router/src/index.ts
new file mode 100644
index 0000000..92a020c
--- /dev/null
+++ b/packages/api-router/src/index.ts
@@ -0,0 +1,26 @@
+import { createRouter as createRouterFn, RouterConfig } from "better-call";
+import { toNodeHandler as toNodeHandlerFn } from "better-call/node";
+import * as routes from "./routes";
+
+export interface CreateRouterOptions extends RouterConfig {}
+
+export function createRouter({ ...options }: CreateRouterOptions = {}) {
+ return createRouterFn(
+ {
+ ...routes,
+ },
+ options
+ );
+}
+
+export function createNodeHandler(options: CreateRouterOptions = {}) {
+ return toNodeHandler(createRouter(options));
+}
+
+export function toNodeHandler(router: ReturnType) {
+ return toNodeHandlerFn(router.handler);
+}
+
+export * from "./middleware";
+export { routes };
+export default createRouter;
diff --git a/packages/api-router/src/middleware.ts b/packages/api-router/src/middleware.ts
new file mode 100644
index 0000000..23f2a0d
--- /dev/null
+++ b/packages/api-router/src/middleware.ts
@@ -0,0 +1,47 @@
+import IRacingAPIClient from "@iracing-data/api";
+import axios from "axios";
+import { createMiddleware } from "better-call";
+
+export const sessionMiddleware = createMiddleware(
+ {
+ requireHeaders: true,
+ },
+ async (context) => {
+ const accessToken = context.getHeader("X-IRACING-ACCESS-TOKEN");
+
+ return {
+ accessToken,
+ };
+ }
+);
+
+/**
+ * ???: Should this handle token refreshing?
+ */
+export const iracingClientMiddleware = createMiddleware(
+ {
+ use: [sessionMiddleware],
+ },
+ async ({ context: { accessToken } }) => {
+ const network = axios.create({
+ baseURL: "https://members-ng.iracing.com/",
+ });
+
+ network.interceptors.request.use((config) => {
+ /**
+ * Only sign requests if an access token is provided
+ */
+ if (accessToken) {
+ config.headers.Authorization = `Bearer ${accessToken}`;
+ }
+
+ return config;
+ });
+
+ const iracing = new IRacingAPIClient(network);
+
+ return {
+ iracing,
+ };
+ }
+);
diff --git a/examples/oauth-example/src/routes/iracing/auth/index.ts b/packages/api-router/src/routes/auth/index.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/auth/index.ts
rename to packages/api-router/src/routes/auth/index.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/car-class.ts b/packages/api-router/src/routes/data/car-class.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/car-class.ts
rename to packages/api-router/src/routes/data/car-class.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/car.ts b/packages/api-router/src/routes/data/car.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/car.ts
rename to packages/api-router/src/routes/data/car.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/constants.ts b/packages/api-router/src/routes/data/constants.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/constants.ts
rename to packages/api-router/src/routes/data/constants.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/driver-stats.ts b/packages/api-router/src/routes/data/driver-stats.ts
similarity index 55%
rename from examples/oauth-example/src/routes/iracing/data/driver-stats.ts
rename to packages/api-router/src/routes/data/driver-stats.ts
index 57f3ff2..cb8c799 100644
--- a/examples/oauth-example/src/routes/iracing/data/driver-stats.ts
+++ b/packages/api-router/src/routes/data/driver-stats.ts
@@ -15,26 +15,6 @@ export const category = createEndpoint(
z.literal("formula_car"),
]),
}),
- // metadata: {
- // openapi: {
- // requestBody: {
- // content: {
- // "application/json": {
- // schema: {
- // type: "object",
- // properties: {
- // category: {
- // type: "string",
- // description:
- // "The category to look up for the current driver.",
- // },
- // },
- // },
- // },
- // },
- // },
- // },
- // },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.driverStats.category(query);
diff --git a/examples/oauth-example/src/routes/iracing/data/hosted.ts b/packages/api-router/src/routes/data/hosted.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/hosted.ts
rename to packages/api-router/src/routes/data/hosted.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/index.ts b/packages/api-router/src/routes/data/index.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/index.ts
rename to packages/api-router/src/routes/data/index.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/league.ts b/packages/api-router/src/routes/data/league.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/league.ts
rename to packages/api-router/src/routes/data/league.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/lookup.ts b/packages/api-router/src/routes/data/lookup.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/lookup.ts
rename to packages/api-router/src/routes/data/lookup.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/member.ts b/packages/api-router/src/routes/data/member.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/member.ts
rename to packages/api-router/src/routes/data/member.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/season.ts b/packages/api-router/src/routes/data/season.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/season.ts
rename to packages/api-router/src/routes/data/season.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/series.ts b/packages/api-router/src/routes/data/series.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/series.ts
rename to packages/api-router/src/routes/data/series.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/stats.ts b/packages/api-router/src/routes/data/stats.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/stats.ts
rename to packages/api-router/src/routes/data/stats.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/team.ts b/packages/api-router/src/routes/data/team.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/team.ts
rename to packages/api-router/src/routes/data/team.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/time-attack.ts b/packages/api-router/src/routes/data/time-attack.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/time-attack.ts
rename to packages/api-router/src/routes/data/time-attack.ts
diff --git a/examples/oauth-example/src/routes/iracing/data/track.ts b/packages/api-router/src/routes/data/track.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/data/track.ts
rename to packages/api-router/src/routes/data/track.ts
diff --git a/examples/oauth-example/src/routes/iracing/index.ts b/packages/api-router/src/routes/index.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/index.ts
rename to packages/api-router/src/routes/index.ts
diff --git a/examples/oauth-example/src/routes/iracing/schema.ts b/packages/api-router/src/routes/schema.ts
similarity index 100%
rename from examples/oauth-example/src/routes/iracing/schema.ts
rename to packages/api-router/src/routes/schema.ts
diff --git a/packages/api-router/src/routes/utils.ts b/packages/api-router/src/routes/utils.ts
new file mode 100644
index 0000000..d3a254f
--- /dev/null
+++ b/packages/api-router/src/routes/utils.ts
@@ -0,0 +1,6 @@
+import { createEndpoint as createEndpointFn } from "better-call";
+import { iracingClientMiddleware } from "../middleware";
+
+export const createEndpoint = createEndpointFn.create({
+ use: [iracingClientMiddleware],
+});
diff --git a/packages/api-router/tsconfig.build.json b/packages/api-router/tsconfig.build.json
new file mode 100644
index 0000000..24068a8
--- /dev/null
+++ b/packages/api-router/tsconfig.build.json
@@ -0,0 +1,11 @@
+{
+ "extends": "../../tsconfig/node.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "noUnusedLocals": true,
+ "module": "nodenext",
+ "moduleResolution": "nodenext"
+ },
+ "exclude": ["node_modules", "dist", "scripts"]
+}
diff --git a/packages/api-router/tsconfig.json b/packages/api-router/tsconfig.json
new file mode 100644
index 0000000..5455dae
--- /dev/null
+++ b/packages/api-router/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "include": [],
+ "references": [{ "path": "./tsconfig.build.json" }],
+ "compilerOptions": {
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
From 243d641f286bb6853b9a7882fe87ca0edb773bac Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Sun, 9 Nov 2025 09:45:30 -0500
Subject: [PATCH 02/28] Put logging file back
---
examples/race-events/{ => src}/logging.ts | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename examples/race-events/{ => src}/logging.ts (100%)
diff --git a/examples/race-events/logging.ts b/examples/race-events/src/logging.ts
similarity index 100%
rename from examples/race-events/logging.ts
rename to examples/race-events/src/logging.ts
From f5f71258b332130f17077c329e0ef6a8213d93d9 Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 14:22:05 -0500
Subject: [PATCH 03/28] Add api-schema and openapi generation
---
packages/api-client/openapi/openapi.json | 4147 +++++++++++++++++
packages/api-client/openapitools.json | 7 +
packages/api-client/package.json | 12 +
packages/api-router/package.json | 1 +
packages/api-router/src/routes/auth/index.ts | 15 +-
.../api-router/src/routes/data/car-class.ts | 43 +-
packages/api-router/src/routes/data/car.ts | 30 +
.../api-router/src/routes/data/constants.ts | 60 +-
.../src/routes/data/driver-stats.ts | 16 +
packages/api-router/src/routes/data/hosted.ts | 36 +-
packages/api-router/src/routes/data/league.ts | 144 +
packages/api-router/src/routes/data/lookup.ts | 85 +-
packages/api-router/src/routes/data/member.ts | 68 +-
packages/api-router/src/routes/data/season.ts | 32 +
packages/api-router/src/routes/data/series.ts | 124 +-
packages/api-router/src/routes/data/stats.ts | 236 +-
packages/api-router/src/routes/data/team.ts | 32 +
.../api-router/src/routes/data/time-attack.ts | 15 +
packages/api-router/src/routes/data/track.ts | 30 +
packages/api-router/src/routes/schema.ts | 59 -
packages/api-schema/package.json | 13 +
packages/api-schema/src/index.ts | 1 +
packages/api-schema/src/schema.ts | 1009 ++++
packages/api-schema/tsconfig.build.json | 11 +
packages/api-schema/tsconfig.json | 9 +
.../helpers/api-schema-to-openapi/README.md | 11 +
.../api-schema-to-openapi/package.json | 21 +
.../helpers/api-schema-to-openapi/src/cli.ts | 24 +
.../api-schema-to-openapi/src/index.ts | 1778 +++++++
.../api-schema-to-openapi/tsconfig.build.json | 14 +
.../api-schema-to-openapi/tsconfig.json | 9 +
31 files changed, 8012 insertions(+), 80 deletions(-)
create mode 100644 packages/api-client/openapi/openapi.json
create mode 100644 packages/api-client/openapitools.json
create mode 100644 packages/api-client/package.json
delete mode 100644 packages/api-router/src/routes/schema.ts
create mode 100644 packages/api-schema/package.json
create mode 100644 packages/api-schema/src/index.ts
create mode 100644 packages/api-schema/src/schema.ts
create mode 100644 packages/api-schema/tsconfig.build.json
create mode 100644 packages/api-schema/tsconfig.json
create mode 100644 packages/helpers/api-schema-to-openapi/README.md
create mode 100644 packages/helpers/api-schema-to-openapi/package.json
create mode 100644 packages/helpers/api-schema-to-openapi/src/cli.ts
create mode 100644 packages/helpers/api-schema-to-openapi/src/index.ts
create mode 100644 packages/helpers/api-schema-to-openapi/tsconfig.build.json
create mode 100644 packages/helpers/api-schema-to-openapi/tsconfig.json
diff --git a/packages/api-client/openapi/openapi.json b/packages/api-client/openapi/openapi.json
new file mode 100644
index 0000000..2629116
--- /dev/null
+++ b/packages/api-client/openapi/openapi.json
@@ -0,0 +1,4147 @@
+{
+ "openapi": "3.1.1",
+ "info": {
+ "title": "iRacing `/data` API",
+ "version": "0.0.1"
+ },
+ "servers": [
+ {
+ "url": "https://members-ng.iracing.com/"
+ }
+ ],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
+ "tags": [
+ {
+ "name": "doc",
+ "description": "A documentation endpoint."
+ },
+ {
+ "name": "car",
+ "description": "Car service endpoint."
+ },
+ {
+ "name": "carclass",
+ "description": "Car class service endpoint."
+ },
+ {
+ "name": "constants",
+ "description": "Constants service endpoint."
+ },
+ {
+ "name": "driver_stats",
+ "description": "Driver stats service endpoint."
+ },
+ {
+ "name": "hosted",
+ "description": "Hosted service endpoint."
+ },
+ {
+ "name": "league",
+ "description": "League service endpoint"
+ },
+ {
+ "name": "lookup",
+ "description": "Lookup endpoints for static reference data (countries, licenses, drivers, etc.)"
+ },
+ {
+ "name": "member",
+ "description": "Member profile and related endpoints (profile, awards, participation credits)."
+ },
+ {
+ "name": "results",
+ "description": "Race and session result endpoints (lap data, event logs, season results)."
+ },
+ {
+ "name": "season",
+ "description": "Season-related endpoints (season lists, race guides, schedules)."
+ },
+ {
+ "name": "series",
+ "description": "Series endpoints (series metadata, seasons, assets)."
+ },
+ {
+ "name": "stats",
+ "description": "Statistical endpoints and summaries for members and seasons."
+ },
+ {
+ "name": "team",
+ "description": "Team endpoints (team details, membership)."
+ },
+ {
+ "name": "time_attack",
+ "description": "Time attack specific endpoints and member season results."
+ },
+ {
+ "name": "track",
+ "description": "Track metadata and asset endpoints."
+ }
+ ],
+ "paths": {
+ "/data/doc": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/carclass": {
+ "get": {
+ "tags": [
+ "doc",
+ "carclass"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/carclass/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/car": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/car/assets": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/car/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/constants": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/constants/categories": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/constants/divisions": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/constants/event_types": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/oval": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/sports_car": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/formula_car": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/road": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/dirt_oval": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/driver_stats_by_category/dirt_road": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/hosted": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/hosted/combined_sessions": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/hosted/sessions": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/cust_league_sessions": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/directory": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/get_points_systems": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/membership": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/roster": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/seasons": {
+ "get": {
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/season_standings": {
+ "get": {
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/league/season_sessions": {
+ "get": {
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup/countries": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup/drivers": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup/flairs": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/lookup/licenses": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/awards": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/award_instances": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/chart_data": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/info": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/participation_credits": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/member/profile": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/event_log": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/lap_chart_data": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/lap_data": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/search_hosted": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/search_series": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/results/season_results": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/season": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/season/list": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/season/race_guide": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/season/spectator_subsessionids": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/season/spectator_subsessionids_detail": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/assets": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/get": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/past_seasons": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/seasons": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/season_list": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/season_schedule": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/series/stats_series": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_bests": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_career": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_division": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_recap": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_recent_races": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_summary": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/member_yearly": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_driver_standings": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_supersession_standings": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_team_standings": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_tt_standings": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_tt_results": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/season_qualify_results": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/stats/world_records": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/team": {
+ "get": {
+ "tags": [
+ "doc"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/team/get": {
+ "get": {
+ "tags": [
+ "doc",
+ "team"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/team/membership": {
+ "get": {
+ "tags": [
+ "doc",
+ "team"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/time_attack": {
+ "get": {
+ "tags": [
+ "doc",
+ "time_attack"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/time_attack/member_season_results": {
+ "get": {
+ "tags": [
+ "doc",
+ "time_attack"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/track": {
+ "get": {
+ "tags": [
+ "doc",
+ "track"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/track/assets": {
+ "get": {
+ "tags": [
+ "doc",
+ "track"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/doc/track/get": {
+ "get": {
+ "tags": [
+ "doc",
+ "track"
+ ],
+ "responses": {
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ }
+ }
+ }
+ },
+ "/data/carclass/get": {
+ "get": {
+ "operationId": "getCarClass",
+ "summary": "Gets car classes.",
+ "tags": [
+ "carclass"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/car/assets": {
+ "get": {
+ "description": "image paths are relative to https://images-static.iracing.com/",
+ "tags": [
+ "car"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/car/get": {
+ "get": {
+ "tags": [
+ "car"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/constants/categories": {
+ "get": {
+ "description": "Constant; returned directly as an array of objects",
+ "tags": [
+ "constants"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/constants/divisions": {
+ "get": {
+ "description": "Constant; returned directly as an array of objects",
+ "tags": [
+ "constants"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/constants/event_types": {
+ "get": {
+ "description": "Constant; returned directly as an array of objects",
+ "tags": [
+ "constants"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/driver_stats_by_category/{category}": {
+ "get": {
+ "tags": [
+ "driver_stats"
+ ],
+ "parameters": [
+ {
+ "in": "path",
+ "name": "category",
+ "schema": {
+ "$ref": "#/components/schemas/iracingCategory"
+ },
+ "required": true,
+ "description": "Racing category."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/hosted/combined_sessions": {
+ "get": {
+ "description": "Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.",
+ "tags": [
+ "hosted"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "package_id",
+ "schema": {
+ "description": "If set, return only sessions using this car or track package ID.",
+ "type": "number"
+ },
+ "description": "If set, return only sessions using this car or track package ID."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/hosted/sessions": {
+ "get": {
+ "description": "Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.",
+ "tags": [
+ "hosted"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/cust_league_sessions": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "mine",
+ "schema": {
+ "description": "If true, return only sessions created by this user.",
+ "type": "boolean"
+ },
+ "description": "If true, return only sessions created by this user."
+ },
+ {
+ "in": "query",
+ "name": "package_id",
+ "schema": {
+ "description": "If set, return only sessions using this car or track package ID.",
+ "type": "number"
+ },
+ "description": "If set, return only sessions using this car or track package ID."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/directory": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "search",
+ "schema": {
+ "description": "Will search against league name, description, owner, and league ID.",
+ "type": "string"
+ },
+ "description": "Will search against league name, description, owner, and league ID."
+ },
+ {
+ "in": "query",
+ "name": "tag",
+ "schema": {
+ "description": "One or more tags, comma-separated.",
+ "type": "string"
+ },
+ "description": "One or more tags, comma-separated."
+ },
+ {
+ "in": "query",
+ "name": "restrict_to_member",
+ "schema": {
+ "description": "If true include only leagues for which customer is a member.",
+ "type": "boolean"
+ },
+ "description": "If true include only leagues for which customer is a member."
+ },
+ {
+ "in": "query",
+ "name": "restrict_to_recruiting",
+ "schema": {
+ "description": "If true include only leagues which are recruiting.",
+ "type": "boolean"
+ },
+ "description": "If true include only leagues which are recruiting."
+ },
+ {
+ "in": "query",
+ "name": "restrict_to_friends",
+ "schema": {
+ "description": "If true include only leagues owned by a friend.",
+ "type": "boolean"
+ },
+ "description": "If true include only leagues owned by a friend."
+ },
+ {
+ "in": "query",
+ "name": "restrict_to_watched",
+ "schema": {
+ "description": "If true include only leagues owned by a watched member.",
+ "type": "boolean"
+ },
+ "description": "If true include only leagues owned by a watched member."
+ },
+ {
+ "in": "query",
+ "name": "minimum_roster_count",
+ "schema": {
+ "description": "If set include leagues with at least this number of members.",
+ "type": "number"
+ },
+ "description": "If set include leagues with at least this number of members."
+ },
+ {
+ "in": "query",
+ "name": "maximum_roster_count",
+ "schema": {
+ "description": "If set include leagues with no more than this number of members.",
+ "type": "number"
+ },
+ "description": "If set include leagues with no more than this number of members."
+ },
+ {
+ "in": "query",
+ "name": "lowerbound",
+ "schema": {
+ "description": "First row of results to return. Defaults to 1.",
+ "type": "number"
+ },
+ "description": "First row of results to return. Defaults to 1."
+ },
+ {
+ "in": "query",
+ "name": "upperbound",
+ "schema": {
+ "description": "Last row of results to return. Defaults to lowerbound + 39.",
+ "type": "number"
+ },
+ "description": "Last row of results to return. Defaults to lowerbound + 39."
+ },
+ {
+ "in": "query",
+ "name": "sort",
+ "schema": {
+ "description": "One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.",
+ "type": "string"
+ },
+ "description": "One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance."
+ },
+ {
+ "in": "query",
+ "name": "order",
+ "schema": {
+ "description": "One of asc or desc. Defaults to asc.",
+ "type": "string"
+ },
+ "description": "One of asc or desc. Defaults to asc."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/get": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "include_licenses",
+ "schema": {
+ "description": "For faster responses, only request when necessary.",
+ "type": "boolean"
+ },
+ "description": "For faster responses, only request when necessary."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/get_points_systems": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "description": "If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.",
+ "type": "number"
+ },
+ "description": "If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/membership": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned."
+ },
+ {
+ "in": "query",
+ "name": "include_league",
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/roster": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "include_licenses",
+ "schema": {
+ "description": "For faster responses, only request when necessary.",
+ "type": "boolean"
+ },
+ "description": "For faster responses, only request when necessary."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/seasons": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "retired",
+ "schema": {
+ "description": "If true include seasons which are no longer active.",
+ "type": "boolean"
+ },
+ "description": "If true include seasons which are no longer active."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/season_standings": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "in": "query",
+ "name": "car_id",
+ "schema": {
+ "description": "If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.",
+ "type": "number"
+ },
+ "description": "If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/league/season_sessions": {
+ "get": {
+ "tags": [
+ "league"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "results_only",
+ "schema": {
+ "description": "If true include only sessions for which results are available.",
+ "type": "boolean"
+ },
+ "description": "If true include only sessions for which results are available."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/lookup/countries": {
+ "get": {
+ "tags": [
+ "lookup"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/lookup/flairs": {
+ "get": {
+ "tags": [
+ "lookup"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/lookup/licenses": {
+ "get": {
+ "tags": [
+ "lookup"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/lookup/drivers": {
+ "get": {
+ "tags": [
+ "lookup"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "search_term",
+ "schema": {
+ "description": "A cust_id or partial name for which to search.",
+ "type": "string"
+ },
+ "required": true,
+ "description": "A cust_id or partial name for which to search."
+ },
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "description": "Narrow the search to the roster of the given league.",
+ "type": "number"
+ },
+ "description": "Narrow the search to the roster of the given league."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/lookup/get": {
+ "get": {
+ "tags": [
+ "lookup"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/awards": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/award_instances": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ },
+ {
+ "in": "query",
+ "name": "award_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/chart_data": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ },
+ {
+ "in": "query",
+ "name": "category_id",
+ "schema": {
+ "description": "1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road",
+ "type": "number"
+ },
+ "required": true,
+ "description": "1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road"
+ },
+ {
+ "in": "query",
+ "name": "chart_type",
+ "schema": {
+ "description": "1 - iRating; 2 - TT Rating; 3 - License/SR",
+ "$ref": "#/components/schemas/iracingChartType"
+ },
+ "required": true,
+ "description": "1 - iRating; 2 - TT Rating; 3 - License/SR"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/get": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_ids",
+ "schema": {
+ "description": "?cust_ids=2,3,4",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "required": true,
+ "description": "?cust_ids=2,3,4"
+ },
+ {
+ "in": "query",
+ "name": "include_licenses",
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/info": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/participation_credits": {
+ "get": {
+ "tags": [
+ "member"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/member/profile": {
+ "get": {
+ "operationId": "getProfile",
+ "summary": "Gets a requested user's profile.",
+ "tags": [
+ "member"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/get": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "subsession_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "include_licenses",
+ "schema": {
+ "type": "boolean"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/event_log": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "subsession_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "simsession_number",
+ "schema": {
+ "description": "The main event is 0; the preceding event is -1, and so on.",
+ "type": "number"
+ },
+ "required": true,
+ "description": "The main event is 0; the preceding event is -1, and so on."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/lap_chart_data": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "subsession_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "simsession_number",
+ "schema": {
+ "description": "The main event is 0; the preceding event is -1, and so on.",
+ "type": "number"
+ },
+ "required": true,
+ "description": "The main event is 0; the preceding event is -1, and so on."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/lap_data": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "subsession_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "simsession_number",
+ "schema": {
+ "description": "The main event is 0; the preceding event is -1, and so on.",
+ "type": "number"
+ },
+ "required": true,
+ "description": "The main event is 0; the preceding event is -1, and so on."
+ },
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included."
+ },
+ {
+ "in": "query",
+ "name": "team_id",
+ "schema": {
+ "description": "Required if the subsession was a team event.",
+ "type": "number"
+ },
+ "description": "Required if the subsession was a team event."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/search_hosted": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "start_range_begin",
+ "schema": {
+ "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
+ },
+ {
+ "in": "query",
+ "name": "start_range_end",
+ "schema": {
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."
+ },
+ {
+ "in": "query",
+ "name": "finish_range_begin",
+ "schema": {
+ "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
+ },
+ {
+ "in": "query",
+ "name": "finish_range_end",
+ "schema": {
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."
+ },
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "The participant's customer ID. Ignored if team_id is supplied.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "The participant's customer ID. Ignored if team_id is supplied."
+ },
+ {
+ "in": "query",
+ "name": "team_id",
+ "schema": {
+ "description": "The team ID to search for. Takes priority over cust_id if both are supplied.",
+ "type": "number"
+ },
+ "description": "The team ID to search for. Takes priority over cust_id if both are supplied."
+ },
+ {
+ "in": "query",
+ "name": "host_cust_id",
+ "schema": {
+ "description": "The host's customer ID.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "The host's customer ID."
+ },
+ {
+ "in": "query",
+ "name": "session_name",
+ "schema": {
+ "description": "Part or all of the session's name.",
+ "type": "string"
+ },
+ "description": "Part or all of the session's name."
+ },
+ {
+ "in": "query",
+ "name": "league_id",
+ "schema": {
+ "description": "Include only results for the league with this ID.",
+ "type": "number"
+ },
+ "description": "Include only results for the league with this ID."
+ },
+ {
+ "in": "query",
+ "name": "league_season_id",
+ "schema": {
+ "description": "Include only results for the league season with this ID.",
+ "type": "number"
+ },
+ "description": "Include only results for the league season with this ID."
+ },
+ {
+ "in": "query",
+ "name": "car_id",
+ "schema": {
+ "description": "One of the cars used by the session.",
+ "type": "number"
+ },
+ "description": "One of the cars used by the session."
+ },
+ {
+ "in": "query",
+ "name": "track_id",
+ "schema": {
+ "description": "The ID of the track used by the session.",
+ "type": "number"
+ },
+ "description": "The ID of the track used by the session."
+ },
+ {
+ "in": "query",
+ "name": "category_ids",
+ "schema": {
+ "description": "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "description": "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/search_series": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_year",
+ "schema": {
+ "description": "Required when using season_quarter.",
+ "type": "number"
+ },
+ "description": "Required when using season_quarter."
+ },
+ {
+ "in": "query",
+ "name": "season_quarter",
+ "schema": {
+ "description": "Required when using season_year.",
+ "type": "number"
+ },
+ "description": "Required when using season_year."
+ },
+ {
+ "in": "query",
+ "name": "start_range_begin",
+ "schema": {
+ "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
+ },
+ {
+ "in": "query",
+ "name": "start_range_end",
+ "schema": {
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."
+ },
+ {
+ "in": "query",
+ "name": "finish_range_begin",
+ "schema": {
+ "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
+ },
+ {
+ "in": "query",
+ "name": "finish_range_end",
+ "schema": {
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ },
+ "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."
+ },
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Include only sessions in which this customer participated. Ignored if team_id is supplied.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Include only sessions in which this customer participated. Ignored if team_id is supplied."
+ },
+ {
+ "in": "query",
+ "name": "team_id",
+ "schema": {
+ "description": "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.",
+ "type": "number"
+ },
+ "description": "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied."
+ },
+ {
+ "in": "query",
+ "name": "series_id",
+ "schema": {
+ "description": "Include only sessions for series with this ID.",
+ "type": "number"
+ },
+ "description": "Include only sessions for series with this ID."
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "Include only sessions with this race week number.",
+ "type": "number"
+ },
+ "description": "Include only sessions with this race week number."
+ },
+ {
+ "in": "query",
+ "name": "official_only",
+ "schema": {
+ "description": "If true, include only sessions earning championship points. Defaults to all.",
+ "type": "boolean"
+ },
+ "description": "If true, include only sessions earning championship points. Defaults to all."
+ },
+ {
+ "in": "query",
+ "name": "event_types",
+ "schema": {
+ "description": "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "description": "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5"
+ },
+ {
+ "in": "query",
+ "name": "category_ids",
+ "schema": {
+ "description": "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "description": "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/results/season_results": {
+ "get": {
+ "tags": [
+ "results"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "event_type",
+ "schema": {
+ "description": "Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race",
+ "$ref": "#/components/schemas/iracingEventType"
+ },
+ "description": "Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race"
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "description": "The first race week of a season is 0."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/season/list": {
+ "get": {
+ "tags": [
+ "season"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_year",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "season_quarter",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/season/race_guide": {
+ "get": {
+ "tags": [
+ "season"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "from",
+ "schema": {
+ "description": "ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.",
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
+ },
+ "description": "ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time."
+ },
+ {
+ "in": "query",
+ "name": "include_end_after_from",
+ "schema": {
+ "description": "Include sessions which start before 'from' but end after.",
+ "type": "boolean"
+ },
+ "description": "Include sessions which start before 'from' but end after."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/assets": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/get": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/past_seasons": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "series_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/seasons": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "include_series",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "season_year",
+ "schema": {
+ "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ "type": "number"
+ },
+ "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."
+ },
+ {
+ "in": "query",
+ "name": "season_quarter",
+ "schema": {
+ "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ "type": "number"
+ },
+ "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/season_list": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "include_series",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "season_year",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "in": "query",
+ "name": "season_quarter",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/season_schedule": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/series/stats_series": {
+ "get": {
+ "tags": [
+ "series"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_bests": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ },
+ {
+ "in": "query",
+ "name": "car_id",
+ "schema": {
+ "description": "First call should exclude car_id; use cars_driven list in return for subsequent calls.",
+ "type": "number"
+ },
+ "description": "First call should exclude car_id; use cars_driven list in return for subsequent calls."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_career": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_division": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "event_type",
+ "schema": {
+ "description": "The event type code for the division type: 4 - Time Trial; 5 - Race",
+ "anyOf": [
+ {
+ "description": "Time trial",
+ "type": "number",
+ "const": 4
+ },
+ {
+ "description": "Race",
+ "type": "number",
+ "const": 5
+ }
+ ]
+ },
+ "required": true,
+ "description": "The event type code for the division type: 4 - Time Trial; 5 - Race"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_recap": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ },
+ {
+ "in": "query",
+ "name": "year",
+ "schema": {
+ "description": "Season year; if not supplied the current calendar year (UTC) is used.",
+ "anyOf": [
+ {
+ "type": "number",
+ "const": 1
+ },
+ {
+ "type": "number",
+ "const": 2
+ },
+ {
+ "type": "number",
+ "const": 3
+ },
+ {
+ "type": "number",
+ "const": 4
+ }
+ ]
+ },
+ "description": "Season year; if not supplied the current calendar year (UTC) is used."
+ },
+ {
+ "in": "query",
+ "name": "season",
+ "schema": {
+ "description": "Season (quarter) within the year; if not supplied the recap will be for the entire year.",
+ "type": "number"
+ },
+ "description": "Season (quarter) within the year; if not supplied the recap will be for the entire year."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_recent_races": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_summary": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/member_yearly": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "cust_id",
+ "schema": {
+ "description": "Defaults to the authenticated member.",
+ "$ref": "#/components/schemas/customerId"
+ },
+ "description": "Defaults to the authenticated member."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_driver_standings": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "division",
+ "schema": {
+ "$ref": "#/components/schemas/iracingDivision"
+ }
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "description": "The first race week of a season is 0."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_supersession_standings": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "division",
+ "schema": {
+ "$ref": "#/components/schemas/iracingDivision"
+ }
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "description": "The first race week of a season is 0."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_team_standings": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "description": "The first race week of a season is 0."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_time_trial_standings": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "division",
+ "schema": {
+ "$ref": "#/components/schemas/iracingDivision"
+ }
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "description": "The first race week of a season is 0."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_time_trial_results": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "required": true,
+ "description": "The first race week of a season is 0."
+ },
+ {
+ "in": "query",
+ "name": "division",
+ "schema": {
+ "$ref": "#/components/schemas/iracingDivision"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/season_qualify_results": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "car_class_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "race_week_num",
+ "schema": {
+ "description": "The first race week of a season is 0.",
+ "type": "number"
+ },
+ "required": true,
+ "description": "The first race week of a season is 0."
+ },
+ {
+ "in": "query",
+ "name": "division",
+ "schema": {
+ "$ref": "#/components/schemas/iracingDivision"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/stats/world_records": {
+ "get": {
+ "tags": [
+ "stats"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "car_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "track_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "season_year",
+ "schema": {
+ "description": "Limit best times to a given year.",
+ "type": "number"
+ },
+ "description": "Limit best times to a given year."
+ },
+ {
+ "in": "query",
+ "name": "season_quarter",
+ "schema": {
+ "description": "Limit best times to a given quarter; only applicable when year is used.",
+ "type": "number"
+ },
+ "description": "Limit best times to a given quarter; only applicable when year is used."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/team/get": {
+ "get": {
+ "tags": [
+ "team"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "team_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "include_licenses",
+ "schema": {
+ "description": "For faster responses, only request when necessary.",
+ "type": "boolean"
+ },
+ "description": "For faster responses, only request when necessary."
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/team/membership": {
+ "get": {
+ "tags": [
+ "team"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/time_attack/member_season_results": {
+ "get": {
+ "tags": [
+ "time_attack"
+ ],
+ "parameters": [
+ {
+ "in": "query",
+ "name": "ta_comp_season_id",
+ "schema": {
+ "type": "number"
+ },
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/track/assets": {
+ "get": {
+ "tags": [
+ "track"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ },
+ "/data/track/get": {
+ "get": {
+ "tags": [
+ "track"
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/components/responses/Success"
+ },
+ "401": {
+ "$ref": "#/components/responses/Unauthorized"
+ },
+ "429": {
+ "$ref": "#/components/responses/RateLimited"
+ },
+ "503": {
+ "$ref": "#/components/responses/Maintenance"
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "iracingCategory": {
+ "description": "Racing category.",
+ "anyOf": [
+ {
+ "description": "Oval discipline",
+ "type": "string",
+ "const": "oval"
+ },
+ {
+ "description": "Road discipline. Legacy, use `sports_car` or `formula_car` instead.",
+ "type": "string",
+ "const": "road"
+ },
+ {
+ "description": "Dirt road discipline.",
+ "type": "string",
+ "const": "dirt_road"
+ },
+ {
+ "description": "Dirt oval discipline.",
+ "type": "string",
+ "const": "dirt_oval"
+ },
+ {
+ "description": "Sports car discipline.",
+ "type": "string",
+ "const": "sports_car"
+ },
+ {
+ "description": "Formula car discipline.",
+ "type": "string",
+ "const": "formula_car"
+ }
+ ]
+ },
+ "customerId": {
+ "description": "Numeric ID of a customer on iRacing.",
+ "type": "number"
+ },
+ "iracingChartType": {
+ "description": "iRacing Chart Type",
+ "anyOf": [
+ {
+ "description": "iRating",
+ "type": "number",
+ "const": 1
+ },
+ {
+ "description": "Time trial rating",
+ "type": "number",
+ "const": 2
+ },
+ {
+ "description": "License rating",
+ "type": "number",
+ "const": 3
+ }
+ ]
+ },
+ "iracingEventType": {
+ "description": "iRacing Event Type",
+ "anyOf": [
+ {
+ "description": "Practice",
+ "type": "number",
+ "const": 2
+ },
+ {
+ "description": "Qualifying",
+ "type": "number",
+ "const": 3
+ },
+ {
+ "description": "Time trial",
+ "type": "number",
+ "const": 4
+ },
+ {
+ "description": "Race",
+ "type": "number",
+ "const": 5
+ }
+ ]
+ },
+ "iracingDivision": {
+ "description": "iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.",
+ "anyOf": [
+ {
+ "description": "Division 1",
+ "type": "number",
+ "const": 0
+ },
+ {
+ "description": "Division 2",
+ "type": "number",
+ "const": 1
+ },
+ {
+ "description": "Division 3",
+ "type": "number",
+ "const": 2
+ },
+ {
+ "description": "Division 4",
+ "type": "number",
+ "const": 3
+ },
+ {
+ "description": "Division 5",
+ "type": "number",
+ "const": 4
+ },
+ {
+ "description": "Division 6",
+ "type": "number",
+ "const": 5
+ },
+ {
+ "description": "Division 7",
+ "type": "number",
+ "const": 6
+ },
+ {
+ "description": "Division 8",
+ "type": "number",
+ "const": 7
+ },
+ {
+ "description": "Division 9",
+ "type": "number",
+ "const": 8
+ },
+ {
+ "description": "Division 10",
+ "type": "number",
+ "const": 9
+ },
+ {
+ "description": "Rookie",
+ "type": "number",
+ "const": 10
+ }
+ ]
+ },
+ "iracingAPIResponse": {
+ "description": "Response from iRacing `/data` API.",
+ "type": "object",
+ "properties": {
+ "link": {
+ "description": "A link to the cached data",
+ "type": "string",
+ "format": "uri"
+ },
+ "expires": {
+ "type": "string",
+ "format": "date-time",
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
+ }
+ },
+ "required": [
+ "link",
+ "expires"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "headers": {
+ "x-ratelimit-limit": {
+ "required": true,
+ "description": "The current total rate limit.",
+ "schema": {
+ "title": "Rate limit limit",
+ "description": "The current total rate limit.",
+ "type": "number"
+ }
+ },
+ "x-ratelimit-remaining": {
+ "required": true,
+ "description": "How much of the rate limit you have remaining.",
+ "schema": {
+ "title": "Rate limit remaining",
+ "description": "How much of the rate limit you have remaining.",
+ "type": "number"
+ }
+ },
+ "x-ratelimit-reset": {
+ "required": true,
+ "description": "When the rate limit will reset in epoch timestamp.",
+ "schema": {
+ "title": "Rate limit reset",
+ "description": "When the rate limit will reset in epoch timestamp.",
+ "type": "string"
+ }
+ }
+ },
+ "responses": {
+ "Success": {
+ "description": "Success",
+ "headers": {
+ "x-ratelimit-limit": {
+ "$ref": "#/components/headers/x-ratelimit-limit"
+ },
+ "x-ratelimit-remaining": {
+ "$ref": "#/components/headers/x-ratelimit-remaining"
+ },
+ "x-ratelimit-reset": {
+ "$ref": "#/components/headers/x-ratelimit-reset"
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/iracingAPIResponse"
+ }
+ }
+ }
+ },
+ "RateLimited": {
+ "description": "Rate limited",
+ "headers": {
+ "x-ratelimit-limit": {
+ "$ref": "#/components/headers/x-ratelimit-limit"
+ },
+ "x-ratelimit-remaining": {
+ "$ref": "#/components/headers/x-ratelimit-remaining"
+ },
+ "x-ratelimit-reset": {
+ "$ref": "#/components/headers/x-ratelimit-reset"
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "Maintenance": {
+ "description": "Maintenance",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "note": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "additionalProperties": false
+ }
+ }
+ }
+ },
+ "Unauthorized": {
+ "description": "Access token is missing or invalid.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "additionalProperties": false
+ }
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "bearerAuth": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT",
+ "description": "JWT Authentication"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/api-client/openapitools.json b/packages/api-client/openapitools.json
new file mode 100644
index 0000000..f052220
--- /dev/null
+++ b/packages/api-client/openapitools.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
+ "spaces": 2,
+ "generator-cli": {
+ "version": "7.17.0"
+ }
+}
diff --git a/packages/api-client/package.json b/packages/api-client/package.json
new file mode 100644
index 0000000..7047e04
--- /dev/null
+++ b/packages/api-client/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@iracing-data/api-client",
+ "version": "0.0.0-alpha.0",
+ "main": "dist/index.js",
+ "scripts": {
+ "codegen:openapi": "iracing-api-openapi -o ./openapi"
+ },
+ "devDependencies": {
+ "@iracing-data/api-schema-to-openapi": "workspace:*",
+ "@openapitools/openapi-generator-cli": "^2.25.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/api-router/package.json b/packages/api-router/package.json
index e6fb8fe..8d06574 100644
--- a/packages/api-router/package.json
+++ b/packages/api-router/package.json
@@ -8,6 +8,7 @@
},
"dependencies": {
"@iracing-data/api": "workspace:*",
+ "@iracing-data/api-schema": "workspace:*",
"axios": "^1.7.9",
"better-call": "^1.0.26",
"zod": "^4.1.12"
diff --git a/packages/api-router/src/routes/auth/index.ts b/packages/api-router/src/routes/auth/index.ts
index 6a8e0a9..8b1b513 100644
--- a/packages/api-router/src/routes/auth/index.ts
+++ b/packages/api-router/src/routes/auth/index.ts
@@ -1,14 +1,21 @@
import { createEndpoint } from "../utils";
import { z } from "zod";
+const AuthInputSchema = z.object({
+ username: z.string(),
+ hashedPassword: z.string(),
+});
+
export const auth = createEndpoint(
"/auth",
{
method: "POST",
- body: z.object({
- username: z.string(),
- hashedPassword: z.string(),
- }),
+ body: AuthInputSchema,
+ metadata: {
+ $Infer: {
+ body: {} as z.infer,
+ },
+ },
},
async ({ context: { iracing }, body }) => {
return iracing.api.auth.auth(body);
diff --git a/packages/api-router/src/routes/data/car-class.ts b/packages/api-router/src/routes/data/car-class.ts
index 39c7f4f..b04b1b8 100644
--- a/packages/api-router/src/routes/data/car-class.ts
+++ b/packages/api-router/src/routes/data/car-class.ts
@@ -2,7 +2,48 @@ import { createEndpoint } from "../utils";
export const getCarClass = createEndpoint(
"/data/carclass/get",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ responses: {
+ "200": {
+ description: "Success",
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: {
+ link: {
+ type: "url",
+ description: "A link to the cached data response.",
+ },
+ expires: {
+ type: "number",
+ description:
+ "Duration in seconds until the data is considered stale.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.carClass.get();
return response.data;
diff --git a/packages/api-router/src/routes/data/car.ts b/packages/api-router/src/routes/data/car.ts
index ee6b37d..f7806c1 100644
--- a/packages/api-router/src/routes/data/car.ts
+++ b/packages/api-router/src/routes/data/car.ts
@@ -5,6 +5,21 @@ export const carAssets = createEndpoint(
{
method: "GET",
requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.car.assets();
@@ -17,6 +32,21 @@ export const getCar = createEndpoint(
{
method: "GET",
requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.car.get();
diff --git a/packages/api-router/src/routes/data/constants.ts b/packages/api-router/src/routes/data/constants.ts
index b07ed7b..904c5be 100644
--- a/packages/api-router/src/routes/data/constants.ts
+++ b/packages/api-router/src/routes/data/constants.ts
@@ -2,7 +2,25 @@ import { createEndpoint } from "../utils";
export const categories = createEndpoint(
"/data/constants/categories",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.constants.categories();
return response.data;
@@ -11,7 +29,25 @@ export const categories = createEndpoint(
export const divisions = createEndpoint(
"/data/constants/divisions",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.constants.divisions();
return response.data;
@@ -20,7 +56,25 @@ export const divisions = createEndpoint(
export const eventTypes = createEndpoint(
"/data/constants/event_types",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.constants.eventTypes();
return response.data;
diff --git a/packages/api-router/src/routes/data/driver-stats.ts b/packages/api-router/src/routes/data/driver-stats.ts
index cb8c799..35d094b 100644
--- a/packages/api-router/src/routes/data/driver-stats.ts
+++ b/packages/api-router/src/routes/data/driver-stats.ts
@@ -5,6 +5,7 @@ export const category = createEndpoint(
"/data/driver_stats_by_category/:category",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
category: z.union([
z.literal("oval"),
@@ -15,6 +16,21 @@ export const category = createEndpoint(
z.literal("formula_car"),
]),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.driverStats.category(query);
diff --git a/packages/api-router/src/routes/data/hosted.ts b/packages/api-router/src/routes/data/hosted.ts
index 0bb49f8..0401461 100644
--- a/packages/api-router/src/routes/data/hosted.ts
+++ b/packages/api-router/src/routes/data/hosted.ts
@@ -5,9 +5,25 @@ export const combinedSessions = createEndpoint(
"/data/hosted/combined_sessions",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
packageId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.hosted.combinedSessions(query);
@@ -17,7 +33,25 @@ export const combinedSessions = createEndpoint(
export const sessions = createEndpoint(
"/data/hosted/sessions",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.hosted.sessions();
return response.data;
diff --git a/packages/api-router/src/routes/data/league.ts b/packages/api-router/src/routes/data/league.ts
index ae56c8e..c2b9192 100644
--- a/packages/api-router/src/routes/data/league.ts
+++ b/packages/api-router/src/routes/data/league.ts
@@ -5,6 +5,7 @@ export const directory = createEndpoint(
"/data/league/directory",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
search: z.string().optional(),
tag: z.string().optional(),
@@ -25,6 +26,21 @@ export const directory = createEndpoint(
.optional(),
order: z.union([z.literal("asc"), z.literal("desc")]),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.directory(query);
@@ -35,10 +51,26 @@ export const customerLeagueSessions = createEndpoint(
"/data/league/cust_league_sessions",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
mine: z.boolean().optional(),
packageId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.customerLeagueSessions(query);
@@ -49,10 +81,26 @@ export const getLeague = createEndpoint(
"/data/league/get",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
includeLicenses: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.get(query);
@@ -63,10 +111,26 @@ export const getPointsSystem = createEndpoint(
"/data/league/get_points_systems",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
seasonId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.getPointsSystems(query);
@@ -77,10 +141,26 @@ export const leagueMembership = createEndpoint(
"/data/league/membership",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
includeLeague: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.membership(query);
@@ -91,10 +171,26 @@ export const leagueRoster = createEndpoint(
"/data/league/roster",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
includeLicenses: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.roster(query);
@@ -105,10 +201,26 @@ export const leagueSeasons = createEndpoint(
"/data/league/seasons",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
retired: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.seasons(query);
@@ -119,12 +231,28 @@ export const seasonStandings = createEndpoint(
"/data/league/season_standings",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
seasonId: z.number(),
carClassId: z.number().optional(),
carId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.seasonStandings(query);
@@ -135,11 +263,27 @@ export const seasonSessions = createEndpoint(
"/data/league/season_sessions",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
leagueId: z.number(),
seasonId: z.number(),
resultsOnly: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
return iracing.api.data.league.seasonSessions(query);
diff --git a/packages/api-router/src/routes/data/lookup.ts b/packages/api-router/src/routes/data/lookup.ts
index 82696a0..409e922 100644
--- a/packages/api-router/src/routes/data/lookup.ts
+++ b/packages/api-router/src/routes/data/lookup.ts
@@ -5,6 +5,22 @@ export const countries = createEndpoint(
"/data/lookup/countries",
{
method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.lookup.countries();
@@ -16,6 +32,22 @@ export const flairs = createEndpoint(
"/data/lookup/flairs",
{
method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.lookup.flairs();
@@ -27,6 +59,22 @@ export const licenses = createEndpoint(
"/data/lookup/licenses",
{
method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.lookup.licenses();
@@ -38,10 +86,26 @@ export const drivers = createEndpoint(
"/data/lookup/drivers",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
searchTerm: z.string(),
leagueId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.lookup.drivers(query);
@@ -51,7 +115,26 @@ export const drivers = createEndpoint(
export const getLookup = createEndpoint(
"/data/lookup/get",
- { method: "GET", query: z.record(z.string(), z.string()) },
+ {
+ method: "GET",
+ requireHeaders: true,
+ query: z.record(z.string(), z.string()),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.lookup.get(query);
return response.data;
diff --git a/packages/api-router/src/routes/data/member.ts b/packages/api-router/src/routes/data/member.ts
index a654122..e038d94 100644
--- a/packages/api-router/src/routes/data/member.ts
+++ b/packages/api-router/src/routes/data/member.ts
@@ -9,6 +9,21 @@ export const awards = createEndpoint(
query: z.object({
customerId: z.coerce.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.member.awards(query);
@@ -25,6 +40,21 @@ export const awardInstances = createEndpoint(
customerId: z.coerce.number().optional(),
awardId: z.number(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.member.awardInstances(query);
@@ -58,7 +88,25 @@ export const awardInstances = createEndpoint(
export const info = createEndpoint(
"/data/member/info",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.member.info();
return response.data;
@@ -66,7 +114,7 @@ export const info = createEndpoint(
);
export const participationCredits = createEndpoint(
- "/data/member/info",
+ "/data/member/participation_credits",
{ method: "GET" },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.member.participationCredits();
@@ -78,9 +126,25 @@ export const profile = createEndpoint(
"/data/member/profile",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.coerce.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.member.profile(query);
diff --git a/packages/api-router/src/routes/data/season.ts b/packages/api-router/src/routes/data/season.ts
index 551c693..1d431d0 100644
--- a/packages/api-router/src/routes/data/season.ts
+++ b/packages/api-router/src/routes/data/season.ts
@@ -5,10 +5,26 @@ export const list = createEndpoint(
"/data/season/list",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonYear: z.number(),
seasonQuarter: z.number(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.season.list(query);
@@ -20,10 +36,26 @@ export const raceGuide = createEndpoint(
"/data/season/race_guide",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
from: z.date(),
includeEndAfterFrom: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.season.raceGuide(query);
diff --git a/packages/api-router/src/routes/data/series.ts b/packages/api-router/src/routes/data/series.ts
index de320cd..95464f5 100644
--- a/packages/api-router/src/routes/data/series.ts
+++ b/packages/api-router/src/routes/data/series.ts
@@ -3,7 +3,25 @@ import { z } from "zod";
export const seriesAssets = createEndpoint(
"/data/series/assets",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.series.assets();
return response.data;
@@ -12,7 +30,25 @@ export const seriesAssets = createEndpoint(
export const getSeries = createEndpoint(
"/data/series/get",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.series.get();
return response.data;
@@ -23,9 +59,25 @@ export const pastSeasons = createEndpoint(
"/data/series/past_seasons",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seriesId: z.number(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.series.pastSeasons(query);
@@ -37,11 +89,27 @@ export const seasons = createEndpoint(
"/data/series/seasons",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
includeSeries: z.boolean().optional(),
seasonYear: z.number().optional(),
seasonQuarter: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.series.seasons(query);
@@ -53,11 +121,27 @@ export const seasonList = createEndpoint(
"/data/series/season_list",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
includeSeries: z.boolean().optional(),
seasonYear: z.number().optional(),
seasonQuarter: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.series.seasonList(query);
@@ -69,9 +153,25 @@ export const seasonSchedule = createEndpoint(
"/data/series/season_schedule",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.series.seasonSchedule(query);
@@ -81,7 +181,25 @@ export const seasonSchedule = createEndpoint(
export const statsSeries = createEndpoint(
"/data/series/stats_series",
- { method: "GET" },
+ {
+ method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
+ },
async ({ context: { iracing } }) => {
const response = await iracing.api.data.series.statsSeries();
return response.data;
diff --git a/packages/api-router/src/routes/data/stats.ts b/packages/api-router/src/routes/data/stats.ts
index 0e8d3bd..e10f3e3 100644
--- a/packages/api-router/src/routes/data/stats.ts
+++ b/packages/api-router/src/routes/data/stats.ts
@@ -1,4 +1,4 @@
-import { DivisionSchema } from "../schema";
+import { IRacingDivisionSchema } from "@iracing-data/api-schema";
import { createEndpoint } from "../utils";
import { z } from "zod";
@@ -6,10 +6,26 @@ export const memberBests = createEndpoint(
"/data/stats/member_bests",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
carId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberBests(query);
@@ -21,9 +37,25 @@ export const memberCareer = createEndpoint(
"/data/stats/member_career",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberCareer(query);
@@ -35,10 +67,26 @@ export const memberDivision = createEndpoint(
"/data/stats/member_division",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
eventType: z.union([z.literal(4), z.literal(5)]),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberDivision(query);
@@ -50,11 +98,27 @@ export const memberRecap = createEndpoint(
"/data/stats/member_recap",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
year: z.number().optional(),
season: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberRecap(query);
@@ -66,9 +130,25 @@ export const memberRecentRaces = createEndpoint(
"/data/stats/member_recent_races",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberRecentRaces(query);
@@ -80,9 +160,25 @@ export const memberSummary = createEndpoint(
"/data/stats/member_summary",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberSummary(query);
@@ -94,9 +190,25 @@ export const memberYearly = createEndpoint(
"/data/stats/member_yearly",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
customerId: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.memberYearly(query);
@@ -108,12 +220,28 @@ export const seasonDriverStandings = createEndpoint(
"/data/stats/season_driver_standings",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number().optional(),
- division: DivisionSchema.optional(),
+ division: IRacingDivisionSchema.optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.seasonDriverStandings(query);
@@ -125,12 +253,28 @@ export const seasonSupersessionStandings = createEndpoint(
"/data/stats/season_supersession_standings",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number().optional(),
- division: DivisionSchema.optional(),
+ division: IRacingDivisionSchema.optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response =
@@ -143,11 +287,27 @@ export const seasonTeamStandings = createEndpoint(
"/data/stats/season_team_standings",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.seasonTeamStandings(query);
@@ -159,12 +319,28 @@ export const seasonTimeTrialStandings = createEndpoint(
"/data/stats/season_time_trial_standings",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number().optional(),
- division: DivisionSchema.optional(),
+ division: IRacingDivisionSchema.optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response =
@@ -177,12 +353,28 @@ export const seasonTimeTrialResults = createEndpoint(
"/data/stats/season_time_trial_results",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number(),
- division: DivisionSchema.optional(),
+ division: IRacingDivisionSchema.optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.seasonTimeTrialResults(query);
@@ -194,12 +386,28 @@ export const seasonQualifyResults = createEndpoint(
"/data/stats/season_qualify_results",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
seasonId: z.number(),
carClassId: z.number(),
raceWeekNumber: z.number(),
- division: DivisionSchema.optional(),
+ division: IRacingDivisionSchema.optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.seasonQualifyResults(query);
@@ -211,12 +419,28 @@ export const worldRecords = createEndpoint(
"/data/stats/world_records",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
carId: z.number(),
trackId: z.number(),
seasonYear: z.number().optional(),
seasonQuarter: z.number().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.stats.worldRecords(query);
diff --git a/packages/api-router/src/routes/data/team.ts b/packages/api-router/src/routes/data/team.ts
index c76d156..875f864 100644
--- a/packages/api-router/src/routes/data/team.ts
+++ b/packages/api-router/src/routes/data/team.ts
@@ -5,10 +5,26 @@ export const getTeam = createEndpoint(
"/data/team/get",
{
method: "GET",
+ requireHeaders: true,
query: z.object({
teamId: z.number(),
includeLicenses: z.boolean().optional(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response = await iracing.api.data.team.get(query);
@@ -20,6 +36,22 @@ export const membership = createEndpoint(
"/data/team/membership",
{
method: "GET",
+ requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.team.membership();
diff --git a/packages/api-router/src/routes/data/time-attack.ts b/packages/api-router/src/routes/data/time-attack.ts
index 86c42ee..e55e80e 100644
--- a/packages/api-router/src/routes/data/time-attack.ts
+++ b/packages/api-router/src/routes/data/time-attack.ts
@@ -9,6 +9,21 @@ export const memberSeasonResults = createEndpoint(
query: z.object({
seasonId: z.number(),
}),
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing }, query }) => {
const response =
diff --git a/packages/api-router/src/routes/data/track.ts b/packages/api-router/src/routes/data/track.ts
index 1f3c75f..72cbe6d 100644
--- a/packages/api-router/src/routes/data/track.ts
+++ b/packages/api-router/src/routes/data/track.ts
@@ -5,6 +5,21 @@ export const trackAssets = createEndpoint(
{
method: "GET",
requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.track.assets();
@@ -17,6 +32,21 @@ export const getTrack = createEndpoint(
{
method: "GET",
requireHeaders: true,
+ metadata: {
+ openapi: {
+ parameters: [
+ {
+ in: "header",
+ name: "X-IRACING-ACCESS-TOKEN",
+ schema: {
+ type: "string",
+ },
+ required: true,
+ description: "The JWT token to sign the request with.",
+ },
+ ],
+ },
+ },
},
async ({ context: { iracing } }) => {
const response = await iracing.api.data.track.get();
diff --git a/packages/api-router/src/routes/schema.ts b/packages/api-router/src/routes/schema.ts
deleted file mode 100644
index cca0dff..0000000
--- a/packages/api-router/src/routes/schema.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { z } from "zod";
-
-export const DivisionSchema = z.union([
- z.literal(0),
- z.literal(1),
- z.literal(2),
- z.literal(3),
- z.literal(4),
- z.literal(5),
- z.literal(6),
- z.literal(7),
- z.literal(8),
- z.literal(9),
- z.literal(10),
-]);
-
-export type Division = z.infer;
-
-export const CategoryIdEnum = {
- Oval: 1,
- Road: 2,
- DirtOval: 3,
- DirtRoad: 4,
-} as const;
-
-export type CategoryIdKey = keyof typeof CategoryIdEnum;
-export type CategoryIdValue = (typeof CategoryIdEnum)[CategoryIdKey];
-
-export const CategoryIdKeySchema = z.enum(
- Object.keys(CategoryIdEnum) as [CategoryIdKey, ...CategoryIdKey[]]
-);
-
-export const CategoryIdValueSchema = z.union(
- (Object.values(CategoryIdEnum) as readonly number[]).map((n) =>
- z.literal(n)
- ) as [z.ZodLiteral, ...z.ZodLiteral[]]
-);
-
-export const CategoryIdEnumSchema = z.enum(CategoryIdEnum);
-export type CategoryId = z.infer;
-
-export const ChartTypeEnum = {
- iRating: 1,
- TTRating: 2,
- LicenseRating: 3,
-} as const;
-
-export type ChartTypeKey = keyof typeof ChartTypeEnum;
-export type ChartTypeValue = (typeof ChartTypeEnum)[ChartTypeKey];
-
-export const ChartTypeKeySchema = z.enum(
- Object.keys(ChartTypeEnum) as [ChartTypeKey, ...ChartTypeKey[]]
-);
-
-export const ChartTypeValueSchema = z.union(
- (Object.values(ChartTypeEnum) as readonly number[]).map((n) =>
- z.literal(n)
- ) as [z.ZodLiteral, ...z.ZodLiteral[]]
-);
diff --git a/packages/api-schema/package.json b/packages/api-schema/package.json
new file mode 100644
index 0000000..dab1b23
--- /dev/null
+++ b/packages/api-schema/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "@iracing-data/api-schema",
+ "version": "0.0.1-alpha.0",
+ "description": "Zod schema for iRacing `/data` API.",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "zod": "^4.1.12",
+ "zod-openapi": "^5.4.3"
+ }
+}
\ No newline at end of file
diff --git a/packages/api-schema/src/index.ts b/packages/api-schema/src/index.ts
new file mode 100644
index 0000000..686fbd9
--- /dev/null
+++ b/packages/api-schema/src/index.ts
@@ -0,0 +1 @@
+export * from "./schema";
diff --git a/packages/api-schema/src/schema.ts b/packages/api-schema/src/schema.ts
new file mode 100644
index 0000000..5bb3cf9
--- /dev/null
+++ b/packages/api-schema/src/schema.ts
@@ -0,0 +1,1009 @@
+import { z } from "zod";
+
+export const IRacingAccessTokenSchema = z.jwt().meta({
+ description: "JWT ID Token from iRacing OAuth Service",
+ id: "iracingAccessToken",
+});
+
+export const IRacingRateLimitLimitHeaderKey = "x-ratelimit-limit";
+export const IRacingRateLimitLimitHeaderSchema = z.number().meta({
+ title: "Rate limit limit",
+ description: "The current total rate limit.",
+ header: {
+ id: IRacingRateLimitLimitHeaderKey,
+ },
+});
+
+export const IRacingRateLimitRemainingHeaderKey = "x-ratelimit-remaining";
+export const IRacingRateLimitRemainingHeaderSchema = z.number().meta({
+ title: "Rate limit remaining",
+ description: "How much of the rate limit you have remaining.",
+ header: {
+ id: IRacingRateLimitRemainingHeaderKey,
+ },
+});
+
+export const IRacingRateLimitResetHeaderKey = "x-ratelimit-reset";
+export const IRacingRateLimitResetHeaderSchema = z
+ .codec(z.int().min(0), z.date(), {
+ decode: (millis) => new Date(millis),
+ encode: (date) => date.getTime(),
+ })
+ .meta({
+ title: "Rate limit reset",
+ description: "When the rate limit will reset in epoch timestamp.",
+ header: {
+ id: IRacingRateLimitResetHeaderKey,
+ },
+ });
+
+export const IRacingRateLimitHeadersSchema = z
+ .object({
+ [IRacingRateLimitLimitHeaderKey]: IRacingRateLimitLimitHeaderSchema,
+ [IRacingRateLimitRemainingHeaderKey]: IRacingRateLimitRemainingHeaderSchema,
+ [IRacingRateLimitResetHeaderKey]: IRacingRateLimitResetHeaderSchema,
+ })
+ .meta({
+ title: "Rate limit headers",
+ description:
+ "Headers included with every request, indicating current rate limit status for the requesting session.",
+ });
+
+export const IRacingErrorResponseSchema = z.object({
+ error: z.string(),
+ message: z.string().optional(),
+});
+
+export const IRacingMaintenanceResponseSchema = z.object({
+ ...IRacingErrorResponseSchema.shape,
+ note: z.string().optional(),
+});
+
+export const IRacingCustomerIdSchema = z.coerce.number().meta({
+ description: "Numeric ID of a customer on iRacing.",
+ id: "customerId",
+});
+
+export const IRacingEventTypePracticeSchema = z
+ .literal(2)
+ .meta({ description: "Practice" });
+
+export const IRacingEventTypeQualifyingSchema = z
+ .literal(3)
+ .meta({ description: "Qualifying" });
+
+export const IRacingEventTypeTimeTrialSchema = z
+ .literal(4)
+ .meta({ description: "Time trial" });
+
+export const IRacingEventTypeRaceSchema = z
+ .literal(5)
+ .meta({ description: "Race" });
+
+export const IRacingEventTypeSchema = z
+ .union([
+ IRacingEventTypePracticeSchema,
+ IRacingEventTypeQualifyingSchema,
+ IRacingEventTypeTimeTrialSchema,
+ IRacingEventTypeRaceSchema,
+ ])
+ .meta({
+ id: "iracingEventType",
+ description: "iRacing Event Type",
+ });
+
+export const IRacingChartTypeSchema = z
+ .union([
+ z.literal(1).meta({ description: "iRating" }),
+ z.literal(2).meta({ description: "Time trial rating" }),
+ z.literal(3).meta({ description: "License rating" }),
+ ])
+ .meta({
+ id: "iracingChartType",
+ description: "iRacing Chart Type",
+ });
+
+export const IRacingCategorySchema = z
+ .union([
+ z.literal("oval").meta({ description: "Oval discipline" }),
+ z.literal("road").meta({
+ description:
+ "Road discipline. Legacy, use `sports_car` or `formula_car` instead.",
+ }),
+ z.literal("dirt_road").meta({ description: "Dirt road discipline." }),
+ z.literal("dirt_oval").meta({ description: "Dirt oval discipline." }),
+ z.literal("sports_car").meta({ description: "Sports car discipline." }),
+ z.literal("formula_car").meta({ description: "Formula car discipline." }),
+ ])
+ .meta({
+ description: "Racing category.",
+ id: "iracingCategory",
+ });
+
+export const IRacingDivisionSchema = z
+ .union([
+ z.literal(0).meta({
+ description: "Division 1",
+ }),
+ z.literal(1).meta({
+ description: "Division 2",
+ }),
+ z.literal(2).meta({
+ description: "Division 3",
+ }),
+ z.literal(3).meta({
+ description: "Division 4",
+ }),
+ z.literal(4).meta({
+ description: "Division 5",
+ }),
+ z.literal(5).meta({
+ description: "Division 6",
+ }),
+ z.literal(6).meta({
+ description: "Division 7",
+ }),
+ z.literal(7).meta({
+ description: "Division 8",
+ }),
+ z.literal(8).meta({
+ description: "Division 9",
+ }),
+ z.literal(9).meta({
+ description: "Division 10",
+ }),
+ z.literal(10).meta({
+ description: "Rookie",
+ }),
+ ])
+ .meta({
+ description:
+ "iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.",
+ id: "iracingDivision",
+ });
+
+export const IRacingAPIResponseSchema = z
+ .object({
+ link: z.url().meta({ description: "A link to the cached data" }),
+ expires: z.iso.datetime(),
+ })
+ .meta({
+ description: "Response from iRacing `/data` API.",
+ id: "iracingAPIResponse",
+ });
+
+export const IRacingDriverStatsByCategoryPathSchema = z.object({
+ category: IRacingCategorySchema,
+});
+
+export const IRacingHostedCombinedSessionsParametersSchema = z.object({
+ package_id: z.number().optional().meta({
+ description:
+ "If set, return only sessions using this car or track package ID.",
+ }),
+});
+
+export const IRacingLeagueCustomerSessionsParametersSchema = z.object({
+ mine: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "If true, return only sessions created by this user.",
+ }),
+ package_id: z.number().optional().meta({
+ description:
+ "If set, return only sessions using this car or track package ID.",
+ }),
+});
+
+export const IRacingLeagueDirectoryParametersSchema = z.object({
+ search: z.string().optional().meta({
+ description:
+ "Will search against league name, description, owner, and league ID.",
+ }),
+ tag: z
+ .string()
+ .optional()
+ .meta({ description: "One or more tags, comma-separated." }),
+ restrict_to_member: z
+ .boolean()
+ .optional()
+ .meta({
+ description:
+ "If true include only leagues for which customer is a member.",
+ }),
+ restrict_to_recruiting: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "If true include only leagues which are recruiting.",
+ }),
+ restrict_to_friends: z
+ .boolean()
+ .optional()
+ .meta({ description: "If true include only leagues owned by a friend." }),
+ restrict_to_watched: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "If true include only leagues owned by a watched member.",
+ }),
+ minimum_roster_count: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "If set include leagues with at least this number of members.",
+ }),
+ maximum_roster_count: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "If set include leagues with no more than this number of members.",
+ }),
+ lowerbound: z
+ .number()
+ .optional()
+ .meta({ description: "First row of results to return. Defaults to 1." }),
+ upperbound: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "Last row of results to return. Defaults to lowerbound + 39.",
+ }),
+ sort: z.string().optional().meta({
+ description:
+ "One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.",
+ }),
+ order: z
+ .string()
+ .optional()
+ .meta({ description: "One of asc or desc. Defaults to asc." }),
+});
+
+export const IRacingLeagueGetParametersSchema = z.object({
+ league_id: z.number(),
+ include_licenses: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "For faster responses, only request when necessary.",
+ }),
+});
+
+export const IRacingLeagueGetPointsSystemsParametersSchema = z.object({
+ league_id: z.number(),
+ season_id: z.number().optional().meta({
+ description:
+ "If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.",
+ }),
+});
+
+export const IRacingLeagueMembershipParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description:
+ "If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.",
+ }),
+ include_league: z.boolean().optional(),
+});
+
+export const IRacingLeagueRosterParametersSchema = z.object({
+ league_id: z.number(),
+ include_licenses: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "For faster responses, only request when necessary.",
+ }),
+});
+
+export const IRacingLeagueSeasonsParametersSchema = z.object({
+ league_id: z.number(),
+ retired: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "If true include seasons which are no longer active.",
+ }),
+});
+
+export const IRacingLeagueSeasonStandingsParametersSchema = z.object({
+ league_id: z.number(),
+ season_id: z.number(),
+ car_class_id: z.number().optional(),
+ car_id: z.number().optional().meta({
+ description:
+ "If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.",
+ }),
+});
+
+export const IRacingLeagueSeasonSessionsParametersSchema = z.object({
+ league_id: z.number(),
+ season_id: z.number(),
+ results_only: z
+ .boolean()
+ .optional()
+ .meta({
+ description:
+ "If true include only sessions for which results are available.",
+ }),
+});
+
+export const IRacingLookupDriversParametersSchema = z.object({
+ search_term: z
+ .string()
+ .meta({ description: "A cust_id or partial name for which to search." }),
+ league_id: z
+ .number()
+ .optional()
+ .meta({
+ description: "Narrow the search to the roster of the given league.",
+ }),
+});
+
+export const IRacingMemberAwardsParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingMemberAwardInstancesParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+ award_id: z.number(),
+});
+
+export const IRacingMemberChartDataParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+ category_id: z
+ .number()
+ .meta({ description: "1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road" }),
+ chart_type: IRacingChartTypeSchema.meta({
+ description: "1 - iRating; 2 - TT Rating; 3 - License/SR",
+ }),
+});
+
+export const IRacingMemberGetParametersSchema = z.object({
+ cust_ids: z.array(z.number()).meta({ description: "?cust_ids=2,3,4" }),
+ include_licenses: z.boolean().optional(),
+});
+
+export const IRacingMemberProfileParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingResultsGetParametersSchema = z.object({
+ subsession_id: z.number(),
+ include_licenses: z.boolean().optional(),
+});
+
+export const IRacingResultsEventLogParametersSchema = z.object({
+ subsession_id: z.number(),
+ simsession_number: z
+ .number()
+ .meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
+});
+
+export const IRacingResultsLapChartDataParametersSchema = z.object({
+ subsession_id: z.number(),
+ simsession_number: z
+ .number()
+ .meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
+});
+
+export const IRacingResultsLapDataParametersSchema = z.object({
+ subsession_id: z.number(),
+ simsession_number: z
+ .number()
+ .meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description:
+ "Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.",
+ }),
+ team_id: z
+ .number()
+ .optional()
+ .meta({ description: "Required if the subsession was a team event." }),
+});
+
+export const IRacingResultsSearchHostedParametersSchema = z.object({
+ start_range_begin: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ start_range_end: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
+ }),
+ finish_range_begin: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ finish_range_end: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
+ }),
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description:
+ "The participant's customer ID. Ignored if team_id is supplied.",
+ }),
+ team_id: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "The team ID to search for. Takes priority over cust_id if both are supplied.",
+ }),
+ host_cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "The host's customer ID.",
+ }),
+ session_name: z
+ .string()
+ .optional()
+ .meta({ description: "Part or all of the session's name." }),
+ league_id: z
+ .number()
+ .optional()
+ .meta({ description: "Include only results for the league with this ID." }),
+ league_season_id: z
+ .number()
+ .optional()
+ .meta({
+ description: "Include only results for the league season with this ID.",
+ }),
+ car_id: z
+ .number()
+ .optional()
+ .meta({ description: "One of the cars used by the session." }),
+ track_id: z
+ .number()
+ .optional()
+ .meta({ description: "The ID of the track used by the session." }),
+ category_ids: z
+ .array(z.number())
+ .optional()
+ .meta({
+ description:
+ "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ }),
+});
+
+export const IRacingResultsSearchSeriesParametersSchema = z.object({
+ season_year: z
+ .number()
+ .optional()
+ .meta({ description: "Required when using season_quarter." }),
+ season_quarter: z
+ .number()
+ .optional()
+ .meta({ description: "Required when using season_year." }),
+ start_range_begin: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ start_range_end: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
+ }),
+ finish_range_begin: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ finish_range_end: z.iso
+ .datetime()
+ .optional()
+ .meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
+ }),
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description:
+ "Include only sessions in which this customer participated. Ignored if team_id is supplied.",
+ }),
+ team_id: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.",
+ }),
+ series_id: z
+ .number()
+ .optional()
+ .meta({ description: "Include only sessions for series with this ID." }),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "Include only sessions with this race week number." }),
+ official_only: z
+ .boolean()
+ .optional()
+ .meta({
+ description:
+ "If true, include only sessions earning championship points. Defaults to all.",
+ }),
+ event_types: z
+ .array(z.number())
+ .optional()
+ .meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
+ category_ids: z
+ .array(z.number())
+ .optional()
+ .meta({
+ description:
+ "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ }),
+});
+
+export const IRacingResultsSeasonResultsParametersSchema = z.object({
+ season_id: z.number(),
+ event_type: IRacingEventTypeSchema.optional().meta({
+ description:
+ "Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race",
+ }),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "The first race week of a season is 0." }),
+});
+
+export const IRacingSeasonListParametersSchema = z.object({
+ season_year: z.number(),
+ season_quarter: z.number(),
+});
+
+export const IRacingSeasonRaceGuideParametersSchema = z.object({
+ from: z.iso.datetime({ offset: true }).optional().meta({
+ description:
+ "ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.",
+ }),
+ include_end_after_from: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "Include sessions which start before 'from' but end after.",
+ }),
+});
+
+export const IRacingSeasonSpectatorSubsessionidsParametersSchema = z.object({
+ event_types: z
+ .array(IRacingEventTypeSchema)
+ .optional()
+ .meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
+});
+
+export const IRacingSeasonSpectatorSubsessionidsDetailParametersSchema =
+ z.object({
+ event_types: z
+ .array(IRacingEventTypeSchema)
+ .optional()
+ .meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
+ season_ids: z
+ .array(z.number())
+ .optional()
+ .meta({
+ description:
+ "Seasons to include in the search. Defaults to all. ?season_ids=513,937",
+ }),
+ });
+
+export const IRacingSeriesPastSeasonsParametersSchema = z.object({
+ series_id: z.number(),
+});
+
+export const IRacingSeriesSeasonsParametersSchema = z.object({
+ include_series: z.boolean().optional(),
+ season_year: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ }),
+ season_quarter: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ }),
+});
+
+export const IRacingSeriesSeasonListParametersSchema = z.object({
+ include_series: z.boolean().optional(),
+ season_year: z.number().optional(),
+ season_quarter: z.number().optional(),
+});
+
+export const IRacingSeriesSeasonScheduleParametersSchema = z.object({
+ season_id: z.number(),
+});
+
+export const IRacingStatsMemberBestsParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+ car_id: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "First call should exclude car_id; use cars_driven list in return for subsequent calls.",
+ }),
+});
+
+export const IRacingStatsMemberCareerParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingStatsMemberDivisionParametersSchema = z.object({
+ season_id: z.number(),
+ event_type: z
+ .union([IRacingEventTypeTimeTrialSchema, IRacingEventTypeRaceSchema])
+ .meta({
+ description:
+ "The event type code for the division type: 4 - Time Trial; 5 - Race",
+ }),
+});
+
+export const IRacingStatsMemberRecapParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+ year: z
+ .union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)])
+ .optional()
+ .meta({
+ description:
+ "Season year; if not supplied the current calendar year (UTC) is used.",
+ }),
+ season: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "Season (quarter) within the year; if not supplied the recap will be for the entire year.",
+ }),
+});
+
+export const IRacingStatsMemberRecentRacesParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingStatsMemberSummaryParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingStatsMemberYearlyParametersSchema = z.object({
+ cust_id: IRacingCustomerIdSchema.optional().meta({
+ description: "Defaults to the authenticated member.",
+ }),
+});
+
+export const IRacingStatsSeasonDriverStandingsParametersSchema = z.object({
+ season_id: z.number(),
+ car_class_id: z.number(),
+ division: IRacingDivisionSchema.optional(),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "The first race week of a season is 0." }),
+});
+
+export const IRacingStatsSeasonSupersessionStandingsParametersSchema = z.object(
+ {
+ season_id: z.number(),
+ car_class_id: z.number(),
+ division: IRacingDivisionSchema.optional(),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "The first race week of a season is 0." }),
+ }
+);
+
+export const IRacingStatsSeasonTeamStandingsParametersSchema = z.object({
+ season_id: z.number(),
+ car_class_id: z.number(),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "The first race week of a season is 0." }),
+});
+
+export const IRacingStatsSeasonTTStandingsParametersSchema = z.object({
+ season_id: z.number(),
+ car_class_id: z.number(),
+ division: IRacingDivisionSchema.optional(),
+ race_week_num: z
+ .number()
+ .optional()
+ .meta({ description: "The first race week of a season is 0." }),
+});
+
+export const IRacingStatsSeasonTTResultsParametersSchema = z.object({
+ season_id: z.number(),
+ car_class_id: z.number(),
+ race_week_num: z
+ .number()
+ .meta({ description: "The first race week of a season is 0." }),
+ division: IRacingDivisionSchema.optional(),
+});
+
+export const IRacingStatsSeasonQualifyResultsParametersSchema = z.object({
+ season_id: z.number(),
+ car_class_id: z.number(),
+ race_week_num: z
+ .number()
+ .meta({ description: "The first race week of a season is 0." }),
+ division: IRacingDivisionSchema.optional(),
+});
+
+export const IRacingStatsWorldRecordsParametersSchema = z.object({
+ car_id: z.number(),
+ track_id: z.number(),
+ season_year: z
+ .number()
+ .optional()
+ .meta({ description: "Limit best times to a given year." }),
+ season_quarter: z
+ .number()
+ .optional()
+ .meta({
+ description:
+ "Limit best times to a given quarter; only applicable when year is used.",
+ }),
+});
+
+export const IRacingTeamGetParametersSchema = z.object({
+ team_id: z.number(),
+ include_licenses: z
+ .boolean()
+ .optional()
+ .meta({
+ description: "For faster responses, only request when necessary.",
+ }),
+});
+
+export const IRacingTimeAttackMemberSeasonResultsParametersSchema = z.object({
+ ta_comp_season_id: z.number(),
+});
+
+/**
+ * Types
+ */
+
+export type IRacingAccessToken = z.infer;
+export type IRacingRateLimitLimitHeader = z.infer<
+ typeof IRacingRateLimitLimitHeaderSchema
+>;
+export type IRacingRateLimitRemainingHeader = z.infer<
+ typeof IRacingRateLimitRemainingHeaderSchema
+>;
+export type IRacingRateLimitResetHeader = z.infer<
+ typeof IRacingRateLimitResetHeaderSchema
+>;
+export type IRacingRateLimitHeaders = z.infer<
+ typeof IRacingRateLimitHeadersSchema
+>;
+export type IRacingCustomerId = z.infer;
+export type IRacingCategory = z.infer;
+export type IRacingDivision = z.infer;
+export type IRacingAPIResponse = z.infer;
+
+export type IRacingErrorResponse = z.infer;
+export type IRacingMaintenanceResponse = z.infer<
+ typeof IRacingMaintenanceResponseSchema
+>;
+
+export type IRacingEventTypePractice = z.infer<
+ typeof IRacingEventTypePracticeSchema
+>;
+export type IRacingEventTypeQualifying = z.infer<
+ typeof IRacingEventTypeQualifyingSchema
+>;
+export type IRacingEventTypeTimeTrial = z.infer<
+ typeof IRacingEventTypeTimeTrialSchema
+>;
+export type IRacingEventTypeRace = z.infer;
+export type IRacingEventType = z.infer;
+
+export type IRacingChartType = z.infer;
+
+export type IRacingHostedCombinedSessionsParameters = z.infer<
+ typeof IRacingHostedCombinedSessionsParametersSchema
+>;
+export type IRacingLeagueCustomerSessionsParameters = z.infer<
+ typeof IRacingLeagueCustomerSessionsParametersSchema
+>;
+export type IRacingLeagueDirectoryParameters = z.infer<
+ typeof IRacingLeagueDirectoryParametersSchema
+>;
+export type IRacingLeagueGetParameters = z.infer<
+ typeof IRacingLeagueGetParametersSchema
+>;
+export type IRacingLeagueGetPointsSystemsParameters = z.infer<
+ typeof IRacingLeagueGetPointsSystemsParametersSchema
+>;
+export type IRacingLeagueMembershipParameters = z.infer<
+ typeof IRacingLeagueMembershipParametersSchema
+>;
+export type IRacingLeagueRosterParameters = z.infer<
+ typeof IRacingLeagueRosterParametersSchema
+>;
+export type IRacingLeagueSeasonsParameters = z.infer<
+ typeof IRacingLeagueSeasonsParametersSchema
+>;
+export type IRacingLeagueSeasonStandingsParameters = z.infer<
+ typeof IRacingLeagueSeasonStandingsParametersSchema
+>;
+export type IRacingLeagueSeasonSessionsParameters = z.infer<
+ typeof IRacingLeagueSeasonSessionsParametersSchema
+>;
+
+export type IRacingLookupDriversParameters = z.infer<
+ typeof IRacingLookupDriversParametersSchema
+>;
+
+export type IRacingMemberAwardsParameters = z.infer<
+ typeof IRacingMemberAwardsParametersSchema
+>;
+export type IRacingMemberAwardInstancesParameters = z.infer<
+ typeof IRacingMemberAwardInstancesParametersSchema
+>;
+export type IRacingMemberChartDataParameters = z.infer<
+ typeof IRacingMemberChartDataParametersSchema
+>;
+export type IRacingMemberGetParameters = z.infer<
+ typeof IRacingMemberGetParametersSchema
+>;
+export type IRacingMemberProfileParameters = z.infer<
+ typeof IRacingMemberProfileParametersSchema
+>;
+
+export type IRacingResultsGetParameters = z.infer<
+ typeof IRacingResultsGetParametersSchema
+>;
+export type IRacingResultsEventLogParameters = z.infer<
+ typeof IRacingResultsEventLogParametersSchema
+>;
+export type IRacingResultsLapChartDataParameters = z.infer<
+ typeof IRacingResultsLapChartDataParametersSchema
+>;
+export type IRacingResultsLapDataParameters = z.infer<
+ typeof IRacingResultsLapDataParametersSchema
+>;
+export type IRacingResultsSearchHostedParameters = z.infer<
+ typeof IRacingResultsSearchHostedParametersSchema
+>;
+export type IRacingResultsSearchSeriesParameters = z.infer<
+ typeof IRacingResultsSearchSeriesParametersSchema
+>;
+export type IRacingResultsSeasonResultsParameters = z.infer<
+ typeof IRacingResultsSeasonResultsParametersSchema
+>;
+
+export type IRacingSeasonListParameters = z.infer<
+ typeof IRacingSeasonListParametersSchema
+>;
+export type IRacingSeasonRaceGuideParameters = z.infer<
+ typeof IRacingSeasonRaceGuideParametersSchema
+>;
+export type IRacingSeasonSpectatorSubsessionidsParameters = z.infer<
+ typeof IRacingSeasonSpectatorSubsessionidsParametersSchema
+>;
+export type IRacingSeasonSpectatorSubsessionidsDetailParameters = z.infer<
+ typeof IRacingSeasonSpectatorSubsessionidsDetailParametersSchema
+>;
+
+export type IRacingSeriesPastSeasonsParameters = z.infer<
+ typeof IRacingSeriesPastSeasonsParametersSchema
+>;
+export type IRacingSeriesSeasonsParameters = z.infer<
+ typeof IRacingSeriesSeasonsParametersSchema
+>;
+export type IRacingSeriesSeasonListParameters = z.infer<
+ typeof IRacingSeriesSeasonListParametersSchema
+>;
+export type IRacingSeriesSeasonScheduleParameters = z.infer<
+ typeof IRacingSeriesSeasonScheduleParametersSchema
+>;
+
+export type IRacingStatsMemberBestsParameters = z.infer<
+ typeof IRacingStatsMemberBestsParametersSchema
+>;
+export type IRacingStatsMemberCareerParameters = z.infer<
+ typeof IRacingStatsMemberCareerParametersSchema
+>;
+export type IRacingStatsMemberDivisionParameters = z.infer<
+ typeof IRacingStatsMemberDivisionParametersSchema
+>;
+export type IRacingStatsMemberRecapParameters = z.infer<
+ typeof IRacingStatsMemberRecapParametersSchema
+>;
+export type IRacingStatsMemberRecentRacesParameters = z.infer<
+ typeof IRacingStatsMemberRecentRacesParametersSchema
+>;
+export type IRacingStatsMemberSummaryParameters = z.infer<
+ typeof IRacingStatsMemberSummaryParametersSchema
+>;
+export type IRacingStatsMemberYearlyParameters = z.infer<
+ typeof IRacingStatsMemberYearlyParametersSchema
+>;
+export type IRacingStatsSeasonDriverStandingsParameters = z.infer<
+ typeof IRacingStatsSeasonDriverStandingsParametersSchema
+>;
+export type IRacingStatsSeasonSupersessionStandingsParameters = z.infer<
+ typeof IRacingStatsSeasonSupersessionStandingsParametersSchema
+>;
+export type IRacingStatsSeasonTeamStandingsParameters = z.infer<
+ typeof IRacingStatsSeasonTeamStandingsParametersSchema
+>;
+export type IRacingStatsSeasonTTStandingsParameters = z.infer<
+ typeof IRacingStatsSeasonTTStandingsParametersSchema
+>;
+export type IRacingStatsSeasonTTResultsParameters = z.infer<
+ typeof IRacingStatsSeasonTTResultsParametersSchema
+>;
+export type IRacingStatsSeasonQualifyResultsParameters = z.infer<
+ typeof IRacingStatsSeasonQualifyResultsParametersSchema
+>;
+export type IRacingStatsWorldRecordsParameters = z.infer<
+ typeof IRacingStatsWorldRecordsParametersSchema
+>;
+
+export type IRacingTeamGetParameters = z.infer<
+ typeof IRacingTeamGetParametersSchema
+>;
+export type IRacingTimeAttackMemberSeasonResultsParameters = z.infer<
+ typeof IRacingTimeAttackMemberSeasonResultsParametersSchema
+>;
diff --git a/packages/api-schema/tsconfig.build.json b/packages/api-schema/tsconfig.build.json
new file mode 100644
index 0000000..24068a8
--- /dev/null
+++ b/packages/api-schema/tsconfig.build.json
@@ -0,0 +1,11 @@
+{
+ "extends": "../../tsconfig/node.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "noUnusedLocals": true,
+ "module": "nodenext",
+ "moduleResolution": "nodenext"
+ },
+ "exclude": ["node_modules", "dist", "scripts"]
+}
diff --git a/packages/api-schema/tsconfig.json b/packages/api-schema/tsconfig.json
new file mode 100644
index 0000000..5455dae
--- /dev/null
+++ b/packages/api-schema/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "include": [],
+ "references": [{ "path": "./tsconfig.build.json" }],
+ "compilerOptions": {
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/packages/helpers/api-schema-to-openapi/README.md b/packages/helpers/api-schema-to-openapi/README.md
new file mode 100644
index 0000000..e9c9701
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/README.md
@@ -0,0 +1,11 @@
+# @iracing-data/api-schema-to-openapi-schema
+
+Helper function to generate OpenAPI (Swagger) spec from [iRacing API zod schema](../../api-schema/).
+
+## Installation
+
+_Coming soon_
+
+## Usage
+
+_Coming soon_
diff --git a/packages/helpers/api-schema-to-openapi/package.json b/packages/helpers/api-schema-to-openapi/package.json
new file mode 100644
index 0000000..17e71f7
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@iracing-data/api-schema-to-openapi",
+ "version": "0.0.0-alpha.0",
+ "main": "dist/index.js",
+ "typings": "dist/index.d.ts",
+ "bin": {
+ "iracing-api-openapi": "dist/cli.js"
+ },
+ "scripts": {
+ "build": "tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "@iracing-data/api-schema": "workspace:*",
+ "commander": "^14.0.2",
+ "zod": "^4.1.12",
+ "zod-openapi": "^5.4.3"
+ },
+ "devDependencies": {
+ "@commander-js/extra-typings": "^14.0.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/helpers/api-schema-to-openapi/src/cli.ts b/packages/helpers/api-schema-to-openapi/src/cli.ts
new file mode 100644
index 0000000..5024463
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/src/cli.ts
@@ -0,0 +1,24 @@
+#!/usr/bin/env node
+
+import path from "node:path";
+import { Command } from "@commander-js/extra-typings";
+import { generateOpenAPISpec } from "./";
+
+const program = new Command("iracing-api-openapi")
+ .requiredOption("-o, --output ", "Output path")
+ .option(
+ "-f, --file ",
+ "The name of the output file. Defaults to 'openapi.json'"
+ )
+ .action(async (_, command) => {
+ const { output, file = "openapi.json" } = command.optsWithGlobals();
+
+ await generateOpenAPISpec({
+ fileName: file,
+ outputDir: output,
+ });
+
+ console.log("Output schema to", path.join(output, file));
+ });
+
+program.parse();
diff --git a/packages/helpers/api-schema-to-openapi/src/index.ts b/packages/helpers/api-schema-to-openapi/src/index.ts
new file mode 100644
index 0000000..f8f1853
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/src/index.ts
@@ -0,0 +1,1778 @@
+import fs from "node:fs";
+import path from "node:path";
+import {
+ IRacingAPIResponseSchema,
+ IRacingDriverStatsByCategoryPathSchema,
+ IRacingErrorResponseSchema,
+ IRacingHostedCombinedSessionsParametersSchema,
+ IRacingLeagueCustomerSessionsParametersSchema,
+ IRacingLeagueDirectoryParametersSchema,
+ IRacingLeagueGetParametersSchema,
+ IRacingLeagueGetPointsSystemsParametersSchema,
+ IRacingLeagueMembershipParametersSchema,
+ IRacingLeagueRosterParametersSchema,
+ IRacingLeagueSeasonSessionsParametersSchema,
+ IRacingLeagueSeasonsParametersSchema,
+ IRacingLeagueSeasonStandingsParametersSchema,
+ IRacingLookupDriversParametersSchema,
+ IRacingMaintenanceResponseSchema,
+ IRacingMemberAwardInstancesParametersSchema,
+ IRacingMemberAwardsParametersSchema,
+ IRacingMemberChartDataParametersSchema,
+ IRacingMemberGetParametersSchema,
+ IRacingMemberProfileParametersSchema,
+ IRacingRateLimitHeadersSchema,
+ IRacingRateLimitLimitHeaderSchema,
+ IRacingRateLimitRemainingHeaderSchema,
+ IRacingRateLimitResetHeaderSchema,
+ IRacingResultsEventLogParametersSchema,
+ IRacingResultsGetParametersSchema,
+ IRacingResultsLapChartDataParametersSchema,
+ IRacingResultsLapDataParametersSchema,
+ IRacingResultsSearchHostedParametersSchema,
+ IRacingResultsSearchSeriesParametersSchema,
+ IRacingResultsSeasonResultsParametersSchema,
+ IRacingSeasonListParametersSchema,
+ IRacingSeasonRaceGuideParametersSchema,
+ IRacingSeriesPastSeasonsParametersSchema,
+ IRacingSeriesSeasonListParametersSchema,
+ IRacingSeriesSeasonScheduleParametersSchema,
+ IRacingSeriesSeasonsParametersSchema,
+ IRacingStatsMemberBestsParametersSchema,
+ IRacingStatsMemberCareerParametersSchema,
+ IRacingStatsMemberDivisionParametersSchema,
+ IRacingStatsMemberRecapParametersSchema,
+ IRacingStatsMemberRecentRacesParametersSchema,
+ IRacingStatsMemberSummaryParametersSchema,
+ IRacingStatsMemberYearlyParametersSchema,
+ IRacingStatsSeasonDriverStandingsParametersSchema,
+ IRacingStatsSeasonQualifyResultsParametersSchema,
+ IRacingStatsSeasonSupersessionStandingsParametersSchema,
+ IRacingStatsSeasonTeamStandingsParametersSchema,
+ IRacingStatsSeasonTTResultsParametersSchema,
+ IRacingStatsSeasonTTStandingsParametersSchema,
+ IRacingStatsWorldRecordsParametersSchema,
+ IRacingTeamGetParametersSchema,
+ IRacingTimeAttackMemberSeasonResultsParametersSchema,
+} from "@iracing-data/api-schema";
+import { createDocument } from "zod-openapi";
+
+export interface GenerateOpenAPISpecOptions {
+ outputDir?: string;
+ fileName?: string;
+}
+
+export async function generateOpenAPISpec({
+ outputDir = __dirname,
+ fileName = "openapi.json",
+}: GenerateOpenAPISpecOptions) {
+ const outputPath = path.join(outputDir, fileName);
+
+ // Create the output dir if it doesn't exist
+ if (!fs.existsSync(outputDir)) {
+ fs.mkdirSync(outputDir, { recursive: true });
+ }
+
+ const document = createDocument({
+ openapi: "3.1.1",
+ info: {
+ title: "iRacing `/data` API",
+ version: "0.0.1",
+ },
+ servers: [{ url: "https://members-ng.iracing.com/" }],
+ components: {
+ headers: {
+ rateLimitLimit: IRacingRateLimitLimitHeaderSchema,
+ rateLimitRemaining: IRacingRateLimitRemainingHeaderSchema,
+ rateLimitReset: IRacingRateLimitResetHeaderSchema,
+ },
+ responses: {
+ Success: {
+ description: "Success",
+ headers: IRacingRateLimitHeadersSchema,
+ content: {
+ "application/json": {
+ schema: IRacingAPIResponseSchema,
+ },
+ },
+ },
+ RateLimited: {
+ description: "Rate limited",
+ headers: IRacingRateLimitHeadersSchema,
+ content: {
+ "application/json": {
+ schema: IRacingErrorResponseSchema,
+ },
+ },
+ },
+ Maintenance: {
+ description: "Maintenance",
+ content: {
+ "application/json": {
+ schema: IRacingMaintenanceResponseSchema,
+ },
+ },
+ },
+ Unauthorized: {
+ description: "Access token is missing or invalid.",
+ content: {
+ "application/json": {
+ schema: IRacingErrorResponseSchema,
+ },
+ },
+ },
+ },
+ securitySchemes: {
+ bearerAuth: {
+ type: "http",
+ scheme: "bearer",
+ bearerFormat: "JWT",
+ description: "JWT Authentication",
+ },
+ },
+ },
+ security: [
+ {
+ bearerAuth: [],
+ },
+ ],
+ tags: [
+ {
+ name: "doc",
+ description: "A documentation endpoint.",
+ },
+ {
+ name: "car",
+ description: "Car service endpoint.",
+ },
+ {
+ name: "carclass",
+ description: "Car class service endpoint.",
+ },
+ { name: "constants", description: "Constants service endpoint." },
+ { name: "driver_stats", description: "Driver stats service endpoint." },
+ { name: "hosted", description: "Hosted service endpoint." },
+ { name: "league", description: "League service endpoint" },
+ {
+ name: "lookup",
+ description:
+ "Lookup endpoints for static reference data (countries, licenses, drivers, etc.)",
+ },
+ {
+ name: "member",
+ description:
+ "Member profile and related endpoints (profile, awards, participation credits).",
+ },
+ {
+ name: "results",
+ description:
+ "Race and session result endpoints (lap data, event logs, season results).",
+ },
+ {
+ name: "season",
+ description:
+ "Season-related endpoints (season lists, race guides, schedules).",
+ },
+ {
+ name: "series",
+ description: "Series endpoints (series metadata, seasons, assets).",
+ },
+ {
+ name: "stats",
+ description:
+ "Statistical endpoints and summaries for members and seasons.",
+ },
+ {
+ name: "team",
+ description: "Team endpoints (team details, membership).",
+ },
+ {
+ name: "time_attack",
+ description:
+ "Time attack specific endpoints and member season results.",
+ },
+ { name: "track", description: "Track metadata and asset endpoints." },
+ ],
+ paths: {
+ "/data/doc": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/carclass": {
+ get: {
+ tags: ["doc", "carclass"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/carclass/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/car": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/car/assets": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/car/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/constants": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/constants/categories": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/constants/divisions": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/constants/event_types": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/oval": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/sports_car": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/formula_car": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/road": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/dirt_oval": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/dirt_road": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/hosted": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/hosted/combined_sessions": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/hosted/sessions": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/cust_league_sessions": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/directory": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/get_points_systems": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/membership": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/roster": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/seasons": {
+ get: {
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/season_standings": {
+ get: {
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/league/season_sessions": {
+ get: {
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup/countries": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup/drivers": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup/flairs": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/lookup/licenses": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/awards": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/award_instances": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/chart_data": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/info": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/participation_credits": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/member/profile": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/event_log": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/lap_chart_data": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/lap_data": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/search_hosted": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/search_series": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/results/season_results": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/season": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/season/list": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/season/race_guide": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/season/spectator_subsessionids": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/season/spectator_subsessionids_detail": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/assets": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/get": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/past_seasons": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/seasons": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/season_list": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/season_schedule": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/series/stats_series": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_bests": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_career": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_division": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_recap": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_recent_races": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_summary": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/member_yearly": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_driver_standings": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_supersession_standings": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_team_standings": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_tt_standings": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_tt_results": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/season_qualify_results": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/stats/world_records": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/team": {
+ get: {
+ tags: ["doc"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/team/get": {
+ get: {
+ tags: ["doc", "team"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/team/membership": {
+ get: {
+ tags: ["doc", "team"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/time_attack": {
+ get: {
+ tags: ["doc", "time_attack"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/time_attack/member_season_results": {
+ get: {
+ tags: ["doc", "time_attack"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/track": {
+ get: {
+ tags: ["doc", "track"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/track/assets": {
+ get: {
+ tags: ["doc", "track"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/track/get": {
+ get: {
+ tags: ["doc", "track"],
+ responses: {
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/carclass/get": {
+ get: {
+ operationId: "getCarClass",
+ summary: "Gets car classes.",
+ tags: ["carclass"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/car/assets": {
+ get: {
+ description:
+ "image paths are relative to https://images-static.iracing.com/",
+ tags: ["car"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/car/get": {
+ get: {
+ tags: ["car"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/constants/categories": {
+ get: {
+ description: "Constant; returned directly as an array of objects",
+ tags: ["constants"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/constants/divisions": {
+ get: {
+ description: "Constant; returned directly as an array of objects",
+ tags: ["constants"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/constants/event_types": {
+ get: {
+ description: "Constant; returned directly as an array of objects",
+ tags: ["constants"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/driver_stats_by_category/{category}": {
+ get: {
+ requestParams: {
+ path: IRacingDriverStatsByCategoryPathSchema,
+ },
+ tags: ["driver_stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/hosted/combined_sessions": {
+ get: {
+ description:
+ "Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.",
+ requestParams: {
+ query: IRacingHostedCombinedSessionsParametersSchema,
+ },
+ tags: ["hosted"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/hosted/sessions": {
+ get: {
+ description:
+ "Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.",
+ tags: ["hosted"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/cust_league_sessions": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueCustomerSessionsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/directory": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueDirectoryParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/get": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueGetParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/get_points_systems": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueGetPointsSystemsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/membership": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueMembershipParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/roster": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueRosterParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/seasons": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueSeasonsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/season_standings": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueSeasonStandingsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/league/season_sessions": {
+ get: {
+ tags: ["league"],
+ requestParams: {
+ query: IRacingLeagueSeasonSessionsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/lookup/countries": {
+ get: {
+ tags: ["lookup"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/lookup/flairs": {
+ get: {
+ tags: ["lookup"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/lookup/licenses": {
+ get: {
+ tags: ["lookup"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/lookup/drivers": {
+ get: {
+ requestParams: {
+ query: IRacingLookupDriversParametersSchema,
+ },
+ tags: ["lookup"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/lookup/get": {
+ get: {
+ // requestParams: {
+ // query: z.record(z.string(), z.string()),
+ // },
+ tags: ["lookup"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/awards": {
+ get: {
+ requestParams: {
+ query: IRacingMemberAwardsParametersSchema,
+ },
+ tags: ["member"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/award_instances": {
+ get: {
+ requestParams: {
+ query: IRacingMemberAwardInstancesParametersSchema,
+ },
+ tags: ["member"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/chart_data": {
+ get: {
+ tags: ["member"],
+ requestParams: {
+ query: IRacingMemberChartDataParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/get": {
+ get: {
+ tags: ["member"],
+ requestParams: {
+ query: IRacingMemberGetParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/info": {
+ get: {
+ tags: ["member"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/participation_credits": {
+ get: {
+ tags: ["member"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/member/profile": {
+ get: {
+ operationId: "getProfile",
+ summary: "Gets a requested user's profile.",
+ requestParams: {
+ query: IRacingMemberProfileParametersSchema,
+ },
+ tags: ["member"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/get": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsGetParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/event_log": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsEventLogParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/lap_chart_data": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsLapChartDataParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/lap_data": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsLapDataParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/search_hosted": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsSearchHostedParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/search_series": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsSearchSeriesParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/results/season_results": {
+ get: {
+ tags: ["results"],
+ requestParams: {
+ query: IRacingResultsSeasonResultsParametersSchema,
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/season/list": {
+ get: {
+ requestParams: {
+ query: IRacingSeasonListParametersSchema,
+ },
+ tags: ["season"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/season/race_guide": {
+ get: {
+ requestParams: {
+ query: IRacingSeasonRaceGuideParametersSchema,
+ },
+ tags: ["season"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/assets": {
+ get: {
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/get": {
+ get: {
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/past_seasons": {
+ get: {
+ requestParams: {
+ query: IRacingSeriesPastSeasonsParametersSchema,
+ },
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/seasons": {
+ get: {
+ requestParams: {
+ query: IRacingSeriesSeasonsParametersSchema,
+ },
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/season_list": {
+ get: {
+ requestParams: {
+ query: IRacingSeriesSeasonListParametersSchema,
+ },
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/season_schedule": {
+ get: {
+ requestParams: {
+ query: IRacingSeriesSeasonScheduleParametersSchema,
+ },
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/series/stats_series": {
+ get: {
+ tags: ["series"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_bests": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberBestsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_career": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberCareerParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_division": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberDivisionParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_recap": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberRecapParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_recent_races": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberRecentRacesParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_summary": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberSummaryParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/member_yearly": {
+ get: {
+ requestParams: {
+ query: IRacingStatsMemberYearlyParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_driver_standings": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonDriverStandingsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_supersession_standings": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonSupersessionStandingsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_team_standings": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonTeamStandingsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_time_trial_standings": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonTTStandingsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_time_trial_results": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonTTResultsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/season_qualify_results": {
+ get: {
+ requestParams: {
+ query: IRacingStatsSeasonQualifyResultsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/stats/world_records": {
+ get: {
+ requestParams: {
+ query: IRacingStatsWorldRecordsParametersSchema,
+ },
+ tags: ["stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/team/get": {
+ get: {
+ requestParams: {
+ query: IRacingTeamGetParametersSchema,
+ },
+ tags: ["team"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/team/membership": {
+ get: {
+ tags: ["team"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/time_attack/member_season_results": {
+ get: {
+ requestParams: {
+ query: IRacingTimeAttackMemberSeasonResultsParametersSchema,
+ },
+ tags: ["time_attack"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/track/assets": {
+ get: {
+ tags: ["track"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ "/data/track/get": {
+ get: {
+ tags: ["track"],
+ responses: {
+ 200: { $ref: "#/components/responses/Success" },
+ 429: { $ref: "#/components/responses/RateLimited" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ 503: { $ref: "#/components/responses/Maintenance" },
+ },
+ },
+ },
+ },
+ });
+
+ // Remove the existing file
+ if (fs.existsSync(outputPath)) {
+ fs.unlinkSync(outputPath);
+ }
+
+ // Write to file.
+ console.log(`Writing to ${outputPath}`);
+ fs.writeFileSync(outputPath, JSON.stringify(document));
+}
diff --git a/packages/helpers/api-schema-to-openapi/tsconfig.build.json b/packages/helpers/api-schema-to-openapi/tsconfig.build.json
new file mode 100644
index 0000000..b949552
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/tsconfig.build.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig/node.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "noUnusedLocals": false,
+ "declarationMap": false,
+ "sourceMap": false,
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/helpers/api-schema-to-openapi/tsconfig.json b/packages/helpers/api-schema-to-openapi/tsconfig.json
new file mode 100644
index 0000000..9abc5e7
--- /dev/null
+++ b/packages/helpers/api-schema-to-openapi/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "include": [],
+ "references": [{ "path": "./tsconfig.build.json" }],
+ "compilerOptions": {
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ }
+}
From 39ca27bd33d66ab2f46fa8ea24d1f7ebe359429a Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 14:30:54 -0500
Subject: [PATCH 04/28] add oauth server information
---
packages/api-client/openapi/openapi.json | 4148 +----------------
.../api-schema-to-openapi/src/index.ts | 15 +
2 files changed, 16 insertions(+), 4147 deletions(-)
diff --git a/packages/api-client/openapi/openapi.json b/packages/api-client/openapi/openapi.json
index 2629116..cc71a81 100644
--- a/packages/api-client/openapi/openapi.json
+++ b/packages/api-client/openapi/openapi.json
@@ -1,4147 +1 @@
-{
- "openapi": "3.1.1",
- "info": {
- "title": "iRacing `/data` API",
- "version": "0.0.1"
- },
- "servers": [
- {
- "url": "https://members-ng.iracing.com/"
- }
- ],
- "security": [
- {
- "bearerAuth": []
- }
- ],
- "tags": [
- {
- "name": "doc",
- "description": "A documentation endpoint."
- },
- {
- "name": "car",
- "description": "Car service endpoint."
- },
- {
- "name": "carclass",
- "description": "Car class service endpoint."
- },
- {
- "name": "constants",
- "description": "Constants service endpoint."
- },
- {
- "name": "driver_stats",
- "description": "Driver stats service endpoint."
- },
- {
- "name": "hosted",
- "description": "Hosted service endpoint."
- },
- {
- "name": "league",
- "description": "League service endpoint"
- },
- {
- "name": "lookup",
- "description": "Lookup endpoints for static reference data (countries, licenses, drivers, etc.)"
- },
- {
- "name": "member",
- "description": "Member profile and related endpoints (profile, awards, participation credits)."
- },
- {
- "name": "results",
- "description": "Race and session result endpoints (lap data, event logs, season results)."
- },
- {
- "name": "season",
- "description": "Season-related endpoints (season lists, race guides, schedules)."
- },
- {
- "name": "series",
- "description": "Series endpoints (series metadata, seasons, assets)."
- },
- {
- "name": "stats",
- "description": "Statistical endpoints and summaries for members and seasons."
- },
- {
- "name": "team",
- "description": "Team endpoints (team details, membership)."
- },
- {
- "name": "time_attack",
- "description": "Time attack specific endpoints and member season results."
- },
- {
- "name": "track",
- "description": "Track metadata and asset endpoints."
- }
- ],
- "paths": {
- "/data/doc": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/carclass": {
- "get": {
- "tags": [
- "doc",
- "carclass"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/carclass/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/car": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/car/assets": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/car/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/constants": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/constants/categories": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/constants/divisions": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/constants/event_types": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/oval": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/sports_car": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/formula_car": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/road": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/dirt_oval": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/driver_stats_by_category/dirt_road": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/hosted": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/hosted/combined_sessions": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/hosted/sessions": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/cust_league_sessions": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/directory": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/get_points_systems": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/membership": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/roster": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/seasons": {
- "get": {
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/season_standings": {
- "get": {
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/league/season_sessions": {
- "get": {
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup/countries": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup/drivers": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup/flairs": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/lookup/licenses": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/awards": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/award_instances": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/chart_data": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/info": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/participation_credits": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/member/profile": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/event_log": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/lap_chart_data": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/lap_data": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/search_hosted": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/search_series": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/results/season_results": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/season": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/season/list": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/season/race_guide": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/season/spectator_subsessionids": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/season/spectator_subsessionids_detail": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/assets": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/get": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/past_seasons": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/seasons": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/season_list": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/season_schedule": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/series/stats_series": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_bests": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_career": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_division": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_recap": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_recent_races": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_summary": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/member_yearly": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_driver_standings": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_supersession_standings": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_team_standings": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_tt_standings": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_tt_results": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/season_qualify_results": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/stats/world_records": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/team": {
- "get": {
- "tags": [
- "doc"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/team/get": {
- "get": {
- "tags": [
- "doc",
- "team"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/team/membership": {
- "get": {
- "tags": [
- "doc",
- "team"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/time_attack": {
- "get": {
- "tags": [
- "doc",
- "time_attack"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/time_attack/member_season_results": {
- "get": {
- "tags": [
- "doc",
- "time_attack"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/track": {
- "get": {
- "tags": [
- "doc",
- "track"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/track/assets": {
- "get": {
- "tags": [
- "doc",
- "track"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/doc/track/get": {
- "get": {
- "tags": [
- "doc",
- "track"
- ],
- "responses": {
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- }
- }
- }
- },
- "/data/carclass/get": {
- "get": {
- "operationId": "getCarClass",
- "summary": "Gets car classes.",
- "tags": [
- "carclass"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/car/assets": {
- "get": {
- "description": "image paths are relative to https://images-static.iracing.com/",
- "tags": [
- "car"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/car/get": {
- "get": {
- "tags": [
- "car"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/constants/categories": {
- "get": {
- "description": "Constant; returned directly as an array of objects",
- "tags": [
- "constants"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/constants/divisions": {
- "get": {
- "description": "Constant; returned directly as an array of objects",
- "tags": [
- "constants"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/constants/event_types": {
- "get": {
- "description": "Constant; returned directly as an array of objects",
- "tags": [
- "constants"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/driver_stats_by_category/{category}": {
- "get": {
- "tags": [
- "driver_stats"
- ],
- "parameters": [
- {
- "in": "path",
- "name": "category",
- "schema": {
- "$ref": "#/components/schemas/iracingCategory"
- },
- "required": true,
- "description": "Racing category."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/hosted/combined_sessions": {
- "get": {
- "description": "Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.",
- "tags": [
- "hosted"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "package_id",
- "schema": {
- "description": "If set, return only sessions using this car or track package ID.",
- "type": "number"
- },
- "description": "If set, return only sessions using this car or track package ID."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/hosted/sessions": {
- "get": {
- "description": "Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.",
- "tags": [
- "hosted"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/cust_league_sessions": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "mine",
- "schema": {
- "description": "If true, return only sessions created by this user.",
- "type": "boolean"
- },
- "description": "If true, return only sessions created by this user."
- },
- {
- "in": "query",
- "name": "package_id",
- "schema": {
- "description": "If set, return only sessions using this car or track package ID.",
- "type": "number"
- },
- "description": "If set, return only sessions using this car or track package ID."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/directory": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "search",
- "schema": {
- "description": "Will search against league name, description, owner, and league ID.",
- "type": "string"
- },
- "description": "Will search against league name, description, owner, and league ID."
- },
- {
- "in": "query",
- "name": "tag",
- "schema": {
- "description": "One or more tags, comma-separated.",
- "type": "string"
- },
- "description": "One or more tags, comma-separated."
- },
- {
- "in": "query",
- "name": "restrict_to_member",
- "schema": {
- "description": "If true include only leagues for which customer is a member.",
- "type": "boolean"
- },
- "description": "If true include only leagues for which customer is a member."
- },
- {
- "in": "query",
- "name": "restrict_to_recruiting",
- "schema": {
- "description": "If true include only leagues which are recruiting.",
- "type": "boolean"
- },
- "description": "If true include only leagues which are recruiting."
- },
- {
- "in": "query",
- "name": "restrict_to_friends",
- "schema": {
- "description": "If true include only leagues owned by a friend.",
- "type": "boolean"
- },
- "description": "If true include only leagues owned by a friend."
- },
- {
- "in": "query",
- "name": "restrict_to_watched",
- "schema": {
- "description": "If true include only leagues owned by a watched member.",
- "type": "boolean"
- },
- "description": "If true include only leagues owned by a watched member."
- },
- {
- "in": "query",
- "name": "minimum_roster_count",
- "schema": {
- "description": "If set include leagues with at least this number of members.",
- "type": "number"
- },
- "description": "If set include leagues with at least this number of members."
- },
- {
- "in": "query",
- "name": "maximum_roster_count",
- "schema": {
- "description": "If set include leagues with no more than this number of members.",
- "type": "number"
- },
- "description": "If set include leagues with no more than this number of members."
- },
- {
- "in": "query",
- "name": "lowerbound",
- "schema": {
- "description": "First row of results to return. Defaults to 1.",
- "type": "number"
- },
- "description": "First row of results to return. Defaults to 1."
- },
- {
- "in": "query",
- "name": "upperbound",
- "schema": {
- "description": "Last row of results to return. Defaults to lowerbound + 39.",
- "type": "number"
- },
- "description": "Last row of results to return. Defaults to lowerbound + 39."
- },
- {
- "in": "query",
- "name": "sort",
- "schema": {
- "description": "One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.",
- "type": "string"
- },
- "description": "One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance."
- },
- {
- "in": "query",
- "name": "order",
- "schema": {
- "description": "One of asc or desc. Defaults to asc.",
- "type": "string"
- },
- "description": "One of asc or desc. Defaults to asc."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/get": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "include_licenses",
- "schema": {
- "description": "For faster responses, only request when necessary.",
- "type": "boolean"
- },
- "description": "For faster responses, only request when necessary."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/get_points_systems": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "description": "If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.",
- "type": "number"
- },
- "description": "If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/membership": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned."
- },
- {
- "in": "query",
- "name": "include_league",
- "schema": {
- "type": "boolean"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/roster": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "include_licenses",
- "schema": {
- "description": "For faster responses, only request when necessary.",
- "type": "boolean"
- },
- "description": "For faster responses, only request when necessary."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/seasons": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "retired",
- "schema": {
- "description": "If true include seasons which are no longer active.",
- "type": "boolean"
- },
- "description": "If true include seasons which are no longer active."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/season_standings": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- }
- },
- {
- "in": "query",
- "name": "car_id",
- "schema": {
- "description": "If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.",
- "type": "number"
- },
- "description": "If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/league/season_sessions": {
- "get": {
- "tags": [
- "league"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "results_only",
- "schema": {
- "description": "If true include only sessions for which results are available.",
- "type": "boolean"
- },
- "description": "If true include only sessions for which results are available."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/lookup/countries": {
- "get": {
- "tags": [
- "lookup"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/lookup/flairs": {
- "get": {
- "tags": [
- "lookup"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/lookup/licenses": {
- "get": {
- "tags": [
- "lookup"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/lookup/drivers": {
- "get": {
- "tags": [
- "lookup"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "search_term",
- "schema": {
- "description": "A cust_id or partial name for which to search.",
- "type": "string"
- },
- "required": true,
- "description": "A cust_id or partial name for which to search."
- },
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "description": "Narrow the search to the roster of the given league.",
- "type": "number"
- },
- "description": "Narrow the search to the roster of the given league."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/lookup/get": {
- "get": {
- "tags": [
- "lookup"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/awards": {
- "get": {
- "tags": [
- "member"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/award_instances": {
- "get": {
- "tags": [
- "member"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- },
- {
- "in": "query",
- "name": "award_id",
- "schema": {
- "type": "number"
- },
- "required": true
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/chart_data": {
- "get": {
- "tags": [
- "member"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- },
- {
- "in": "query",
- "name": "category_id",
- "schema": {
- "description": "1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road",
- "type": "number"
- },
- "required": true,
- "description": "1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road"
- },
- {
- "in": "query",
- "name": "chart_type",
- "schema": {
- "description": "1 - iRating; 2 - TT Rating; 3 - License/SR",
- "$ref": "#/components/schemas/iracingChartType"
- },
- "required": true,
- "description": "1 - iRating; 2 - TT Rating; 3 - License/SR"
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/get": {
- "get": {
- "tags": [
- "member"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_ids",
- "schema": {
- "description": "?cust_ids=2,3,4",
- "type": "array",
- "items": {
- "type": "number"
- }
- },
- "required": true,
- "description": "?cust_ids=2,3,4"
- },
- {
- "in": "query",
- "name": "include_licenses",
- "schema": {
- "type": "boolean"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/info": {
- "get": {
- "tags": [
- "member"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/participation_credits": {
- "get": {
- "tags": [
- "member"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/member/profile": {
- "get": {
- "operationId": "getProfile",
- "summary": "Gets a requested user's profile.",
- "tags": [
- "member"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/get": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "subsession_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "include_licenses",
- "schema": {
- "type": "boolean"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/event_log": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "subsession_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "simsession_number",
- "schema": {
- "description": "The main event is 0; the preceding event is -1, and so on.",
- "type": "number"
- },
- "required": true,
- "description": "The main event is 0; the preceding event is -1, and so on."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/lap_chart_data": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "subsession_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "simsession_number",
- "schema": {
- "description": "The main event is 0; the preceding event is -1, and so on.",
- "type": "number"
- },
- "required": true,
- "description": "The main event is 0; the preceding event is -1, and so on."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/lap_data": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "subsession_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "simsession_number",
- "schema": {
- "description": "The main event is 0; the preceding event is -1, and so on.",
- "type": "number"
- },
- "required": true,
- "description": "The main event is 0; the preceding event is -1, and so on."
- },
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included."
- },
- {
- "in": "query",
- "name": "team_id",
- "schema": {
- "description": "Required if the subsession was a team event.",
- "type": "number"
- },
- "description": "Required if the subsession was a team event."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/search_hosted": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "start_range_begin",
- "schema": {
- "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
- },
- {
- "in": "query",
- "name": "start_range_end",
- "schema": {
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."
- },
- {
- "in": "query",
- "name": "finish_range_begin",
- "schema": {
- "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
- },
- {
- "in": "query",
- "name": "finish_range_end",
- "schema": {
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."
- },
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "The participant's customer ID. Ignored if team_id is supplied.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "The participant's customer ID. Ignored if team_id is supplied."
- },
- {
- "in": "query",
- "name": "team_id",
- "schema": {
- "description": "The team ID to search for. Takes priority over cust_id if both are supplied.",
- "type": "number"
- },
- "description": "The team ID to search for. Takes priority over cust_id if both are supplied."
- },
- {
- "in": "query",
- "name": "host_cust_id",
- "schema": {
- "description": "The host's customer ID.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "The host's customer ID."
- },
- {
- "in": "query",
- "name": "session_name",
- "schema": {
- "description": "Part or all of the session's name.",
- "type": "string"
- },
- "description": "Part or all of the session's name."
- },
- {
- "in": "query",
- "name": "league_id",
- "schema": {
- "description": "Include only results for the league with this ID.",
- "type": "number"
- },
- "description": "Include only results for the league with this ID."
- },
- {
- "in": "query",
- "name": "league_season_id",
- "schema": {
- "description": "Include only results for the league season with this ID.",
- "type": "number"
- },
- "description": "Include only results for the league season with this ID."
- },
- {
- "in": "query",
- "name": "car_id",
- "schema": {
- "description": "One of the cars used by the session.",
- "type": "number"
- },
- "description": "One of the cars used by the session."
- },
- {
- "in": "query",
- "name": "track_id",
- "schema": {
- "description": "The ID of the track used by the session.",
- "type": "number"
- },
- "description": "The ID of the track used by the session."
- },
- {
- "in": "query",
- "name": "category_ids",
- "schema": {
- "description": "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
- "type": "array",
- "items": {
- "type": "number"
- }
- },
- "description": "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/search_series": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_year",
- "schema": {
- "description": "Required when using season_quarter.",
- "type": "number"
- },
- "description": "Required when using season_quarter."
- },
- {
- "in": "query",
- "name": "season_quarter",
- "schema": {
- "description": "Required when using season_year.",
- "type": "number"
- },
- "description": "Required when using season_year."
- },
- {
- "in": "query",
- "name": "start_range_begin",
- "schema": {
- "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
- },
- {
- "in": "query",
- "name": "start_range_end",
- "schema": {
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."
- },
- {
- "in": "query",
- "name": "finish_range_begin",
- "schema": {
- "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."
- },
- {
- "in": "query",
- "name": "finish_range_end",
- "schema": {
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- },
- "description": "ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."
- },
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Include only sessions in which this customer participated. Ignored if team_id is supplied.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Include only sessions in which this customer participated. Ignored if team_id is supplied."
- },
- {
- "in": "query",
- "name": "team_id",
- "schema": {
- "description": "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.",
- "type": "number"
- },
- "description": "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied."
- },
- {
- "in": "query",
- "name": "series_id",
- "schema": {
- "description": "Include only sessions for series with this ID.",
- "type": "number"
- },
- "description": "Include only sessions for series with this ID."
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "Include only sessions with this race week number.",
- "type": "number"
- },
- "description": "Include only sessions with this race week number."
- },
- {
- "in": "query",
- "name": "official_only",
- "schema": {
- "description": "If true, include only sessions earning championship points. Defaults to all.",
- "type": "boolean"
- },
- "description": "If true, include only sessions earning championship points. Defaults to all."
- },
- {
- "in": "query",
- "name": "event_types",
- "schema": {
- "description": "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
- "type": "array",
- "items": {
- "type": "number"
- }
- },
- "description": "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5"
- },
- {
- "in": "query",
- "name": "category_ids",
- "schema": {
- "description": "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
- "type": "array",
- "items": {
- "type": "number"
- }
- },
- "description": "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/results/season_results": {
- "get": {
- "tags": [
- "results"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "event_type",
- "schema": {
- "description": "Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race",
- "$ref": "#/components/schemas/iracingEventType"
- },
- "description": "Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race"
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "description": "The first race week of a season is 0."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/season/list": {
- "get": {
- "tags": [
- "season"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_year",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "season_quarter",
- "schema": {
- "type": "number"
- },
- "required": true
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/season/race_guide": {
- "get": {
- "tags": [
- "season"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "from",
- "schema": {
- "description": "ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.",
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- },
- "description": "ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time."
- },
- {
- "in": "query",
- "name": "include_end_after_from",
- "schema": {
- "description": "Include sessions which start before 'from' but end after.",
- "type": "boolean"
- },
- "description": "Include sessions which start before 'from' but end after."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/assets": {
- "get": {
- "tags": [
- "series"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/get": {
- "get": {
- "tags": [
- "series"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/past_seasons": {
- "get": {
- "tags": [
- "series"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "series_id",
- "schema": {
- "type": "number"
- },
- "required": true
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/seasons": {
- "get": {
- "tags": [
- "series"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "include_series",
- "schema": {
- "type": "boolean"
- }
- },
- {
- "in": "query",
- "name": "season_year",
- "schema": {
- "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
- "type": "number"
- },
- "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."
- },
- {
- "in": "query",
- "name": "season_quarter",
- "schema": {
- "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
- "type": "number"
- },
- "description": "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/season_list": {
- "get": {
- "tags": [
- "series"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "include_series",
- "schema": {
- "type": "boolean"
- }
- },
- {
- "in": "query",
- "name": "season_year",
- "schema": {
- "type": "number"
- }
- },
- {
- "in": "query",
- "name": "season_quarter",
- "schema": {
- "type": "number"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/season_schedule": {
- "get": {
- "tags": [
- "series"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/series/stats_series": {
- "get": {
- "tags": [
- "series"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_bests": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- },
- {
- "in": "query",
- "name": "car_id",
- "schema": {
- "description": "First call should exclude car_id; use cars_driven list in return for subsequent calls.",
- "type": "number"
- },
- "description": "First call should exclude car_id; use cars_driven list in return for subsequent calls."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_career": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_division": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "event_type",
- "schema": {
- "description": "The event type code for the division type: 4 - Time Trial; 5 - Race",
- "anyOf": [
- {
- "description": "Time trial",
- "type": "number",
- "const": 4
- },
- {
- "description": "Race",
- "type": "number",
- "const": 5
- }
- ]
- },
- "required": true,
- "description": "The event type code for the division type: 4 - Time Trial; 5 - Race"
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_recap": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- },
- {
- "in": "query",
- "name": "year",
- "schema": {
- "description": "Season year; if not supplied the current calendar year (UTC) is used.",
- "anyOf": [
- {
- "type": "number",
- "const": 1
- },
- {
- "type": "number",
- "const": 2
- },
- {
- "type": "number",
- "const": 3
- },
- {
- "type": "number",
- "const": 4
- }
- ]
- },
- "description": "Season year; if not supplied the current calendar year (UTC) is used."
- },
- {
- "in": "query",
- "name": "season",
- "schema": {
- "description": "Season (quarter) within the year; if not supplied the recap will be for the entire year.",
- "type": "number"
- },
- "description": "Season (quarter) within the year; if not supplied the recap will be for the entire year."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_recent_races": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_summary": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/member_yearly": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "cust_id",
- "schema": {
- "description": "Defaults to the authenticated member.",
- "$ref": "#/components/schemas/customerId"
- },
- "description": "Defaults to the authenticated member."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_driver_standings": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "division",
- "schema": {
- "$ref": "#/components/schemas/iracingDivision"
- }
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "description": "The first race week of a season is 0."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_supersession_standings": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "division",
- "schema": {
- "$ref": "#/components/schemas/iracingDivision"
- }
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "description": "The first race week of a season is 0."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_team_standings": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "description": "The first race week of a season is 0."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_time_trial_standings": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "division",
- "schema": {
- "$ref": "#/components/schemas/iracingDivision"
- }
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "description": "The first race week of a season is 0."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_time_trial_results": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "required": true,
- "description": "The first race week of a season is 0."
- },
- {
- "in": "query",
- "name": "division",
- "schema": {
- "$ref": "#/components/schemas/iracingDivision"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/season_qualify_results": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "car_class_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "race_week_num",
- "schema": {
- "description": "The first race week of a season is 0.",
- "type": "number"
- },
- "required": true,
- "description": "The first race week of a season is 0."
- },
- {
- "in": "query",
- "name": "division",
- "schema": {
- "$ref": "#/components/schemas/iracingDivision"
- }
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/stats/world_records": {
- "get": {
- "tags": [
- "stats"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "car_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "track_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "season_year",
- "schema": {
- "description": "Limit best times to a given year.",
- "type": "number"
- },
- "description": "Limit best times to a given year."
- },
- {
- "in": "query",
- "name": "season_quarter",
- "schema": {
- "description": "Limit best times to a given quarter; only applicable when year is used.",
- "type": "number"
- },
- "description": "Limit best times to a given quarter; only applicable when year is used."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/team/get": {
- "get": {
- "tags": [
- "team"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "team_id",
- "schema": {
- "type": "number"
- },
- "required": true
- },
- {
- "in": "query",
- "name": "include_licenses",
- "schema": {
- "description": "For faster responses, only request when necessary.",
- "type": "boolean"
- },
- "description": "For faster responses, only request when necessary."
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/team/membership": {
- "get": {
- "tags": [
- "team"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/time_attack/member_season_results": {
- "get": {
- "tags": [
- "time_attack"
- ],
- "parameters": [
- {
- "in": "query",
- "name": "ta_comp_season_id",
- "schema": {
- "type": "number"
- },
- "required": true
- }
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/track/assets": {
- "get": {
- "tags": [
- "track"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- },
- "/data/track/get": {
- "get": {
- "tags": [
- "track"
- ],
- "responses": {
- "200": {
- "$ref": "#/components/responses/Success"
- },
- "401": {
- "$ref": "#/components/responses/Unauthorized"
- },
- "429": {
- "$ref": "#/components/responses/RateLimited"
- },
- "503": {
- "$ref": "#/components/responses/Maintenance"
- }
- }
- }
- }
- },
- "components": {
- "schemas": {
- "iracingCategory": {
- "description": "Racing category.",
- "anyOf": [
- {
- "description": "Oval discipline",
- "type": "string",
- "const": "oval"
- },
- {
- "description": "Road discipline. Legacy, use `sports_car` or `formula_car` instead.",
- "type": "string",
- "const": "road"
- },
- {
- "description": "Dirt road discipline.",
- "type": "string",
- "const": "dirt_road"
- },
- {
- "description": "Dirt oval discipline.",
- "type": "string",
- "const": "dirt_oval"
- },
- {
- "description": "Sports car discipline.",
- "type": "string",
- "const": "sports_car"
- },
- {
- "description": "Formula car discipline.",
- "type": "string",
- "const": "formula_car"
- }
- ]
- },
- "customerId": {
- "description": "Numeric ID of a customer on iRacing.",
- "type": "number"
- },
- "iracingChartType": {
- "description": "iRacing Chart Type",
- "anyOf": [
- {
- "description": "iRating",
- "type": "number",
- "const": 1
- },
- {
- "description": "Time trial rating",
- "type": "number",
- "const": 2
- },
- {
- "description": "License rating",
- "type": "number",
- "const": 3
- }
- ]
- },
- "iracingEventType": {
- "description": "iRacing Event Type",
- "anyOf": [
- {
- "description": "Practice",
- "type": "number",
- "const": 2
- },
- {
- "description": "Qualifying",
- "type": "number",
- "const": 3
- },
- {
- "description": "Time trial",
- "type": "number",
- "const": 4
- },
- {
- "description": "Race",
- "type": "number",
- "const": 5
- }
- ]
- },
- "iracingDivision": {
- "description": "iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.",
- "anyOf": [
- {
- "description": "Division 1",
- "type": "number",
- "const": 0
- },
- {
- "description": "Division 2",
- "type": "number",
- "const": 1
- },
- {
- "description": "Division 3",
- "type": "number",
- "const": 2
- },
- {
- "description": "Division 4",
- "type": "number",
- "const": 3
- },
- {
- "description": "Division 5",
- "type": "number",
- "const": 4
- },
- {
- "description": "Division 6",
- "type": "number",
- "const": 5
- },
- {
- "description": "Division 7",
- "type": "number",
- "const": 6
- },
- {
- "description": "Division 8",
- "type": "number",
- "const": 7
- },
- {
- "description": "Division 9",
- "type": "number",
- "const": 8
- },
- {
- "description": "Division 10",
- "type": "number",
- "const": 9
- },
- {
- "description": "Rookie",
- "type": "number",
- "const": 10
- }
- ]
- },
- "iracingAPIResponse": {
- "description": "Response from iRacing `/data` API.",
- "type": "object",
- "properties": {
- "link": {
- "description": "A link to the cached data",
- "type": "string",
- "format": "uri"
- },
- "expires": {
- "type": "string",
- "format": "date-time",
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- }
- },
- "required": [
- "link",
- "expires"
- ],
- "additionalProperties": false
- }
- },
- "headers": {
- "x-ratelimit-limit": {
- "required": true,
- "description": "The current total rate limit.",
- "schema": {
- "title": "Rate limit limit",
- "description": "The current total rate limit.",
- "type": "number"
- }
- },
- "x-ratelimit-remaining": {
- "required": true,
- "description": "How much of the rate limit you have remaining.",
- "schema": {
- "title": "Rate limit remaining",
- "description": "How much of the rate limit you have remaining.",
- "type": "number"
- }
- },
- "x-ratelimit-reset": {
- "required": true,
- "description": "When the rate limit will reset in epoch timestamp.",
- "schema": {
- "title": "Rate limit reset",
- "description": "When the rate limit will reset in epoch timestamp.",
- "type": "string"
- }
- }
- },
- "responses": {
- "Success": {
- "description": "Success",
- "headers": {
- "x-ratelimit-limit": {
- "$ref": "#/components/headers/x-ratelimit-limit"
- },
- "x-ratelimit-remaining": {
- "$ref": "#/components/headers/x-ratelimit-remaining"
- },
- "x-ratelimit-reset": {
- "$ref": "#/components/headers/x-ratelimit-reset"
- }
- },
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/iracingAPIResponse"
- }
- }
- }
- },
- "RateLimited": {
- "description": "Rate limited",
- "headers": {
- "x-ratelimit-limit": {
- "$ref": "#/components/headers/x-ratelimit-limit"
- },
- "x-ratelimit-remaining": {
- "$ref": "#/components/headers/x-ratelimit-remaining"
- },
- "x-ratelimit-reset": {
- "$ref": "#/components/headers/x-ratelimit-reset"
- }
- },
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "error": {
- "type": "string"
- },
- "message": {
- "type": "string"
- }
- },
- "required": [
- "error"
- ],
- "additionalProperties": false
- }
- }
- }
- },
- "Maintenance": {
- "description": "Maintenance",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "error": {
- "type": "string"
- },
- "message": {
- "type": "string"
- },
- "note": {
- "type": "string"
- }
- },
- "required": [
- "error"
- ],
- "additionalProperties": false
- }
- }
- }
- },
- "Unauthorized": {
- "description": "Access token is missing or invalid.",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "error": {
- "type": "string"
- },
- "message": {
- "type": "string"
- }
- },
- "required": [
- "error"
- ],
- "additionalProperties": false
- }
- }
- }
- }
- },
- "securitySchemes": {
- "bearerAuth": {
- "type": "http",
- "scheme": "bearer",
- "bearerFormat": "JWT",
- "description": "JWT Authentication"
- }
- }
- }
-}
\ No newline at end of file
+{"openapi":"3.1.1","info":{"title":"iRacing `/data` API","version":"0.0.1"},"servers":[{"url":"https://members-ng.iracing.com/"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"doc","description":"A documentation endpoint."},{"name":"car","description":"Car service endpoint."},{"name":"carclass","description":"Car class service endpoint."},{"name":"constants","description":"Constants service endpoint."},{"name":"driver_stats","description":"Driver stats service endpoint."},{"name":"hosted","description":"Hosted service endpoint."},{"name":"league","description":"League service endpoint"},{"name":"lookup","description":"Lookup endpoints for static reference data (countries, licenses, drivers, etc.)"},{"name":"member","description":"Member profile and related endpoints (profile, awards, participation credits)."},{"name":"results","description":"Race and session result endpoints (lap data, event logs, season results)."},{"name":"season","description":"Season-related endpoints (season lists, race guides, schedules)."},{"name":"series","description":"Series endpoints (series metadata, seasons, assets)."},{"name":"stats","description":"Statistical endpoints and summaries for members and seasons."},{"name":"team","description":"Team endpoints (team details, membership)."},{"name":"time_attack","description":"Time attack specific endpoints and member season results."},{"name":"track","description":"Track metadata and asset endpoints."}],"paths":{"/data/doc":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass":{"get":{"tags":["doc","carclass"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/assets":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/categories":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/divisions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/event_types":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/oval":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/sports_car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/formula_car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/road":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/dirt_oval":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/dirt_road":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/combined_sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/cust_league_sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/directory":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get_points_systems":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/membership":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/roster":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/seasons":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_standings":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_sessions":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/countries":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/drivers":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/flairs":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/licenses":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/awards":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/award_instances":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/chart_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/info":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/participation_credits":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/profile":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/event_log":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_chart_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_hosted":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/season_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/list":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/race_guide":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids_detail":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/assets":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/past_seasons":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/seasons":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_list":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_schedule":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/stats_series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_bests":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_career":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_division":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recap":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recent_races":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_summary":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_yearly":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_driver_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_supersession_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_team_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_qualify_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/world_records":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/get":{"get":{"tags":["doc","team"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/membership":{"get":{"tags":["doc","team"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack":{"get":{"tags":["doc","time_attack"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack/member_season_results":{"get":{"tags":["doc","time_attack"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/assets":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/get":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/carclass/get":{"get":{"operationId":"getCarClass","summary":"Gets car classes.","tags":["carclass"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/assets":{"get":{"description":"image paths are relative to https://images-static.iracing.com/","tags":["car"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/get":{"get":{"tags":["car"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/categories":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/divisions":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/event_types":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/driver_stats_by_category/{category}":{"get":{"tags":["driver_stats"],"parameters":[{"in":"path","name":"category","schema":{"$ref":"#/components/schemas/iracingCategory"},"required":true,"description":"Racing category."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/combined_sessions":{"get":{"description":"Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.","tags":["hosted"],"parameters":[{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/sessions":{"get":{"description":"Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.","tags":["hosted"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/cust_league_sessions":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"mine","schema":{"description":"If true, return only sessions created by this user.","type":"boolean"},"description":"If true, return only sessions created by this user."},{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/directory":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"search","schema":{"description":"Will search against league name, description, owner, and league ID.","type":"string"},"description":"Will search against league name, description, owner, and league ID."},{"in":"query","name":"tag","schema":{"description":"One or more tags, comma-separated.","type":"string"},"description":"One or more tags, comma-separated."},{"in":"query","name":"restrict_to_member","schema":{"description":"If true include only leagues for which customer is a member.","type":"boolean"},"description":"If true include only leagues for which customer is a member."},{"in":"query","name":"restrict_to_recruiting","schema":{"description":"If true include only leagues which are recruiting.","type":"boolean"},"description":"If true include only leagues which are recruiting."},{"in":"query","name":"restrict_to_friends","schema":{"description":"If true include only leagues owned by a friend.","type":"boolean"},"description":"If true include only leagues owned by a friend."},{"in":"query","name":"restrict_to_watched","schema":{"description":"If true include only leagues owned by a watched member.","type":"boolean"},"description":"If true include only leagues owned by a watched member."},{"in":"query","name":"minimum_roster_count","schema":{"description":"If set include leagues with at least this number of members.","type":"number"},"description":"If set include leagues with at least this number of members."},{"in":"query","name":"maximum_roster_count","schema":{"description":"If set include leagues with no more than this number of members.","type":"number"},"description":"If set include leagues with no more than this number of members."},{"in":"query","name":"lowerbound","schema":{"description":"First row of results to return. Defaults to 1.","type":"number"},"description":"First row of results to return. Defaults to 1."},{"in":"query","name":"upperbound","schema":{"description":"Last row of results to return. Defaults to lowerbound + 39.","type":"number"},"description":"Last row of results to return. Defaults to lowerbound + 39."},{"in":"query","name":"sort","schema":{"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.","type":"string"},"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance."},{"in":"query","name":"order","schema":{"description":"One of asc or desc. Defaults to asc.","type":"string"},"description":"One of asc or desc. Defaults to asc."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get_points_systems":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.","type":"number"},"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/membership":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.","$ref":"#/components/schemas/customerId"},"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned."},{"in":"query","name":"include_league","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/roster":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/seasons":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"retired","schema":{"description":"If true include seasons which are no longer active.","type":"boolean"},"description":"If true include seasons which are no longer active."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_standings":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"}},{"in":"query","name":"car_id","schema":{"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.","type":"number"},"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_sessions":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"results_only","schema":{"description":"If true include only sessions for which results are available.","type":"boolean"},"description":"If true include only sessions for which results are available."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/countries":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/flairs":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/licenses":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/drivers":{"get":{"tags":["lookup"],"parameters":[{"in":"query","name":"search_term","schema":{"description":"A cust_id or partial name for which to search.","type":"string"},"required":true,"description":"A cust_id or partial name for which to search."},{"in":"query","name":"league_id","schema":{"description":"Narrow the search to the roster of the given league.","type":"number"},"description":"Narrow the search to the roster of the given league."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/get":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/awards":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/award_instances":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"award_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/chart_data":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"category_id","schema":{"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road","type":"number"},"required":true,"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road"},{"in":"query","name":"chart_type","schema":{"description":"1 - iRating; 2 - TT Rating; 3 - License/SR","$ref":"#/components/schemas/iracingChartType"},"required":true,"description":"1 - iRating; 2 - TT Rating; 3 - License/SR"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/get":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_ids","schema":{"description":"?cust_ids=2,3,4","type":"array","items":{"type":"number"}},"required":true,"description":"?cust_ids=2,3,4"},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/info":{"get":{"tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/participation_credits":{"get":{"tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/profile":{"get":{"operationId":"getProfile","summary":"Gets a requested user's profile.","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/get":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/event_log":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_chart_data":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_data":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."},{"in":"query","name":"cust_id","schema":{"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.","$ref":"#/components/schemas/customerId"},"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included."},{"in":"query","name":"team_id","schema":{"description":"Required if the subsession was a team event.","type":"number"},"description":"Required if the subsession was a team event."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_hosted":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"The participant's customer ID. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"The participant's customer ID. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"The team ID to search for. Takes priority over cust_id if both are supplied.","type":"number"},"description":"The team ID to search for. Takes priority over cust_id if both are supplied."},{"in":"query","name":"host_cust_id","schema":{"description":"The host's customer ID.","$ref":"#/components/schemas/customerId"},"description":"The host's customer ID."},{"in":"query","name":"session_name","schema":{"description":"Part or all of the session's name.","type":"string"},"description":"Part or all of the session's name."},{"in":"query","name":"league_id","schema":{"description":"Include only results for the league with this ID.","type":"number"},"description":"Include only results for the league with this ID."},{"in":"query","name":"league_season_id","schema":{"description":"Include only results for the league season with this ID.","type":"number"},"description":"Include only results for the league season with this ID."},{"in":"query","name":"car_id","schema":{"description":"One of the cars used by the session.","type":"number"},"description":"One of the cars used by the session."},{"in":"query","name":"track_id","schema":{"description":"The ID of the track used by the session.","type":"number"},"description":"The ID of the track used by the session."},{"in":"query","name":"category_ids","schema":{"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_series":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"season_year","schema":{"description":"Required when using season_quarter.","type":"number"},"description":"Required when using season_quarter."},{"in":"query","name":"season_quarter","schema":{"description":"Required when using season_year.","type":"number"},"description":"Required when using season_year."},{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.","type":"number"},"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied."},{"in":"query","name":"series_id","schema":{"description":"Include only sessions for series with this ID.","type":"number"},"description":"Include only sessions for series with this ID."},{"in":"query","name":"race_week_num","schema":{"description":"Include only sessions with this race week number.","type":"number"},"description":"Include only sessions with this race week number."},{"in":"query","name":"official_only","schema":{"description":"If true, include only sessions earning championship points. Defaults to all.","type":"boolean"},"description":"If true, include only sessions earning championship points. Defaults to all."},{"in":"query","name":"event_types","schema":{"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5","type":"array","items":{"type":"number"}},"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5"},{"in":"query","name":"category_ids","schema":{"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/season_results":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race","$ref":"#/components/schemas/iracingEventType"},"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race"},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/list":{"get":{"tags":["season"],"parameters":[{"in":"query","name":"season_year","schema":{"type":"number"},"required":true},{"in":"query","name":"season_quarter","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/race_guide":{"get":{"tags":["season"],"parameters":[{"in":"query","name":"from","schema":{"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time."},{"in":"query","name":"include_end_after_from","schema":{"description":"Include sessions which start before 'from' but end after.","type":"boolean"},"description":"Include sessions which start before 'from' but end after."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/assets":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/get":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/past_seasons":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"series_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/seasons":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."},{"in":"query","name":"season_quarter","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_list":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"type":"number"}},{"in":"query","name":"season_quarter","schema":{"type":"number"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_schedule":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/stats_series":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_bests":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"car_id","schema":{"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls.","type":"number"},"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_career":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_division":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"The event type code for the division type: 4 - Time Trial; 5 - Race","anyOf":[{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"required":true,"description":"The event type code for the division type: 4 - Time Trial; 5 - Race"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recap":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"year","schema":{"description":"Season year; if not supplied the current calendar year (UTC) is used.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3},{"type":"number","const":4}]},"description":"Season year; if not supplied the current calendar year (UTC) is used."},{"in":"query","name":"season","schema":{"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year.","type":"number"},"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recent_races":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_summary":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_yearly":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_driver_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_supersession_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_team_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_results":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_qualify_results":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/world_records":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"car_id","schema":{"type":"number"},"required":true},{"in":"query","name":"track_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_year","schema":{"description":"Limit best times to a given year.","type":"number"},"description":"Limit best times to a given year."},{"in":"query","name":"season_quarter","schema":{"description":"Limit best times to a given quarter; only applicable when year is used.","type":"number"},"description":"Limit best times to a given quarter; only applicable when year is used."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/get":{"get":{"tags":["team"],"parameters":[{"in":"query","name":"team_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/membership":{"get":{"tags":["team"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/time_attack/member_season_results":{"get":{"tags":["time_attack"],"parameters":[{"in":"query","name":"ta_comp_season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/assets":{"get":{"tags":["track"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/get":{"get":{"tags":["track"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}}},"components":{"schemas":{"iracingCategory":{"description":"Racing category.","anyOf":[{"description":"Oval discipline","type":"string","const":"oval"},{"description":"Road discipline. Legacy, use `sports_car` or `formula_car` instead.","type":"string","const":"road"},{"description":"Dirt road discipline.","type":"string","const":"dirt_road"},{"description":"Dirt oval discipline.","type":"string","const":"dirt_oval"},{"description":"Sports car discipline.","type":"string","const":"sports_car"},{"description":"Formula car discipline.","type":"string","const":"formula_car"}]},"customerId":{"description":"Numeric ID of a customer on iRacing.","type":"number"},"iracingChartType":{"description":"iRacing Chart Type","anyOf":[{"description":"iRating","type":"number","const":1},{"description":"Time trial rating","type":"number","const":2},{"description":"License rating","type":"number","const":3}]},"iracingEventType":{"description":"iRacing Event Type","anyOf":[{"description":"Practice","type":"number","const":2},{"description":"Qualifying","type":"number","const":3},{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"iracingDivision":{"description":"iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.","anyOf":[{"description":"Division 1","type":"number","const":0},{"description":"Division 2","type":"number","const":1},{"description":"Division 3","type":"number","const":2},{"description":"Division 4","type":"number","const":3},{"description":"Division 5","type":"number","const":4},{"description":"Division 6","type":"number","const":5},{"description":"Division 7","type":"number","const":6},{"description":"Division 8","type":"number","const":7},{"description":"Division 9","type":"number","const":8},{"description":"Division 10","type":"number","const":9},{"description":"Rookie","type":"number","const":10}]},"iracingAPIResponse":{"description":"Response from iRacing `/data` API.","type":"object","properties":{"link":{"description":"A link to the cached data","type":"string","format":"uri"},"expires":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["link","expires"],"additionalProperties":false}},"headers":{"x-ratelimit-limit":{"required":true,"description":"The current total rate limit.","schema":{"title":"Rate limit limit","description":"The current total rate limit.","type":"number"}},"x-ratelimit-remaining":{"required":true,"description":"How much of the rate limit you have remaining.","schema":{"title":"Rate limit remaining","description":"How much of the rate limit you have remaining.","type":"number"}},"x-ratelimit-reset":{"required":true,"description":"When the rate limit will reset in epoch timestamp.","schema":{"title":"Rate limit reset","description":"When the rate limit will reset in epoch timestamp.","type":"string"}}},"responses":{"Success":{"description":"Success","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingAPIResponse"}}}},"RateLimited":{"description":"Rate limited","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"Maintenance":{"description":"Maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"note":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"Unauthorized":{"description":"Access token is missing or invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT Authentication"},"oAuth2":{"type":"oauth2","description":"OAuth service for obtaining a JWT. For more information, see https://oauth.iracing.com/oauth2/book/introduction.html","flows":{"authorizationCode":{"authorizationUrl":"https://oauth.iracing.com/oauth2/authorize","tokenUrl":"https://oauth.iracing.com/oauth2/token","scopes":{"iracing.auth":"Authorization for iRacing services.","iracing.profile":"Access to the iRacing profile."}}}}}}}
\ No newline at end of file
diff --git a/packages/helpers/api-schema-to-openapi/src/index.ts b/packages/helpers/api-schema-to-openapi/src/index.ts
index f8f1853..21cf21a 100644
--- a/packages/helpers/api-schema-to-openapi/src/index.ts
+++ b/packages/helpers/api-schema-to-openapi/src/index.ts
@@ -129,6 +129,21 @@ export async function generateOpenAPISpec({
bearerFormat: "JWT",
description: "JWT Authentication",
},
+ oAuth2: {
+ type: "oauth2",
+ description:
+ "OAuth service for obtaining a JWT. For more information, see https://oauth.iracing.com/oauth2/book/introduction.html",
+ flows: {
+ authorizationCode: {
+ authorizationUrl: "https://oauth.iracing.com/oauth2/authorize",
+ tokenUrl: "https://oauth.iracing.com/oauth2/token",
+ scopes: {
+ "iracing.auth": "Authorization for iRacing services.",
+ "iracing.profile": "Access to the iRacing profile.",
+ },
+ },
+ },
+ },
},
},
security: [
From bae99567da6977a2ae60d787da0076a88b41f94d Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 15:57:08 -0500
Subject: [PATCH 05/28] Add oauth-schema and generator for oauth specific
routes
---
packages/api-schema/src/schema.ts | 412 +++-----
.../api-schema-to-openapi/src/index.ts | 5 +
.../helpers/oauth-schema-to-openapi/README.md | 11 +
.../oauth-schema-to-openapi/package.json | 21 +
.../oauth-schema-to-openapi/src/cli.ts | 24 +
.../oauth-schema-to-openapi/src/index.ts | 169 ++++
.../tsconfig.build.json | 14 +
.../oauth-schema-to-openapi/tsconfig.json | 9 +
packages/oauth/schema/package.json | 12 +
packages/oauth/schema/src/index.ts | 1 +
packages/oauth/schema/src/schema.ts | 172 ++++
packages/oauth/schema/tsconfig.build.json | 11 +
packages/oauth/schema/tsconfig.json | 9 +
pnpm-lock.yaml | 913 +++++++++++++++++-
14 files changed, 1489 insertions(+), 294 deletions(-)
create mode 100644 packages/helpers/oauth-schema-to-openapi/README.md
create mode 100644 packages/helpers/oauth-schema-to-openapi/package.json
create mode 100644 packages/helpers/oauth-schema-to-openapi/src/cli.ts
create mode 100644 packages/helpers/oauth-schema-to-openapi/src/index.ts
create mode 100644 packages/helpers/oauth-schema-to-openapi/tsconfig.build.json
create mode 100644 packages/helpers/oauth-schema-to-openapi/tsconfig.json
create mode 100644 packages/oauth/schema/package.json
create mode 100644 packages/oauth/schema/src/index.ts
create mode 100644 packages/oauth/schema/src/schema.ts
create mode 100644 packages/oauth/schema/tsconfig.build.json
create mode 100644 packages/oauth/schema/tsconfig.json
diff --git a/packages/api-schema/src/schema.ts b/packages/api-schema/src/schema.ts
index 5bb3cf9..72bb3c0 100644
--- a/packages/api-schema/src/schema.ts
+++ b/packages/api-schema/src/schema.ts
@@ -1,5 +1,9 @@
import { z } from "zod";
+/**
+ * `/data` API schema
+ */
+
export const IRacingAccessTokenSchema = z.jwt().meta({
description: "JWT ID Token from iRacing OAuth Service",
id: "iracingAccessToken",
@@ -184,12 +188,9 @@ export const IRacingHostedCombinedSessionsParametersSchema = z.object({
});
export const IRacingLeagueCustomerSessionsParametersSchema = z.object({
- mine: z
- .boolean()
- .optional()
- .meta({
- description: "If true, return only sessions created by this user.",
- }),
+ mine: z.boolean().optional().meta({
+ description: "If true, return only sessions created by this user.",
+ }),
package_id: z.number().optional().meta({
description:
"If set, return only sessions using this car or track package ID.",
@@ -205,54 +206,33 @@ export const IRacingLeagueDirectoryParametersSchema = z.object({
.string()
.optional()
.meta({ description: "One or more tags, comma-separated." }),
- restrict_to_member: z
- .boolean()
- .optional()
- .meta({
- description:
- "If true include only leagues for which customer is a member.",
- }),
- restrict_to_recruiting: z
- .boolean()
- .optional()
- .meta({
- description: "If true include only leagues which are recruiting.",
- }),
+ restrict_to_member: z.boolean().optional().meta({
+ description: "If true include only leagues for which customer is a member.",
+ }),
+ restrict_to_recruiting: z.boolean().optional().meta({
+ description: "If true include only leagues which are recruiting.",
+ }),
restrict_to_friends: z
.boolean()
.optional()
.meta({ description: "If true include only leagues owned by a friend." }),
- restrict_to_watched: z
- .boolean()
- .optional()
- .meta({
- description: "If true include only leagues owned by a watched member.",
- }),
- minimum_roster_count: z
- .number()
- .optional()
- .meta({
- description:
- "If set include leagues with at least this number of members.",
- }),
- maximum_roster_count: z
- .number()
- .optional()
- .meta({
- description:
- "If set include leagues with no more than this number of members.",
- }),
+ restrict_to_watched: z.boolean().optional().meta({
+ description: "If true include only leagues owned by a watched member.",
+ }),
+ minimum_roster_count: z.number().optional().meta({
+ description: "If set include leagues with at least this number of members.",
+ }),
+ maximum_roster_count: z.number().optional().meta({
+ description:
+ "If set include leagues with no more than this number of members.",
+ }),
lowerbound: z
.number()
.optional()
.meta({ description: "First row of results to return. Defaults to 1." }),
- upperbound: z
- .number()
- .optional()
- .meta({
- description:
- "Last row of results to return. Defaults to lowerbound + 39.",
- }),
+ upperbound: z.number().optional().meta({
+ description: "Last row of results to return. Defaults to lowerbound + 39.",
+ }),
sort: z.string().optional().meta({
description:
"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.",
@@ -265,12 +245,9 @@ export const IRacingLeagueDirectoryParametersSchema = z.object({
export const IRacingLeagueGetParametersSchema = z.object({
league_id: z.number(),
- include_licenses: z
- .boolean()
- .optional()
- .meta({
- description: "For faster responses, only request when necessary.",
- }),
+ include_licenses: z.boolean().optional().meta({
+ description: "For faster responses, only request when necessary.",
+ }),
});
export const IRacingLeagueGetPointsSystemsParametersSchema = z.object({
@@ -291,22 +268,16 @@ export const IRacingLeagueMembershipParametersSchema = z.object({
export const IRacingLeagueRosterParametersSchema = z.object({
league_id: z.number(),
- include_licenses: z
- .boolean()
- .optional()
- .meta({
- description: "For faster responses, only request when necessary.",
- }),
+ include_licenses: z.boolean().optional().meta({
+ description: "For faster responses, only request when necessary.",
+ }),
});
export const IRacingLeagueSeasonsParametersSchema = z.object({
league_id: z.number(),
- retired: z
- .boolean()
- .optional()
- .meta({
- description: "If true include seasons which are no longer active.",
- }),
+ retired: z.boolean().optional().meta({
+ description: "If true include seasons which are no longer active.",
+ }),
});
export const IRacingLeagueSeasonStandingsParametersSchema = z.object({
@@ -322,25 +293,19 @@ export const IRacingLeagueSeasonStandingsParametersSchema = z.object({
export const IRacingLeagueSeasonSessionsParametersSchema = z.object({
league_id: z.number(),
season_id: z.number(),
- results_only: z
- .boolean()
- .optional()
- .meta({
- description:
- "If true include only sessions for which results are available.",
- }),
+ results_only: z.boolean().optional().meta({
+ description:
+ "If true include only sessions for which results are available.",
+ }),
});
export const IRacingLookupDriversParametersSchema = z.object({
search_term: z
.string()
.meta({ description: "A cust_id or partial name for which to search." }),
- league_id: z
- .number()
- .optional()
- .meta({
- description: "Narrow the search to the roster of the given league.",
- }),
+ league_id: z.number().optional().meta({
+ description: "Narrow the search to the roster of the given league.",
+ }),
});
export const IRacingMemberAwardsParametersSchema = z.object({
@@ -386,29 +351,23 @@ export const IRacingResultsGetParametersSchema = z.object({
export const IRacingResultsEventLogParametersSchema = z.object({
subsession_id: z.number(),
- simsession_number: z
- .number()
- .meta({
- description: "The main event is 0; the preceding event is -1, and so on.",
- }),
+ simsession_number: z.number().meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
});
export const IRacingResultsLapChartDataParametersSchema = z.object({
subsession_id: z.number(),
- simsession_number: z
- .number()
- .meta({
- description: "The main event is 0; the preceding event is -1, and so on.",
- }),
+ simsession_number: z.number().meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
});
export const IRacingResultsLapDataParametersSchema = z.object({
subsession_id: z.number(),
- simsession_number: z
- .number()
- .meta({
- description: "The main event is 0; the preceding event is -1, and so on.",
- }),
+ simsession_number: z.number().meta({
+ description: "The main event is 0; the preceding event is -1, and so on.",
+ }),
cust_id: IRacingCustomerIdSchema.optional().meta({
description:
"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.",
@@ -420,45 +379,30 @@ export const IRacingResultsLapDataParametersSchema = z.object({
});
export const IRacingResultsSearchHostedParametersSchema = z.object({
- start_range_begin: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
- }),
- start_range_end: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
- }),
- finish_range_begin: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
- }),
- finish_range_end: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
- }),
+ start_range_begin: z.iso.datetime().optional().meta({
+ description:
+ 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ start_range_end: z.iso.datetime().optional().meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
+ }),
+ finish_range_begin: z.iso.datetime().optional().meta({
+ description:
+ 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ finish_range_end: z.iso.datetime().optional().meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
+ }),
cust_id: IRacingCustomerIdSchema.optional().meta({
description:
"The participant's customer ID. Ignored if team_id is supplied.",
}),
- team_id: z
- .number()
- .optional()
- .meta({
- description:
- "The team ID to search for. Takes priority over cust_id if both are supplied.",
- }),
+ team_id: z.number().optional().meta({
+ description:
+ "The team ID to search for. Takes priority over cust_id if both are supplied.",
+ }),
host_cust_id: IRacingCustomerIdSchema.optional().meta({
description: "The host's customer ID.",
}),
@@ -470,12 +414,9 @@ export const IRacingResultsSearchHostedParametersSchema = z.object({
.number()
.optional()
.meta({ description: "Include only results for the league with this ID." }),
- league_season_id: z
- .number()
- .optional()
- .meta({
- description: "Include only results for the league season with this ID.",
- }),
+ league_season_id: z.number().optional().meta({
+ description: "Include only results for the league season with this ID.",
+ }),
car_id: z
.number()
.optional()
@@ -484,13 +425,10 @@ export const IRacingResultsSearchHostedParametersSchema = z.object({
.number()
.optional()
.meta({ description: "The ID of the track used by the session." }),
- category_ids: z
- .array(z.number())
- .optional()
- .meta({
- description:
- "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
- }),
+ category_ids: z.array(z.number()).optional().meta({
+ description:
+ "Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ }),
});
export const IRacingResultsSearchSeriesParametersSchema = z.object({
@@ -502,45 +440,30 @@ export const IRacingResultsSearchSeriesParametersSchema = z.object({
.number()
.optional()
.meta({ description: "Required when using season_year." }),
- start_range_begin: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
- }),
- start_range_end: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
- }),
- finish_range_begin: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
- }),
- finish_range_end: z.iso
- .datetime()
- .optional()
- .meta({
- description:
- 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
- }),
+ start_range_begin: z.iso.datetime().optional().meta({
+ description:
+ 'Session start times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ start_range_end: z.iso.datetime().optional().meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.',
+ }),
+ finish_range_begin: z.iso.datetime().optional().meta({
+ description:
+ 'Session finish times. ISO-8601 UTC time zero offset: "2022-04-01T15:45Z".',
+ }),
+ finish_range_end: z.iso.datetime().optional().meta({
+ description:
+ 'ISO-8601 UTC time zero offset: "2022-04-01T15:45Z". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.',
+ }),
cust_id: IRacingCustomerIdSchema.optional().meta({
description:
"Include only sessions in which this customer participated. Ignored if team_id is supplied.",
}),
- team_id: z
- .number()
- .optional()
- .meta({
- description:
- "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.",
- }),
+ team_id: z.number().optional().meta({
+ description:
+ "Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.",
+ }),
series_id: z
.number()
.optional()
@@ -549,27 +472,18 @@ export const IRacingResultsSearchSeriesParametersSchema = z.object({
.number()
.optional()
.meta({ description: "Include only sessions with this race week number." }),
- official_only: z
- .boolean()
- .optional()
- .meta({
- description:
- "If true, include only sessions earning championship points. Defaults to all.",
- }),
- event_types: z
- .array(z.number())
- .optional()
- .meta({
- description:
- "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
- }),
- category_ids: z
- .array(z.number())
- .optional()
- .meta({
- description:
- "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
- }),
+ official_only: z.boolean().optional().meta({
+ description:
+ "If true, include only sessions earning championship points. Defaults to all.",
+ }),
+ event_types: z.array(z.number()).optional().meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
+ category_ids: z.array(z.number()).optional().meta({
+ description:
+ "License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4",
+ }),
});
export const IRacingResultsSeasonResultsParametersSchema = z.object({
@@ -594,40 +508,28 @@ export const IRacingSeasonRaceGuideParametersSchema = z.object({
description:
"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.",
}),
- include_end_after_from: z
- .boolean()
- .optional()
- .meta({
- description: "Include sessions which start before 'from' but end after.",
- }),
+ include_end_after_from: z.boolean().optional().meta({
+ description: "Include sessions which start before 'from' but end after.",
+ }),
});
export const IRacingSeasonSpectatorSubsessionidsParametersSchema = z.object({
- event_types: z
- .array(IRacingEventTypeSchema)
- .optional()
- .meta({
- description:
- "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
- }),
+ event_types: z.array(IRacingEventTypeSchema).optional().meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
});
export const IRacingSeasonSpectatorSubsessionidsDetailParametersSchema =
z.object({
- event_types: z
- .array(IRacingEventTypeSchema)
- .optional()
- .meta({
- description:
- "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
- }),
- season_ids: z
- .array(z.number())
- .optional()
- .meta({
- description:
- "Seasons to include in the search. Defaults to all. ?season_ids=513,937",
- }),
+ event_types: z.array(IRacingEventTypeSchema).optional().meta({
+ description:
+ "Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5",
+ }),
+ season_ids: z.array(z.number()).optional().meta({
+ description:
+ "Seasons to include in the search. Defaults to all. ?season_ids=513,937",
+ }),
});
export const IRacingSeriesPastSeasonsParametersSchema = z.object({
@@ -636,20 +538,14 @@ export const IRacingSeriesPastSeasonsParametersSchema = z.object({
export const IRacingSeriesSeasonsParametersSchema = z.object({
include_series: z.boolean().optional(),
- season_year: z
- .number()
- .optional()
- .meta({
- description:
- "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
- }),
- season_quarter: z
- .number()
- .optional()
- .meta({
- description:
- "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
- }),
+ season_year: z.number().optional().meta({
+ description:
+ "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ }),
+ season_quarter: z.number().optional().meta({
+ description:
+ "To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.",
+ }),
});
export const IRacingSeriesSeasonListParametersSchema = z.object({
@@ -666,13 +562,10 @@ export const IRacingStatsMemberBestsParametersSchema = z.object({
cust_id: IRacingCustomerIdSchema.optional().meta({
description: "Defaults to the authenticated member.",
}),
- car_id: z
- .number()
- .optional()
- .meta({
- description:
- "First call should exclude car_id; use cars_driven list in return for subsequent calls.",
- }),
+ car_id: z.number().optional().meta({
+ description:
+ "First call should exclude car_id; use cars_driven list in return for subsequent calls.",
+ }),
});
export const IRacingStatsMemberCareerParametersSchema = z.object({
@@ -702,13 +595,10 @@ export const IRacingStatsMemberRecapParametersSchema = z.object({
description:
"Season year; if not supplied the current calendar year (UTC) is used.",
}),
- season: z
- .number()
- .optional()
- .meta({
- description:
- "Season (quarter) within the year; if not supplied the recap will be for the entire year.",
- }),
+ season: z.number().optional().meta({
+ description:
+ "Season (quarter) within the year; if not supplied the recap will be for the entire year.",
+ }),
});
export const IRacingStatsMemberRecentRacesParametersSchema = z.object({
@@ -795,23 +685,17 @@ export const IRacingStatsWorldRecordsParametersSchema = z.object({
.number()
.optional()
.meta({ description: "Limit best times to a given year." }),
- season_quarter: z
- .number()
- .optional()
- .meta({
- description:
- "Limit best times to a given quarter; only applicable when year is used.",
- }),
+ season_quarter: z.number().optional().meta({
+ description:
+ "Limit best times to a given quarter; only applicable when year is used.",
+ }),
});
export const IRacingTeamGetParametersSchema = z.object({
team_id: z.number(),
- include_licenses: z
- .boolean()
- .optional()
- .meta({
- description: "For faster responses, only request when necessary.",
- }),
+ include_licenses: z.boolean().optional().meta({
+ description: "For faster responses, only request when necessary.",
+ }),
});
export const IRacingTimeAttackMemberSeasonResultsParametersSchema = z.object({
diff --git a/packages/helpers/api-schema-to-openapi/src/index.ts b/packages/helpers/api-schema-to-openapi/src/index.ts
index 21cf21a..4a86ad8 100644
--- a/packages/helpers/api-schema-to-openapi/src/index.ts
+++ b/packages/helpers/api-schema-to-openapi/src/index.ts
@@ -80,6 +80,11 @@ export async function generateOpenAPISpec({
version: "0.0.1",
},
servers: [{ url: "https://members-ng.iracing.com/" }],
+ externalDocs: {
+ url: "/data/doc",
+ description:
+ "Find more information on available services here. Requires authentication.",
+ },
components: {
headers: {
rateLimitLimit: IRacingRateLimitLimitHeaderSchema,
diff --git a/packages/helpers/oauth-schema-to-openapi/README.md b/packages/helpers/oauth-schema-to-openapi/README.md
new file mode 100644
index 0000000..e9c9701
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/README.md
@@ -0,0 +1,11 @@
+# @iracing-data/api-schema-to-openapi-schema
+
+Helper function to generate OpenAPI (Swagger) spec from [iRacing API zod schema](../../api-schema/).
+
+## Installation
+
+_Coming soon_
+
+## Usage
+
+_Coming soon_
diff --git a/packages/helpers/oauth-schema-to-openapi/package.json b/packages/helpers/oauth-schema-to-openapi/package.json
new file mode 100644
index 0000000..89aa2ba
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "@iracing-data/oauth-schema-to-openapi",
+ "version": "0.0.0-alpha.0",
+ "main": "dist/index.js",
+ "typings": "dist/index.d.ts",
+ "bin": {
+ "iracing-oauth-api-openapi": "dist/cli.js"
+ },
+ "scripts": {
+ "build": "tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "@iracing-data/oauth-schema": "workspace:*",
+ "commander": "^14.0.2",
+ "zod": "^4.1.12",
+ "zod-openapi": "^5.4.3"
+ },
+ "devDependencies": {
+ "@commander-js/extra-typings": "^14.0.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/helpers/oauth-schema-to-openapi/src/cli.ts b/packages/helpers/oauth-schema-to-openapi/src/cli.ts
new file mode 100644
index 0000000..1782186
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/src/cli.ts
@@ -0,0 +1,24 @@
+#!/usr/bin/env node
+
+import path from "node:path";
+import { Command } from "@commander-js/extra-typings";
+import { generateOpenAPISpec } from ".";
+
+const program = new Command("iracing-oauth-api-openapi")
+ .requiredOption("-o, --output ", "Output path")
+ .option(
+ "-f, --file ",
+ "The name of the output file. Defaults to 'openapi.json'"
+ )
+ .action(async (_, command) => {
+ const { output, file = "openapi.json" } = command.optsWithGlobals();
+
+ await generateOpenAPISpec({
+ fileName: file,
+ outputDir: output,
+ });
+
+ console.log("Output schema to", path.join(output, file));
+ });
+
+program.parse();
diff --git a/packages/helpers/oauth-schema-to-openapi/src/index.ts b/packages/helpers/oauth-schema-to-openapi/src/index.ts
new file mode 100644
index 0000000..1c21016
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/src/index.ts
@@ -0,0 +1,169 @@
+import {
+ IRacingOAuthAuthorizeParametersSchema,
+ IRacingOAuthHeadersSchema,
+ IRacingOAuthProfileResponseSchema,
+ IRacingOAuthRequestIdHeaderSchema,
+ IRacingOAuthRevokeCurrentSessionInputSchema,
+ IRacingOAuthRevokeSessionsInputSchema,
+ IRacingOAuthSessionsSchema,
+ IRacingOAuthTokenParametersSchema,
+ IRacingOAuthTokenResponseSchema,
+} from "@iracing-data/oauth-schema";
+import fs from "node:fs";
+import path from "node:path";
+import { createDocument } from "zod-openapi";
+
+export interface GenerateOpenAPISpecOptions {
+ outputDir?: string;
+ fileName?: string;
+}
+
+export async function generateOpenAPISpec({
+ outputDir = __dirname,
+ fileName = "openapi.json",
+}: GenerateOpenAPISpecOptions) {
+ const outputPath = path.join(outputDir, fileName);
+
+ // Create the output dir if it doesn't exist
+ if (!fs.existsSync(outputDir)) {
+ fs.mkdirSync(outputDir, { recursive: true });
+ }
+
+ const document = createDocument({
+ openapi: "3.1.1",
+ info: {
+ title: "iRacing OAuth API",
+ version: "0.0.1",
+ },
+ servers: [
+ {
+ url: "https://oauth.iracing.com",
+ description: "iRacing OAuth server.",
+ },
+ ],
+ externalDocs: {
+ url: "/oauth2/book",
+ },
+ components: {
+ headers: {
+ oAuthRequestId: IRacingOAuthRequestIdHeaderSchema,
+ },
+ responses: {
+ SessionsRevoked: {
+ headers: IRacingOAuthHeadersSchema,
+ description: "Session(s) were successfully revoked.",
+ },
+ },
+ },
+ paths: {
+ "/oauth2/iracing/profile": {
+ get: {
+ responses: {
+ 200: {
+ headers: IRacingOAuthHeadersSchema,
+ content: {
+ "application/json": {
+ schema: IRacingOAuthProfileResponseSchema,
+ },
+ },
+ },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/oauth2/sessions": {
+ get: {
+ responses: {
+ 200: {
+ headers: IRacingOAuthHeadersSchema,
+ content: {
+ "application/json": {
+ schema: IRacingOAuthSessionsSchema,
+ },
+ },
+ },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/oauth2/revoke/current": {
+ post: {
+ requestBody: {
+ content: {
+ "application/x-www-form-urlencoded": {
+ schema: IRacingOAuthRevokeCurrentSessionInputSchema,
+ },
+ },
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/SessionsRevoked" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/oauth2/revoke/sessions": {
+ post: {
+ requestBody: {
+ content: {
+ "application/x-www-form-urlencoded": {
+ schema: IRacingOAuthRevokeSessionsInputSchema,
+ },
+ },
+ },
+ responses: {
+ 200: { $ref: "#/components/responses/SessionsRevoked" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/oauth2/revoke/client": {
+ post: {
+ responses: {
+ 200: { $ref: "#/components/responses/SessionsRevoked" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/oauth2/authorize": {
+ get: {
+ requestParams: {
+ query: IRacingOAuthAuthorizeParametersSchema,
+ },
+ responses: {
+ 302: {
+ description: "Redirect back to the provided redirect_uri",
+ },
+ },
+ },
+ },
+ "/oauth2/token": {
+ post: {
+ requestBody: {
+ content: {
+ "application/x-www-form-urlencoded": {
+ schema: IRacingOAuthTokenParametersSchema,
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: "Success",
+ content: {
+ "application/json": { schema: IRacingOAuthTokenResponseSchema },
+ },
+ },
+ },
+ },
+ },
+ },
+ });
+
+ // Remove the existing file
+ if (fs.existsSync(outputPath)) {
+ fs.unlinkSync(outputPath);
+ }
+
+ // Write to file.
+ console.log(`Writing to ${outputPath}`);
+ fs.writeFileSync(outputPath, JSON.stringify(document));
+}
diff --git a/packages/helpers/oauth-schema-to-openapi/tsconfig.build.json b/packages/helpers/oauth-schema-to-openapi/tsconfig.build.json
new file mode 100644
index 0000000..b949552
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/tsconfig.build.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig/node.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "noUnusedLocals": false,
+ "declarationMap": false,
+ "sourceMap": false,
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/helpers/oauth-schema-to-openapi/tsconfig.json b/packages/helpers/oauth-schema-to-openapi/tsconfig.json
new file mode 100644
index 0000000..9abc5e7
--- /dev/null
+++ b/packages/helpers/oauth-schema-to-openapi/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "include": [],
+ "references": [{ "path": "./tsconfig.build.json" }],
+ "compilerOptions": {
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ }
+}
diff --git a/packages/oauth/schema/package.json b/packages/oauth/schema/package.json
new file mode 100644
index 0000000..fdcbe2e
--- /dev/null
+++ b/packages/oauth/schema/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@iracing-data/oauth-schema",
+ "version": "0.0.1-alpha.0",
+ "description": "Zod schema for iRacing OAuth API.",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "zod": "^4.1.12"
+ }
+}
\ No newline at end of file
diff --git a/packages/oauth/schema/src/index.ts b/packages/oauth/schema/src/index.ts
new file mode 100644
index 0000000..686fbd9
--- /dev/null
+++ b/packages/oauth/schema/src/index.ts
@@ -0,0 +1 @@
+export * from "./schema";
diff --git a/packages/oauth/schema/src/schema.ts b/packages/oauth/schema/src/schema.ts
new file mode 100644
index 0000000..ff5b232
--- /dev/null
+++ b/packages/oauth/schema/src/schema.ts
@@ -0,0 +1,172 @@
+import { z } from "zod";
+
+/**
+ * OAuth2 schema
+ */
+
+// Primitives
+
+export const IRacingOAuthClientIdSchema = z.string().meta({
+ description: "The client identifier issued during client registration.",
+});
+
+// Headers
+
+export const IRacingOAuthRequestIdHeaderKey = "x-request-id";
+export const IRacingOAuthRequestIdHeaderSchema = z.string().meta({
+ title: "Request ID",
+ description:
+ "Each incoming request is assigned a request identifier. The request identifier is used to associate log messages with the request. Please include the value of the received x-request-id header when reporting issues.",
+ header: {
+ id: IRacingOAuthRequestIdHeaderKey,
+ },
+});
+
+export const IRacingOAuthHeadersSchema = z.object({
+ [IRacingOAuthRequestIdHeaderKey]: IRacingOAuthRequestIdHeaderSchema,
+});
+
+// Requests and responses
+
+export const IRacingOAuthAuthorizeParametersSchema = z.object({
+ client_id: IRacingOAuthClientIdSchema,
+ redirect_uri: z.url().meta({
+ description:
+ "A redirect URI registered to the client, which must match exactly.",
+ }),
+ response_type: z.literal("code").meta({
+ description: "The only valid value for this is code.",
+ }),
+ code_challenge: z.string().optional().meta({
+ description:
+ "A PKCE code challenge. We require this of any client which cannot reasonably keep a secret, and encourage server-side applications to implement it regardless.",
+ }),
+ code_challenge_method: z
+ .union([z.literal("plain"), z.literal("S256")])
+ .default("plain")
+ .optional()
+ .meta({
+ description:
+ "The PKCE code challenge method. Either S256 (recommended) or plain.",
+ }),
+ state: z.string().optional().meta({
+ description:
+ "This state value will be returned unmodified at the end of the authentication and authorization flow. It may be used to store request-specific data and in the prevention of CSRF attacks.",
+ }),
+ scope: z.string().optional().meta({
+ description:
+ "One or more scopes to request, if any, separated by whitespace.",
+ }),
+ prompt: z.string().optional().meta({
+ description:
+ "Space-delimited, case-sensitive list of ASCII string values which influence how the authorization server interacts with the user.",
+ }),
+});
+
+export const IRacingOAuthTokenAuthorizationCodeGrantParametersSchema = z.object(
+ {
+ grant_type: z.literal("authorization_code"),
+ client_id: IRacingOAuthClientIdSchema,
+ client_secret: z
+ .string()
+ .optional()
+ .meta({ description: "Required only if issued." }),
+ code: z
+ .string()
+ .meta({ description: "As returned to the redirect_uri of the client." }),
+ redirect_uri: z.string().meta({
+ description: "The same redirect_uri used to `/authorize`.",
+ }),
+ code_verifier: z.string().optional().meta({
+ description:
+ "The PKCE code verifier which is only required if a code_challenge was used to `/authorize``.",
+ }),
+ }
+);
+
+export const IRacingOAuthTokenRefreshGrantParametersSchema = z.object({
+ grant_type: z.literal("authorization_code"),
+ client_id: IRacingOAuthClientIdSchema,
+ client_secret: z
+ .string()
+ .optional()
+ .meta({ description: "Required only if issued." }),
+ refresh_token: z.string().meta({
+ description: "As returned in the `/token` response.",
+ }),
+});
+
+export const IRacingOAuthTokenParametersSchema = z.discriminatedUnion(
+ "grant_type",
+ [
+ IRacingOAuthTokenAuthorizationCodeGrantParametersSchema,
+ IRacingOAuthTokenRefreshGrantParametersSchema,
+ ]
+);
+
+export const IRacingOAuthTokenResponseSchema = z.object({
+ access_token: z.string(),
+ token_type: z.literal("bearer"),
+ expires_in: z.number(),
+ refresh_token: z.string().optional(),
+ refresh_token_expires_in: z.number().optional(),
+ scope: z.string().trim(),
+});
+
+export const IRacingOAuthSessionSchema = z.object({
+ session_id: z.string().meta({
+ description:
+ "A session identifier. This value is considered opaque and its format may change without warning at our discretion.",
+ }),
+ client_id: z.string().meta({
+ description: "A client identifier.",
+ }),
+ client_name: z.string().meta({
+ description:
+ "The name of the client as selected during client registration.",
+ }),
+ client_developer_name: z.string().nullable(),
+ client_developer_url: z.string().nullable(),
+ client_developer_email: z.string().nullable(),
+ scope: z.string().nullable(),
+ scope_descriptions: z.string().nullable(),
+ // auth_time:
+ // last_activity:
+ // session_expiration
+ current_session: z.boolean(),
+ impersonated: z.boolean(),
+ impersonation_note: z.string().nullable(),
+ first_ip: z.ipv4().nullable(),
+ first_continent: z.string().nullable(),
+ first_country: z.string().nullable(),
+ first_subdivisions: z.string().nullable(),
+ first_city: z.string().nullable(),
+ first_user_agent_header: z.string().nullable(),
+ first_user_agent_operating_system: z.string().nullable(),
+ first_user_agent_browser: z.string().nullable(),
+ last_ip: z.ipv4().nullable(),
+ last_continent: z.string().nullable(),
+ last_country: z.string().nullable(),
+ last_subdivisions: z.string().nullable(),
+ last_city: z.string().nullable(),
+ last_user_agent_header: z.string().nullable(),
+ last_user_agent_operating_system: z.string().nullable(),
+ last_user_agent_browser: z.string().nullable(),
+});
+
+export const IRacingOAuthSessionsSchema = z.object({
+ sessions: z.array(IRacingOAuthSessionSchema),
+});
+
+export const IRacingOAuthProfileResponseSchema = z.object({
+ iracing_name: z.string(),
+ iracing_cust_id: z.number(),
+});
+
+export const IRacingOAuthRevokeCurrentSessionInputSchema = z.object({
+ forgetBrowser: z.boolean().optional(),
+});
+
+export const IRacingOAuthRevokeSessionsInputSchema = z.object({
+ sessionIds: z.array(z.string()),
+});
diff --git a/packages/oauth/schema/tsconfig.build.json b/packages/oauth/schema/tsconfig.build.json
new file mode 100644
index 0000000..f8efe39
--- /dev/null
+++ b/packages/oauth/schema/tsconfig.build.json
@@ -0,0 +1,11 @@
+{
+ "extends": "../../../tsconfig/node.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "noUnusedLocals": true,
+ "module": "nodenext",
+ "moduleResolution": "nodenext"
+ },
+ "exclude": ["node_modules", "dist", "scripts"]
+}
diff --git a/packages/oauth/schema/tsconfig.json b/packages/oauth/schema/tsconfig.json
new file mode 100644
index 0000000..5455dae
--- /dev/null
+++ b/packages/oauth/schema/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "include": [],
+ "references": [{ "path": "./tsconfig.build.json" }],
+ "compilerOptions": {
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ee558bf..bafb885 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -61,25 +61,6 @@ importers:
specifier: ^5.9.2
version: 5.9.2
- examples/iracing-api-proxy:
- dependencies:
- '@iracing-data/api':
- specifier: workspace:*
- version: link:../../packages/api
- express:
- specifier: ^5.1.0
- version: 5.1.0
- devDependencies:
- '@types/express':
- specifier: ^5.0.3
- version: 5.0.3
- tsx:
- specifier: ^4.19.0
- version: 4.20.5
- typescript:
- specifier: ^5.9.2
- version: 5.9.2
-
examples/kapps-hello-world:
dependencies:
'@iracing-data/ws':
@@ -91,9 +72,15 @@ importers:
'@iracing-data/api':
specifier: workspace:*
version: link:../../packages/api
+ '@iracing-data/api-router':
+ specifier: workspace:*
+ version: link:../../packages/api-router
'@iracing-data/oauth-client':
specifier: workspace:*
version: link:../../packages/oauth/client
+ '@iracing-data/oauth-router':
+ specifier: workspace:*
+ version: link:../../packages/oauth/router
axios:
specifier: ^1.7.9
version: 1.8.2
@@ -254,6 +241,42 @@ importers:
specifier: ^5.1.1
version: 5.1.1
+ packages/api-client:
+ devDependencies:
+ '@iracing-data/api-schema-to-openapi':
+ specifier: workspace:*
+ version: link:../helpers/api-schema-to-openapi
+ '@openapitools/openapi-generator-cli':
+ specifier: ^2.25.0
+ version: 2.25.0(@types/node@24.3.1)
+
+ packages/api-router:
+ dependencies:
+ '@iracing-data/api':
+ specifier: workspace:*
+ version: link:../api
+ '@iracing-data/api-schema':
+ specifier: workspace:*
+ version: link:../api-schema
+ axios:
+ specifier: ^1.7.9
+ version: 1.8.2
+ better-call:
+ specifier: ^1.0.26
+ version: 1.0.26
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+
+ packages/api-schema:
+ dependencies:
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+ zod-openapi:
+ specifier: ^5.4.3
+ version: 5.4.3(zod@4.1.12)
+
packages/cli:
dependencies:
'@iracing-data/api':
@@ -386,6 +409,25 @@ importers:
specifier: ^5.9.2
version: 5.9.2
+ packages/helpers/api-schema-to-openapi:
+ dependencies:
+ '@iracing-data/api-schema':
+ specifier: workspace:*
+ version: link:../../api-schema
+ commander:
+ specifier: ^14.0.2
+ version: 14.0.2
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+ zod-openapi:
+ specifier: ^5.4.3
+ version: 5.4.3(zod@4.1.12)
+ devDependencies:
+ '@commander-js/extra-typings':
+ specifier: ^14.0.0
+ version: 14.0.0(commander@14.0.2)
+
packages/helpers/iracing-json-schema-to-typescript:
dependencies:
commander:
@@ -399,6 +441,25 @@ importers:
specifier: ^13.1.0
version: 13.1.0(commander@14.0.0)
+ packages/helpers/oauth-schema-to-openapi:
+ dependencies:
+ '@iracing-data/oauth-schema':
+ specifier: workspace:*
+ version: link:../../oauth/schema
+ commander:
+ specifier: ^14.0.2
+ version: 14.0.2
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+ zod-openapi:
+ specifier: ^5.4.3
+ version: 5.4.3(zod@4.1.12)
+ devDependencies:
+ '@commander-js/extra-typings':
+ specifier: ^14.0.0
+ version: 14.0.0(commander@14.0.2)
+
packages/helpers/sync-car-assets:
dependencies:
'@commander-js/extra-typings':
@@ -553,6 +614,27 @@ importers:
specifier: ^4.0.17
version: 4.0.17
+ packages/oauth/router:
+ dependencies:
+ '@better-fetch/fetch':
+ specifier: ^1.1.18
+ version: 1.1.18
+ '@iracing-data/oauth-client':
+ specifier: workspace:*
+ version: link:../client
+ better-call:
+ specifier: ^1.0.26
+ version: 1.0.26
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+
+ packages/oauth/schema:
+ dependencies:
+ zod:
+ specifier: ^4.1.12
+ version: 4.1.12
+
packages:
/@apidevtools/json-schema-ref-parser@11.9.3:
@@ -579,6 +661,10 @@ packages:
resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==}
dev: false
+ /@borewit/text-codec@0.1.1:
+ resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==}
+ dev: true
+
/@commander-js/extra-typings@13.1.0(commander@13.1.0):
resolution: {integrity: sha512-q5P52BYb1hwVWE6dtID7VvuJWrlfbCv4klj7BjUUOqMz4jbSZD4C9fJ9lRjL2jnBGTg+gDDlaXN51rkWcLk4fg==}
peerDependencies:
@@ -594,6 +680,14 @@ packages:
dependencies:
commander: 14.0.0
+ /@commander-js/extra-typings@14.0.0(commander@14.0.2):
+ resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==}
+ peerDependencies:
+ commander: ~14.0.0
+ dependencies:
+ commander: 14.0.2
+ dev: true
+
/@cspotcode/source-map-support@0.8.1:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
@@ -1398,6 +1492,30 @@ packages:
'@types/node': 24.3.1
dev: true
+ /@isaacs/balanced-match@4.0.1:
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+ dev: true
+
+ /@isaacs/brace-expansion@5.0.0:
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+ dev: true
+
+ /@isaacs/cliui@8.0.2:
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: /string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: /strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: /wrap-ansi@7.0.0
+ dev: true
+
/@jridgewell/resolve-uri@3.1.2:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
@@ -1421,6 +1539,77 @@ packages:
resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
dev: false
+ /@lukeed/csprng@1.1.0:
+ resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /@nestjs/axios@4.0.1(@nestjs/common@11.1.6)(axios@1.12.2)(rxjs@7.8.2):
+ resolution: {integrity: sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==}
+ peerDependencies:
+ '@nestjs/common': ^10.0.0 || ^11.0.0
+ axios: ^1.3.1
+ rxjs: ^7.0.0
+ dependencies:
+ '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ axios: 1.12.2
+ rxjs: 7.8.2
+ dev: true
+
+ /@nestjs/common@11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2):
+ resolution: {integrity: sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ==}
+ peerDependencies:
+ class-transformer: '>=0.4.1'
+ class-validator: '>=0.13.2'
+ reflect-metadata: ^0.1.12 || ^0.2.0
+ rxjs: ^7.1.0
+ peerDependenciesMeta:
+ class-transformer:
+ optional: true
+ class-validator:
+ optional: true
+ dependencies:
+ file-type: 21.0.0
+ iterare: 1.2.1
+ load-esm: 1.0.2
+ reflect-metadata: 0.2.2
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@nestjs/core@11.1.6(@nestjs/common@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2):
+ resolution: {integrity: sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg==}
+ engines: {node: '>= 20'}
+ requiresBuild: true
+ peerDependencies:
+ '@nestjs/common': ^11.0.0
+ '@nestjs/microservices': ^11.0.0
+ '@nestjs/platform-express': ^11.0.0
+ '@nestjs/websockets': ^11.0.0
+ reflect-metadata: ^0.1.12 || ^0.2.0
+ rxjs: ^7.1.0
+ peerDependenciesMeta:
+ '@nestjs/microservices':
+ optional: true
+ '@nestjs/platform-express':
+ optional: true
+ '@nestjs/websockets':
+ optional: true
+ dependencies:
+ '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nuxt/opencollective': 0.4.1
+ fast-safe-stringify: 2.1.1
+ iterare: 1.2.1
+ path-to-regexp: 8.2.0
+ reflect-metadata: 0.2.2
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ dev: true
+
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1442,6 +1631,61 @@ packages:
fastq: 1.19.0
dev: true
+ /@nuxt/opencollective@0.4.1:
+ resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==}
+ engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'}
+ hasBin: true
+ dependencies:
+ consola: 3.4.2
+ dev: true
+
+ /@nuxtjs/opencollective@0.3.2:
+ resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==}
+ engines: {node: '>=8.0.0', npm: '>=5.0.0'}
+ hasBin: true
+ dependencies:
+ chalk: 4.1.2
+ consola: 2.15.3
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+ dev: true
+
+ /@openapitools/openapi-generator-cli@2.25.0(@types/node@24.3.1):
+ resolution: {integrity: sha512-u/3VAbF8c68AXBgm8nBAdDPLPW/KgrtHz28yemf92zNB0iDZFGdRUX2W80Lzf177g6ctYLz0GIPHCOU0LTJegQ==}
+ engines: {node: '>=16'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@nestjs/axios': 4.0.1(@nestjs/common@11.1.6)(axios@1.12.2)(rxjs@7.8.2)
+ '@nestjs/common': 11.1.6(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.6(@nestjs/common@11.1.6)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nuxtjs/opencollective': 0.3.2
+ axios: 1.12.2
+ chalk: 4.1.2
+ commander: 8.3.0
+ compare-versions: 6.1.1
+ concurrently: 9.2.1
+ console.table: 0.10.0
+ fs-extra: 11.3.2
+ glob: 11.0.3
+ inquirer: 8.2.7(@types/node@24.3.1)
+ proxy-agent: 6.5.0
+ reflect-metadata: 0.2.2
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - '@nestjs/microservices'
+ - '@nestjs/platform-express'
+ - '@nestjs/websockets'
+ - '@types/node'
+ - class-transformer
+ - class-validator
+ - debug
+ - encoding
+ - supports-color
+ dev: true
+
/@pkgr/core@0.2.9:
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
@@ -1489,6 +1733,25 @@ packages:
engines: {node: '>=4'}
dev: true
+ /@tokenizer/inflate@0.2.7:
+ resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==}
+ engines: {node: '>=18'}
+ dependencies:
+ debug: 4.4.3
+ fflate: 0.8.2
+ token-types: 6.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@tokenizer/token@0.3.0:
+ resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
+ dev: true
+
+ /@tootallnate/quickjs-emscripten@0.23.0:
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+ dev: true
+
/@tsconfig/node10@1.0.11:
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
dev: true
@@ -1810,7 +2073,6 @@ packages:
/agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
- dev: false
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -1831,12 +2093,22 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ /ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+ dev: true
+
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
dependencies:
color-convert: 2.0.1
+ /ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+ dev: true
+
/archive-type@4.0.0:
resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==}
engines: {node: '>=4'}
@@ -1926,6 +2198,13 @@ packages:
printable-characters: 1.0.42
dev: false
+ /ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+ dependencies:
+ tslib: 2.8.1
+ dev: true
+
/async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -1933,7 +2212,6 @@ packages:
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- dev: false
/atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
@@ -1961,6 +2239,16 @@ packages:
- undici
dev: false
+ /axios@1.12.2:
+ resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.4
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
/axios@1.8.2:
resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==}
dependencies:
@@ -1979,6 +2267,11 @@ packages:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
dev: true
+ /basic-ftp@5.0.5:
+ resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
/better-call@1.0.24:
resolution: {integrity: sha512-iGqL29cstPp4xLD2MjKL1EmyAqQHjYS+cBMt4W27rPs3vf+kuqkVPA0NYaf7JciBOzVsJdNj4cbZWXC5TardWQ==}
dependencies:
@@ -1989,6 +2282,15 @@ packages:
uncrypto: 0.1.3
dev: false
+ /better-call@1.0.26:
+ resolution: {integrity: sha512-/5AaTPC8IRXV5yWxpAI7eR2RNiGHq4q/mjBm9DiikIkmJhzuqO1Ub66oYYqJ3eBFF+6BfdtZFRnuW0me8T0Emg==}
+ dependencies:
+ '@better-auth/utils': 0.3.0
+ '@better-fetch/fetch': 1.1.18
+ rou3: 0.5.1
+ set-cookie-parser: 2.7.2
+ dev: false
+
/bl@1.2.3:
resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
dependencies:
@@ -1996,6 +2298,14 @@ packages:
safe-buffer: 5.2.1
dev: true
+ /bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
/body-parser@2.2.0:
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
engines: {node: '>=18'}
@@ -2121,6 +2431,23 @@ packages:
resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==}
dev: true
+ /cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+ dependencies:
+ restore-cursor: 3.1.0
+ dev: true
+
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /cli-width@3.0.0:
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+ engines: {node: '>= 10'}
+ dev: true
+
/cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
@@ -2139,6 +2466,12 @@ packages:
mimic-response: 1.0.1
dev: true
+ /clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+ requiresBuild: true
+ dev: true
+
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -2157,7 +2490,6 @@ packages:
engines: {node: '>= 0.8'}
dependencies:
delayed-stream: 1.0.0
- dev: false
/commander@13.1.0:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
@@ -2167,14 +2499,56 @@ packages:
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
engines: {node: '>=20'}
+ /commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
+
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
+ /commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+ dev: true
+
+ /compare-versions@6.1.1:
+ resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+ dev: true
+
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true
+ /concurrently@9.2.1:
+ resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==}
+ engines: {node: '>=18'}
+ hasBin: true
+ dependencies:
+ chalk: 4.1.2
+ rxjs: 7.8.2
+ shell-quote: 1.8.3
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+ dev: true
+
+ /consola@2.15.3:
+ resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
+ dev: true
+
+ /consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+ dev: true
+
+ /console.table@0.10.0:
+ resolution: {integrity: sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==}
+ engines: {node: '> 0.10'}
+ dependencies:
+ easy-table: 1.1.0
+ dev: true
+
/content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
@@ -2233,6 +2607,11 @@ packages:
which: 2.0.2
dev: true
+ /data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
+ dev: true
+
/data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
@@ -2378,6 +2757,13 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
+ /defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ requiresBuild: true
+ dependencies:
+ clone: 1.0.4
+ dev: true
+
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -2396,10 +2782,18 @@ packages:
object-keys: 1.1.1
dev: true
+ /degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+ dev: true
+
/delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- dev: false
/depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
@@ -2451,6 +2845,16 @@ packages:
resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
dev: true
+ /eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ dev: true
+
+ /easy-table@1.1.0:
+ resolution: {integrity: sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==}
+ optionalDependencies:
+ wcwidth: 1.0.1
+ dev: true
+
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: false
@@ -2458,6 +2862,10 @@ packages:
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ /emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ dev: true
+
/encodeurl@2.0.0:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
@@ -2619,6 +3027,18 @@ packages:
engines: {node: '>=10'}
dev: true
+ /escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+ dev: true
+
/eslint-config-prettier@10.1.8(eslint@9.34.0):
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
@@ -2801,6 +3221,12 @@ packages:
eslint-visitor-keys: 4.2.1
dev: true
+ /esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
/esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -2927,7 +3353,6 @@ packages:
/fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
- dev: false
/fastq@1.19.0:
resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
@@ -2952,6 +3377,17 @@ packages:
picomatch: 4.0.2
dev: false
+ /fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+ dev: true
+
+ /figures@3.2.0:
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+ engines: {node: '>=8'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
/file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -2964,6 +3400,18 @@ packages:
engines: {node: '>=6'}
dev: true
+ /file-type@21.0.0:
+ resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==}
+ engines: {node: '>=20'}
+ dependencies:
+ '@tokenizer/inflate': 0.2.7
+ strtok3: 10.3.4
+ token-types: 6.1.1
+ uint8array-extras: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/file-type@3.9.0:
resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==}
engines: {node: '>=0.10.0'}
@@ -3047,7 +3495,6 @@ packages:
peerDependenciesMeta:
debug:
optional: true
- dev: false
/for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
@@ -3056,6 +3503,14 @@ packages:
is-callable: 1.2.7
dev: true
+ /foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+ dev: true
+
/form-data@4.0.4:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
@@ -3065,7 +3520,6 @@ packages:
es-set-tostringtag: 2.1.0
hasown: 2.0.2
mime-types: 2.1.35
- dev: false
/forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
@@ -3097,6 +3551,15 @@ packages:
universalify: 2.0.1
dev: true
+ /fs-extra@11.3.2:
+ resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -3185,6 +3648,17 @@ packages:
resolve-pkg-maps: 1.0.0
dev: true
+ /get-uri@6.0.5:
+ resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ basic-ftp: 5.0.5
+ data-uri-to-buffer: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3199,6 +3673,19 @@ packages:
is-glob: 4.0.3
dev: true
+ /glob@11.0.3:
+ resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 4.1.1
+ minimatch: 10.1.1
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 2.0.1
+ dev: true
+
/globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -3339,6 +3826,26 @@ packages:
toidentifier: 1.0.1
dev: false
+ /http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -3415,6 +3922,29 @@ packages:
rxjs: 7.8.2
dev: true
+ /inquirer@8.2.7(@types/node@24.3.1):
+ resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ '@inquirer/external-editor': 1.0.1(@types/node@24.3.1)
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ ora: 5.4.1
+ run-async: 2.4.1
+ rxjs: 7.8.2
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ wrap-ansi: 6.2.0
+ transitivePeerDependencies:
+ - '@types/node'
+ dev: true
+
/internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -3432,6 +3962,11 @@ packages:
p-is-promise: 1.1.0
dev: true
+ /ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+ dev: true
+
/ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -3532,6 +4067,11 @@ packages:
dependencies:
is-extglob: 2.1.1
+ /is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+ dev: true
+
/is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -3628,6 +4168,11 @@ packages:
which-typed-array: 1.1.19
dev: true
+ /is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+ dev: true
+
/is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -3668,6 +4213,18 @@ packages:
is-object: 1.0.2
dev: true
+ /iterare@1.2.1:
+ resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /jackspeak@4.1.1:
+ resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+ engines: {node: 20 || >=22}
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ dev: true
+
/joycon@3.1.1:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
@@ -3746,6 +4303,11 @@ packages:
type-check: 0.4.0
dev: true
+ /load-esm@1.0.2:
+ resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==}
+ engines: {node: '>=13.2.0'}
+ dev: true
+
/locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -3763,6 +4325,14 @@ packages:
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ /log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+ dev: true
+
/long@5.3.1:
resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==}
@@ -3776,6 +4346,16 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /lru-cache@11.2.2:
+ resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
+ engines: {node: 20 || >=22}
+ dev: true
+
+ /lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+ dev: true
+
/luxon@3.7.2:
resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines: {node: '>=12'}
@@ -3830,7 +4410,6 @@ packages:
/mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
- dev: false
/mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
@@ -3841,7 +4420,6 @@ packages:
engines: {node: '>= 0.6'}
dependencies:
mime-db: 1.52.0
- dev: false
/mime-types@3.0.1:
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
@@ -3850,11 +4428,23 @@ packages:
mime-db: 1.54.0
dev: false
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
/mimic-response@1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
dev: true
+ /minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+ dev: true
+
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
@@ -3871,9 +4461,18 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ /minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dev: true
+
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ /mute-stream@0.0.8:
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+ dev: true
+
/mute-stream@2.0.0:
resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -3887,6 +4486,23 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ /node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: true
+
/normalize-url@2.0.1:
resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==}
engines: {node: '>=4'}
@@ -3972,6 +4588,13 @@ packages:
dependencies:
wrappy: 1.0.2
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
/optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -3984,6 +4607,21 @@ packages:
word-wrap: 1.2.5
dev: true
+ /ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
/os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
@@ -4041,6 +4679,34 @@ packages:
p-finally: 1.0.0
dev: true
+ /pac-proxy-agent@7.2.0:
+ resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.4
+ debug: 4.4.3
+ get-uri: 6.0.5
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ pac-resolver: 7.0.1
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /pac-resolver@7.0.1:
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ degenerator: 5.0.1
+ netmask: 2.0.2
+ dev: true
+
+ /package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+ dev: true
+
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -4067,10 +4733,17 @@ packages:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
+ /path-scurry@2.0.1:
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
+ engines: {node: 20 || >=22}
+ dependencies:
+ lru-cache: 11.2.2
+ minipass: 7.1.2
+ dev: true
+
/path-to-regexp@8.2.0:
resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
engines: {node: '>=16'}
- dev: false
/pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
@@ -4246,9 +4919,24 @@ packages:
ipaddr.js: 1.9.1
dev: false
+ /proxy-agent@6.5.0:
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.2.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
- dev: false
/pump@3.0.2:
resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
@@ -4312,11 +5000,24 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
/real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
dev: false
+ /reflect-metadata@0.2.2:
+ resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
+ dev: true
+
/reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -4376,6 +5077,14 @@ packages:
lowercase-keys: 1.0.1
dev: true
+ /restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -4398,6 +5107,11 @@ packages:
- supports-color
dev: false
+ /run-async@2.4.1:
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
/run-async@3.0.0:
resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
engines: {node: '>=0.12.0'}
@@ -4578,6 +5292,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
/side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
@@ -4614,10 +5333,38 @@ packages:
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
/signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ /smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+ dev: true
+
+ /socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+ dev: true
+
/sonic-boom@4.2.0:
resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
dependencies:
@@ -4645,6 +5392,13 @@ packages:
is-plain-obj: 1.1.0
dev: true
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+ requiresBuild: true
+ dev: true
+ optional: true
+
/split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
@@ -4676,6 +5430,15 @@ packages:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
+ /string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+ dev: true
+
/string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
@@ -4720,6 +5483,13 @@ packages:
dependencies:
ansi-regex: 5.0.1
+ /strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.2.2
+ dev: true
+
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
@@ -4748,6 +5518,13 @@ packages:
escape-string-regexp: 1.0.5
dev: true
+ /strtok3@10.3.4:
+ resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@tokenizer/token': 0.3.0
+ dev: true
+
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -4755,6 +5532,13 @@ packages:
has-flag: 4.0.0
dev: true
+ /supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -4837,6 +5621,15 @@ packages:
engines: {node: '>=0.6'}
dev: false
+ /token-types@6.1.1:
+ resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ '@borewit/text-codec': 0.1.1
+ '@tokenizer/token': 0.3.0
+ ieee754: 1.2.1
+ dev: true
+
/tough-cookie@5.1.1:
resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==}
engines: {node: '>=16'}
@@ -4844,6 +5637,15 @@ packages:
tldts: 6.1.77
dev: false
+ /tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ dev: true
+
+ /tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+ dev: true
+
/trim-repeated@1.0.0:
resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
engines: {node: '>=0.10.0'}
@@ -5004,6 +5806,18 @@ packages:
hasBin: true
dev: true
+ /uid@2.0.2:
+ resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@lukeed/csprng': 1.1.0
+ dev: true
+
+ /uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+ dev: true
+
/unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
@@ -5072,6 +5886,23 @@ packages:
engines: {node: '>= 0.8'}
dev: false
+ /wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+ dependencies:
+ defaults: 1.0.4
+ dev: true
+
+ /webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ dev: true
+
+ /whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: true
+
/which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -5155,6 +5986,15 @@ packages:
string-width: 4.2.3
strip-ansi: 6.0.1
+ /wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.1.2
+ dev: true
+
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -5217,6 +6057,19 @@ packages:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
+ /zod-openapi@5.4.3(zod@4.1.12):
+ resolution: {integrity: sha512-6kJ/gJdvHZtuxjYHoMtkl2PixCwRuZ/s79dVkEr7arHvZGXfx7Cvh53X3HfJ5h9FzGelXOXlnyjwfX0sKEPByw==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ zod: ^3.25.74 || ^4.0.0
+ dependencies:
+ zod: 4.1.12
+ dev: false
+
/zod@4.0.17:
resolution: {integrity: sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ==}
dev: false
+
+ /zod@4.1.12:
+ resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==}
+ dev: false
From fb86534aaadf6662359ac0a4d05892992be2ff0a Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 16:02:42 -0500
Subject: [PATCH 06/28] Update readme
---
.../helpers/api-schema-to-openapi/README.md | 23 ++++++++++++++--
.../helpers/oauth-schema-to-openapi/README.md | 27 ++++++++++++++++---
2 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/packages/helpers/api-schema-to-openapi/README.md b/packages/helpers/api-schema-to-openapi/README.md
index e9c9701..6c52553 100644
--- a/packages/helpers/api-schema-to-openapi/README.md
+++ b/packages/helpers/api-schema-to-openapi/README.md
@@ -4,8 +4,27 @@ Helper function to generate OpenAPI (Swagger) spec from [iRacing API zod schema]
## Installation
-_Coming soon_
+```sh
+$ pnpm add -D @iracing/data/api-schema-to-openapi
+```
## Usage
-_Coming soon_
+### CLI
+
+```sh
+$ iracing-api-openapi -f openapi.json -o ~/Desktop
+```
+
+### Programmatically
+
+```ts
+import { generateOpenAPISpect } from "@iracing-data/api-schema-to-openapi";
+
+await generateOpenAPISpec({
+ fileName: "openapi.json",
+ outputDir: "~/Desktop",
+});
+
+console.log("Output schema to", path.join(output, file));
+```
diff --git a/packages/helpers/oauth-schema-to-openapi/README.md b/packages/helpers/oauth-schema-to-openapi/README.md
index e9c9701..de9393c 100644
--- a/packages/helpers/oauth-schema-to-openapi/README.md
+++ b/packages/helpers/oauth-schema-to-openapi/README.md
@@ -1,11 +1,30 @@
-# @iracing-data/api-schema-to-openapi-schema
+# @iracing-data/api-schema-to-openapi
-Helper function to generate OpenAPI (Swagger) spec from [iRacing API zod schema](../../api-schema/).
+Helper function to generate OpenAPI (Swagger) spec from [iRacing OAuth API zod schema](../../oauth/schema/).
## Installation
-_Coming soon_
+```sh
+$ pnpm add -D @iracing/data/oauth-schema-to-openapi
+```
## Usage
-_Coming soon_
+### CLI
+
+```sh
+$ iracing-oauth-api-openapi -f openapi.json -o ~/Desktop
+```
+
+### Programmatically
+
+```ts
+import { generateOpenAPISpect } from "@iracing-data/oauth-schema-to-openapi";
+
+await generateOpenAPISpec({
+ fileName: "openapi-oauth.json",
+ outputDir: "~/Desktop",
+});
+
+console.log("Output schema to", path.join(output, file));
+```
From 9f415dc84868927bc1a86781a28ad913002f5445 Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 16:09:31 -0500
Subject: [PATCH 07/28] Add type exports
---
packages/oauth/schema/src/schema.ts | 33 +++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/packages/oauth/schema/src/schema.ts b/packages/oauth/schema/src/schema.ts
index ff5b232..4e8089c 100644
--- a/packages/oauth/schema/src/schema.ts
+++ b/packages/oauth/schema/src/schema.ts
@@ -170,3 +170,36 @@ export const IRacingOAuthRevokeCurrentSessionInputSchema = z.object({
export const IRacingOAuthRevokeSessionsInputSchema = z.object({
sessionIds: z.array(z.string()),
});
+
+// Types
+export type IRacingOAuthClientId = z.infer;
+export type IRacingOAuthRequestIdHeader = z.infer<
+ typeof IRacingOAuthRequestIdHeaderSchema
+>;
+export type IRacingOAuthHeaders = z.infer;
+export type IRacingOAuthAuthorizeParameters = z.infer<
+ typeof IRacingOAuthAuthorizeParametersSchema
+>;
+export type IRacingOAuthTokenAuthorizationCodeGrantParameters = z.infer<
+ typeof IRacingOAuthTokenAuthorizationCodeGrantParametersSchema
+>;
+export type IRacingOAuthTokenRefreshGrantParameters = z.infer<
+ typeof IRacingOAuthTokenRefreshGrantParametersSchema
+>;
+export type IRacingOAuthTokenParameters = z.infer<
+ typeof IRacingOAuthTokenParametersSchema
+>;
+export type IRacingOAuthTokenResponse = z.infer<
+ typeof IRacingOAuthTokenResponseSchema
+>;
+export type IRacingOAuthSession = z.infer;
+export type IRacingOAuthSessions = z.infer;
+export type IRacingOAuthProfileResponse = z.infer<
+ typeof IRacingOAuthProfileResponseSchema
+>;
+export type IRacingOAuthRevokeCurrentSessionParameters = z.infer<
+ typeof IRacingOAuthRevokeCurrentSessionInputSchema
+>;
+export type IRacingOAuthRevokeSessionsParameters = z.infer<
+ typeof IRacingOAuthRevokeSessionsInputSchema
+>;
From 39a9cc0440ad0176ebf340bbd141b71adce71b3d Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Tue, 11 Nov 2025 17:46:05 -0500
Subject: [PATCH 08/28] update type export
---
packages/api-schema/src/schema.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/packages/api-schema/src/schema.ts b/packages/api-schema/src/schema.ts
index 72bb3c0..c00fa4b 100644
--- a/packages/api-schema/src/schema.ts
+++ b/packages/api-schema/src/schema.ts
@@ -723,6 +723,9 @@ export type IRacingCustomerId = z.infer;
export type IRacingCategory = z.infer;
export type IRacingDivision = z.infer;
export type IRacingAPIResponse = z.infer;
+export type IRacingDriverStatsByCategoryPath = z.infer<
+ typeof IRacingDriverStatsByCategoryPathSchema
+>;
export type IRacingErrorResponse = z.infer;
export type IRacingMaintenanceResponse = z.infer<
From 88407582a700520238f1e12d8a650e1ce3f2e0ff Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Wed, 12 Nov 2025 13:37:17 -0500
Subject: [PATCH 09/28] update error responses
---
packages/api-schema/src/schema.ts | 55 ++++++++++++++++++++++++-------
1 file changed, 43 insertions(+), 12 deletions(-)
diff --git a/packages/api-schema/src/schema.ts b/packages/api-schema/src/schema.ts
index c00fa4b..5fdff10 100644
--- a/packages/api-schema/src/schema.ts
+++ b/packages/api-schema/src/schema.ts
@@ -53,15 +53,15 @@ export const IRacingRateLimitHeadersSchema = z
"Headers included with every request, indicating current rate limit status for the requesting session.",
});
-export const IRacingErrorResponseSchema = z.object({
- error: z.string(),
- message: z.string().optional(),
-});
-
-export const IRacingMaintenanceResponseSchema = z.object({
- ...IRacingErrorResponseSchema.shape,
- note: z.string().optional(),
-});
+export const IRacingErrorResponseSchema = z
+ .object({
+ error: z.string(),
+ message: z.string().optional(),
+ note: z.string().optional(),
+ })
+ .meta({
+ id: "errorResponse",
+ });
export const IRacingCustomerIdSchema = z.coerce.number().meta({
description: "Numeric ID of a customer on iRacing.",
@@ -702,6 +702,28 @@ export const IRacingTimeAttackMemberSeasonResultsParametersSchema = z.object({
ta_comp_season_id: z.number(),
});
+export const IRacingParametersDocsResponseSchema = z.object({
+ type: z.string(),
+ note: z.string().optional(),
+ required: z.boolean().optional(),
+});
+
+export const IRacingServiceMethodDocsResponseSchema = z.object({
+ link: z.url(),
+ parameters: z.record(z.string(), IRacingParametersDocsResponseSchema),
+ expirationSeconds: z.number().optional(),
+});
+
+export const IRacingServiceDocsResponseSchema = z.record(
+ z.string(),
+ IRacingServiceMethodDocsResponseSchema
+);
+
+export const IRacingServicesDocsResponseSchema = z.record(
+ z.string(),
+ IRacingServiceDocsResponseSchema
+);
+
/**
* Types
*/
@@ -728,9 +750,6 @@ export type IRacingDriverStatsByCategoryPath = z.infer<
>;
export type IRacingErrorResponse = z.infer;
-export type IRacingMaintenanceResponse = z.infer<
- typeof IRacingMaintenanceResponseSchema
->;
export type IRacingEventTypePractice = z.infer<
typeof IRacingEventTypePracticeSchema
@@ -894,3 +913,15 @@ export type IRacingTeamGetParameters = z.infer<
export type IRacingTimeAttackMemberSeasonResultsParameters = z.infer<
typeof IRacingTimeAttackMemberSeasonResultsParametersSchema
>;
+export type IRacingParametersDocsResponse = z.infer<
+ typeof IRacingParametersDocsResponseSchema
+>;
+export type IRacingServiceMethodDocsResponse = z.infer<
+ typeof IRacingServiceMethodDocsResponseSchema
+>;
+export type IRacingServiceDocsResponse = z.infer<
+ typeof IRacingServiceDocsResponseSchema
+>;
+export type IRacingServicesDocsResponse = z.infer<
+ typeof IRacingServicesDocsResponseSchema
+>;
From dc3e19e4a59cd78372ca5962e0893846e1a60221 Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Wed, 12 Nov 2025 13:37:40 -0500
Subject: [PATCH 10/28] update responses and operations
---
.../api-schema-to-openapi/src/index.ts | 361 ++++++++++++++----
1 file changed, 282 insertions(+), 79 deletions(-)
diff --git a/packages/helpers/api-schema-to-openapi/src/index.ts b/packages/helpers/api-schema-to-openapi/src/index.ts
index 4a86ad8..e780565 100644
--- a/packages/helpers/api-schema-to-openapi/src/index.ts
+++ b/packages/helpers/api-schema-to-openapi/src/index.ts
@@ -15,7 +15,6 @@ import {
IRacingLeagueSeasonsParametersSchema,
IRacingLeagueSeasonStandingsParametersSchema,
IRacingLookupDriversParametersSchema,
- IRacingMaintenanceResponseSchema,
IRacingMemberAwardInstancesParametersSchema,
IRacingMemberAwardsParametersSchema,
IRacingMemberChartDataParametersSchema,
@@ -38,6 +37,9 @@ import {
IRacingSeriesSeasonListParametersSchema,
IRacingSeriesSeasonScheduleParametersSchema,
IRacingSeriesSeasonsParametersSchema,
+ IRacingServiceDocsResponseSchema,
+ IRacingServiceMethodDocsResponseSchema,
+ IRacingServicesDocsResponseSchema,
IRacingStatsMemberBestsParametersSchema,
IRacingStatsMemberCareerParametersSchema,
IRacingStatsMemberDivisionParametersSchema,
@@ -101,6 +103,26 @@ export async function generateOpenAPISpec({
},
},
},
+ Docs: {
+ description: "Success",
+ content: {
+ "application/json": { schema: IRacingServicesDocsResponseSchema },
+ },
+ },
+ ServiceDocs: {
+ description: "Success",
+ content: {
+ "application/json": { schema: IRacingServiceDocsResponseSchema },
+ },
+ },
+ ServiceMethodDocs: {
+ description: "Success",
+ content: {
+ "application/json": {
+ schema: IRacingServiceMethodDocsResponseSchema,
+ },
+ },
+ },
RateLimited: {
description: "Rate limited",
headers: IRacingRateLimitHeadersSchema,
@@ -114,7 +136,7 @@ export async function generateOpenAPISpec({
description: "Maintenance",
content: {
"application/json": {
- schema: IRacingMaintenanceResponseSchema,
+ schema: IRacingErrorResponseSchema,
},
},
},
@@ -216,645 +238,753 @@ export async function generateOpenAPISpec({
paths: {
"/data/doc": {
get: {
+ operationId: "getDocs",
tags: ["doc"],
responses: {
+ 200: { $ref: "#/components/responses/Docs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/carclass": {
get: {
+ operationId: "getCarClassDocs",
tags: ["doc", "carclass"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/carclass/get": {
get: {
- tags: ["doc"],
+ operationId: "getCarClassGetDocs",
+ tags: ["doc", "carclass"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/car": {
get: {
- tags: ["doc"],
+ operationId: "getCarDocs",
+ tags: ["doc", "car"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/car/assets": {
get: {
- tags: ["doc"],
+ operationId: "getCarAssetsDocs",
+ tags: ["doc", "car"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/car/get": {
get: {
- tags: ["doc"],
+ operationId: "getCarGetDocs",
+ tags: ["doc", "car"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/constants": {
get: {
- tags: ["doc"],
+ operationId: "getConstantsDocs",
+ tags: ["doc", "constants"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/constants/categories": {
get: {
- tags: ["doc"],
+ operationId: "getConstantsCategoriesDocs",
+ tags: ["doc", "constants"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/constants/divisions": {
get: {
- tags: ["doc"],
+ operationId: "getConstantsDivisionsDocs",
+ tags: ["doc", "constants"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/constants/event_types": {
get: {
- tags: ["doc"],
+ operationId: "getConstantsEventTypesDocs",
+ tags: ["doc", "constants"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category": {
get: {
- tags: ["doc"],
+ operationId: "getDriverStatsByCategoryDocs",
+ tags: ["doc", "driver_stats"],
+ responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
+ 401: { $ref: "#/components/responses/Unauthorized" },
+ },
+ },
+ },
+ "/data/doc/driver_stats_by_category/{category}": {
+ get: {
+ operationId: "getDriverStatsByCategoryCategoryDocs",
+ tags: ["doc", "driver_stats"],
+ requestParams: {
+ path: IRacingDriverStatsByCategoryPathSchema,
+ },
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/oval": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/sports_car": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/formula_car": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/road": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/dirt_oval": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/driver_stats_by_category/dirt_road": {
get: {
- tags: ["doc"],
+ tags: ["doc", "driver_stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/hosted": {
get: {
- tags: ["doc"],
+ tags: ["doc", "hosted"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/hosted/combined_sessions": {
get: {
- tags: ["doc"],
+ tags: ["doc", "hosted"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/hosted/sessions": {
get: {
- tags: ["doc"],
+ tags: ["doc", "hosted"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/cust_league_sessions": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/directory": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/get": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/get_points_systems": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/membership": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/roster": {
get: {
- tags: ["doc"],
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/seasons": {
get: {
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/season_standings": {
get: {
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/league/season_sessions": {
get: {
+ tags: ["doc", "league"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup/countries": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup/drivers": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup/flairs": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup/get": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/lookup/licenses": {
get: {
- tags: ["doc"],
+ tags: ["doc", "lookup"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/awards": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/award_instances": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/chart_data": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/get": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/info": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/participation_credits": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/member/profile": {
get: {
- tags: ["doc"],
+ tags: ["doc", "member"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/get": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/event_log": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/lap_chart_data": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/lap_data": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/search_hosted": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/search_series": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/results/season_results": {
get: {
- tags: ["doc"],
+ tags: ["doc", "results"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/season": {
get: {
- tags: ["doc"],
+ tags: ["doc", "season"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/season/list": {
get: {
- tags: ["doc"],
+ tags: ["doc", "season"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/season/race_guide": {
get: {
- tags: ["doc"],
+ tags: ["doc", "season"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/season/spectator_subsessionids": {
get: {
- tags: ["doc"],
+ tags: ["doc", "season"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/season/spectator_subsessionids_detail": {
get: {
- tags: ["doc"],
+ tags: ["doc", "season"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/assets": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/get": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/past_seasons": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/seasons": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/season_list": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/season_schedule": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/series/stats_series": {
get: {
- tags: ["doc"],
+ tags: ["doc", "series"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_bests": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_career": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_division": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_recap": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_recent_races": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_summary": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/member_yearly": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_driver_standings": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_supersession_standings": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_team_standings": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_tt_standings": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_tt_results": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/season_qualify_results": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/stats/world_records": {
get: {
- tags: ["doc"],
+ tags: ["doc", "stats"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
},
"/data/doc/team": {
get: {
- tags: ["doc"],
+ tags: ["doc", "team"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -863,6 +993,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "team"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -871,6 +1002,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "team"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -879,6 +1011,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "time_attack"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -887,6 +1020,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "time_attack"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -895,6 +1029,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "track"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -903,6 +1038,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "track"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -911,6 +1047,7 @@ export async function generateOpenAPISpec({
get: {
tags: ["doc", "track"],
responses: {
+ 200: { $ref: "#/components/responses/ServiceMethodDocs" },
401: { $ref: "#/components/responses/Unauthorized" },
},
},
@@ -930,6 +1067,7 @@ export async function generateOpenAPISpec({
},
"/data/car/assets": {
get: {
+ operationId: "getCarAssets",
description:
"image paths are relative to https://images-static.iracing.com/",
tags: ["car"],
@@ -943,6 +1081,7 @@ export async function generateOpenAPISpec({
},
"/data/car/get": {
get: {
+ operationId: "getCar",
tags: ["car"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -954,6 +1093,7 @@ export async function generateOpenAPISpec({
},
"/data/constants/categories": {
get: {
+ operationId: "getConstantsCategories",
description: "Constant; returned directly as an array of objects",
tags: ["constants"],
responses: {
@@ -966,6 +1106,7 @@ export async function generateOpenAPISpec({
},
"/data/constants/divisions": {
get: {
+ operationId: "getConstantsDivisions",
description: "Constant; returned directly as an array of objects",
tags: ["constants"],
responses: {
@@ -978,6 +1119,7 @@ export async function generateOpenAPISpec({
},
"/data/constants/event_types": {
get: {
+ operationId: "getConstantsEventTypes",
description: "Constant; returned directly as an array of objects",
tags: ["constants"],
responses: {
@@ -990,6 +1132,7 @@ export async function generateOpenAPISpec({
},
"/data/driver_stats_by_category/{category}": {
get: {
+ operationId: "getDriverStatsByCategory",
requestParams: {
path: IRacingDriverStatsByCategoryPathSchema,
},
@@ -1004,6 +1147,7 @@ export async function generateOpenAPISpec({
},
"/data/hosted/combined_sessions": {
get: {
+ operationId: "getHostedCombinedSessions",
description:
"Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.",
requestParams: {
@@ -1020,6 +1164,7 @@ export async function generateOpenAPISpec({
},
"/data/hosted/sessions": {
get: {
+ operationId: "getHostedSessions",
description:
"Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.",
tags: ["hosted"],
@@ -1033,6 +1178,7 @@ export async function generateOpenAPISpec({
},
"/data/league/cust_league_sessions": {
get: {
+ operationId: "getLeagueCustomerLeagueSessions",
tags: ["league"],
requestParams: {
query: IRacingLeagueCustomerSessionsParametersSchema,
@@ -1047,6 +1193,7 @@ export async function generateOpenAPISpec({
},
"/data/league/directory": {
get: {
+ operationId: "getLeagueDirectory",
tags: ["league"],
requestParams: {
query: IRacingLeagueDirectoryParametersSchema,
@@ -1061,6 +1208,7 @@ export async function generateOpenAPISpec({
},
"/data/league/get": {
get: {
+ operationId: "getLeague",
tags: ["league"],
requestParams: {
query: IRacingLeagueGetParametersSchema,
@@ -1075,6 +1223,7 @@ export async function generateOpenAPISpec({
},
"/data/league/get_points_systems": {
get: {
+ operationId: "getLeaguePointsSystems",
tags: ["league"],
requestParams: {
query: IRacingLeagueGetPointsSystemsParametersSchema,
@@ -1089,6 +1238,7 @@ export async function generateOpenAPISpec({
},
"/data/league/membership": {
get: {
+ operationId: "getLeagueMembership",
tags: ["league"],
requestParams: {
query: IRacingLeagueMembershipParametersSchema,
@@ -1103,6 +1253,7 @@ export async function generateOpenAPISpec({
},
"/data/league/roster": {
get: {
+ operationId: "getLeagueRoster",
tags: ["league"],
requestParams: {
query: IRacingLeagueRosterParametersSchema,
@@ -1117,6 +1268,7 @@ export async function generateOpenAPISpec({
},
"/data/league/seasons": {
get: {
+ operationId: "getLeagueSeasons",
tags: ["league"],
requestParams: {
query: IRacingLeagueSeasonsParametersSchema,
@@ -1131,6 +1283,7 @@ export async function generateOpenAPISpec({
},
"/data/league/season_standings": {
get: {
+ operationId: "getLeagueSeasonStandings",
tags: ["league"],
requestParams: {
query: IRacingLeagueSeasonStandingsParametersSchema,
@@ -1145,6 +1298,7 @@ export async function generateOpenAPISpec({
},
"/data/league/season_sessions": {
get: {
+ operationId: "getLeagueSeasonSessions",
tags: ["league"],
requestParams: {
query: IRacingLeagueSeasonSessionsParametersSchema,
@@ -1159,6 +1313,7 @@ export async function generateOpenAPISpec({
},
"/data/lookup/countries": {
get: {
+ operationId: "getLookupCountries",
tags: ["lookup"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1170,6 +1325,7 @@ export async function generateOpenAPISpec({
},
"/data/lookup/flairs": {
get: {
+ operationId: "getLookupFlairs",
tags: ["lookup"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1181,6 +1337,7 @@ export async function generateOpenAPISpec({
},
"/data/lookup/licenses": {
get: {
+ operationId: "getLookupLicenses",
tags: ["lookup"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1192,6 +1349,7 @@ export async function generateOpenAPISpec({
},
"/data/lookup/drivers": {
get: {
+ operationId: "getLookupDrivers",
requestParams: {
query: IRacingLookupDriversParametersSchema,
},
@@ -1206,6 +1364,7 @@ export async function generateOpenAPISpec({
},
"/data/lookup/get": {
get: {
+ operationId: "getLookup",
// requestParams: {
// query: z.record(z.string(), z.string()),
// },
@@ -1220,6 +1379,7 @@ export async function generateOpenAPISpec({
},
"/data/member/awards": {
get: {
+ operationId: "getMemberAwards",
requestParams: {
query: IRacingMemberAwardsParametersSchema,
},
@@ -1234,6 +1394,7 @@ export async function generateOpenAPISpec({
},
"/data/member/award_instances": {
get: {
+ operationId: "getMemberAwardInstances",
requestParams: {
query: IRacingMemberAwardInstancesParametersSchema,
},
@@ -1248,6 +1409,7 @@ export async function generateOpenAPISpec({
},
"/data/member/chart_data": {
get: {
+ operationId: "getMemberChartData",
tags: ["member"],
requestParams: {
query: IRacingMemberChartDataParametersSchema,
@@ -1262,7 +1424,11 @@ export async function generateOpenAPISpec({
},
"/data/member/get": {
get: {
+ operationId: "getMember",
tags: ["member"],
+ externalDocs: {
+ url: "/data/doc/member/get",
+ },
requestParams: {
query: IRacingMemberGetParametersSchema,
},
@@ -1276,6 +1442,7 @@ export async function generateOpenAPISpec({
},
"/data/member/info": {
get: {
+ operationId: "getMemberInfo",
tags: ["member"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1287,6 +1454,7 @@ export async function generateOpenAPISpec({
},
"/data/member/participation_credits": {
get: {
+ operationId: "getMemberParticipationCredits",
tags: ["member"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1298,7 +1466,7 @@ export async function generateOpenAPISpec({
},
"/data/member/profile": {
get: {
- operationId: "getProfile",
+ operationId: "getMemberProfile",
summary: "Gets a requested user's profile.",
requestParams: {
query: IRacingMemberProfileParametersSchema,
@@ -1314,6 +1482,7 @@ export async function generateOpenAPISpec({
},
"/data/results/get": {
get: {
+ operationId: "getResults",
tags: ["results"],
requestParams: {
query: IRacingResultsGetParametersSchema,
@@ -1328,6 +1497,7 @@ export async function generateOpenAPISpec({
},
"/data/results/event_log": {
get: {
+ operationId: "getResultsEventLog",
tags: ["results"],
requestParams: {
query: IRacingResultsEventLogParametersSchema,
@@ -1342,6 +1512,7 @@ export async function generateOpenAPISpec({
},
"/data/results/lap_chart_data": {
get: {
+ operationId: "getResultsLapChartData",
tags: ["results"],
requestParams: {
query: IRacingResultsLapChartDataParametersSchema,
@@ -1356,6 +1527,7 @@ export async function generateOpenAPISpec({
},
"/data/results/lap_data": {
get: {
+ operationId: "getResultsLapData",
tags: ["results"],
requestParams: {
query: IRacingResultsLapDataParametersSchema,
@@ -1370,6 +1542,7 @@ export async function generateOpenAPISpec({
},
"/data/results/search_hosted": {
get: {
+ operationId: "getResultsSearchHosted",
tags: ["results"],
requestParams: {
query: IRacingResultsSearchHostedParametersSchema,
@@ -1384,6 +1557,7 @@ export async function generateOpenAPISpec({
},
"/data/results/search_series": {
get: {
+ operationId: "getResultsSearchSeries",
tags: ["results"],
requestParams: {
query: IRacingResultsSearchSeriesParametersSchema,
@@ -1398,6 +1572,7 @@ export async function generateOpenAPISpec({
},
"/data/results/season_results": {
get: {
+ operationId: "getResultsSeasonResults",
tags: ["results"],
requestParams: {
query: IRacingResultsSeasonResultsParametersSchema,
@@ -1412,6 +1587,7 @@ export async function generateOpenAPISpec({
},
"/data/season/list": {
get: {
+ operationId: "getSeasonList",
requestParams: {
query: IRacingSeasonListParametersSchema,
},
@@ -1426,6 +1602,7 @@ export async function generateOpenAPISpec({
},
"/data/season/race_guide": {
get: {
+ operationId: "getSeasonRaceGuide",
requestParams: {
query: IRacingSeasonRaceGuideParametersSchema,
},
@@ -1440,6 +1617,7 @@ export async function generateOpenAPISpec({
},
"/data/series/assets": {
get: {
+ operationId: "getSeriesAssets",
tags: ["series"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1451,6 +1629,7 @@ export async function generateOpenAPISpec({
},
"/data/series/get": {
get: {
+ operationId: "getSeries",
tags: ["series"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1462,6 +1641,7 @@ export async function generateOpenAPISpec({
},
"/data/series/past_seasons": {
get: {
+ operationId: "getSeriesPastSeasons",
requestParams: {
query: IRacingSeriesPastSeasonsParametersSchema,
},
@@ -1476,6 +1656,7 @@ export async function generateOpenAPISpec({
},
"/data/series/seasons": {
get: {
+ operationId: "getSeriesSeasons",
requestParams: {
query: IRacingSeriesSeasonsParametersSchema,
},
@@ -1490,6 +1671,7 @@ export async function generateOpenAPISpec({
},
"/data/series/season_list": {
get: {
+ operationId: "getSeriesSeasonList",
requestParams: {
query: IRacingSeriesSeasonListParametersSchema,
},
@@ -1504,6 +1686,7 @@ export async function generateOpenAPISpec({
},
"/data/series/season_schedule": {
get: {
+ operationId: "getSeriesSeasonSchedule",
requestParams: {
query: IRacingSeriesSeasonScheduleParametersSchema,
},
@@ -1518,6 +1701,7 @@ export async function generateOpenAPISpec({
},
"/data/series/stats_series": {
get: {
+ operationId: "getSeriesStatsSeries",
tags: ["series"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1529,6 +1713,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_bests": {
get: {
+ operationId: "getStatsMemberBests",
requestParams: {
query: IRacingStatsMemberBestsParametersSchema,
},
@@ -1543,6 +1728,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_career": {
get: {
+ operationId: "getStatsMemberCareer",
requestParams: {
query: IRacingStatsMemberCareerParametersSchema,
},
@@ -1557,6 +1743,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_division": {
get: {
+ operationId: "getStatsMemberDivision",
requestParams: {
query: IRacingStatsMemberDivisionParametersSchema,
},
@@ -1571,6 +1758,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_recap": {
get: {
+ operationId: "getStatsMemberRecap",
requestParams: {
query: IRacingStatsMemberRecapParametersSchema,
},
@@ -1585,6 +1773,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_recent_races": {
get: {
+ operationId: "getStatsMemberRecentRaces",
requestParams: {
query: IRacingStatsMemberRecentRacesParametersSchema,
},
@@ -1599,6 +1788,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_summary": {
get: {
+ operationId: "getStatsMemberSummary",
requestParams: {
query: IRacingStatsMemberSummaryParametersSchema,
},
@@ -1613,6 +1803,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/member_yearly": {
get: {
+ operationId: "getStatsMemberYearly",
requestParams: {
query: IRacingStatsMemberYearlyParametersSchema,
},
@@ -1627,6 +1818,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_driver_standings": {
get: {
+ operationId: "getStatsSeasonDriverStandings",
requestParams: {
query: IRacingStatsSeasonDriverStandingsParametersSchema,
},
@@ -1641,6 +1833,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_supersession_standings": {
get: {
+ operationId: "getStatsSeasonSupersessionStandings",
requestParams: {
query: IRacingStatsSeasonSupersessionStandingsParametersSchema,
},
@@ -1655,6 +1848,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_team_standings": {
get: {
+ operationId: "getStatsSeasonTeamStandings",
requestParams: {
query: IRacingStatsSeasonTeamStandingsParametersSchema,
},
@@ -1669,6 +1863,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_time_trial_standings": {
get: {
+ operationId: "getStatsSeasonTimeTrialStandings",
requestParams: {
query: IRacingStatsSeasonTTStandingsParametersSchema,
},
@@ -1683,6 +1878,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_time_trial_results": {
get: {
+ operationId: "getStatsSeasonTimeTrialResults",
requestParams: {
query: IRacingStatsSeasonTTResultsParametersSchema,
},
@@ -1697,6 +1893,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/season_qualify_results": {
get: {
+ operationId: "getStatsSeasonQualifyResults",
requestParams: {
query: IRacingStatsSeasonQualifyResultsParametersSchema,
},
@@ -1711,6 +1908,7 @@ export async function generateOpenAPISpec({
},
"/data/stats/world_records": {
get: {
+ operationId: "getStatsWorldRecords",
requestParams: {
query: IRacingStatsWorldRecordsParametersSchema,
},
@@ -1725,6 +1923,7 @@ export async function generateOpenAPISpec({
},
"/data/team/get": {
get: {
+ operationId: "getTeam",
requestParams: {
query: IRacingTeamGetParametersSchema,
},
@@ -1739,6 +1938,7 @@ export async function generateOpenAPISpec({
},
"/data/team/membership": {
get: {
+ operationId: "getTeamMembership",
tags: ["team"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1750,6 +1950,7 @@ export async function generateOpenAPISpec({
},
"/data/time_attack/member_season_results": {
get: {
+ operationId: "getTimeAttackMemberSeasonResults",
requestParams: {
query: IRacingTimeAttackMemberSeasonResultsParametersSchema,
},
@@ -1764,6 +1965,7 @@ export async function generateOpenAPISpec({
},
"/data/track/assets": {
get: {
+ operationId: "getTrackAssets",
tags: ["track"],
responses: {
200: { $ref: "#/components/responses/Success" },
@@ -1775,6 +1977,7 @@ export async function generateOpenAPISpec({
},
"/data/track/get": {
get: {
+ operationId: "getTrack",
tags: ["track"],
responses: {
200: { $ref: "#/components/responses/Success" },
From 8c95b03eef315e9e65147326e96a3152896ed6ed Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Wed, 12 Nov 2025 13:38:31 -0500
Subject: [PATCH 11/28] add refresh
---
packages/oauth/client/src/client.ts | 44 ++++++-
packages/oauth/client/src/schema/oauth.ts | 2 +-
pnpm-lock.yaml | 136 ++++++++++++++++++++--
3 files changed, 167 insertions(+), 15 deletions(-)
diff --git a/packages/oauth/client/src/client.ts b/packages/oauth/client/src/client.ts
index 154b99b..e3f4dd9 100644
--- a/packages/oauth/client/src/client.ts
+++ b/packages/oauth/client/src/client.ts
@@ -4,6 +4,7 @@ import {
IRacingOAuthClientMetadata,
IRacingOAuthClientMetadataInput,
IRacingOAuthClientMetadataSchema,
+ IRacingOAuthTokenResponse,
IRacingOAuthTokenResponseSchema,
StateStore,
} from "./schema";
@@ -29,12 +30,13 @@ export class OAuthClient {
this.stateStore = stateStore;
}
- async authorize({ signal }: { signal?: AbortSignal } = {}) {
+ /**
+ * Generates an Authorization URL for kicking off the OAuth flow.
+ * @returns The URL, verifier, and state parameter.
+ */
+ async authorize() {
const verifier = oauth.generateRandomCodeVerifier();
const challenge = await oauth.calculatePKCECodeChallenge(verifier);
-
- signal?.throwIfAborted();
-
const state = oauth.generateRandomState();
await this.stateStore.set(state, {
@@ -43,8 +45,6 @@ export class OAuthClient {
appState: state,
});
- signal?.throwIfAborted();
-
const authorizationUrl = new URL(this.clientMetadata.authorizationUrl);
authorizationUrl.searchParams.set("response_type", "code");
@@ -71,6 +71,12 @@ export class OAuthClient {
return { url: authorizationUrl, verifier, state };
}
+ /**
+ * Given the parameters from the authorization server,
+ * fetches the token.
+ * @param params The query parameters from the authorization server.
+ * @returns The auth token.
+ */
async callback(params: URLSearchParams) {
const stateParam = params.get("state");
const codeParam = params.get("code");
@@ -152,4 +158,30 @@ export class OAuthClient {
return await IRacingOAuthTokenResponseSchema.parseAsync(result);
}
+
+ async refresh(token: string) {
+ const authorizationServer: oauth.AuthorizationServer = {
+ issuer: this.clientMetadata.issuer,
+ token_endpoint: this.clientMetadata.tokenUrl,
+ };
+
+ const client: oauth.Client = {
+ client_id: this.clientMetadata.clientId,
+ };
+
+ const response = await oauth.refreshTokenGrantRequest(
+ authorizationServer,
+ client,
+ oauth.None(),
+ token
+ );
+
+ const result = await oauth.processRefreshTokenResponse(
+ authorizationServer,
+ client,
+ response
+ );
+
+ return await IRacingOAuthTokenResponseSchema.parseAsync(result);
+ }
}
diff --git a/packages/oauth/client/src/schema/oauth.ts b/packages/oauth/client/src/schema/oauth.ts
index c29c8b9..fb3babd 100644
--- a/packages/oauth/client/src/schema/oauth.ts
+++ b/packages/oauth/client/src/schema/oauth.ts
@@ -108,6 +108,6 @@ export type IRacingOAuthCallbackInput = z.infer<
typeof IRacingOAuthCallbackSchema
>;
-export type IRacingOAuthCallbackResponse = z.infer<
+export type IRacingOAuthTokenResponse = z.infer<
typeof IRacingOAuthTokenResponseSchema
>;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bafb885..85debb0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -72,15 +72,18 @@ importers:
'@iracing-data/api':
specifier: workspace:*
version: link:../../packages/api
+ '@iracing-data/api-client':
+ specifier: workspace:*
+ version: link:../../packages/api-client
'@iracing-data/api-router':
specifier: workspace:*
version: link:../../packages/api-router
+ '@iracing-data/api-schema':
+ specifier: workspace:*
+ version: link:../../packages/api-schema
'@iracing-data/oauth-client':
specifier: workspace:*
version: link:../../packages/oauth/client
- '@iracing-data/oauth-router':
- specifier: workspace:*
- version: link:../../packages/oauth/router
axios:
specifier: ^1.7.9
version: 1.8.2
@@ -93,13 +96,19 @@ importers:
express:
specifier: ^5.1.0
version: 5.1.0
+ express-jwt:
+ specifier: ^8.5.1
+ version: 8.5.1
+ jwt-decode:
+ specifier: ^4.0.0
+ version: 4.0.0
zod:
specifier: ^4.0.17
version: 4.0.17
devDependencies:
'@types/express':
- specifier: ^5.0.3
- version: 5.0.3
+ specifier: ^5.0.5
+ version: 5.0.5
'@types/node':
specifier: ^24.10.0
version: 24.10.0
@@ -242,6 +251,10 @@ importers:
version: 5.1.1
packages/api-client:
+ dependencies:
+ axios:
+ specifier: ^1.13.2
+ version: 1.13.2
devDependencies:
'@iracing-data/api-schema-to-openapi':
specifier: workspace:*
@@ -1794,8 +1807,8 @@ packages:
'@types/send': 0.17.5
dev: true
- /@types/express@5.0.3:
- resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==}
+ /@types/express@5.0.5:
+ resolution: {integrity: sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==}
dependencies:
'@types/body-parser': 1.19.6
'@types/express-serve-static-core': 5.0.7
@@ -1817,6 +1830,13 @@ packages:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true
+ /@types/jsonwebtoken@9.0.10:
+ resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==}
+ dependencies:
+ '@types/ms': 2.1.0
+ '@types/node': 24.10.0
+ dev: false
+
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
@@ -1834,6 +1854,10 @@ packages:
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
dev: true
+ /@types/ms@2.1.0:
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ dev: false
+
/@types/node@24.10.0:
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
dependencies:
@@ -2249,6 +2273,16 @@ packages:
- debug
dev: true
+ /axios@1.13.2:
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.4
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
/axios@1.8.2:
resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==}
dependencies:
@@ -2358,6 +2392,10 @@ packages:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: true
+ /buffer-equal-constant-time@1.0.1:
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+ dev: false
+
/buffer-fill@1.0.0:
resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
dev: true
@@ -2855,6 +2893,12 @@ packages:
wcwidth: 1.0.1
dev: true
+ /ecdsa-sig-formatter@1.0.11:
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: false
@@ -3256,6 +3300,19 @@ packages:
engines: {node: '>= 0.6'}
dev: false
+ /express-jwt@8.5.1:
+ resolution: {integrity: sha512-Dv6QjDLpR2jmdb8M6XQXiCcpEom7mK8TOqnr0/TngDKsG2DHVkO8+XnVxkJVN7BuS1I3OrGw6N8j5DaaGgkDRQ==}
+ engines: {node: '>= 8.0.0'}
+ dependencies:
+ '@types/jsonwebtoken': 9.0.10
+ express-unless: 2.1.3
+ jsonwebtoken: 9.0.2
+ dev: false
+
+ /express-unless@2.1.3:
+ resolution: {integrity: sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==}
+ dev: false
+
/express@5.1.0:
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
engines: {node: '>= 18'}
@@ -4283,6 +4340,42 @@ packages:
graceful-fs: 4.2.11
dev: true
+ /jsonwebtoken@9.0.2:
+ resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
+ engines: {node: '>=12', npm: '>=6'}
+ dependencies:
+ jws: 3.2.2
+ lodash.includes: 4.3.0
+ lodash.isboolean: 3.0.3
+ lodash.isinteger: 4.0.4
+ lodash.isnumber: 3.0.3
+ lodash.isplainobject: 4.0.6
+ lodash.isstring: 4.0.1
+ lodash.once: 4.1.1
+ ms: 2.1.3
+ semver: 7.7.2
+ dev: false
+
+ /jwa@1.4.2:
+ resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==}
+ dependencies:
+ buffer-equal-constant-time: 1.0.1
+ ecdsa-sig-formatter: 1.0.11
+ safe-buffer: 5.2.1
+ dev: false
+
+ /jws@3.2.2:
+ resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
+ dependencies:
+ jwa: 1.4.2
+ safe-buffer: 5.2.1
+ dev: false
+
+ /jwt-decode@4.0.0:
+ resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
+ engines: {node: '>=18'}
+ dev: false
+
/keyv@3.0.0:
resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==}
dependencies:
@@ -4318,10 +4411,38 @@ packages:
/lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+ /lodash.includes@4.3.0:
+ resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
+ dev: false
+
+ /lodash.isboolean@3.0.3:
+ resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
+ dev: false
+
+ /lodash.isinteger@4.0.4:
+ resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
+ dev: false
+
+ /lodash.isnumber@3.0.3:
+ resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
+ dev: false
+
+ /lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+ dev: false
+
+ /lodash.isstring@4.0.1:
+ resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
+ dev: false
+
/lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
+ /lodash.once@4.1.1:
+ resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
+ dev: false
+
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
@@ -5208,7 +5329,6 @@ packages:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
- dev: true
/send@1.2.0:
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
From 75a596057b5fb199d4f929c8af552e9bc2ed917d Mon Sep 17 00:00:00 2001
From: Justin Makaila <1638996+justinmakaila@users.noreply.github.com>
Date: Wed, 12 Nov 2025 16:15:14 -0500
Subject: [PATCH 12/28] Refactor to use the generated client
---
examples/oauth-example/package.json | 6 +-
examples/oauth-example/src/index.ts | 56 +-
examples/oauth-example/src/middleware.ts | 71 +
examples/oauth-example/src/oauth-client.ts | 6 +-
examples/oauth-example/src/router.ts | 17 -
examples/oauth-example/src/routes/index.ts | 164 -
packages/api-client/openapi/openapi.json | 2 +-
packages/api-client/package.json | 8 +-
packages/api-client/src/client/.gitignore | 4 +
packages/api-client/src/client/.npmignore | 1 +
.../src/client/.openapi-generator-ignore | 23 +
.../src/client/.openapi-generator/FILES | 35 +
.../src/client/.openapi-generator/VERSION | 1 +
packages/api-client/src/client/README.md | 317 +
packages/api-client/src/client/api.ts | 16586 ++++++++++++++++
packages/api-client/src/client/base.ts | 62 +
packages/api-client/src/client/common.ts | 113 +
.../api-client/src/client/configuration.ts | 121 +
packages/api-client/src/client/docs/CarApi.md | 237 +
.../api-client/src/client/docs/CarclassApi.md | 144 +
.../src/client/docs/ConstantsApi.md | 331 +
packages/api-client/src/client/docs/DocApi.md | 3749 ++++
.../src/client/docs/DriverStatsApi.md | 158 +
.../src/client/docs/ErrorResponse.md | 24 +
.../api-client/src/client/docs/HostedApi.md | 245 +
.../src/client/docs/IracingAPIResponse.md | 23 +
.../src/client/docs/IracingCategory.md | 19 +
.../src/client/docs/IracingChartType.md | 13 +
.../src/client/docs/IracingDivision.md | 29 +
.../src/client/docs/IracingEventType.md | 15 +
.../client/docs/IracingServiceMethodDocs.md | 25 +
.../IracingServiceMethodParametersDocs.md | 25 +
.../api-client/src/client/docs/LeagueApi.md | 1009 +
.../api-client/src/client/docs/LookupApi.md | 522 +
.../api-client/src/client/docs/MemberApi.md | 743 +
.../api-client/src/client/docs/ResultsApi.md | 841 +
.../api-client/src/client/docs/SeasonApi.md | 346 +
.../api-client/src/client/docs/SeriesApi.md | 736 +
.../api-client/src/client/docs/StatsApi.md | 1510 ++
.../api-client/src/client/docs/TeamApi.md | 246 +
.../src/client/docs/TimeAttackApi.md | 151 +
.../api-client/src/client/docs/TrackApi.md | 236 +
packages/api-client/src/client/git_push.sh | 57 +
packages/api-client/src/client/index.ts | 18 +
packages/api-client/src/client/package.json | 31 +
packages/api-client/src/client/tsconfig.json | 21 +
packages/api-client/src/index.ts | 1 +
packages/api-client/tsconfig.build.json | 14 +
packages/api-client/tsconfig.json | 9 +
packages/api-router/package.json | 6 +-
packages/api-router/src/index.ts | 12 +-
packages/api-router/src/middleware.ts | 90 +-
packages/api-router/src/routes/auth/index.ts | 23 -
.../api-router/src/routes/data/car-class.ts | 40 +-
packages/api-router/src/routes/data/car.ts | 36 +-
.../api-router/src/routes/data/constants.ts | 54 +-
packages/api-router/src/routes/data/doc.ts | 12 +
.../src/routes/data/driver-stats.ts | 30 +-
packages/api-router/src/routes/data/hosted.ts | 42 +-
packages/api-router/src/routes/data/index.ts | 1 +
packages/api-router/src/routes/data/league.ts | 250 +-
packages/api-router/src/routes/data/lookup.ts | 97 +-
packages/api-router/src/routes/data/member.ts | 137 +-
packages/api-router/src/routes/data/season.ts | 51 +-
packages/api-router/src/routes/data/series.ts | 153 +-
packages/api-router/src/routes/data/stats.ts | 350 +-
packages/api-router/src/routes/data/team.ts | 43 +-
.../api-router/src/routes/data/time-attack.ts | 24 +-
packages/api-router/src/routes/data/track.ts | 36 +-
packages/api-router/src/routes/index.ts | 1 -
packages/api-schema/src/schema.ts | 58 +-
.../api-schema-to-openapi/src/index.ts | 119 +-
pnpm-lock.yaml | 10 +-
73 files changed, 29265 insertions(+), 1531 deletions(-)
create mode 100644 examples/oauth-example/src/middleware.ts
delete mode 100644 examples/oauth-example/src/router.ts
delete mode 100644 examples/oauth-example/src/routes/index.ts
create mode 100644 packages/api-client/src/client/.gitignore
create mode 100644 packages/api-client/src/client/.npmignore
create mode 100644 packages/api-client/src/client/.openapi-generator-ignore
create mode 100644 packages/api-client/src/client/.openapi-generator/FILES
create mode 100644 packages/api-client/src/client/.openapi-generator/VERSION
create mode 100644 packages/api-client/src/client/README.md
create mode 100644 packages/api-client/src/client/api.ts
create mode 100644 packages/api-client/src/client/base.ts
create mode 100644 packages/api-client/src/client/common.ts
create mode 100644 packages/api-client/src/client/configuration.ts
create mode 100644 packages/api-client/src/client/docs/CarApi.md
create mode 100644 packages/api-client/src/client/docs/CarclassApi.md
create mode 100644 packages/api-client/src/client/docs/ConstantsApi.md
create mode 100644 packages/api-client/src/client/docs/DocApi.md
create mode 100644 packages/api-client/src/client/docs/DriverStatsApi.md
create mode 100644 packages/api-client/src/client/docs/ErrorResponse.md
create mode 100644 packages/api-client/src/client/docs/HostedApi.md
create mode 100644 packages/api-client/src/client/docs/IracingAPIResponse.md
create mode 100644 packages/api-client/src/client/docs/IracingCategory.md
create mode 100644 packages/api-client/src/client/docs/IracingChartType.md
create mode 100644 packages/api-client/src/client/docs/IracingDivision.md
create mode 100644 packages/api-client/src/client/docs/IracingEventType.md
create mode 100644 packages/api-client/src/client/docs/IracingServiceMethodDocs.md
create mode 100644 packages/api-client/src/client/docs/IracingServiceMethodParametersDocs.md
create mode 100644 packages/api-client/src/client/docs/LeagueApi.md
create mode 100644 packages/api-client/src/client/docs/LookupApi.md
create mode 100644 packages/api-client/src/client/docs/MemberApi.md
create mode 100644 packages/api-client/src/client/docs/ResultsApi.md
create mode 100644 packages/api-client/src/client/docs/SeasonApi.md
create mode 100644 packages/api-client/src/client/docs/SeriesApi.md
create mode 100644 packages/api-client/src/client/docs/StatsApi.md
create mode 100644 packages/api-client/src/client/docs/TeamApi.md
create mode 100644 packages/api-client/src/client/docs/TimeAttackApi.md
create mode 100644 packages/api-client/src/client/docs/TrackApi.md
create mode 100644 packages/api-client/src/client/git_push.sh
create mode 100644 packages/api-client/src/client/index.ts
create mode 100644 packages/api-client/src/client/package.json
create mode 100644 packages/api-client/src/client/tsconfig.json
create mode 100644 packages/api-client/src/index.ts
create mode 100644 packages/api-client/tsconfig.build.json
create mode 100644 packages/api-client/tsconfig.json
delete mode 100644 packages/api-router/src/routes/auth/index.ts
create mode 100644 packages/api-router/src/routes/data/doc.ts
diff --git a/examples/oauth-example/package.json b/examples/oauth-example/package.json
index 1db75a6..8de60c8 100644
--- a/examples/oauth-example/package.json
+++ b/examples/oauth-example/package.json
@@ -9,16 +9,20 @@
},
"dependencies": {
"@iracing-data/api": "workspace:*",
+ "@iracing-data/api-client": "workspace:*",
"@iracing-data/api-router": "workspace:*",
+ "@iracing-data/api-schema": "workspace:*",
"@iracing-data/oauth-client": "workspace:*",
"axios": "^1.7.9",
"better-call": "^1.0.24",
"cookie-parser": "^1.4.7",
"express": "^5.1.0",
+ "express-jwt": "^8.5.1",
+ "jwt-decode": "^4.0.0",
"zod": "^4.0.17"
},
"devDependencies": {
- "@types/express": "^5.0.3",
+ "@types/express": "^5.0.5",
"@types/node": "^24.10.0",
"tsx": "^4.19.0"
}
diff --git a/examples/oauth-example/src/index.ts b/examples/oauth-example/src/index.ts
index de55755..075a0cf 100644
--- a/examples/oauth-example/src/index.ts
+++ b/examples/oauth-example/src/index.ts
@@ -1,44 +1,56 @@
-import { createNodeHandler } from "@iracing-data/api-router";
import express from "express";
import cookieParser from "cookie-parser";
-import { page } from "./page";
+import { createRouter } from "@iracing-data/api-router";
import { PORT } from "./config";
+import oauthClient from "./oauth-client";
+import { page } from "./page";
+import {
+ getIRacingSession,
+ IRacingSessionRequest,
+ setIRacingSessionHeader,
+} from "./middleware";
+import { toNodeHandler } from "better-call/node";
-const iracingRouter = createNodeHandler({
+const iracingRouter = createRouter({
basePath: "/iracing",
- openapi: {
- path: "/reference",
- },
- onRequest: (request) => {
- console.debug("Making request:", request);
- },
- onResponse: (response) => {
- console.debug("Response", response);
- },
- onError: (error) => {
- console.debug("Error!", error);
- },
});
const app = express();
-
+app.use(express.json());
app.use(express.urlencoded({ extended: true }), cookieParser());
-app.get("/", (req, res) => {
- const hasToken = req.cookies?.["iracing-token"];
-
+app.get("/", getIRacingSession, (req: IRacingSessionRequest, res) => {
res
.type("html")
.send(
page(
- hasToken
+ req.accessToken
? `Authenticated with iRacing
Sign out`
- : `Login
Login with iRacing`
+ : `Login
Login with iRacing`
)
);
});
-app.use("/iracing", iracingRouter);
+app.get("/iracing/login", async (req, res) => {
+ const { url } = await oauthClient.authorize();
+ return res.redirect(url.toString());
+});
+
+app.get("/oauth/iracing/callback", async (req, res) => {
+ const params = new URLSearchParams(req.url.split("?")[1]);
+ const session = await oauthClient.callback(params);
+ res.cookie("iracing-session", JSON.stringify(session), {
+ httpOnly: true,
+ });
+
+ return res.redirect("/");
+});
+
+app.use(
+ "/iracing",
+ setIRacingSessionHeader,
+ toNodeHandler(iracingRouter.handler)
+);
app.listen(PORT, () => {
console.info(`Example app listening on port ${PORT}`);
diff --git a/examples/oauth-example/src/middleware.ts b/examples/oauth-example/src/middleware.ts
new file mode 100644
index 0000000..55eb872
--- /dev/null
+++ b/examples/oauth-example/src/middleware.ts
@@ -0,0 +1,71 @@
+import { Configuration } from "@iracing-data/api-client";
+import { Request, Response, NextFunction } from "express";
+import { jwtDecode } from "jwt-decode";
+import oauthClient from "./oauth-client";
+
+export interface IRacingSessionRequest extends Request {
+ accessToken?: string;
+}
+
+export async function getIRacingSession(
+ req: IRacingSessionRequest,
+ res: Response,
+ next: NextFunction
+) {
+ req.accessToken = req.get("X-IRACING-ACCESS-TOKEN");
+
+ if (!req.accessToken && req.cookies?.["iracing-session"]) {
+ const parsedSession = JSON.parse(req.cookies["iracing-session"]);
+ const decoded = (jwtDecode(parsedSession.access_token) as any) || {};
+ const exp =
+ typeof decoded.exp === "number"
+ ? decoded.exp
+ : parseInt(decoded.exp || "0", 10);
+
+ // access token still valid
+ if (exp && Date.now() / 1000 < exp) {
+ req.accessToken = parsedSession.access_token;
+ return next();
+ }
+
+ // try to refresh if we have a refresh token
+ if (parsedSession.refresh_token) {
+ try {
+ const newSession = await oauthClient.refresh(
+ parsedSession.refresh_token
+ );
+ res.cookie("iracing-session", JSON.stringify(newSession), {
+ httpOnly: true,
+ secure: true,
+ });
+
+ req.accessToken = newSession.access_token;
+ return next();
+ } catch {
+ res.clearCookie("iracing-session");
+ return next();
+ }
+ }
+
+ // no valid access or refresh token
+ res.clearCookie("iracing-session");
+ return next();
+ }
+
+ next();
+}
+
+export function setIRacingSessionHeader(req, res, next) {
+ if (!req.get("X-IRACING-ACCESS-TOKEN") && req.cookies?.["iracing-session"]) {
+ try {
+ const session = JSON.parse(req.cookies["iracing-session"]);
+ if (session?.access_token) {
+ req.headers["x-iracing-access-token"] = session.access_token;
+ }
+ } catch {
+ // ignore cookie parse errors
+ }
+ }
+
+ next();
+}
diff --git a/examples/oauth-example/src/oauth-client.ts b/examples/oauth-example/src/oauth-client.ts
index 333f87c..77277ad 100644
--- a/examples/oauth-example/src/oauth-client.ts
+++ b/examples/oauth-example/src/oauth-client.ts
@@ -1,8 +1,8 @@
import { OAuthClient } from "@iracing-data/oauth-client";
-import { InMemoryStore } from "./storage/memory";
import { IRACING_CLIENT_ID, PORT } from "./config";
+import { InMemoryStore } from "./storage/memory";
-export const client = new OAuthClient({
+export const oauthClient = new OAuthClient({
clientMetadata: {
clientId: IRACING_CLIENT_ID,
redirectUri: `http://127.0.0.1:${PORT}/oauth/iracing/callback`,
@@ -11,4 +11,4 @@ export const client = new OAuthClient({
stateStore: new InMemoryStore(),
});
-export default client;
+export default oauthClient;
diff --git a/examples/oauth-example/src/router.ts b/examples/oauth-example/src/router.ts
deleted file mode 100644
index 76f5836..0000000
--- a/examples/oauth-example/src/router.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createRouter } from "better-call";
-import * as routes from "./routes";
-
-export const router = createRouter(
- { ...routes },
- {
- openapi: {
- scalar: {
- title: "iRacing OAuth Client Example API",
- version: "0.0.1",
- description: "An iRacing OAuth Client implementation example.",
- },
- },
- }
-);
-
-export default router;
diff --git a/examples/oauth-example/src/routes/index.ts b/examples/oauth-example/src/routes/index.ts
deleted file mode 100644
index b67a25a..0000000
--- a/examples/oauth-example/src/routes/index.ts
+++ /dev/null
@@ -1,164 +0,0 @@
-import client from "@/oauth-client";
-import { BASE_URL } from "@iracing-data/oauth-client";
-import { createEndpoint } from "better-call";
-import path from "path";
-import { z } from "zod";
-
-// TODO: Add routes for session management
-
-export const oauthSignIn = createEndpoint(
- "/oauth/iracing/login",
- {
- method: "GET",
- },
- async (context) => {
- const { url } = await client.authorize();
- return context.redirect(url.toString());
- }
-);
-
-export const oauthCallback = createEndpoint(
- "/oauth/iracing/callback",
- {
- method: "GET",
- query: z.object({
- code: z.string(),
- state: z.string(),
- }),
- },
- async (context) => {
- const token = await client.callback(new URLSearchParams(context.query));
-
- /**
- * TODO: Write some sort of handler at the top-level that consumers can provide to process the token
- * before redirecting.
- */
- context.setCookie("iracing-token", token.access_token, {
- httpOnly: true,
- path: "/",
- maxAge: token.expires_in,
- });
-
- context.setHeader("X-IRACING-ACCESS-TOKEN", token.access_token);
- context.setHeader(
- "X-IRACING-ACCESS-TOKEN-EXPIRES-IN",
- token.expires_in.toString()
- );
-
- if (token.scope) {
- context.setHeader("X-IRACING-SCOPE", token.scope);
- }
-
- if (token.refresh_token) {
- context.setHeader("X-IRACING-REFRESH-TOKEN", token.refresh_token);
- }
-
- if (token.refresh_token_expires_in) {
- context.setHeader(
- "X-IRACING-REFRESH-TOKEN-EXPIRES-IN",
- token.refresh_token_expires_in.toString()
- );
- }
-
- return context.redirect("/");
- }
-);
-
-export const oauthSignOut = createEndpoint(
- "/oauth/iracing/logout",
- {
- method: "GET",
- },
- async (context) => {
- context.setCookie("iracing-token", "", {
- httpOnly: true,
- path: "/",
- maxAge: 0,
- });
-
- return context.redirect("/");
- }
-);
-
-export const oauthSessions = createEndpoint(
- "/oauth/sessions",
- {
- method: "GET",
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "sessions"), {
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- },
- });
- }
-);
-
-export const revokeCurrentOauthSession = createEndpoint(
- "/oauth/revoke/current",
- {
- method: "POST",
- body: z.object({
- forgetBrowser: z.boolean().optional(),
- }),
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "current"), {
- body: JSON.stringify(context.body),
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
-
-export const revokeOauthSessions = createEndpoint(
- "/oauth/revoke/current",
- {
- method: "POST",
- body: z.object({
- sessionIds: z.array(z.string()),
- }),
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "current"), {
- body: JSON.stringify({ session_ids: context.body.sessionIds.join(",") }),
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
-
-export const revokeClientOauthSessions = createEndpoint(
- "/oauth/revoke/client",
- {
- method: "POST",
- },
- async (context) => {
- const accessToken =
- context.getHeader("X-IRACING-ACCESS-TOKEN") ||
- context.getCookie("iracing-token");
-
- return fetch(path.join(BASE_URL, "revoke", "client"), {
- headers: {
- Authorization: accessToken ? `Bearer ${accessToken}` : undefined,
- "Content-Type": "application/x-www-form-urlencoded",
- },
- });
- }
-);
diff --git a/packages/api-client/openapi/openapi.json b/packages/api-client/openapi/openapi.json
index cc71a81..1b1a030 100644
--- a/packages/api-client/openapi/openapi.json
+++ b/packages/api-client/openapi/openapi.json
@@ -1 +1 @@
-{"openapi":"3.1.1","info":{"title":"iRacing `/data` API","version":"0.0.1"},"servers":[{"url":"https://members-ng.iracing.com/"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"doc","description":"A documentation endpoint."},{"name":"car","description":"Car service endpoint."},{"name":"carclass","description":"Car class service endpoint."},{"name":"constants","description":"Constants service endpoint."},{"name":"driver_stats","description":"Driver stats service endpoint."},{"name":"hosted","description":"Hosted service endpoint."},{"name":"league","description":"League service endpoint"},{"name":"lookup","description":"Lookup endpoints for static reference data (countries, licenses, drivers, etc.)"},{"name":"member","description":"Member profile and related endpoints (profile, awards, participation credits)."},{"name":"results","description":"Race and session result endpoints (lap data, event logs, season results)."},{"name":"season","description":"Season-related endpoints (season lists, race guides, schedules)."},{"name":"series","description":"Series endpoints (series metadata, seasons, assets)."},{"name":"stats","description":"Statistical endpoints and summaries for members and seasons."},{"name":"team","description":"Team endpoints (team details, membership)."},{"name":"time_attack","description":"Time attack specific endpoints and member season results."},{"name":"track","description":"Track metadata and asset endpoints."}],"paths":{"/data/doc":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass":{"get":{"tags":["doc","carclass"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/assets":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/categories":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/divisions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/event_types":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/oval":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/sports_car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/formula_car":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/road":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/dirt_oval":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/dirt_road":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/combined_sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/cust_league_sessions":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/directory":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get_points_systems":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/membership":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/roster":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/seasons":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_standings":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_sessions":{"get":{"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/countries":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/drivers":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/flairs":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/licenses":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/awards":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/award_instances":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/chart_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/info":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/participation_credits":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/profile":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/event_log":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_chart_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_data":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_hosted":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/season_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/list":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/race_guide":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids_detail":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/assets":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/get":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/past_seasons":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/seasons":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_list":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_schedule":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/stats_series":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_bests":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_career":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_division":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recap":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recent_races":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_summary":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_yearly":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_driver_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_supersession_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_team_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_standings":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_qualify_results":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/world_records":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team":{"get":{"tags":["doc"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/get":{"get":{"tags":["doc","team"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/membership":{"get":{"tags":["doc","team"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack":{"get":{"tags":["doc","time_attack"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack/member_season_results":{"get":{"tags":["doc","time_attack"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/assets":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/get":{"get":{"tags":["doc","track"],"responses":{"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/carclass/get":{"get":{"operationId":"getCarClass","summary":"Gets car classes.","tags":["carclass"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/assets":{"get":{"description":"image paths are relative to https://images-static.iracing.com/","tags":["car"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/get":{"get":{"tags":["car"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/categories":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/divisions":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/event_types":{"get":{"description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/driver_stats_by_category/{category}":{"get":{"tags":["driver_stats"],"parameters":[{"in":"path","name":"category","schema":{"$ref":"#/components/schemas/iracingCategory"},"required":true,"description":"Racing category."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/combined_sessions":{"get":{"description":"Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.","tags":["hosted"],"parameters":[{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/sessions":{"get":{"description":"Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.","tags":["hosted"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/cust_league_sessions":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"mine","schema":{"description":"If true, return only sessions created by this user.","type":"boolean"},"description":"If true, return only sessions created by this user."},{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/directory":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"search","schema":{"description":"Will search against league name, description, owner, and league ID.","type":"string"},"description":"Will search against league name, description, owner, and league ID."},{"in":"query","name":"tag","schema":{"description":"One or more tags, comma-separated.","type":"string"},"description":"One or more tags, comma-separated."},{"in":"query","name":"restrict_to_member","schema":{"description":"If true include only leagues for which customer is a member.","type":"boolean"},"description":"If true include only leagues for which customer is a member."},{"in":"query","name":"restrict_to_recruiting","schema":{"description":"If true include only leagues which are recruiting.","type":"boolean"},"description":"If true include only leagues which are recruiting."},{"in":"query","name":"restrict_to_friends","schema":{"description":"If true include only leagues owned by a friend.","type":"boolean"},"description":"If true include only leagues owned by a friend."},{"in":"query","name":"restrict_to_watched","schema":{"description":"If true include only leagues owned by a watched member.","type":"boolean"},"description":"If true include only leagues owned by a watched member."},{"in":"query","name":"minimum_roster_count","schema":{"description":"If set include leagues with at least this number of members.","type":"number"},"description":"If set include leagues with at least this number of members."},{"in":"query","name":"maximum_roster_count","schema":{"description":"If set include leagues with no more than this number of members.","type":"number"},"description":"If set include leagues with no more than this number of members."},{"in":"query","name":"lowerbound","schema":{"description":"First row of results to return. Defaults to 1.","type":"number"},"description":"First row of results to return. Defaults to 1."},{"in":"query","name":"upperbound","schema":{"description":"Last row of results to return. Defaults to lowerbound + 39.","type":"number"},"description":"Last row of results to return. Defaults to lowerbound + 39."},{"in":"query","name":"sort","schema":{"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.","type":"string"},"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance."},{"in":"query","name":"order","schema":{"description":"One of asc or desc. Defaults to asc.","type":"string"},"description":"One of asc or desc. Defaults to asc."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get_points_systems":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.","type":"number"},"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/membership":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.","$ref":"#/components/schemas/customerId"},"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned."},{"in":"query","name":"include_league","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/roster":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/seasons":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"retired","schema":{"description":"If true include seasons which are no longer active.","type":"boolean"},"description":"If true include seasons which are no longer active."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_standings":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"}},{"in":"query","name":"car_id","schema":{"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.","type":"number"},"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_sessions":{"get":{"tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"results_only","schema":{"description":"If true include only sessions for which results are available.","type":"boolean"},"description":"If true include only sessions for which results are available."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/countries":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/flairs":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/licenses":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/drivers":{"get":{"tags":["lookup"],"parameters":[{"in":"query","name":"search_term","schema":{"description":"A cust_id or partial name for which to search.","type":"string"},"required":true,"description":"A cust_id or partial name for which to search."},{"in":"query","name":"league_id","schema":{"description":"Narrow the search to the roster of the given league.","type":"number"},"description":"Narrow the search to the roster of the given league."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/get":{"get":{"tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/awards":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/award_instances":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"award_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/chart_data":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"category_id","schema":{"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road","type":"number"},"required":true,"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road"},{"in":"query","name":"chart_type","schema":{"description":"1 - iRating; 2 - TT Rating; 3 - License/SR","$ref":"#/components/schemas/iracingChartType"},"required":true,"description":"1 - iRating; 2 - TT Rating; 3 - License/SR"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/get":{"get":{"tags":["member"],"parameters":[{"in":"query","name":"cust_ids","schema":{"description":"?cust_ids=2,3,4","type":"array","items":{"type":"number"}},"required":true,"description":"?cust_ids=2,3,4"},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/info":{"get":{"tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/participation_credits":{"get":{"tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/profile":{"get":{"operationId":"getProfile","summary":"Gets a requested user's profile.","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/get":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/event_log":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_chart_data":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_data":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."},{"in":"query","name":"cust_id","schema":{"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.","$ref":"#/components/schemas/customerId"},"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included."},{"in":"query","name":"team_id","schema":{"description":"Required if the subsession was a team event.","type":"number"},"description":"Required if the subsession was a team event."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_hosted":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"The participant's customer ID. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"The participant's customer ID. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"The team ID to search for. Takes priority over cust_id if both are supplied.","type":"number"},"description":"The team ID to search for. Takes priority over cust_id if both are supplied."},{"in":"query","name":"host_cust_id","schema":{"description":"The host's customer ID.","$ref":"#/components/schemas/customerId"},"description":"The host's customer ID."},{"in":"query","name":"session_name","schema":{"description":"Part or all of the session's name.","type":"string"},"description":"Part or all of the session's name."},{"in":"query","name":"league_id","schema":{"description":"Include only results for the league with this ID.","type":"number"},"description":"Include only results for the league with this ID."},{"in":"query","name":"league_season_id","schema":{"description":"Include only results for the league season with this ID.","type":"number"},"description":"Include only results for the league season with this ID."},{"in":"query","name":"car_id","schema":{"description":"One of the cars used by the session.","type":"number"},"description":"One of the cars used by the session."},{"in":"query","name":"track_id","schema":{"description":"The ID of the track used by the session.","type":"number"},"description":"The ID of the track used by the session."},{"in":"query","name":"category_ids","schema":{"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_series":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"season_year","schema":{"description":"Required when using season_quarter.","type":"number"},"description":"Required when using season_quarter."},{"in":"query","name":"season_quarter","schema":{"description":"Required when using season_year.","type":"number"},"description":"Required when using season_year."},{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.","type":"number"},"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied."},{"in":"query","name":"series_id","schema":{"description":"Include only sessions for series with this ID.","type":"number"},"description":"Include only sessions for series with this ID."},{"in":"query","name":"race_week_num","schema":{"description":"Include only sessions with this race week number.","type":"number"},"description":"Include only sessions with this race week number."},{"in":"query","name":"official_only","schema":{"description":"If true, include only sessions earning championship points. Defaults to all.","type":"boolean"},"description":"If true, include only sessions earning championship points. Defaults to all."},{"in":"query","name":"event_types","schema":{"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5","type":"array","items":{"type":"number"}},"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5"},{"in":"query","name":"category_ids","schema":{"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/season_results":{"get":{"tags":["results"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race","$ref":"#/components/schemas/iracingEventType"},"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race"},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/list":{"get":{"tags":["season"],"parameters":[{"in":"query","name":"season_year","schema":{"type":"number"},"required":true},{"in":"query","name":"season_quarter","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/race_guide":{"get":{"tags":["season"],"parameters":[{"in":"query","name":"from","schema":{"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time."},{"in":"query","name":"include_end_after_from","schema":{"description":"Include sessions which start before 'from' but end after.","type":"boolean"},"description":"Include sessions which start before 'from' but end after."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/assets":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/get":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/past_seasons":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"series_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/seasons":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."},{"in":"query","name":"season_quarter","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_list":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"type":"number"}},{"in":"query","name":"season_quarter","schema":{"type":"number"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_schedule":{"get":{"tags":["series"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/stats_series":{"get":{"tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_bests":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"car_id","schema":{"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls.","type":"number"},"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_career":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_division":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"The event type code for the division type: 4 - Time Trial; 5 - Race","anyOf":[{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"required":true,"description":"The event type code for the division type: 4 - Time Trial; 5 - Race"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recap":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"year","schema":{"description":"Season year; if not supplied the current calendar year (UTC) is used.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3},{"type":"number","const":4}]},"description":"Season year; if not supplied the current calendar year (UTC) is used."},{"in":"query","name":"season","schema":{"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year.","type":"number"},"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recent_races":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_summary":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_yearly":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_driver_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_supersession_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_team_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_standings":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_results":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_qualify_results":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/world_records":{"get":{"tags":["stats"],"parameters":[{"in":"query","name":"car_id","schema":{"type":"number"},"required":true},{"in":"query","name":"track_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_year","schema":{"description":"Limit best times to a given year.","type":"number"},"description":"Limit best times to a given year."},{"in":"query","name":"season_quarter","schema":{"description":"Limit best times to a given quarter; only applicable when year is used.","type":"number"},"description":"Limit best times to a given quarter; only applicable when year is used."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/get":{"get":{"tags":["team"],"parameters":[{"in":"query","name":"team_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/membership":{"get":{"tags":["team"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/time_attack/member_season_results":{"get":{"tags":["time_attack"],"parameters":[{"in":"query","name":"ta_comp_season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/assets":{"get":{"tags":["track"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/get":{"get":{"tags":["track"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}}},"components":{"schemas":{"iracingCategory":{"description":"Racing category.","anyOf":[{"description":"Oval discipline","type":"string","const":"oval"},{"description":"Road discipline. Legacy, use `sports_car` or `formula_car` instead.","type":"string","const":"road"},{"description":"Dirt road discipline.","type":"string","const":"dirt_road"},{"description":"Dirt oval discipline.","type":"string","const":"dirt_oval"},{"description":"Sports car discipline.","type":"string","const":"sports_car"},{"description":"Formula car discipline.","type":"string","const":"formula_car"}]},"customerId":{"description":"Numeric ID of a customer on iRacing.","type":"number"},"iracingChartType":{"description":"iRacing Chart Type","anyOf":[{"description":"iRating","type":"number","const":1},{"description":"Time trial rating","type":"number","const":2},{"description":"License rating","type":"number","const":3}]},"iracingEventType":{"description":"iRacing Event Type","anyOf":[{"description":"Practice","type":"number","const":2},{"description":"Qualifying","type":"number","const":3},{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"iracingDivision":{"description":"iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.","anyOf":[{"description":"Division 1","type":"number","const":0},{"description":"Division 2","type":"number","const":1},{"description":"Division 3","type":"number","const":2},{"description":"Division 4","type":"number","const":3},{"description":"Division 5","type":"number","const":4},{"description":"Division 6","type":"number","const":5},{"description":"Division 7","type":"number","const":6},{"description":"Division 8","type":"number","const":7},{"description":"Division 9","type":"number","const":8},{"description":"Division 10","type":"number","const":9},{"description":"Rookie","type":"number","const":10}]},"iracingAPIResponse":{"description":"Response from iRacing `/data` API.","type":"object","properties":{"link":{"description":"A link to the cached data","type":"string","format":"uri"},"expires":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["link","expires"],"additionalProperties":false}},"headers":{"x-ratelimit-limit":{"required":true,"description":"The current total rate limit.","schema":{"title":"Rate limit limit","description":"The current total rate limit.","type":"number"}},"x-ratelimit-remaining":{"required":true,"description":"How much of the rate limit you have remaining.","schema":{"title":"Rate limit remaining","description":"How much of the rate limit you have remaining.","type":"number"}},"x-ratelimit-reset":{"required":true,"description":"When the rate limit will reset in epoch timestamp.","schema":{"title":"Rate limit reset","description":"When the rate limit will reset in epoch timestamp.","type":"string"}}},"responses":{"Success":{"description":"Success","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingAPIResponse"}}}},"RateLimited":{"description":"Rate limited","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"Maintenance":{"description":"Maintenance","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"note":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"Unauthorized":{"description":"Access token is missing or invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT Authentication"},"oAuth2":{"type":"oauth2","description":"OAuth service for obtaining a JWT. For more information, see https://oauth.iracing.com/oauth2/book/introduction.html","flows":{"authorizationCode":{"authorizationUrl":"https://oauth.iracing.com/oauth2/authorize","tokenUrl":"https://oauth.iracing.com/oauth2/token","scopes":{"iracing.auth":"Authorization for iRacing services.","iracing.profile":"Access to the iRacing profile."}}}}}}}
\ No newline at end of file
+{"openapi":"3.1.1","info":{"title":"iRacing `/data` API","version":"0.0.1"},"servers":[{"url":"https://members-ng.iracing.com/"}],"externalDocs":{"url":"/data/doc","description":"Find more information on available services here. Requires authentication."},"security":[{"bearerAuth":[]}],"tags":[{"name":"doc","description":"A documentation endpoint."},{"name":"car","description":"Car service endpoint."},{"name":"carclass","description":"Car class service endpoint."},{"name":"constants","description":"Constants service endpoint."},{"name":"driver_stats","description":"Driver stats service endpoint."},{"name":"hosted","description":"Hosted service endpoint."},{"name":"league","description":"League service endpoint"},{"name":"lookup","description":"Lookup endpoints for static reference data (countries, licenses, drivers, etc.)"},{"name":"member","description":"Member profile and related endpoints (profile, awards, participation credits)."},{"name":"results","description":"Race and session result endpoints (lap data, event logs, season results)."},{"name":"season","description":"Season-related endpoints (season lists, race guides, schedules)."},{"name":"series","description":"Series endpoints (series metadata, seasons, assets)."},{"name":"stats","description":"Statistical endpoints and summaries for members and seasons."},{"name":"team","description":"Team endpoints (team details, membership)."},{"name":"time_attack","description":"Time attack specific endpoints and member season results."},{"name":"track","description":"Track metadata and asset endpoints."}],"paths":{"/data/doc":{"get":{"operationId":"getDocs","tags":["doc"],"responses":{"200":{"$ref":"#/components/responses/Docs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass":{"get":{"operationId":"getCarClassDocs","tags":["doc","carclass"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/carclass/get":{"get":{"operationId":"getCarClassGetDocs","tags":["doc","carclass"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car":{"get":{"operationId":"getCarDocs","tags":["doc","car"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/assets":{"get":{"operationId":"getCarAssetsDocs","tags":["doc","car"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/car/get":{"get":{"operationId":"getCarGetDocs","tags":["doc","car"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants":{"get":{"operationId":"getConstantsDocs","tags":["doc","constants"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/categories":{"get":{"operationId":"getConstantsCategoriesDocs","tags":["doc","constants"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/divisions":{"get":{"operationId":"getConstantsDivisionsDocs","tags":["doc","constants"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/constants/event_types":{"get":{"operationId":"getConstantsEventTypesDocs","tags":["doc","constants"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category":{"get":{"operationId":"getDriverStatsByCategoryDocs","tags":["doc","driver_stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/driver_stats_by_category/{category}":{"get":{"operationId":"getDriverStatsByCategoryCategoryDocs","tags":["doc","driver_stats"],"parameters":[{"in":"path","name":"category","schema":{"$ref":"#/components/schemas/iracingCategory"},"required":true,"description":"Racing category."}],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted":{"get":{"operationId":"getHostedDocs","tags":["doc","hosted"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/combined_sessions":{"get":{"operationId":"getHostedCombinedSessionsDocs","tags":["doc","hosted"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/hosted/sessions":{"get":{"operationId":"getHostedSessionsDocs","tags":["doc","hosted"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league":{"get":{"operationId":"getLeagueDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/cust_league_sessions":{"get":{"operationId":"getLeagueCustomerLeagueSessionsDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/directory":{"get":{"operationId":"getLeagueDirectoryDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get":{"get":{"operationId":"getLeagueGetDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/get_points_systems":{"get":{"operationId":"getLeagueGetPointsSystemsDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/membership":{"get":{"operationId":"getLeagueMembershipDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/roster":{"get":{"operationId":"getLeagueRosterDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/seasons":{"get":{"operationId":"getLeagueSeasonsDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_standings":{"get":{"operationId":"getLeagueSeasonStandingsDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/league/season_sessions":{"get":{"operationId":"getLeagueSeasonSessionsDocs","tags":["doc","league"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup":{"get":{"operationId":"getLookupDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/countries":{"get":{"operationId":"getLookupCountriesDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/drivers":{"get":{"operationId":"getLookupDriversDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/flairs":{"get":{"operationId":"getLookupFlairsDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/get":{"get":{"operationId":"getLookupGetDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/lookup/licenses":{"get":{"operationId":"getLookupLicensesDocs","tags":["doc","lookup"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member":{"get":{"operationId":"getMemberDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/awards":{"get":{"operationId":"getMemberAwardsDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/award_instances":{"get":{"operationId":"getMemberAwardInstancesDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/chart_data":{"get":{"operationId":"getMemberChartDataDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/get":{"get":{"operationId":"getMemberGetDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/info":{"get":{"operationId":"getMemberInfoDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/participation_credits":{"get":{"operationId":"getMemberParticipationCreditsDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/member/profile":{"get":{"operationId":"getMemberProfileDocs","tags":["doc","member"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results":{"get":{"operationId":"getResultsDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/get":{"get":{"operationId":"getResultsGetDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/event_log":{"get":{"operationId":"getResultsEventLogDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_chart_data":{"get":{"operationId":"getResultsLapChartDataDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/lap_data":{"get":{"operationId":"getResultsLapDataDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_hosted":{"get":{"operationId":"getResultsSearchHostedDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/search_series":{"get":{"operationId":"getResultsSearchSeriesDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/results/season_results":{"get":{"operationId":"getResultsSeasonResultsDocs","tags":["doc","results"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season":{"get":{"operationId":"getSeasonDocs","tags":["doc","season"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/list":{"get":{"operationId":"getSeasonListDocs","tags":["doc","season"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/race_guide":{"get":{"operationId":"getSeasonRaceGuideDocs","tags":["doc","season"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids":{"get":{"tags":["doc","season"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/season/spectator_subsessionids_detail":{"get":{"tags":["doc","season"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/assets":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/get":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/past_seasons":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/seasons":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_list":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/season_schedule":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/series/stats_series":{"get":{"tags":["doc","series"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_bests":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_career":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_division":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recap":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_recent_races":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_summary":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/member_yearly":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_driver_standings":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_supersession_standings":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_team_standings":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_standings":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_tt_results":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/season_qualify_results":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/stats/world_records":{"get":{"tags":["doc","stats"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team":{"get":{"operationId":"getTeamDocs","tags":["doc","team"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/get":{"get":{"operationId":"getTeamGetDocs","tags":["doc","team"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/team/membership":{"get":{"operationId":"getTeamMembershipDocs","tags":["doc","team"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack":{"get":{"tags":["doc","time_attack"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/time_attack/member_season_results":{"get":{"tags":["doc","time_attack"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track":{"get":{"tags":["doc","track"],"responses":{"200":{"$ref":"#/components/responses/ServiceDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/assets":{"get":{"tags":["doc","track"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/doc/track/get":{"get":{"tags":["doc","track"],"responses":{"200":{"$ref":"#/components/responses/ServiceMethodDocs"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/data/carclass/get":{"get":{"operationId":"getCarClass","summary":"Gets car classes.","tags":["carclass"],"externalDocs":{"url":"/data/doc/carclass/get"},"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/assets":{"get":{"operationId":"getCarAssets","description":"image paths are relative to https://images-static.iracing.com/","tags":["car"],"externalDocs":{"url":"/data/doc/car/assets"},"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/car/get":{"get":{"operationId":"getCar","tags":["car"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/categories":{"get":{"operationId":"getConstantsCategories","description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/divisions":{"get":{"operationId":"getConstantsDivisions","description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/constants/event_types":{"get":{"operationId":"getConstantsEventTypes","description":"Constant; returned directly as an array of objects","tags":["constants"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/driver_stats_by_category/{category}":{"get":{"operationId":"getDriverStatsByCategory","tags":["driver_stats"],"parameters":[{"in":"path","name":"category","schema":{"$ref":"#/components/schemas/iracingCategory"},"required":true,"description":"Racing category."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/combined_sessions":{"get":{"operationId":"getHostedCombinedSessions","description":"Sessions that can be joined as a driver or spectator, and also includes non-league pending sessions for the user.","tags":["hosted"],"parameters":[{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/hosted/sessions":{"get":{"operationId":"getHostedSessions","description":"Sessions that can be joined as a driver. Without spectator and non-league pending sessions for the user.","tags":["hosted"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/cust_league_sessions":{"get":{"operationId":"getLeagueCustomerLeagueSessions","tags":["league"],"parameters":[{"in":"query","name":"mine","schema":{"description":"If true, return only sessions created by this user.","type":"boolean"},"description":"If true, return only sessions created by this user."},{"in":"query","name":"package_id","schema":{"description":"If set, return only sessions using this car or track package ID.","type":"number"},"description":"If set, return only sessions using this car or track package ID."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/directory":{"get":{"operationId":"getLeagueDirectory","tags":["league"],"parameters":[{"in":"query","name":"search","schema":{"description":"Will search against league name, description, owner, and league ID.","type":"string"},"description":"Will search against league name, description, owner, and league ID."},{"in":"query","name":"tag","schema":{"description":"One or more tags, comma-separated.","type":"string"},"description":"One or more tags, comma-separated."},{"in":"query","name":"restrict_to_member","schema":{"description":"If true include only leagues for which customer is a member.","type":"boolean"},"description":"If true include only leagues for which customer is a member."},{"in":"query","name":"restrict_to_recruiting","schema":{"description":"If true include only leagues which are recruiting.","type":"boolean"},"description":"If true include only leagues which are recruiting."},{"in":"query","name":"restrict_to_friends","schema":{"description":"If true include only leagues owned by a friend.","type":"boolean"},"description":"If true include only leagues owned by a friend."},{"in":"query","name":"restrict_to_watched","schema":{"description":"If true include only leagues owned by a watched member.","type":"boolean"},"description":"If true include only leagues owned by a watched member."},{"in":"query","name":"minimum_roster_count","schema":{"description":"If set include leagues with at least this number of members.","type":"number"},"description":"If set include leagues with at least this number of members."},{"in":"query","name":"maximum_roster_count","schema":{"description":"If set include leagues with no more than this number of members.","type":"number"},"description":"If set include leagues with no more than this number of members."},{"in":"query","name":"lowerbound","schema":{"description":"First row of results to return. Defaults to 1.","type":"number"},"description":"First row of results to return. Defaults to 1."},{"in":"query","name":"upperbound","schema":{"description":"Last row of results to return. Defaults to lowerbound + 39.","type":"number"},"description":"Last row of results to return. Defaults to lowerbound + 39."},{"in":"query","name":"sort","schema":{"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance.","type":"string"},"description":"One of relevance, leaguename, displayname, rostercount. displayname is owners's name. Defaults to relevance."},{"in":"query","name":"order","schema":{"description":"One of asc or desc. Defaults to asc.","type":"string"},"description":"One of asc or desc. Defaults to asc."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get":{"get":{"operationId":"getLeague","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/get_points_systems":{"get":{"operationId":"getLeaguePointsSystems","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned.","type":"number"},"description":"If included and the season is using custom points (points_system_id:2) then the custom points option is included in the returned list. Otherwise the custom points option is not returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/membership":{"get":{"operationId":"getLeagueMembership","tags":["league"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned.","$ref":"#/components/schemas/customerId"},"description":"If different from the authenticated member, the following restrictions apply: - Caller cannot be on requested customer's block list or an empty list will result; - Requested customer cannot have their online activity preference set to hidden or an empty list will result; - Only leagues for which the requested customer is an admin and the league roster is not private are returned."},{"in":"query","name":"include_league","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/roster":{"get":{"operationId":"getLeagueRoster","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/seasons":{"get":{"operationId":"getLeagueSeasons","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"retired","schema":{"description":"If true include seasons which are no longer active.","type":"boolean"},"description":"If true include seasons which are no longer active."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_standings":{"get":{"operationId":"getLeagueSeasonStandings","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"}},{"in":"query","name":"car_id","schema":{"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes.","type":"number"},"description":"If car_class_id is included then the standings are for the car in that car class, otherwise they are for the car across car classes."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/league/season_sessions":{"get":{"operationId":"getLeagueSeasonSessions","tags":["league"],"parameters":[{"in":"query","name":"league_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"results_only","schema":{"description":"If true include only sessions for which results are available.","type":"boolean"},"description":"If true include only sessions for which results are available."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/countries":{"get":{"operationId":"getLookupCountries","tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/flairs":{"get":{"operationId":"getLookupFlairs","tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/licenses":{"get":{"operationId":"getLookupLicenses","tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/drivers":{"get":{"operationId":"getLookupDrivers","tags":["lookup"],"parameters":[{"in":"query","name":"search_term","schema":{"description":"A cust_id or partial name for which to search.","type":"string"},"required":true,"description":"A cust_id or partial name for which to search."},{"in":"query","name":"league_id","schema":{"description":"Narrow the search to the roster of the given league.","type":"number"},"description":"Narrow the search to the roster of the given league."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/lookup/get":{"get":{"operationId":"getLookup","tags":["lookup"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/awards":{"get":{"operationId":"getMemberAwards","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/award_instances":{"get":{"operationId":"getMemberAwardInstances","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"award_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/chart_data":{"get":{"operationId":"getMemberChartData","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"category_id","schema":{"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road","type":"number"},"required":true,"description":"1 - Oval; 2 - Road; 3 - Dirt oval; 4 - Dirt road"},{"in":"query","name":"chart_type","schema":{"description":"1 - iRating; 2 - TT Rating; 3 - License/SR","$ref":"#/components/schemas/iracingChartType"},"required":true,"description":"1 - iRating; 2 - TT Rating; 3 - License/SR"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/get":{"get":{"operationId":"getMember","tags":["member"],"externalDocs":{"url":"/data/doc/member/get"},"parameters":[{"in":"query","name":"cust_ids","schema":{"description":"?cust_ids=2,3,4","type":"array","items":{"type":"number"}},"required":true,"description":"?cust_ids=2,3,4"},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/info":{"get":{"operationId":"getMemberInfo","tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/participation_credits":{"get":{"operationId":"getMemberParticipationCredits","tags":["member"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/member/profile":{"get":{"operationId":"getMemberProfile","summary":"Gets a requested user's profile.","tags":["member"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/get":{"get":{"operationId":"getResults","tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"type":"boolean"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/event_log":{"get":{"operationId":"getResultsEventLog","tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_chart_data":{"get":{"operationId":"getResultsLapChartData","tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/lap_data":{"get":{"operationId":"getResultsLapData","tags":["results"],"parameters":[{"in":"query","name":"subsession_id","schema":{"type":"number"},"required":true},{"in":"query","name":"simsession_number","schema":{"description":"The main event is 0; the preceding event is -1, and so on.","type":"number"},"required":true,"description":"The main event is 0; the preceding event is -1, and so on."},{"in":"query","name":"cust_id","schema":{"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included.","$ref":"#/components/schemas/customerId"},"description":"Required if the subsession was a single-driver event. Optional for team events. If omitted for a team event then the laps driven by all the team's drivers will be included."},{"in":"query","name":"team_id","schema":{"description":"Required if the subsession was a team event.","type":"number"},"description":"Required if the subsession was a team event."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_hosted":{"get":{"operationId":"getResultsSearchHosted","tags":["results"],"parameters":[{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"The participant's customer ID. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"The participant's customer ID. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"The team ID to search for. Takes priority over cust_id if both are supplied.","type":"number"},"description":"The team ID to search for. Takes priority over cust_id if both are supplied."},{"in":"query","name":"host_cust_id","schema":{"description":"The host's customer ID.","$ref":"#/components/schemas/customerId"},"description":"The host's customer ID."},{"in":"query","name":"session_name","schema":{"description":"Part or all of the session's name.","type":"string"},"description":"Part or all of the session's name."},{"in":"query","name":"league_id","schema":{"description":"Include only results for the league with this ID.","type":"number"},"description":"Include only results for the league with this ID."},{"in":"query","name":"league_season_id","schema":{"description":"Include only results for the league season with this ID.","type":"number"},"description":"Include only results for the league season with this ID."},{"in":"query","name":"car_id","schema":{"description":"One of the cars used by the session.","type":"number"},"description":"One of the cars used by the session."},{"in":"query","name":"track_id","schema":{"description":"The ID of the track used by the session.","type":"number"},"description":"The ID of the track used by the session."},{"in":"query","name":"category_ids","schema":{"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"Track categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/search_series":{"get":{"operationId":"getResultsSearchSeries","tags":["results"],"parameters":[{"in":"query","name":"season_year","schema":{"description":"Required when using season_quarter.","type":"number"},"description":"Required when using season_quarter."},{"in":"query","name":"season_quarter","schema":{"description":"Required when using season_year.","type":"number"},"description":"Required when using season_year."},{"in":"query","name":"start_range_begin","schema":{"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session start times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"start_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if start_range_begin is less than 90 days in the past."},{"in":"query","name":"finish_range_begin","schema":{"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\".","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"Session finish times. ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\"."},{"in":"query","name":"finish_range_end","schema":{"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"description":"ISO-8601 UTC time zero offset: \"2022-04-01T15:45Z\". Exclusive. May be omitted if finish_range_begin is less than 90 days in the past."},{"in":"query","name":"cust_id","schema":{"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied.","$ref":"#/components/schemas/customerId"},"description":"Include only sessions in which this customer participated. Ignored if team_id is supplied."},{"in":"query","name":"team_id","schema":{"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied.","type":"number"},"description":"Include only sessions in which this team participated. Takes priority over cust_id if both are supplied."},{"in":"query","name":"series_id","schema":{"description":"Include only sessions for series with this ID.","type":"number"},"description":"Include only sessions for series with this ID."},{"in":"query","name":"race_week_num","schema":{"description":"Include only sessions with this race week number.","type":"number"},"description":"Include only sessions with this race week number."},{"in":"query","name":"official_only","schema":{"description":"If true, include only sessions earning championship points. Defaults to all.","type":"boolean"},"description":"If true, include only sessions earning championship points. Defaults to all."},{"in":"query","name":"event_types","schema":{"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5","type":"array","items":{"type":"number"}},"description":"Types of events to include in the search. Defaults to all. ?event_types=2,3,4,5"},{"in":"query","name":"category_ids","schema":{"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4","type":"array","items":{"type":"number"}},"description":"License categories to include in the search. Defaults to all. ?category_ids=1,2,3,4"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/results/season_results":{"get":{"operationId":"getResultsSeasonResults","tags":["results"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race","$ref":"#/components/schemas/iracingEventType"},"description":"Retrict to one event type: 2 - Practice; 3 - Qualify; 4 - Time Trial; 5 - Race"},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/list":{"get":{"operationId":"getSeasonList","tags":["season"],"parameters":[{"in":"query","name":"season_year","schema":{"type":"number"},"required":true},{"in":"query","name":"season_quarter","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/season/race_guide":{"get":{"operationId":"getSeasonRaceGuide","tags":["season"],"parameters":[{"in":"query","name":"from","schema":{"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"description":"ISO-8601 offset format. Defaults to the current time. Include sessions with start times up to 3 hours after this time. Times in the past will be rewritten to the current time."},{"in":"query","name":"include_end_after_from","schema":{"description":"Include sessions which start before 'from' but end after.","type":"boolean"},"description":"Include sessions which start before 'from' but end after."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/assets":{"get":{"operationId":"getSeriesAssets","tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/get":{"get":{"operationId":"getSeries","tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/past_seasons":{"get":{"operationId":"getSeriesPastSeasons","tags":["series"],"parameters":[{"in":"query","name":"series_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/seasons":{"get":{"operationId":"getSeriesSeasons","tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."},{"in":"query","name":"season_quarter","schema":{"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned.","type":"number"},"description":"To look up past seasons use both a season_year and season_quarter. Without both, the active seasons are returned."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_list":{"get":{"operationId":"getSeriesSeasonList","tags":["series"],"parameters":[{"in":"query","name":"include_series","schema":{"type":"boolean"}},{"in":"query","name":"season_year","schema":{"type":"number"}},{"in":"query","name":"season_quarter","schema":{"type":"number"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/season_schedule":{"get":{"operationId":"getSeriesSeasonSchedule","tags":["series"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/series/stats_series":{"get":{"operationId":"getSeriesStatsSeries","tags":["series"],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_bests":{"get":{"operationId":"getStatsMemberBests","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"car_id","schema":{"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls.","type":"number"},"description":"First call should exclude car_id; use cars_driven list in return for subsequent calls."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_career":{"get":{"operationId":"getStatsMemberCareer","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_division":{"get":{"operationId":"getStatsMemberDivision","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"event_type","schema":{"description":"The event type code for the division type: 4 - Time Trial; 5 - Race","anyOf":[{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"required":true,"description":"The event type code for the division type: 4 - Time Trial; 5 - Race"}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recap":{"get":{"operationId":"getStatsMemberRecap","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."},{"in":"query","name":"year","schema":{"description":"Season year; if not supplied the current calendar year (UTC) is used.","anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3},{"type":"number","const":4}]},"description":"Season year; if not supplied the current calendar year (UTC) is used."},{"in":"query","name":"season","schema":{"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year.","type":"number"},"description":"Season (quarter) within the year; if not supplied the recap will be for the entire year."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_recent_races":{"get":{"operationId":"getStatsMemberRecentRaces","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_summary":{"get":{"operationId":"getStatsMemberSummary","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/member_yearly":{"get":{"operationId":"getStatsMemberYearly","tags":["stats"],"parameters":[{"in":"query","name":"cust_id","schema":{"description":"Defaults to the authenticated member.","$ref":"#/components/schemas/customerId"},"description":"Defaults to the authenticated member."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_driver_standings":{"get":{"operationId":"getStatsSeasonDriverStandings","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_supersession_standings":{"get":{"operationId":"getStatsSeasonSupersessionStandings","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_team_standings":{"get":{"operationId":"getStatsSeasonTeamStandings","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_standings":{"get":{"operationId":"getStatsSeasonTimeTrialStandings","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"description":"The first race week of a season is 0."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_time_trial_results":{"get":{"operationId":"getStatsSeasonTimeTrialResults","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/season_qualify_results":{"get":{"operationId":"getStatsSeasonQualifyResults","tags":["stats"],"parameters":[{"in":"query","name":"season_id","schema":{"type":"number"},"required":true},{"in":"query","name":"car_class_id","schema":{"type":"number"},"required":true},{"in":"query","name":"race_week_num","schema":{"description":"The first race week of a season is 0.","type":"number"},"required":true,"description":"The first race week of a season is 0."},{"in":"query","name":"division","schema":{"$ref":"#/components/schemas/iracingDivision"}}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/stats/world_records":{"get":{"operationId":"getStatsWorldRecords","tags":["stats"],"externalDocs":{"url":"/data/doc/stats/world_records"},"parameters":[{"in":"query","name":"car_id","schema":{"type":"number"},"required":true},{"in":"query","name":"track_id","schema":{"type":"number"},"required":true},{"in":"query","name":"season_year","schema":{"description":"Limit best times to a given year.","type":"number"},"description":"Limit best times to a given year."},{"in":"query","name":"season_quarter","schema":{"description":"Limit best times to a given quarter; only applicable when year is used.","type":"number"},"description":"Limit best times to a given quarter; only applicable when year is used."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/get":{"get":{"operationId":"getTeam","tags":["team"],"externalDocs":{"url":"/data/doc/team/get"},"parameters":[{"in":"query","name":"team_id","schema":{"type":"number"},"required":true},{"in":"query","name":"include_licenses","schema":{"description":"For faster responses, only request when necessary.","type":"boolean"},"description":"For faster responses, only request when necessary."}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/team/membership":{"get":{"operationId":"getTeamMembership","tags":["team"],"externalDocs":{"url":"/data/doc/team/membership"},"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/time_attack/member_season_results":{"get":{"operationId":"getTimeAttackMemberSeasonResults","tags":["time_attack"],"externalDocs":{"url":"/data/doc/time_attack/member_season_results"},"parameters":[{"in":"query","name":"ta_comp_season_id","schema":{"type":"number"},"required":true}],"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/assets":{"get":{"operationId":"getTrackAssets","tags":["track"],"externalDocs":{"url":"/data/doc/track/assets"},"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}},"/data/track/get":{"get":{"operationId":"getTrack","tags":["track"],"externalDocs":{"url":"/data/doc/track/get"},"responses":{"200":{"$ref":"#/components/responses/Success"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Maintenance"}}}}},"components":{"schemas":{"iracingCategory":{"description":"Racing category.","anyOf":[{"description":"Oval discipline","type":"string","const":"oval"},{"description":"Road discipline. Legacy, use `sports_car` or `formula_car` instead.","type":"string","const":"road"},{"description":"Dirt road discipline.","type":"string","const":"dirt_road"},{"description":"Dirt oval discipline.","type":"string","const":"dirt_oval"},{"description":"Sports car discipline.","type":"string","const":"sports_car"},{"description":"Formula car discipline.","type":"string","const":"formula_car"}]},"customerId":{"description":"Numeric ID of a customer on iRacing.","type":"number"},"iracingChartType":{"description":"iRacing Chart Type","anyOf":[{"description":"iRating","type":"number","const":1},{"description":"Time trial rating","type":"number","const":2},{"description":"License rating","type":"number","const":3}]},"iracingEventType":{"description":"iRacing Event Type","anyOf":[{"description":"Practice","type":"number","const":2},{"description":"Qualifying","type":"number","const":3},{"description":"Time trial","type":"number","const":4},{"description":"Race","type":"number","const":5}]},"iracingDivision":{"description":"iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.","anyOf":[{"description":"Division 1","type":"number","const":0},{"description":"Division 2","type":"number","const":1},{"description":"Division 3","type":"number","const":2},{"description":"Division 4","type":"number","const":3},{"description":"Division 5","type":"number","const":4},{"description":"Division 6","type":"number","const":5},{"description":"Division 7","type":"number","const":6},{"description":"Division 8","type":"number","const":7},{"description":"Division 9","type":"number","const":8},{"description":"Division 10","type":"number","const":9},{"description":"Rookie","type":"number","const":10}]},"iracingAPIResponse":{"description":"Response from iRacing `/data` API.","type":"object","properties":{"link":{"description":"A link to the cached data","type":"string","format":"uri"},"expires":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["link","expires"],"additionalProperties":false},"iracingServicesDocs":{"description":"An index of available services on the iRacing API.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/iracingServiceDocs"}},"iracingServiceDocs":{"description":"An index of service methods available for the requested service.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/iracingServiceMethodDocs"}},"iracingServiceMethodDocs":{"description":"An iRacing API Service Method object.","type":"object","properties":{"link":{"type":"string","format":"uri"},"parameters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/iracingServiceMethodParametersDocs"}},"expirationSeconds":{"type":"number"}},"required":["link","parameters"],"additionalProperties":false},"iracingServiceMethodParametersDocs":{"description":"An iRacing API Service Method Parameters object.","type":"object","properties":{"type":{"type":"string"},"note":{"type":"string"},"required":{"type":"boolean"}},"required":["type"],"additionalProperties":false},"errorResponse":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"note":{"type":"string"}},"required":["error"],"additionalProperties":false}},"headers":{"x-ratelimit-limit":{"required":true,"description":"The current total rate limit.","schema":{"title":"Rate limit limit","description":"The current total rate limit.","type":"number"}},"x-ratelimit-remaining":{"required":true,"description":"How much of the rate limit you have remaining.","schema":{"title":"Rate limit remaining","description":"How much of the rate limit you have remaining.","type":"number"}},"x-ratelimit-reset":{"required":true,"description":"When the rate limit will reset in epoch timestamp.","schema":{"title":"Rate limit reset","description":"When the rate limit will reset in epoch timestamp.","type":"string"}}},"responses":{"Success":{"description":"Success","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingAPIResponse"}}}},"Docs":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingServicesDocs"}}}},"ServiceDocs":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingServiceDocs"}}}},"ServiceMethodDocs":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/iracingServiceMethodDocs"}}}},"RateLimited":{"description":"Rate limited","headers":{"x-ratelimit-limit":{"$ref":"#/components/headers/x-ratelimit-limit"},"x-ratelimit-remaining":{"$ref":"#/components/headers/x-ratelimit-remaining"},"x-ratelimit-reset":{"$ref":"#/components/headers/x-ratelimit-reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorResponse"}}}},"Maintenance":{"description":"Maintenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorResponse"}}}},"Unauthorized":{"description":"Access token is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/errorResponse"}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT Authentication"},"oAuth2":{"type":"oauth2","description":"OAuth service for obtaining a JWT. For more information, see https://oauth.iracing.com/oauth2/book/introduction.html","flows":{"authorizationCode":{"authorizationUrl":"https://oauth.iracing.com/oauth2/authorize","tokenUrl":"https://oauth.iracing.com/oauth2/token","scopes":{"iracing.auth":"Authorization for iRacing services.","iracing.profile":"Access to the iRacing profile."}}}}}}}
\ No newline at end of file
diff --git a/packages/api-client/package.json b/packages/api-client/package.json
index 7047e04..def51a4 100644
--- a/packages/api-client/package.json
+++ b/packages/api-client/package.json
@@ -3,7 +3,13 @@
"version": "0.0.0-alpha.0",
"main": "dist/index.js",
"scripts": {
- "codegen:openapi": "iracing-api-openapi -o ./openapi"
+ "codegen": "pnpm codegen:openapi && pnpm codegen:client",
+ "codegen:openapi": "iracing-api-openapi -o ./openapi",
+ "codegen:client": "openapi-generator-cli generate -g typescript-axios -i openapi/openapi.json -o src/client --additional-properties=useSingleRequestParameter=true,paramNaming='snake_case',npmName='@iracing-data/api-client'",
+ "build": "pnpm codegen && tsc --build tsconfig.build.json"
+ },
+ "dependencies": {
+ "axios": "^1.13.2"
},
"devDependencies": {
"@iracing-data/api-schema-to-openapi": "workspace:*",
diff --git a/packages/api-client/src/client/.gitignore b/packages/api-client/src/client/.gitignore
new file mode 100644
index 0000000..149b576
--- /dev/null
+++ b/packages/api-client/src/client/.gitignore
@@ -0,0 +1,4 @@
+wwwroot/*.js
+node_modules
+typings
+dist
diff --git a/packages/api-client/src/client/.npmignore b/packages/api-client/src/client/.npmignore
new file mode 100644
index 0000000..999d88d
--- /dev/null
+++ b/packages/api-client/src/client/.npmignore
@@ -0,0 +1 @@
+# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm
\ No newline at end of file
diff --git a/packages/api-client/src/client/.openapi-generator-ignore b/packages/api-client/src/client/.openapi-generator-ignore
new file mode 100644
index 0000000..7484ee5
--- /dev/null
+++ b/packages/api-client/src/client/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/packages/api-client/src/client/.openapi-generator/FILES b/packages/api-client/src/client/.openapi-generator/FILES
new file mode 100644
index 0000000..18e6ddc
--- /dev/null
+++ b/packages/api-client/src/client/.openapi-generator/FILES
@@ -0,0 +1,35 @@
+.gitignore
+.npmignore
+README.md
+api.ts
+base.ts
+common.ts
+configuration.ts
+docs/CarApi.md
+docs/CarclassApi.md
+docs/ConstantsApi.md
+docs/DocApi.md
+docs/DriverStatsApi.md
+docs/ErrorResponse.md
+docs/HostedApi.md
+docs/IracingAPIResponse.md
+docs/IracingCategory.md
+docs/IracingChartType.md
+docs/IracingDivision.md
+docs/IracingEventType.md
+docs/IracingServiceMethodDocs.md
+docs/IracingServiceMethodParametersDocs.md
+docs/LeagueApi.md
+docs/LookupApi.md
+docs/MemberApi.md
+docs/ResultsApi.md
+docs/SeasonApi.md
+docs/SeriesApi.md
+docs/StatsApi.md
+docs/TeamApi.md
+docs/TimeAttackApi.md
+docs/TrackApi.md
+git_push.sh
+index.ts
+package.json
+tsconfig.json
diff --git a/packages/api-client/src/client/.openapi-generator/VERSION b/packages/api-client/src/client/.openapi-generator/VERSION
new file mode 100644
index 0000000..6328c54
--- /dev/null
+++ b/packages/api-client/src/client/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.17.0
diff --git a/packages/api-client/src/client/README.md b/packages/api-client/src/client/README.md
new file mode 100644
index 0000000..c165058
--- /dev/null
+++ b/packages/api-client/src/client/README.md
@@ -0,0 +1,317 @@
+## @iracing-data/api-client@0.0.1
+
+This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
+
+Environment
+* Node.js
+* Webpack
+* Browserify
+
+Language level
+* ES5 - you must have a Promises/A+ library installed
+* ES6
+
+Module system
+* CommonJS
+* ES6 module system
+
+It can be used in both TypeScript and JavaScript. In TypeScript, the definition will be automatically resolved via `package.json`. ([Reference](https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html))
+
+### Building
+
+To build and compile the typescript sources to javascript use:
+```
+npm install
+npm run build
+```
+
+### Publishing
+
+First build the package then run `npm publish`
+
+### Consuming
+
+navigate to the folder of your consuming project and run one of the following commands.
+
+_published:_
+
+```
+npm install @iracing-data/api-client@0.0.1 --save
+```
+
+_unPublished (not recommended):_
+
+```
+npm install PATH_TO_GENERATED_PACKAGE --save
+```
+
+### Documentation for API Endpoints
+
+All URIs are relative to *https://members-ng.iracing.com*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*CarApi* | [**getCar**](docs/CarApi.md#getcar) | **GET** /data/car/get |
+*CarApi* | [**getCarAssets**](docs/CarApi.md#getcarassets) | **GET** /data/car/assets |
+*CarApi* | [**getCarAssetsDocs**](docs/CarApi.md#getcarassetsdocs) | **GET** /data/doc/car/assets |
+*CarApi* | [**getCarDocs**](docs/CarApi.md#getcardocs) | **GET** /data/doc/car |
+*CarApi* | [**getCarGetDocs**](docs/CarApi.md#getcargetdocs) | **GET** /data/doc/car/get |
+*CarclassApi* | [**getCarClass**](docs/CarclassApi.md#getcarclass) | **GET** /data/carclass/get | Gets car classes.
+*CarclassApi* | [**getCarClassDocs**](docs/CarclassApi.md#getcarclassdocs) | **GET** /data/doc/carclass |
+*CarclassApi* | [**getCarClassGetDocs**](docs/CarclassApi.md#getcarclassgetdocs) | **GET** /data/doc/carclass/get |
+*ConstantsApi* | [**getConstantsCategories**](docs/ConstantsApi.md#getconstantscategories) | **GET** /data/constants/categories |
+*ConstantsApi* | [**getConstantsCategoriesDocs**](docs/ConstantsApi.md#getconstantscategoriesdocs) | **GET** /data/doc/constants/categories |
+*ConstantsApi* | [**getConstantsDivisions**](docs/ConstantsApi.md#getconstantsdivisions) | **GET** /data/constants/divisions |
+*ConstantsApi* | [**getConstantsDivisionsDocs**](docs/ConstantsApi.md#getconstantsdivisionsdocs) | **GET** /data/doc/constants/divisions |
+*ConstantsApi* | [**getConstantsDocs**](docs/ConstantsApi.md#getconstantsdocs) | **GET** /data/doc/constants |
+*ConstantsApi* | [**getConstantsEventTypes**](docs/ConstantsApi.md#getconstantseventtypes) | **GET** /data/constants/event_types |
+*ConstantsApi* | [**getConstantsEventTypesDocs**](docs/ConstantsApi.md#getconstantseventtypesdocs) | **GET** /data/doc/constants/event_types |
+*DocApi* | [**dataDocSeasonSpectatorSubsessionidsDetailGet**](docs/DocApi.md#datadocseasonspectatorsubsessionidsdetailget) | **GET** /data/doc/season/spectator_subsessionids_detail |
+*DocApi* | [**dataDocSeasonSpectatorSubsessionidsGet**](docs/DocApi.md#datadocseasonspectatorsubsessionidsget) | **GET** /data/doc/season/spectator_subsessionids |
+*DocApi* | [**dataDocSeriesAssetsGet**](docs/DocApi.md#datadocseriesassetsget) | **GET** /data/doc/series/assets |
+*DocApi* | [**dataDocSeriesGet**](docs/DocApi.md#datadocseriesget) | **GET** /data/doc/series |
+*DocApi* | [**dataDocSeriesGetGet**](docs/DocApi.md#datadocseriesgetget) | **GET** /data/doc/series/get |
+*DocApi* | [**dataDocSeriesPastSeasonsGet**](docs/DocApi.md#datadocseriespastseasonsget) | **GET** /data/doc/series/past_seasons |
+*DocApi* | [**dataDocSeriesSeasonListGet**](docs/DocApi.md#datadocseriesseasonlistget) | **GET** /data/doc/series/season_list |
+*DocApi* | [**dataDocSeriesSeasonScheduleGet**](docs/DocApi.md#datadocseriesseasonscheduleget) | **GET** /data/doc/series/season_schedule |
+*DocApi* | [**dataDocSeriesSeasonsGet**](docs/DocApi.md#datadocseriesseasonsget) | **GET** /data/doc/series/seasons |
+*DocApi* | [**dataDocSeriesStatsSeriesGet**](docs/DocApi.md#datadocseriesstatsseriesget) | **GET** /data/doc/series/stats_series |
+*DocApi* | [**dataDocStatsGet**](docs/DocApi.md#datadocstatsget) | **GET** /data/doc/stats |
+*DocApi* | [**dataDocStatsMemberBestsGet**](docs/DocApi.md#datadocstatsmemberbestsget) | **GET** /data/doc/stats/member_bests |
+*DocApi* | [**dataDocStatsMemberCareerGet**](docs/DocApi.md#datadocstatsmembercareerget) | **GET** /data/doc/stats/member_career |
+*DocApi* | [**dataDocStatsMemberDivisionGet**](docs/DocApi.md#datadocstatsmemberdivisionget) | **GET** /data/doc/stats/member_division |
+*DocApi* | [**dataDocStatsMemberRecapGet**](docs/DocApi.md#datadocstatsmemberrecapget) | **GET** /data/doc/stats/member_recap |
+*DocApi* | [**dataDocStatsMemberRecentRacesGet**](docs/DocApi.md#datadocstatsmemberrecentracesget) | **GET** /data/doc/stats/member_recent_races |
+*DocApi* | [**dataDocStatsMemberSummaryGet**](docs/DocApi.md#datadocstatsmembersummaryget) | **GET** /data/doc/stats/member_summary |
+*DocApi* | [**dataDocStatsMemberYearlyGet**](docs/DocApi.md#datadocstatsmemberyearlyget) | **GET** /data/doc/stats/member_yearly |
+*DocApi* | [**dataDocStatsSeasonDriverStandingsGet**](docs/DocApi.md#datadocstatsseasondriverstandingsget) | **GET** /data/doc/stats/season_driver_standings |
+*DocApi* | [**dataDocStatsSeasonQualifyResultsGet**](docs/DocApi.md#datadocstatsseasonqualifyresultsget) | **GET** /data/doc/stats/season_qualify_results |
+*DocApi* | [**dataDocStatsSeasonSupersessionStandingsGet**](docs/DocApi.md#datadocstatsseasonsupersessionstandingsget) | **GET** /data/doc/stats/season_supersession_standings |
+*DocApi* | [**dataDocStatsSeasonTeamStandingsGet**](docs/DocApi.md#datadocstatsseasonteamstandingsget) | **GET** /data/doc/stats/season_team_standings |
+*DocApi* | [**dataDocStatsSeasonTtResultsGet**](docs/DocApi.md#datadocstatsseasonttresultsget) | **GET** /data/doc/stats/season_tt_results |
+*DocApi* | [**dataDocStatsSeasonTtStandingsGet**](docs/DocApi.md#datadocstatsseasonttstandingsget) | **GET** /data/doc/stats/season_tt_standings |
+*DocApi* | [**dataDocStatsWorldRecordsGet**](docs/DocApi.md#datadocstatsworldrecordsget) | **GET** /data/doc/stats/world_records |
+*DocApi* | [**dataDocTimeAttackGet**](docs/DocApi.md#datadoctimeattackget) | **GET** /data/doc/time_attack |
+*DocApi* | [**dataDocTimeAttackMemberSeasonResultsGet**](docs/DocApi.md#datadoctimeattackmemberseasonresultsget) | **GET** /data/doc/time_attack/member_season_results |
+*DocApi* | [**dataDocTrackAssetsGet**](docs/DocApi.md#datadoctrackassetsget) | **GET** /data/doc/track/assets |
+*DocApi* | [**dataDocTrackGet**](docs/DocApi.md#datadoctrackget) | **GET** /data/doc/track |
+*DocApi* | [**dataDocTrackGetGet**](docs/DocApi.md#datadoctrackgetget) | **GET** /data/doc/track/get |
+*DocApi* | [**getCarAssetsDocs**](docs/DocApi.md#getcarassetsdocs) | **GET** /data/doc/car/assets |
+*DocApi* | [**getCarClassDocs**](docs/DocApi.md#getcarclassdocs) | **GET** /data/doc/carclass |
+*DocApi* | [**getCarClassGetDocs**](docs/DocApi.md#getcarclassgetdocs) | **GET** /data/doc/carclass/get |
+*DocApi* | [**getCarDocs**](docs/DocApi.md#getcardocs) | **GET** /data/doc/car |
+*DocApi* | [**getCarGetDocs**](docs/DocApi.md#getcargetdocs) | **GET** /data/doc/car/get |
+*DocApi* | [**getConstantsCategoriesDocs**](docs/DocApi.md#getconstantscategoriesdocs) | **GET** /data/doc/constants/categories |
+*DocApi* | [**getConstantsDivisionsDocs**](docs/DocApi.md#getconstantsdivisionsdocs) | **GET** /data/doc/constants/divisions |
+*DocApi* | [**getConstantsDocs**](docs/DocApi.md#getconstantsdocs) | **GET** /data/doc/constants |
+*DocApi* | [**getConstantsEventTypesDocs**](docs/DocApi.md#getconstantseventtypesdocs) | **GET** /data/doc/constants/event_types |
+*DocApi* | [**getDocs**](docs/DocApi.md#getdocs) | **GET** /data/doc |
+*DocApi* | [**getDriverStatsByCategoryCategoryDocs**](docs/DocApi.md#getdriverstatsbycategorycategorydocs) | **GET** /data/doc/driver_stats_by_category/{category} |
+*DocApi* | [**getDriverStatsByCategoryDocs**](docs/DocApi.md#getdriverstatsbycategorydocs) | **GET** /data/doc/driver_stats_by_category |
+*DocApi* | [**getHostedCombinedSessionsDocs**](docs/DocApi.md#gethostedcombinedsessionsdocs) | **GET** /data/doc/hosted/combined_sessions |
+*DocApi* | [**getHostedDocs**](docs/DocApi.md#gethosteddocs) | **GET** /data/doc/hosted |
+*DocApi* | [**getHostedSessionsDocs**](docs/DocApi.md#gethostedsessionsdocs) | **GET** /data/doc/hosted/sessions |
+*DocApi* | [**getLeagueCustomerLeagueSessionsDocs**](docs/DocApi.md#getleaguecustomerleaguesessionsdocs) | **GET** /data/doc/league/cust_league_sessions |
+*DocApi* | [**getLeagueDirectoryDocs**](docs/DocApi.md#getleaguedirectorydocs) | **GET** /data/doc/league/directory |
+*DocApi* | [**getLeagueDocs**](docs/DocApi.md#getleaguedocs) | **GET** /data/doc/league |
+*DocApi* | [**getLeagueGetDocs**](docs/DocApi.md#getleaguegetdocs) | **GET** /data/doc/league/get |
+*DocApi* | [**getLeagueGetPointsSystemsDocs**](docs/DocApi.md#getleaguegetpointssystemsdocs) | **GET** /data/doc/league/get_points_systems |
+*DocApi* | [**getLeagueMembershipDocs**](docs/DocApi.md#getleaguemembershipdocs) | **GET** /data/doc/league/membership |
+*DocApi* | [**getLeagueRosterDocs**](docs/DocApi.md#getleaguerosterdocs) | **GET** /data/doc/league/roster |
+*DocApi* | [**getLeagueSeasonSessionsDocs**](docs/DocApi.md#getleagueseasonsessionsdocs) | **GET** /data/doc/league/season_sessions |
+*DocApi* | [**getLeagueSeasonStandingsDocs**](docs/DocApi.md#getleagueseasonstandingsdocs) | **GET** /data/doc/league/season_standings |
+*DocApi* | [**getLeagueSeasonsDocs**](docs/DocApi.md#getleagueseasonsdocs) | **GET** /data/doc/league/seasons |
+*DocApi* | [**getLookupCountriesDocs**](docs/DocApi.md#getlookupcountriesdocs) | **GET** /data/doc/lookup/countries |
+*DocApi* | [**getLookupDocs**](docs/DocApi.md#getlookupdocs) | **GET** /data/doc/lookup |
+*DocApi* | [**getLookupDriversDocs**](docs/DocApi.md#getlookupdriversdocs) | **GET** /data/doc/lookup/drivers |
+*DocApi* | [**getLookupFlairsDocs**](docs/DocApi.md#getlookupflairsdocs) | **GET** /data/doc/lookup/flairs |
+*DocApi* | [**getLookupGetDocs**](docs/DocApi.md#getlookupgetdocs) | **GET** /data/doc/lookup/get |
+*DocApi* | [**getLookupLicensesDocs**](docs/DocApi.md#getlookuplicensesdocs) | **GET** /data/doc/lookup/licenses |
+*DocApi* | [**getMemberAwardInstancesDocs**](docs/DocApi.md#getmemberawardinstancesdocs) | **GET** /data/doc/member/award_instances |
+*DocApi* | [**getMemberAwardsDocs**](docs/DocApi.md#getmemberawardsdocs) | **GET** /data/doc/member/awards |
+*DocApi* | [**getMemberChartDataDocs**](docs/DocApi.md#getmemberchartdatadocs) | **GET** /data/doc/member/chart_data |
+*DocApi* | [**getMemberDocs**](docs/DocApi.md#getmemberdocs) | **GET** /data/doc/member |
+*DocApi* | [**getMemberGetDocs**](docs/DocApi.md#getmembergetdocs) | **GET** /data/doc/member/get |
+*DocApi* | [**getMemberInfoDocs**](docs/DocApi.md#getmemberinfodocs) | **GET** /data/doc/member/info |
+*DocApi* | [**getMemberParticipationCreditsDocs**](docs/DocApi.md#getmemberparticipationcreditsdocs) | **GET** /data/doc/member/participation_credits |
+*DocApi* | [**getMemberProfileDocs**](docs/DocApi.md#getmemberprofiledocs) | **GET** /data/doc/member/profile |
+*DocApi* | [**getResultsDocs**](docs/DocApi.md#getresultsdocs) | **GET** /data/doc/results |
+*DocApi* | [**getResultsEventLogDocs**](docs/DocApi.md#getresultseventlogdocs) | **GET** /data/doc/results/event_log |
+*DocApi* | [**getResultsGetDocs**](docs/DocApi.md#getresultsgetdocs) | **GET** /data/doc/results/get |
+*DocApi* | [**getResultsLapChartDataDocs**](docs/DocApi.md#getresultslapchartdatadocs) | **GET** /data/doc/results/lap_chart_data |
+*DocApi* | [**getResultsLapDataDocs**](docs/DocApi.md#getresultslapdatadocs) | **GET** /data/doc/results/lap_data |
+*DocApi* | [**getResultsSearchHostedDocs**](docs/DocApi.md#getresultssearchhosteddocs) | **GET** /data/doc/results/search_hosted |
+*DocApi* | [**getResultsSearchSeriesDocs**](docs/DocApi.md#getresultssearchseriesdocs) | **GET** /data/doc/results/search_series |
+*DocApi* | [**getResultsSeasonResultsDocs**](docs/DocApi.md#getresultsseasonresultsdocs) | **GET** /data/doc/results/season_results |
+*DocApi* | [**getSeasonDocs**](docs/DocApi.md#getseasondocs) | **GET** /data/doc/season |
+*DocApi* | [**getSeasonListDocs**](docs/DocApi.md#getseasonlistdocs) | **GET** /data/doc/season/list |
+*DocApi* | [**getSeasonRaceGuideDocs**](docs/DocApi.md#getseasonraceguidedocs) | **GET** /data/doc/season/race_guide |
+*DocApi* | [**getTeamDocs**](docs/DocApi.md#getteamdocs) | **GET** /data/doc/team |
+*DocApi* | [**getTeamGetDocs**](docs/DocApi.md#getteamgetdocs) | **GET** /data/doc/team/get |
+*DocApi* | [**getTeamMembershipDocs**](docs/DocApi.md#getteammembershipdocs) | **GET** /data/doc/team/membership |
+*DriverStatsApi* | [**getDriverStatsByCategory**](docs/DriverStatsApi.md#getdriverstatsbycategory) | **GET** /data/driver_stats_by_category/{category} |
+*DriverStatsApi* | [**getDriverStatsByCategoryCategoryDocs**](docs/DriverStatsApi.md#getdriverstatsbycategorycategorydocs) | **GET** /data/doc/driver_stats_by_category/{category} |
+*DriverStatsApi* | [**getDriverStatsByCategoryDocs**](docs/DriverStatsApi.md#getdriverstatsbycategorydocs) | **GET** /data/doc/driver_stats_by_category |
+*HostedApi* | [**getHostedCombinedSessions**](docs/HostedApi.md#gethostedcombinedsessions) | **GET** /data/hosted/combined_sessions |
+*HostedApi* | [**getHostedCombinedSessionsDocs**](docs/HostedApi.md#gethostedcombinedsessionsdocs) | **GET** /data/doc/hosted/combined_sessions |
+*HostedApi* | [**getHostedDocs**](docs/HostedApi.md#gethosteddocs) | **GET** /data/doc/hosted |
+*HostedApi* | [**getHostedSessions**](docs/HostedApi.md#gethostedsessions) | **GET** /data/hosted/sessions |
+*HostedApi* | [**getHostedSessionsDocs**](docs/HostedApi.md#gethostedsessionsdocs) | **GET** /data/doc/hosted/sessions |
+*LeagueApi* | [**getLeague**](docs/LeagueApi.md#getleague) | **GET** /data/league/get |
+*LeagueApi* | [**getLeagueCustomerLeagueSessions**](docs/LeagueApi.md#getleaguecustomerleaguesessions) | **GET** /data/league/cust_league_sessions |
+*LeagueApi* | [**getLeagueCustomerLeagueSessionsDocs**](docs/LeagueApi.md#getleaguecustomerleaguesessionsdocs) | **GET** /data/doc/league/cust_league_sessions |
+*LeagueApi* | [**getLeagueDirectory**](docs/LeagueApi.md#getleaguedirectory) | **GET** /data/league/directory |
+*LeagueApi* | [**getLeagueDirectoryDocs**](docs/LeagueApi.md#getleaguedirectorydocs) | **GET** /data/doc/league/directory |
+*LeagueApi* | [**getLeagueDocs**](docs/LeagueApi.md#getleaguedocs) | **GET** /data/doc/league |
+*LeagueApi* | [**getLeagueGetDocs**](docs/LeagueApi.md#getleaguegetdocs) | **GET** /data/doc/league/get |
+*LeagueApi* | [**getLeagueGetPointsSystemsDocs**](docs/LeagueApi.md#getleaguegetpointssystemsdocs) | **GET** /data/doc/league/get_points_systems |
+*LeagueApi* | [**getLeagueMembership**](docs/LeagueApi.md#getleaguemembership) | **GET** /data/league/membership |
+*LeagueApi* | [**getLeagueMembershipDocs**](docs/LeagueApi.md#getleaguemembershipdocs) | **GET** /data/doc/league/membership |
+*LeagueApi* | [**getLeaguePointsSystems**](docs/LeagueApi.md#getleaguepointssystems) | **GET** /data/league/get_points_systems |
+*LeagueApi* | [**getLeagueRoster**](docs/LeagueApi.md#getleagueroster) | **GET** /data/league/roster |
+*LeagueApi* | [**getLeagueRosterDocs**](docs/LeagueApi.md#getleaguerosterdocs) | **GET** /data/doc/league/roster |
+*LeagueApi* | [**getLeagueSeasonSessions**](docs/LeagueApi.md#getleagueseasonsessions) | **GET** /data/league/season_sessions |
+*LeagueApi* | [**getLeagueSeasonSessionsDocs**](docs/LeagueApi.md#getleagueseasonsessionsdocs) | **GET** /data/doc/league/season_sessions |
+*LeagueApi* | [**getLeagueSeasonStandings**](docs/LeagueApi.md#getleagueseasonstandings) | **GET** /data/league/season_standings |
+*LeagueApi* | [**getLeagueSeasonStandingsDocs**](docs/LeagueApi.md#getleagueseasonstandingsdocs) | **GET** /data/doc/league/season_standings |
+*LeagueApi* | [**getLeagueSeasons**](docs/LeagueApi.md#getleagueseasons) | **GET** /data/league/seasons |
+*LeagueApi* | [**getLeagueSeasonsDocs**](docs/LeagueApi.md#getleagueseasonsdocs) | **GET** /data/doc/league/seasons |
+*LookupApi* | [**getLookup**](docs/LookupApi.md#getlookup) | **GET** /data/lookup/get |
+*LookupApi* | [**getLookupCountries**](docs/LookupApi.md#getlookupcountries) | **GET** /data/lookup/countries |
+*LookupApi* | [**getLookupCountriesDocs**](docs/LookupApi.md#getlookupcountriesdocs) | **GET** /data/doc/lookup/countries |
+*LookupApi* | [**getLookupDocs**](docs/LookupApi.md#getlookupdocs) | **GET** /data/doc/lookup |
+*LookupApi* | [**getLookupDrivers**](docs/LookupApi.md#getlookupdrivers) | **GET** /data/lookup/drivers |
+*LookupApi* | [**getLookupDriversDocs**](docs/LookupApi.md#getlookupdriversdocs) | **GET** /data/doc/lookup/drivers |
+*LookupApi* | [**getLookupFlairs**](docs/LookupApi.md#getlookupflairs) | **GET** /data/lookup/flairs |
+*LookupApi* | [**getLookupFlairsDocs**](docs/LookupApi.md#getlookupflairsdocs) | **GET** /data/doc/lookup/flairs |
+*LookupApi* | [**getLookupGetDocs**](docs/LookupApi.md#getlookupgetdocs) | **GET** /data/doc/lookup/get |
+*LookupApi* | [**getLookupLicenses**](docs/LookupApi.md#getlookuplicenses) | **GET** /data/lookup/licenses |
+*LookupApi* | [**getLookupLicensesDocs**](docs/LookupApi.md#getlookuplicensesdocs) | **GET** /data/doc/lookup/licenses |
+*MemberApi* | [**getMember**](docs/MemberApi.md#getmember) | **GET** /data/member/get |
+*MemberApi* | [**getMemberAwardInstances**](docs/MemberApi.md#getmemberawardinstances) | **GET** /data/member/award_instances |
+*MemberApi* | [**getMemberAwardInstancesDocs**](docs/MemberApi.md#getmemberawardinstancesdocs) | **GET** /data/doc/member/award_instances |
+*MemberApi* | [**getMemberAwards**](docs/MemberApi.md#getmemberawards) | **GET** /data/member/awards |
+*MemberApi* | [**getMemberAwardsDocs**](docs/MemberApi.md#getmemberawardsdocs) | **GET** /data/doc/member/awards |
+*MemberApi* | [**getMemberChartData**](docs/MemberApi.md#getmemberchartdata) | **GET** /data/member/chart_data |
+*MemberApi* | [**getMemberChartDataDocs**](docs/MemberApi.md#getmemberchartdatadocs) | **GET** /data/doc/member/chart_data |
+*MemberApi* | [**getMemberDocs**](docs/MemberApi.md#getmemberdocs) | **GET** /data/doc/member |
+*MemberApi* | [**getMemberGetDocs**](docs/MemberApi.md#getmembergetdocs) | **GET** /data/doc/member/get |
+*MemberApi* | [**getMemberInfo**](docs/MemberApi.md#getmemberinfo) | **GET** /data/member/info |
+*MemberApi* | [**getMemberInfoDocs**](docs/MemberApi.md#getmemberinfodocs) | **GET** /data/doc/member/info |
+*MemberApi* | [**getMemberParticipationCredits**](docs/MemberApi.md#getmemberparticipationcredits) | **GET** /data/member/participation_credits |
+*MemberApi* | [**getMemberParticipationCreditsDocs**](docs/MemberApi.md#getmemberparticipationcreditsdocs) | **GET** /data/doc/member/participation_credits |
+*MemberApi* | [**getMemberProfile**](docs/MemberApi.md#getmemberprofile) | **GET** /data/member/profile | Gets a requested user\'s profile.
+*MemberApi* | [**getMemberProfileDocs**](docs/MemberApi.md#getmemberprofiledocs) | **GET** /data/doc/member/profile |
+*ResultsApi* | [**getResults**](docs/ResultsApi.md#getresults) | **GET** /data/results/get |
+*ResultsApi* | [**getResultsDocs**](docs/ResultsApi.md#getresultsdocs) | **GET** /data/doc/results |
+*ResultsApi* | [**getResultsEventLog**](docs/ResultsApi.md#getresultseventlog) | **GET** /data/results/event_log |
+*ResultsApi* | [**getResultsEventLogDocs**](docs/ResultsApi.md#getresultseventlogdocs) | **GET** /data/doc/results/event_log |
+*ResultsApi* | [**getResultsGetDocs**](docs/ResultsApi.md#getresultsgetdocs) | **GET** /data/doc/results/get |
+*ResultsApi* | [**getResultsLapChartData**](docs/ResultsApi.md#getresultslapchartdata) | **GET** /data/results/lap_chart_data |
+*ResultsApi* | [**getResultsLapChartDataDocs**](docs/ResultsApi.md#getresultslapchartdatadocs) | **GET** /data/doc/results/lap_chart_data |
+*ResultsApi* | [**getResultsLapData**](docs/ResultsApi.md#getresultslapdata) | **GET** /data/results/lap_data |
+*ResultsApi* | [**getResultsLapDataDocs**](docs/ResultsApi.md#getresultslapdatadocs) | **GET** /data/doc/results/lap_data |
+*ResultsApi* | [**getResultsSearchHosted**](docs/ResultsApi.md#getresultssearchhosted) | **GET** /data/results/search_hosted |
+*ResultsApi* | [**getResultsSearchHostedDocs**](docs/ResultsApi.md#getresultssearchhosteddocs) | **GET** /data/doc/results/search_hosted |
+*ResultsApi* | [**getResultsSearchSeries**](docs/ResultsApi.md#getresultssearchseries) | **GET** /data/results/search_series |
+*ResultsApi* | [**getResultsSearchSeriesDocs**](docs/ResultsApi.md#getresultssearchseriesdocs) | **GET** /data/doc/results/search_series |
+*ResultsApi* | [**getResultsSeasonResults**](docs/ResultsApi.md#getresultsseasonresults) | **GET** /data/results/season_results |
+*ResultsApi* | [**getResultsSeasonResultsDocs**](docs/ResultsApi.md#getresultsseasonresultsdocs) | **GET** /data/doc/results/season_results |
+*SeasonApi* | [**dataDocSeasonSpectatorSubsessionidsDetailGet**](docs/SeasonApi.md#datadocseasonspectatorsubsessionidsdetailget) | **GET** /data/doc/season/spectator_subsessionids_detail |
+*SeasonApi* | [**dataDocSeasonSpectatorSubsessionidsGet**](docs/SeasonApi.md#datadocseasonspectatorsubsessionidsget) | **GET** /data/doc/season/spectator_subsessionids |
+*SeasonApi* | [**getSeasonDocs**](docs/SeasonApi.md#getseasondocs) | **GET** /data/doc/season |
+*SeasonApi* | [**getSeasonList**](docs/SeasonApi.md#getseasonlist) | **GET** /data/season/list |
+*SeasonApi* | [**getSeasonListDocs**](docs/SeasonApi.md#getseasonlistdocs) | **GET** /data/doc/season/list |
+*SeasonApi* | [**getSeasonRaceGuide**](docs/SeasonApi.md#getseasonraceguide) | **GET** /data/season/race_guide |
+*SeasonApi* | [**getSeasonRaceGuideDocs**](docs/SeasonApi.md#getseasonraceguidedocs) | **GET** /data/doc/season/race_guide |
+*SeriesApi* | [**dataDocSeriesAssetsGet**](docs/SeriesApi.md#datadocseriesassetsget) | **GET** /data/doc/series/assets |
+*SeriesApi* | [**dataDocSeriesGet**](docs/SeriesApi.md#datadocseriesget) | **GET** /data/doc/series |
+*SeriesApi* | [**dataDocSeriesGetGet**](docs/SeriesApi.md#datadocseriesgetget) | **GET** /data/doc/series/get |
+*SeriesApi* | [**dataDocSeriesPastSeasonsGet**](docs/SeriesApi.md#datadocseriespastseasonsget) | **GET** /data/doc/series/past_seasons |
+*SeriesApi* | [**dataDocSeriesSeasonListGet**](docs/SeriesApi.md#datadocseriesseasonlistget) | **GET** /data/doc/series/season_list |
+*SeriesApi* | [**dataDocSeriesSeasonScheduleGet**](docs/SeriesApi.md#datadocseriesseasonscheduleget) | **GET** /data/doc/series/season_schedule |
+*SeriesApi* | [**dataDocSeriesSeasonsGet**](docs/SeriesApi.md#datadocseriesseasonsget) | **GET** /data/doc/series/seasons |
+*SeriesApi* | [**dataDocSeriesStatsSeriesGet**](docs/SeriesApi.md#datadocseriesstatsseriesget) | **GET** /data/doc/series/stats_series |
+*SeriesApi* | [**getSeries**](docs/SeriesApi.md#getseries) | **GET** /data/series/get |
+*SeriesApi* | [**getSeriesAssets**](docs/SeriesApi.md#getseriesassets) | **GET** /data/series/assets |
+*SeriesApi* | [**getSeriesPastSeasons**](docs/SeriesApi.md#getseriespastseasons) | **GET** /data/series/past_seasons |
+*SeriesApi* | [**getSeriesSeasonList**](docs/SeriesApi.md#getseriesseasonlist) | **GET** /data/series/season_list |
+*SeriesApi* | [**getSeriesSeasonSchedule**](docs/SeriesApi.md#getseriesseasonschedule) | **GET** /data/series/season_schedule |
+*SeriesApi* | [**getSeriesSeasons**](docs/SeriesApi.md#getseriesseasons) | **GET** /data/series/seasons |
+*SeriesApi* | [**getSeriesStatsSeries**](docs/SeriesApi.md#getseriesstatsseries) | **GET** /data/series/stats_series |
+*StatsApi* | [**dataDocStatsGet**](docs/StatsApi.md#datadocstatsget) | **GET** /data/doc/stats |
+*StatsApi* | [**dataDocStatsMemberBestsGet**](docs/StatsApi.md#datadocstatsmemberbestsget) | **GET** /data/doc/stats/member_bests |
+*StatsApi* | [**dataDocStatsMemberCareerGet**](docs/StatsApi.md#datadocstatsmembercareerget) | **GET** /data/doc/stats/member_career |
+*StatsApi* | [**dataDocStatsMemberDivisionGet**](docs/StatsApi.md#datadocstatsmemberdivisionget) | **GET** /data/doc/stats/member_division |
+*StatsApi* | [**dataDocStatsMemberRecapGet**](docs/StatsApi.md#datadocstatsmemberrecapget) | **GET** /data/doc/stats/member_recap |
+*StatsApi* | [**dataDocStatsMemberRecentRacesGet**](docs/StatsApi.md#datadocstatsmemberrecentracesget) | **GET** /data/doc/stats/member_recent_races |
+*StatsApi* | [**dataDocStatsMemberSummaryGet**](docs/StatsApi.md#datadocstatsmembersummaryget) | **GET** /data/doc/stats/member_summary |
+*StatsApi* | [**dataDocStatsMemberYearlyGet**](docs/StatsApi.md#datadocstatsmemberyearlyget) | **GET** /data/doc/stats/member_yearly |
+*StatsApi* | [**dataDocStatsSeasonDriverStandingsGet**](docs/StatsApi.md#datadocstatsseasondriverstandingsget) | **GET** /data/doc/stats/season_driver_standings |
+*StatsApi* | [**dataDocStatsSeasonQualifyResultsGet**](docs/StatsApi.md#datadocstatsseasonqualifyresultsget) | **GET** /data/doc/stats/season_qualify_results |
+*StatsApi* | [**dataDocStatsSeasonSupersessionStandingsGet**](docs/StatsApi.md#datadocstatsseasonsupersessionstandingsget) | **GET** /data/doc/stats/season_supersession_standings |
+*StatsApi* | [**dataDocStatsSeasonTeamStandingsGet**](docs/StatsApi.md#datadocstatsseasonteamstandingsget) | **GET** /data/doc/stats/season_team_standings |
+*StatsApi* | [**dataDocStatsSeasonTtResultsGet**](docs/StatsApi.md#datadocstatsseasonttresultsget) | **GET** /data/doc/stats/season_tt_results |
+*StatsApi* | [**dataDocStatsSeasonTtStandingsGet**](docs/StatsApi.md#datadocstatsseasonttstandingsget) | **GET** /data/doc/stats/season_tt_standings |
+*StatsApi* | [**dataDocStatsWorldRecordsGet**](docs/StatsApi.md#datadocstatsworldrecordsget) | **GET** /data/doc/stats/world_records |
+*StatsApi* | [**getStatsMemberBests**](docs/StatsApi.md#getstatsmemberbests) | **GET** /data/stats/member_bests |
+*StatsApi* | [**getStatsMemberCareer**](docs/StatsApi.md#getstatsmembercareer) | **GET** /data/stats/member_career |
+*StatsApi* | [**getStatsMemberDivision**](docs/StatsApi.md#getstatsmemberdivision) | **GET** /data/stats/member_division |
+*StatsApi* | [**getStatsMemberRecap**](docs/StatsApi.md#getstatsmemberrecap) | **GET** /data/stats/member_recap |
+*StatsApi* | [**getStatsMemberRecentRaces**](docs/StatsApi.md#getstatsmemberrecentraces) | **GET** /data/stats/member_recent_races |
+*StatsApi* | [**getStatsMemberSummary**](docs/StatsApi.md#getstatsmembersummary) | **GET** /data/stats/member_summary |
+*StatsApi* | [**getStatsMemberYearly**](docs/StatsApi.md#getstatsmemberyearly) | **GET** /data/stats/member_yearly |
+*StatsApi* | [**getStatsSeasonDriverStandings**](docs/StatsApi.md#getstatsseasondriverstandings) | **GET** /data/stats/season_driver_standings |
+*StatsApi* | [**getStatsSeasonQualifyResults**](docs/StatsApi.md#getstatsseasonqualifyresults) | **GET** /data/stats/season_qualify_results |
+*StatsApi* | [**getStatsSeasonSupersessionStandings**](docs/StatsApi.md#getstatsseasonsupersessionstandings) | **GET** /data/stats/season_supersession_standings |
+*StatsApi* | [**getStatsSeasonTeamStandings**](docs/StatsApi.md#getstatsseasonteamstandings) | **GET** /data/stats/season_team_standings |
+*StatsApi* | [**getStatsSeasonTimeTrialResults**](docs/StatsApi.md#getstatsseasontimetrialresults) | **GET** /data/stats/season_time_trial_results |
+*StatsApi* | [**getStatsSeasonTimeTrialStandings**](docs/StatsApi.md#getstatsseasontimetrialstandings) | **GET** /data/stats/season_time_trial_standings |
+*StatsApi* | [**getStatsWorldRecords**](docs/StatsApi.md#getstatsworldrecords) | **GET** /data/stats/world_records |
+*TeamApi* | [**getTeam**](docs/TeamApi.md#getteam) | **GET** /data/team/get |
+*TeamApi* | [**getTeamDocs**](docs/TeamApi.md#getteamdocs) | **GET** /data/doc/team |
+*TeamApi* | [**getTeamGetDocs**](docs/TeamApi.md#getteamgetdocs) | **GET** /data/doc/team/get |
+*TeamApi* | [**getTeamMembership**](docs/TeamApi.md#getteammembership) | **GET** /data/team/membership |
+*TeamApi* | [**getTeamMembershipDocs**](docs/TeamApi.md#getteammembershipdocs) | **GET** /data/doc/team/membership |
+*TimeAttackApi* | [**dataDocTimeAttackGet**](docs/TimeAttackApi.md#datadoctimeattackget) | **GET** /data/doc/time_attack |
+*TimeAttackApi* | [**dataDocTimeAttackMemberSeasonResultsGet**](docs/TimeAttackApi.md#datadoctimeattackmemberseasonresultsget) | **GET** /data/doc/time_attack/member_season_results |
+*TimeAttackApi* | [**getTimeAttackMemberSeasonResults**](docs/TimeAttackApi.md#gettimeattackmemberseasonresults) | **GET** /data/time_attack/member_season_results |
+*TrackApi* | [**dataDocTrackAssetsGet**](docs/TrackApi.md#datadoctrackassetsget) | **GET** /data/doc/track/assets |
+*TrackApi* | [**dataDocTrackGet**](docs/TrackApi.md#datadoctrackget) | **GET** /data/doc/track |
+*TrackApi* | [**dataDocTrackGetGet**](docs/TrackApi.md#datadoctrackgetget) | **GET** /data/doc/track/get |
+*TrackApi* | [**getTrack**](docs/TrackApi.md#gettrack) | **GET** /data/track/get |
+*TrackApi* | [**getTrackAssets**](docs/TrackApi.md#gettrackassets) | **GET** /data/track/assets |
+
+
+### Documentation For Models
+
+ - [ErrorResponse](docs/ErrorResponse.md)
+ - [IracingAPIResponse](docs/IracingAPIResponse.md)
+ - [IracingCategory](docs/IracingCategory.md)
+ - [IracingChartType](docs/IracingChartType.md)
+ - [IracingDivision](docs/IracingDivision.md)
+ - [IracingEventType](docs/IracingEventType.md)
+ - [IracingServiceMethodDocs](docs/IracingServiceMethodDocs.md)
+ - [IracingServiceMethodParametersDocs](docs/IracingServiceMethodParametersDocs.md)
+
+
+
+## Documentation For Authorization
+
+
+Authentication schemes defined for the API:
+
+### bearerAuth
+
+- **Type**: Bearer authentication (JWT)
+
+
+### oAuth2
+
+- **Type**: OAuth
+- **Flow**: accessCode
+- **Authorization URL**: https://oauth.iracing.com/oauth2/authorize
+- **Scopes**:
+ - **iracing.auth**: Authorization for iRacing services.
+ - **iracing.profile**: Access to the iRacing profile.
+
diff --git a/packages/api-client/src/client/api.ts b/packages/api-client/src/client/api.ts
new file mode 100644
index 0000000..8199c38
--- /dev/null
+++ b/packages/api-client/src/client/api.ts
@@ -0,0 +1,16586 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+ * iRacing `/data` API
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+import type { Configuration } from './configuration';
+import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
+import globalAxios from 'axios';
+// Some imports not used depending on template conditions
+// @ts-ignore
+import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';
+import type { RequestArgs } from './base';
+// @ts-ignore
+import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base';
+
+export interface ErrorResponse {
+ 'error': string;
+ 'message'?: string;
+ 'note'?: string;
+}
+/**
+ * Response from iRacing `/data` API.
+ */
+export interface IracingAPIResponse {
+ /**
+ * A link to the cached data
+ */
+ 'link': string;
+ 'expires': string;
+}
+/**
+ * Racing category.
+ */
+
+export const IracingCategory = {
+ /**
+ * Oval discipline
+ */
+ Oval: 'oval',
+ /**
+ * Road discipline. Legacy, use `sports_car` or `formula_car` instead.
+ */
+ Road: 'road',
+ /**
+ * Dirt road discipline.
+ */
+ DirtRoad: 'dirt_road',
+ /**
+ * Dirt oval discipline.
+ */
+ DirtOval: 'dirt_oval',
+ /**
+ * Sports car discipline.
+ */
+ SportsCar: 'sports_car',
+ /**
+ * Formula car discipline.
+ */
+ FormulaCar: 'formula_car'
+} as const;
+
+export type IracingCategory = typeof IracingCategory[keyof typeof IracingCategory];
+
+
+/**
+ * iRacing Chart Type
+ */
+
+export const IracingChartType = {
+ /**
+ * iRating
+ */
+ NUMBER_1: 1,
+ /**
+ * Time trial rating
+ */
+ NUMBER_2: 2,
+ /**
+ * License rating
+ */
+ NUMBER_3: 3
+} as const;
+
+export type IracingChartType = typeof IracingChartType[keyof typeof IracingChartType];
+
+
+/**
+ * iRacing Divisions. Divisions are 0-based: 0 is Division 1, 10 is Rookie. See /data/constants/divisons for more information.
+ */
+
+export const IracingDivision = {
+ /**
+ * Division 1
+ */
+ NUMBER_0: 0,
+ /**
+ * Division 2
+ */
+ NUMBER_1: 1,
+ /**
+ * Division 3
+ */
+ NUMBER_2: 2,
+ /**
+ * Division 4
+ */
+ NUMBER_3: 3,
+ /**
+ * Division 5
+ */
+ NUMBER_4: 4,
+ /**
+ * Division 6
+ */
+ NUMBER_5: 5,
+ /**
+ * Division 7
+ */
+ NUMBER_6: 6,
+ /**
+ * Division 8
+ */
+ NUMBER_7: 7,
+ /**
+ * Division 9
+ */
+ NUMBER_8: 8,
+ /**
+ * Division 10
+ */
+ NUMBER_9: 9,
+ /**
+ * Rookie
+ */
+ NUMBER_10: 10
+} as const;
+
+export type IracingDivision = typeof IracingDivision[keyof typeof IracingDivision];
+
+
+/**
+ * iRacing Event Type
+ */
+
+export const IracingEventType = {
+ /**
+ * Practice
+ */
+ NUMBER_2: 2,
+ /**
+ * Qualifying
+ */
+ NUMBER_3: 3,
+ /**
+ * Time trial
+ */
+ NUMBER_4: 4,
+ /**
+ * Race
+ */
+ NUMBER_5: 5
+} as const;
+
+export type IracingEventType = typeof IracingEventType[keyof typeof IracingEventType];
+
+
+/**
+ * An iRacing API Service Method object.
+ */
+export interface IracingServiceMethodDocs {
+ 'link': string;
+ 'parameters': { [key: string]: IracingServiceMethodParametersDocs; };
+ 'expirationSeconds'?: number;
+}
+/**
+ * An iRacing API Service Method Parameters object.
+ */
+export interface IracingServiceMethodParametersDocs {
+ 'type': string;
+ 'note'?: string;
+ 'required'?: boolean;
+}
+
+/**
+ * CarApi - axios parameter creator
+ */
+export const CarApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCar: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/car/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * image paths are relative to https://images-static.iracing.com/
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssets: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/car/assets`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssetsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car/assets`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * CarApi - functional programming interface
+ */
+export const CarApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = CarApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCar(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCar(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarApi.getCar']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * image paths are relative to https://images-static.iracing.com/
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarAssets(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarAssets(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarApi.getCarAssets']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarAssetsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarAssetsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarApi.getCarAssetsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarApi.getCarDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarApi.getCarGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * CarApi - factory interface
+ */
+export const CarApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = CarApiFp(configuration)
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCar(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCar(options).then((request) => request(axios, basePath));
+ },
+ /**
+ * image paths are relative to https://images-static.iracing.com/
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssets(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarAssets(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssetsDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarAssetsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getCarDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarGetDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarGetDocs(options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * CarApi - object-oriented interface
+ */
+export class CarApi extends BaseAPI {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCar(options?: RawAxiosRequestConfig) {
+ return CarApiFp(this.configuration).getCar(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * image paths are relative to https://images-static.iracing.com/
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarAssets(options?: RawAxiosRequestConfig) {
+ return CarApiFp(this.configuration).getCarAssets(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarAssetsDocs(options?: RawAxiosRequestConfig) {
+ return CarApiFp(this.configuration).getCarAssetsDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarDocs(options?: RawAxiosRequestConfig) {
+ return CarApiFp(this.configuration).getCarDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarGetDocs(options?: RawAxiosRequestConfig) {
+ return CarApiFp(this.configuration).getCarGetDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * CarclassApi - axios parameter creator
+ */
+export const CarclassApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @summary Gets car classes.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClass: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/carclass/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/carclass`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/carclass/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * CarclassApi - functional programming interface
+ */
+export const CarclassApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = CarclassApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @summary Gets car classes.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarClass(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarClass(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarclassApi.getCarClass']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarClassDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarClassDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarclassApi.getCarClassDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarClassGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarClassGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['CarclassApi.getCarClassGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * CarclassApi - factory interface
+ */
+export const CarclassApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = CarclassApiFp(configuration)
+ return {
+ /**
+ *
+ * @summary Gets car classes.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClass(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarClass(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getCarClassDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassGetDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarClassGetDocs(options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * CarclassApi - object-oriented interface
+ */
+export class CarclassApi extends BaseAPI {
+ /**
+ *
+ * @summary Gets car classes.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarClass(options?: RawAxiosRequestConfig) {
+ return CarclassApiFp(this.configuration).getCarClass(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarClassDocs(options?: RawAxiosRequestConfig) {
+ return CarclassApiFp(this.configuration).getCarClassDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getCarClassGetDocs(options?: RawAxiosRequestConfig) {
+ return CarclassApiFp(this.configuration).getCarClassGetDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * ConstantsApi - axios parameter creator
+ */
+export const ConstantsApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategories: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/constants/categories`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategoriesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/categories`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisions: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/constants/divisions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/divisions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypes: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/constants/event_types`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/event_types`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * ConstantsApi - functional programming interface
+ */
+export const ConstantsApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = ConstantsApiAxiosParamCreator(configuration)
+ return {
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsCategories(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsCategories(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsCategories']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsCategoriesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsCategoriesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsCategoriesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsDivisions(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsDivisions(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsDivisions']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsDivisionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsDivisionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsDivisionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsEventTypes(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsEventTypes(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsEventTypes']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsEventTypesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsEventTypesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['ConstantsApi.getConstantsEventTypesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * ConstantsApi - factory interface
+ */
+export const ConstantsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = ConstantsApiFp(configuration)
+ return {
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategories(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsCategories(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategoriesDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsCategoriesDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisions(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsDivisions(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisionsDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsDivisionsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getConstantsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypes(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsEventTypes(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypesDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsEventTypesDocs(options).then((request) => request(axios, basePath));
+ },
+ };
+};
+
+/**
+ * ConstantsApi - object-oriented interface
+ */
+export class ConstantsApi extends BaseAPI {
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsCategories(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsCategories(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsCategoriesDocs(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsCategoriesDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsDivisions(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsDivisions(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsDivisionsDocs(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsDivisionsDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsDocs(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ * Constant; returned directly as an array of objects
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsEventTypes(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsEventTypes(options).then((request) => request(this.axios, this.basePath));
+ }
+
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ public getConstantsEventTypesDocs(options?: RawAxiosRequestConfig) {
+ return ConstantsApiFp(this.configuration).getConstantsEventTypesDocs(options).then((request) => request(this.axios, this.basePath));
+ }
+}
+
+
+
+/**
+ * DocApi - axios parameter creator
+ */
+export const DocApiAxiosParamCreator = function (configuration?: Configuration) {
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeasonSpectatorSubsessionidsDetailGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/season/spectator_subsessionids_detail`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeasonSpectatorSubsessionidsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/season/spectator_subsessionids`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesAssetsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/assets`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesGetGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesPastSeasonsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/past_seasons`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonListGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/season_list`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonScheduleGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/season_schedule`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/seasons`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesStatsSeriesGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/series/stats_series`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberBestsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_bests`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberCareerGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_career`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberDivisionGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_division`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberRecapGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_recap`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberRecentRacesGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_recent_races`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberSummaryGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_summary`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberYearlyGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/member_yearly`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonDriverStandingsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_driver_standings`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonQualifyResultsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_qualify_results`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonSupersessionStandingsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_supersession_standings`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTeamStandingsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_team_standings`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTtResultsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_tt_results`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTtStandingsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/season_tt_standings`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsWorldRecordsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/stats/world_records`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTimeAttackGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/time_attack`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTimeAttackMemberSeasonResultsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/time_attack/member_season_results`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackAssetsGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/track/assets`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/track`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackGetGet: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/track/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssetsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car/assets`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/carclass`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/carclass/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/car/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategoriesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/categories`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/divisions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/constants/event_types`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {IracingCategory} category Racing category.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDriverStatsByCategoryCategoryDocs: async (category: IracingCategory, options: RawAxiosRequestConfig = {}): Promise => {
+ // verify required parameter 'category' is not null or undefined
+ assertParamExists('getDriverStatsByCategoryCategoryDocs', 'category', category)
+ const localVarPath = `/data/doc/driver_stats_by_category/{category}`
+ .replace(`{${"category"}}`, encodeURIComponent(String(category)));
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDriverStatsByCategoryDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/driver_stats_by_category`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getHostedCombinedSessionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/hosted/combined_sessions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getHostedDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/hosted`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getHostedSessionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/hosted/sessions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueCustomerLeagueSessionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/cust_league_sessions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueDirectoryDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/directory`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueGetPointsSystemsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/get_points_systems`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueMembershipDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/membership`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueRosterDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/roster`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueSeasonSessionsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/season_sessions`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueSeasonStandingsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/season_standings`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLeagueSeasonsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/league/seasons`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupCountriesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup/countries`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupDriversDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup/drivers`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupFlairsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup/flairs`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getLookupLicensesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/lookup/licenses`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberAwardInstancesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/award_instances`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberAwardsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/awards`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberChartDataDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/chart_data`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberInfoDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/info`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberParticipationCreditsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/participation_credits`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getMemberProfileDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/member/profile`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsEventLogDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/event_log`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsLapChartDataDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/lap_chart_data`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsLapDataDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/lap_data`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsSearchHostedDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/search_hosted`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsSearchSeriesDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/search_series`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getResultsSeasonResultsDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/results/season_results`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getSeasonDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/season`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getSeasonListDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/season/list`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getSeasonRaceGuideDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/season/race_guide`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getTeamDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/team`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getTeamGetDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/team/get`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getTeamMembershipDocs: async (options: RawAxiosRequestConfig = {}): Promise => {
+ const localVarPath = `/data/doc/team/membership`;
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+ let baseOptions;
+ if (configuration) {
+ baseOptions = configuration.baseOptions;
+ }
+
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+ const localVarHeaderParameter = {} as any;
+ const localVarQueryParameter = {} as any;
+
+ // authentication bearerAuth required
+ // http bearer authentication required
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
+
+
+
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+ return {
+ url: toPathString(localVarUrlObj),
+ options: localVarRequestOptions,
+ };
+ },
+ }
+};
+
+/**
+ * DocApi - functional programming interface
+ */
+export const DocApiFp = function(configuration?: Configuration) {
+ const localVarAxiosParamCreator = DocApiAxiosParamCreator(configuration)
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeasonSpectatorSubsessionidsDetailGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeasonSpectatorSubsessionidsDetailGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeasonSpectatorSubsessionidsDetailGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeasonSpectatorSubsessionidsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeasonSpectatorSubsessionidsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeasonSpectatorSubsessionidsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesAssetsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesAssetsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesAssetsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesGetGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesGetGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesGetGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesPastSeasonsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesPastSeasonsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesPastSeasonsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesSeasonListGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesSeasonListGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesSeasonListGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesSeasonScheduleGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesSeasonScheduleGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesSeasonScheduleGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesSeasonsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesSeasonsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesSeasonsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocSeriesStatsSeriesGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocSeriesStatsSeriesGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocSeriesStatsSeriesGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberBestsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberBestsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberBestsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberCareerGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberCareerGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberCareerGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberDivisionGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberDivisionGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberDivisionGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberRecapGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberRecapGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberRecapGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberRecentRacesGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberRecentRacesGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberRecentRacesGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberSummaryGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberSummaryGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberSummaryGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsMemberYearlyGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsMemberYearlyGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsMemberYearlyGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonDriverStandingsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonDriverStandingsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonDriverStandingsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonQualifyResultsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonQualifyResultsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonQualifyResultsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonSupersessionStandingsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonSupersessionStandingsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonSupersessionStandingsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonTeamStandingsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonTeamStandingsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonTeamStandingsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonTtResultsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonTtResultsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonTtResultsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsSeasonTtStandingsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsSeasonTtStandingsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsSeasonTtStandingsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocStatsWorldRecordsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocStatsWorldRecordsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocStatsWorldRecordsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocTimeAttackGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocTimeAttackGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocTimeAttackGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocTimeAttackMemberSeasonResultsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocTimeAttackMemberSeasonResultsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocTimeAttackMemberSeasonResultsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocTrackAssetsGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocTrackAssetsGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocTrackAssetsGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocTrackGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocTrackGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocTrackGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async dataDocTrackGetGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.dataDocTrackGetGet(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.dataDocTrackGetGet']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarAssetsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarAssetsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getCarAssetsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarClassDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarClassDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getCarClassDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarClassGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarClassGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getCarClassGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getCarDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getCarGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getCarGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getCarGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsCategoriesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsCategoriesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getConstantsCategoriesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsDivisionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsDivisionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getConstantsDivisionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getConstantsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getConstantsEventTypesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getConstantsEventTypesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getConstantsEventTypesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: { [key: string]: IracingServiceMethodDocs; }; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {IracingCategory} category Racing category.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getDriverStatsByCategoryCategoryDocs(category: IracingCategory, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getDriverStatsByCategoryCategoryDocs(category, options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getDriverStatsByCategoryCategoryDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getDriverStatsByCategoryDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getDriverStatsByCategoryDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getDriverStatsByCategoryDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getHostedCombinedSessionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getHostedCombinedSessionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getHostedCombinedSessionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getHostedDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getHostedDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getHostedDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getHostedSessionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getHostedSessionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getHostedSessionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueCustomerLeagueSessionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueCustomerLeagueSessionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueCustomerLeagueSessionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueDirectoryDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueDirectoryDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueDirectoryDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueGetPointsSystemsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueGetPointsSystemsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueGetPointsSystemsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueMembershipDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueMembershipDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueMembershipDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueRosterDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueRosterDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueRosterDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueSeasonSessionsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueSeasonSessionsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueSeasonSessionsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueSeasonStandingsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueSeasonStandingsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueSeasonStandingsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLeagueSeasonsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLeagueSeasonsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLeagueSeasonsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupCountriesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupCountriesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupCountriesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupDriversDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupDriversDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupDriversDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupFlairsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupFlairsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupFlairsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getLookupLicensesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLookupLicensesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getLookupLicensesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberAwardInstancesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberAwardInstancesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberAwardInstancesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberAwardsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberAwardsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberAwardsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberChartDataDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberChartDataDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberChartDataDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberInfoDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberInfoDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberInfoDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberParticipationCreditsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberParticipationCreditsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberParticipationCreditsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getMemberProfileDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getMemberProfileDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getMemberProfileDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsEventLogDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsEventLogDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsEventLogDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsLapChartDataDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsLapChartDataDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsLapChartDataDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsLapDataDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsLapDataDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsLapDataDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsSearchHostedDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsSearchHostedDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsSearchHostedDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsSearchSeriesDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsSearchSeriesDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsSearchSeriesDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getResultsSeasonResultsDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getResultsSeasonResultsDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getResultsSeasonResultsDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getSeasonDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getSeasonDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getSeasonDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getSeasonListDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getSeasonListDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getSeasonListDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getSeasonRaceGuideDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getSeasonRaceGuideDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getSeasonRaceGuideDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getTeamDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }>> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTeamDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getTeamDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getTeamGetDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTeamGetDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getTeamGetDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ async getTeamMembershipDocs(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> {
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTeamMembershipDocs(options);
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
+ const localVarOperationServerBasePath = operationServerMap['DocApi.getTeamMembershipDocs']?.[localVarOperationServerIndex]?.url;
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
+ },
+ }
+};
+
+/**
+ * DocApi - factory interface
+ */
+export const DocApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
+ const localVarFp = DocApiFp(configuration)
+ return {
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeasonSpectatorSubsessionidsDetailGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeasonSpectatorSubsessionidsDetailGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeasonSpectatorSubsessionidsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeasonSpectatorSubsessionidsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesAssetsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesAssetsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesGet(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.dataDocSeriesGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesGetGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesGetGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesPastSeasonsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesPastSeasonsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonListGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesSeasonListGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonScheduleGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesSeasonScheduleGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesSeasonsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesSeasonsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocSeriesStatsSeriesGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocSeriesStatsSeriesGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsGet(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.dataDocStatsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberBestsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberBestsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberCareerGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberCareerGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberDivisionGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberDivisionGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberRecapGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberRecapGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberRecentRacesGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberRecentRacesGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberSummaryGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberSummaryGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsMemberYearlyGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsMemberYearlyGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonDriverStandingsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonDriverStandingsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonQualifyResultsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonQualifyResultsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonSupersessionStandingsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonSupersessionStandingsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTeamStandingsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonTeamStandingsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTtResultsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonTtResultsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsSeasonTtStandingsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsSeasonTtStandingsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocStatsWorldRecordsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocStatsWorldRecordsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTimeAttackGet(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.dataDocTimeAttackGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTimeAttackMemberSeasonResultsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocTimeAttackMemberSeasonResultsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackAssetsGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocTrackAssetsGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackGet(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.dataDocTrackGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ dataDocTrackGetGet(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.dataDocTrackGetGet(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarAssetsDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarAssetsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getCarClassDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarClassGetDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarClassGetDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getCarDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getCarGetDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getCarGetDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsCategoriesDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsCategoriesDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDivisionsDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsDivisionsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getConstantsDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getConstantsEventTypesDocs(options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getConstantsEventTypesDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: { [key: string]: IracingServiceMethodDocs; }; }> {
+ return localVarFp.getDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {DocApiGetDriverStatsByCategoryCategoryDocsRequest} requestParameters Request parameters.
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDriverStatsByCategoryCategoryDocs(requestParameters: DocApiGetDriverStatsByCategoryCategoryDocsRequest, options?: RawAxiosRequestConfig): AxiosPromise {
+ return localVarFp.getDriverStatsByCategoryCategoryDocs(requestParameters.category, options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getDriverStatsByCategoryDocs(options?: RawAxiosRequestConfig): AxiosPromise<{ [key: string]: IracingServiceMethodDocs; }> {
+ return localVarFp.getDriverStatsByCategoryDocs(options).then((request) => request(axios, basePath));
+ },
+ /**
+ *
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ */
+ getHostedCombinedSessionsDocs(options?: RawAxiosRequestConfig): AxiosPromise