{"openapi":"3.0.1","info":{"title":"IntellectAPI","description":"REST API for football statistics, match analytics records, customer lifecycle, tenants, and subscriptions.\n\n## Product surface\n- **Football statistics**: Catalog JSON under `/football/**` (competitions, fixtures, standings, teams, scorers, persons, head-to-head; billable under the general usage bucket).\n- **Match analytics**: Persisted match analytics rows under `/match-probabilities` (tenant reads; create/update/delete per plan and RBAC).\n- **Customer Management**: Registration, profiles, preferences, verification, and tenant-scoped B2B customer APIs.\n- **Authentication**: JWT sessions, API keys, OAuth, password reset, and two-factor authentication.\n- **Tenants & subscriptions**: API keys, usage summaries, subscription changes, and billing-related routes.\n\n## Authentication\nThis API supports multiple authentication methods:\n- **JWT Bearer Token**: For user authentication\n- **API Key**: For service-to-service communication\n\n## Rate Limiting\nAPI requests are rate-limited to ensure fair usage and prevent abuse.\n\n## Security\nAll endpoints are secured with TLS 1.2/1.3 and implement various security headers.\n\n## Plan usage (billable vs not billable)\nTenant plan metering and the activity dashboard use the same rules as `BillingUsageClassifier`.\nEach operation below includes **Plan usage** in its description and vendor extensions\n`x-intellectapi-billable` (boolean) and, when billable, `x-intellectapi-usage-bucket`\n(`MATCH_PROBABILITIES`, `CUSTOMERS`, or `GENERAL`).\n- **Billable:** `GET`/`POST` under `/match-probabilities`; most `/customers/**` except onboarding, activity, and `GET /customers/current-with-tenant`; `/subscriptions/**`; `PUT /tenants/current/subscription`; **`/football/**`** (general usage bucket).\n- **Not billable:** `/auth/**`, health/docs/actuator, `PUT`/`DELETE` on `/match-probabilities/{id}` (not metered; **also blocked for tenant JWT / `sk-` API key** — only `ROLE_ADMIN` / global ops `X-API-Key` may mutate), `POST /match-probabilities` same rule, `GET /customers/activity`, `/customers/{id}/activity` and subpaths, customer signup (`/customers/register`, `/customers/register-detailed`) and verification flows, `GET`/`POST` `/tenants/current`, `POST /tenants/current/regenerate-api-key`, `GET /tenants/current/usage`.\n- **Note:** `/customers/register` is platform signup (new account + tenant), not tenant-managed B2B customer provisioning; tenant-scoped CRUD uses other `/customers/**` routes.\n","contact":{"name":"IntellectAPI Support","url":"https://intellectapi.io","email":"support@intellectapi.io"},"license":{"name":"Proprietary","url":"https://intellectapi.io"},"version":"1.0.0"},"servers":[{"url":"https://api.intellectapi.io/api/v1","description":"API server for Try it out (NEXT_PUBLIC_API_URL)"},{"url":"http://localhost:8080/api/v1","description":"Local Development Server"},{"url":"https://intellect-api-production.up.railway.app/api/v1","description":"Production Environment"}],"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"tags":[{"name":"Match analytics","description":"List and read persisted match analytics rows; create, update, and delete follow subscription and role rules."},{"name":"Football Statistics","description":"Football catalog: geographic areas, competitions, fixtures, standings, teams, scorers, players, and head-to-head match context."},{"name":"Customer Activity","description":"Per-customer usage summaries, security events, performance metrics, and recent API activity for operational dashboards and transparency."},{"name":"Customer Management","description":"Customer registration, profile updates, preferences, email verification, and communication settings—all under your tenant and access controls."},{"name":"Subscription Management","description":"Subscription plans, upgrades, renewals, cancellations, and billing state for managing entitlements and recurring revenue."},{"name":"User Authentication","description":"Login, logout, token refresh, OAuth, password reset flows, and two-factor authentication—all scoped to tenant sessions and security policy."}],"paths":{"/subscriptions/plans/{id}":{"put":{"tags":["Subscription Management"],"summary":"Update a subscription plan","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"updatePlan","parameters":[{"name":"id","in":"path","description":"ID of the subscription plan to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}},"required":true},"responses":{"200":{"description":"Subscription plan updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/match-probabilities/{id}":{"get":{"tags":["Match analytics"],"summary":"Get match probability by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `MATCH_PROBABILITIES`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getMatchProbabilityById","parameters":[{"name":"id","in":"path","description":"Internal or external id","required":true,"schema":{"type":"string"},"example":"pred-7a2f"}],"responses":{"200":{"description":"Record details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchProbability"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"401","message":"Unauthorized"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"404","message":"Match probability record not found"}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"MATCH_PROBABILITIES"},"put":{"tags":["Match analytics"],"summary":"Update match probability record","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"changeMatchProbabilityDetails","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"pred-7a2f"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePredictionDetailsModel"}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchProbability"}}}},"404":{"description":"Record not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"404","message":"Match probability record not found"}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false},"delete":{"tags":["Match analytics"],"summary":"Delete match probability record","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"deleteMatchProbability","parameters":[{"name":"id","in":"path","description":"Record id","required":true,"schema":{"type":"string"},"example":"pred-7a2f"}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePredictionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"401","message":"Unauthorized"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"404","message":"Match probability record not found"}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}":{"get":{"tags":["Customer Management"],"summary":"Retrieves customer by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"displayBy","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"},"put":{"tags":["Customer Management"],"summary":"Change customer details","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"changeDetails","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeCustomerDetailsModel"}}},"required":true},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerModel"},{"$ref":"#/components/schemas/ErrorMessageModel"}]}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"},"delete":{"tags":["Customer Management"],"summary":"Deletes a customer by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"deleteBy","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Successful operation"},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/customers/profile":{"get":{"tags":["Customer Management"],"description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getCurrentUserProfile","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"},"put":{"tags":["Customer Management"],"description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"updateCurrentUserProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeCustomerDetailsModel"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/subscriptions":{"post":{"tags":["Subscription Management"],"summary":"Create a new subscription","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"createSubscription","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}},"required":true},"responses":{"201":{"description":"Subscription created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/subscriptions/{subscriptionId}/upgrade":{"post":{"tags":["Subscription Management"],"summary":"Upgrade the subscription plan","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"upgradeSubscription","parameters":[{"name":"subscriptionId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}},"404":{"description":"Subscription not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/subscriptions/{subscriptionId}/renew":{"post":{"tags":["Subscription Management"],"summary":"Enable or disable auto-renewal","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"setAutoRenewal","parameters":[{"name":"subscriptionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"autoRenew","in":"query","description":"Auto-renew flag","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/subscriptions/{subscriptionId}/cancel":{"post":{"tags":["Subscription Management"],"summary":"Cancel the subscription","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"cancelSubscription","parameters":[{"name":"subscriptionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}},"404":{"description":"Subscription not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/plans":{"get":{"tags":["Subscription Management"],"summary":"Get all subscription plans","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getAllPlans","responses":{"200":{"description":"List of all subscription plans","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"},"post":{"tags":["Subscription Management"],"summary":"Create a new subscription plan","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"createPlan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}},"required":true},"responses":{"201":{"description":"Subscription plan created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/match-probabilities":{"get":{"tags":["Match analytics"],"summary":"List match probabilities","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `MATCH_PROBABILITIES`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nReturns fixtures with normalized 1X2 outcome probabilities when derivable from stored data.","operationId":"listMatchProbabilities","parameters":[{"name":"startDate","in":"query","description":"Filter by match start date","required":false,"schema":{"type":"string","format":"date"},"example":"2024-09-01"},{"name":"market","in":"query","description":"Filter by market code","required":false,"schema":{"type":"string"},"example":"1X2"},{"name":"federation","in":"query","description":"Filter by federation","required":false,"schema":{"type":"string"},"example":"UEFA"}],"responses":{"200":{"description":"List of records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchProbability"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"401","message":"Unauthorized"}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"MATCH_PROBABILITIES"},"post":{"tags":["Match analytics"],"summary":"Create match probability record","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `MATCH_PROBABILITIES`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"createMatchProbability","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMatchProbability"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchProbability"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"400","message":"Invalid input"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"},"examples":{"sample":{"description":"sample","value":{"timestamp":"2025-04-05T12:00:00Z","status":"401","message":"Unauthorized"}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"MATCH_PROBABILITIES"}},"/customers/{customerId}/preferences":{"post":{"tags":["Customer Management"],"summary":"Set communication preferences","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"setPreferences","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationPreferences"}}},"required":true},"responses":{"200":{"description":"Preferences set successfully"}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/customers/send-verification-email":{"post":{"tags":["Customer Management"],"summary":"Send verification email","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nSends a verification email to the specified email address. This is typically used to resend verification emails.","operationId":"sendVerificationEmail","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"200":{"description":"Verification email sent successfully"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Email not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/register":{"post":{"tags":["Customer Management"],"summary":"Register a new customer","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nCreates a new customer account with the provided details. The email address must be unique.","operationId":"registerCustomer","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterCustomerModel"}}},"required":true},"responses":{"201":{"description":"Customer successfully registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"409":{"description":"Email already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/password-reset":{"post":{"tags":["Customer Management"],"summary":"Password reset request","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"passwordReset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"200":{"description":"Password reset instructions sent"},"404":{"description":"Email not found"}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/change-password":{"post":{"tags":["Customer Management"],"description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"changePassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"OK"}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/auth/reset-password":{"post":{"tags":["User Authentication"],"summary":"Reset password","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nResets the password using a valid reset token.","operationId":"resetPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Password reset successful"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/refresh-token":{"post":{"tags":["User Authentication"],"summary":"Refresh user token","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nGenerates a new access token using a valid refresh token.","operationId":"refreshToken","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"New access token generated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"401":{"description":"Invalid refresh token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/oauth/google":{"post":{"tags":["User Authentication"],"summary":"Google OAuth callback","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nExchanges Google OAuth authorization code for JWT access and refresh tokens.","operationId":"googleOAuth","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthCallbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful OAuth authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"OAuth authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/oauth/github":{"post":{"tags":["User Authentication"],"summary":"GitHub OAuth callback","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nExchanges GitHub OAuth authorization code for JWT access and refresh tokens.","operationId":"githubOAuth","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthCallbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful OAuth authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"OAuth authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/logout":{"post":{"tags":["User Authentication"],"summary":"User logout","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nInvalidates the current session and JWT tokens. Requires valid authentication.","operationId":"logout","responses":{"200":{"description":"Successful logout"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/login":{"post":{"tags":["User Authentication"],"summary":"User login","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nAuthenticates a user using email and password. Returns JWT access and refresh tokens, or 2FA verification required response if 2FA is enabled.","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful login","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Invalid credentials or 2FA verification required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}},"x-intellectapi-billable":false}},"/auth/forgot-password":{"post":{"tags":["User Authentication"],"summary":"Forgot password","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nInitiates a password reset by sending an email with reset instructions.","operationId":"forgotPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Password reset email sent successfully"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Email not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/2fa/verify":{"post":{"tags":["User Authentication"],"summary":"Verify Two-Factor Authentication Code","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nVerifies a 2FA code during login and returns full access tokens.","operationId":"verifyTwoFactor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Full authentication tokens after successful 2FA verification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerificationResponse"}}}},"400":{"description":"Invalid 2FA code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Invalid or expired temporary token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/2fa/setup":{"post":{"tags":["User Authentication"],"summary":"Setup Two-Factor Authentication","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nGenerates a new TOTP secret and QR code URL for setting up two-factor authentication with an authenticator app.","operationId":"setupTwoFactor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupRequest"}}},"required":true},"responses":{"200":{"description":"2FA setup data generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/2fa/enable":{"post":{"tags":["User Authentication"],"summary":"Enable Two-Factor Authentication","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nEnables two-factor authentication for the authenticated user after verifying the TOTP code.","operationId":"enableTwoFactor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorEnableRequest"}}},"required":true},"responses":{"200":{"description":"2FA enabled successfully with backup codes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorEnableResponse"}}}},"400":{"description":"Invalid 2FA code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/auth/2fa/disable":{"post":{"tags":["User Authentication"],"summary":"Disable Two-Factor Authentication","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nDisables two-factor authentication for the authenticated user.","operationId":"disableTwoFactor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorDisableRequest"}}},"required":true},"responses":{"200":{"description":"2FA disabled successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorDisableResponse"}}}},"400":{"description":"Invalid verification code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}},"/subscriptions/subscriptions/{subscriptionId}":{"get":{"tags":["Subscription Management"],"summary":"Retrieve subscription details","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getSubscriptionDetails","parameters":[{"name":"subscriptionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionModel"}}}},"404":{"description":"Subscription not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/plans/{planId}":{"get":{"tags":["Subscription Management"],"summary":"Get a subscription plan by ID","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getPlan","parameters":[{"name":"planId","in":"path","description":"ID of the subscription plan","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription plan found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"},"delete":{"tags":["Subscription Management"],"summary":"Deactivate a subscription plan","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"deactivatePlan","parameters":[{"name":"planId","in":"path","description":"ID of the subscription plan to deactivate","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Subscription plan deactivated successfully"}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/plans/active":{"get":{"tags":["Subscription Management"],"summary":"Get all active subscription plans","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getActivePlans","responses":{"200":{"description":"List of active subscription plans","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPlanModel"}}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/features":{"get":{"tags":["Subscription Management"],"summary":"Get all subscription features","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getSubscriptionFeatures","responses":{"200":{"description":"List of subscription features for all plans","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionFeaturesModel"}}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/subscriptions/features/{plan}":{"get":{"tags":["Subscription Management"],"summary":"Get subscription features for a specific plan","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getSubscriptionFeaturesByPlan","parameters":[{"name":"plan","in":"path","description":"Plan name (FREE, STARTER, PROFESSIONAL)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription features for the specified plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionFeaturesModel"}}}}},"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/teams":{"get":{"tags":["Football Statistics"],"summary":"List teams (paged)","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballListTeams","parameters":[{"name":"limit","in":"query","description":"Max rows","required":false,"schema":{"type":"integer","format":"int32","default":50},"example":50},{"name":"offset","in":"query","description":"Skip rows","required":false,"schema":{"type":"integer","format":"int32","default":0},"example":0}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"teams":[{"id":65,"name":"Manchester City FC","shortName":"Man City","tla":"MCI"}],"resultSet":{"count":1}}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/teams/{teamId}":{"get":{"tags":["Football Statistics"],"summary":"Get team by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nTeam profile and optional extended fields when document sync has populated them.","operationId":"getFootballTeam","parameters":[{"name":"teamId","in":"path","description":"Team identifier","required":true,"schema":{"type":"integer","format":"int64"},"example":57}],"responses":{"200":{"description":"Team detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FootballTeamDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/teams/{teamId}/matches":{"get":{"tags":["Football Statistics"],"summary":"Matches for a team","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballTeamMatches","parameters":[{"name":"teamId","in":"path","description":"Team id","required":true,"schema":{"type":"integer","format":"int64"},"example":57},{"name":"limit","in":"query","description":"Max matches","required":false,"schema":{"type":"integer","format":"int32"},"example":10},{"name":"offset","in":"query","description":"Skip matches","required":false,"schema":{"type":"integer","format":"int32"},"example":0},{"name":"dateFrom","in":"query","required":false,"schema":{"type":"string"}},{"name":"dateTo","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"competition","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"season","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"matches":[{"id":330299,"utcDate":"2024-09-01T15:00:00Z","status":"FINISHED","homeTeam":{"id":57,"name":"Arsenal FC"},"awayTeam":{"id":61,"name":"Chelsea FC"}}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/persons/{personId}":{"get":{"tags":["Football Statistics"],"summary":"Get person (coach/player)","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballGetPerson","parameters":[{"name":"personId","in":"path","description":"Person id","required":true,"schema":{"type":"integer","format":"int64"},"example":1159}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"id":1159,"firstName":"Pep","lastName":"Guardiola","dateOfBirth":"1971-01-18","nationality":"Spain","position":"Coach"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Person not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/persons/{personId}/matches":{"get":{"tags":["Football Statistics"],"summary":"Matches involving a person","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballPersonMatches","parameters":[{"name":"personId","in":"path","description":"Person id","required":true,"schema":{"type":"integer","format":"int64"},"example":1159},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"},"example":10},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32"},"example":0}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"matches":[{"id":330299,"utcDate":"2024-09-01T15:00:00Z","status":"FINISHED"}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/matches":{"get":{"tags":["Football Statistics"],"summary":"Search matches","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nFilter matches by competitions, ids, date range, or status.","operationId":"footballListMatches","parameters":[{"name":"competitions","in":"query","description":"Comma-separated competition codes","required":false,"schema":{"type":"string"},"example":"PL,CL"},{"name":"ids","in":"query","description":"Comma-separated match ids","required":false,"schema":{"type":"string"},"example":"330299,330300"},{"name":"dateFrom","in":"query","required":false,"schema":{"type":"string"},"example":"2024-08-01"},{"name":"dateTo","in":"query","required":false,"schema":{"type":"string"},"example":"2024-08-31"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"example":"SCHEDULED"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":50},"example":50},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int32","default":0},"example":0},{"name":"unfoldLineups","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"unfoldBookings","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"unfoldSubs","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"unfoldGoals","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"matches":[{"id":330299,"competition":{"id":2021,"name":"Premier League"},"utcDate":"2024-09-01T15:00:00Z","status":"SCHEDULED"}],"resultSet":{"count":1}}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/matches/{matchId}":{"get":{"tags":["Football Statistics"],"summary":"Get match by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nSingle match with score and optional odds; score may follow the consumer delay policy.","operationId":"getFootballMatch","parameters":[{"name":"matchId","in":"path","description":"Match identifier","required":true,"schema":{"type":"integer","format":"int64"},"example":330299}],"responses":{"200":{"description":"Match summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FootballMatchSummary"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Match not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/matches/{matchId}/head2head":{"get":{"tags":["Football Statistics"],"summary":"Head-to-head for a match","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballHead2Head","parameters":[{"name":"matchId","in":"path","description":"Match id","required":true,"schema":{"type":"integer","format":"int64"},"example":330299},{"name":"limit","in":"query","description":"Max prior meetings","required":false,"schema":{"type":"integer","format":"int32","default":10},"example":10}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"aggregates":{"numberOfMatches":10,"totalGoals":28},"matches":[{"id":330299,"utcDate":"2024-09-01T15:00:00Z","status":"FINISHED"}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions":{"get":{"tags":["Football Statistics"],"summary":"List configured competitions","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nReturns competitions in the IntellectAPI catalog (codes such as PL, CL).","operationId":"listFootballCompetitions","responses":{"200":{"description":"Competition summaries","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FootballCompetitionSummary"}},"examples":{"sample":{"description":"sample","value":[{"code":"PL","external_id":2021,"name":"Premier League","type":"LEAGUE","area":{"id":2072,"name":"England","code":"ENG"},"current_season":{"id":719,"year":2024,"start_date":"2024-08-16","end_date":"2025-05-25","current_matchday":5},"last_synced_at":"2025-04-05T10:00:00Z"}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"500":{"description":"Unexpected failure","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"},"examples":{"sample":{"description":"sample","value":{"success":false,"message":"Unexpected error","status":500,"errorCode":"INTERNAL_ERROR","timestamp":"2025-04-05T12:00:00Z","fieldErrors":[]}}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions/{competitionCode}":{"get":{"tags":["Football Statistics"],"summary":"Get competition metadata","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nReturns competition metadata including seasons and area.","operationId":"footballGetCompetitionFeed","parameters":[{"name":"competitionCode","in":"path","description":"Competition code (e.g. PL, CL)","required":true,"schema":{"type":"string"},"example":"PL"}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"id":2021,"code":"PL","name":"Premier League","type":"LEAGUE","area":{"id":2072,"name":"England","code":"ENG"},"currentSeason":{"id":719,"startDate":"2024-08-16","endDate":"2025-05-25","year":2024},"seasons":[{"id":719,"startDate":"2024-08-16","endDate":"2025-05-25","year":2024}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Competition not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions/{competitionCode}/teams":{"get":{"tags":["Football Statistics"],"summary":"Teams in a competition","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballCompetitionTeams","parameters":[{"name":"competitionCode","in":"path","description":"Competition code (e.g. PL, CL)","required":true,"schema":{"type":"string"},"example":"PL"}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"count":20,"teams":[{"id":57,"name":"Arsenal FC","shortName":"Arsenal","tla":"ARS","crest":"https://example.com/crest.png"}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions/{competitionCode}/standings":{"get":{"tags":["Football Statistics"],"summary":"Standings for a competition","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nReturns competition, season, and standings. When `season` is omitted, the latest stored season is used.","operationId":"getFootballStandings","parameters":[{"name":"competitionCode","in":"path","description":"Competition code (e.g. PL, CL)","required":true,"schema":{"type":"string"},"example":"PL"},{"name":"season","in":"query","description":"Season calendar year; defaults to latest stored season","required":false,"schema":{"type":"integer","format":"int32"},"example":2024}],"responses":{"200":{"description":"Standings envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FootballStandingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Unknown competition, season, or no standings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions/{competitionCode}/scorers":{"get":{"tags":["Football Statistics"],"summary":"Scorers for a competition","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballCompetitionScorers","parameters":[{"name":"competitionCode","in":"path","description":"Competition code (e.g. PL, CL)","required":true,"schema":{"type":"string"},"example":"PL"},{"name":"season","in":"query","description":"Season calendar year","required":false,"schema":{"type":"integer","format":"int32"},"example":2024}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"scorers":[{"player":{"id":44,"name":"E. Haaland"},"team":{"id":65,"name":"Manchester City FC"},"goals":18,"assists":5,"penalties":4}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/competitions/{competitionCode}/matches":{"get":{"tags":["Football Statistics"],"summary":"Matches for a competition","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nPaged fixtures and results. When `season` is omitted, the latest stored season is used. `page` is 0-based; `size` defaults to 50 and must be between 1 and 100. Scores may be omitted until the configured delay after kickoff; odds are optional.","operationId":"listFootballMatches","parameters":[{"name":"competitionCode","in":"path","description":"Competition code (e.g. PL, CL)","required":true,"schema":{"type":"string"},"example":"PL"},{"name":"season","in":"query","description":"Season calendar year; defaults to latest stored season","required":false,"schema":{"type":"integer","format":"int32"},"example":2024},{"name":"dateFrom","in":"query","description":"Inclusive lower bound for match day (ISO date)","required":false,"schema":{"type":"string","format":"date"},"example":"2024-08-01"},{"name":"dateTo","in":"query","description":"Inclusive upper bound for match day (ISO date)","required":false,"schema":{"type":"string","format":"date"},"example":"2024-08-31"},{"name":"matchday","in":"query","description":"Matchday number filter","required":false,"schema":{"type":"integer","format":"int32"},"example":5},{"name":"status","in":"query","description":"Status filter (e.g. SCHEDULED, FINISHED)","required":false,"schema":{"type":"string"},"example":"SCHEDULED"},{"name":"page","in":"query","description":"Zero-based page index","required":false,"schema":{"type":"integer","format":"int32","default":0},"example":0},{"name":"size","in":"query","description":"Page size (1–100, default 50)","required":false,"schema":{"type":"integer","format":"int32","default":50},"example":50}],"responses":{"200":{"description":"Competition, season, filters, and matches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FootballMatchListResponse"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"},"examples":{"sample":{"description":"sample","value":{"success":false,"message":"Validation failed","status":400,"errorCode":"VALIDATION_ERROR","timestamp":"2025-04-05T12:00:00Z","fieldErrors":[{"field":"email","message":"must be a valid email","rejectedValue":"x"}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Unknown competition, season, or no data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/areas":{"get":{"tags":["Football Statistics"],"summary":"List football geographic areas","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).\n\nReturns the area directory used to group competitions.","operationId":"footballListAreas","responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"count":2,"areas":[{"id":2072,"name":"England","code":"ENG"},{"id":2081,"name":"Germany","code":"DEU"}]}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/football/areas/{areaId}":{"get":{"tags":["Football Statistics"],"summary":"Get area by id","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `GENERAL`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"footballGetArea","parameters":[{"name":"areaId","in":"path","description":"Area id","required":true,"schema":{"type":"integer","format":"int64"},"example":2072}],"responses":{"200":{"description":"JSON document","content":{"application/json":{"schema":{"type":"object"},"examples":{"sample":{"description":"sample","value":{"id":2072,"name":"England","code":"ENG"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}},"404":{"description":"Area not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponseModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"GENERAL"}},"/customers":{"get":{"tags":["Customer Management"],"summary":"Retrieves all customer","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"displayAll","parameters":[{"name":"birthDateFrom","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"birthDateTo","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"gender","in":"query","required":false,"schema":{"type":"string","enum":["MALE","FEMALE","UNKNOWN"]}},{"name":"emailAddress","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CustomerModel"},{"type":"array","items":{"$ref":"#/components/schemas/CustomerModel"}}]}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/customers/{customerId}/localization":{"get":{"tags":["Customer Management"],"summary":"Get customer localization settings","description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getLocalizationSettings","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Localization settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalizationSettings"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/customers/{customerId}/email-verification":{"get":{"tags":["Customer Management"],"summary":"Verify customer email","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"verifyEmail","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","description":"Verification token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Email verified successfully","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}},"400":{"description":"Invalid token","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/usage":{"get":{"tags":["Customer Activity"],"summary":"Get customer API usage analytics","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves API usage analytics: request volume, method distribution, and geographic data (top endpoints are on a dedicated endpoint).","operationId":"getActivityUsage","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"API usage analytics retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiUsageResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/top-endpoints":{"get":{"tags":["Customer Activity"],"summary":"Get top API endpoints by volume","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nReturns the busiest API endpoints for the customer in the selected window.","operationId":"getActivityTopEndpoints","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max endpoints to return (1–100)","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"Top endpoints retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopEndpointsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/summary":{"get":{"tags":["Customer Activity"],"summary":"Get customer activity summary","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves high-level activity metrics and key performance indicators for the customer dashboard overview tab.","operationId":"getActivitySummary","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Activity summary retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivitySummaryResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/security":{"get":{"tags":["Customer Activity"],"summary":"Get customer security events","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves security-related events including login history, failed logins, account changes, and rate limit violations.","operationId":"getActivitySecurity","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Security events retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityEventsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/requests":{"get":{"tags":["Customer Activity"],"summary":"Get recent API requests","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves recent API requests with pagination and filtering options.","operationId":"getActivityRequests","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Number of requests to return","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Recent requests retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentRequestsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/performance":{"get":{"tags":["Customer Activity"],"summary":"Get customer performance metrics","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves performance analytics including response times, error rates, throughput, and performance alerts.","operationId":"getActivityPerformance","parameters":[{"name":"customerId","in":"path","description":"Customer ID","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","description":"Date range filter","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Start date (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","description":"End date (ISO 8601)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Performance metrics retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceMetricsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"Customer not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/dashboard-core":{"get":{"tags":["Customer Activity"],"description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"getActivityDashboardCore","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityDashboardCoreResponse"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/{customerId}/activity/dashboard-bundle":{"get":{"tags":["Customer Activity"],"description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"getActivityDashboardBundle","parameters":[{"name":"customerId","in":"path","required":true,"schema":{"type":"string"}},{"name":"dateRange","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityDashboardBundleResponse"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/customers/email/{email}":{"get":{"tags":["Customer Management"],"description":"**Plan usage:** Billable — counts toward tenant plan limits (usage bucket `CUSTOMERS`: match-analytics reads and creates, customer APIs, or general product traffic — monthly counters on Account → API Access).","operationId":"getCustomerByEmail","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":true,"x-intellectapi-usage-bucket":"CUSTOMERS"}},"/customers/current-with-tenant":{"get":{"tags":["Customer Management"],"description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).","operationId":"getCurrentCustomerWithTenant","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerWithTenantModel"}}}}},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"x-intellectapi-billable":false}},"/auth/2fa/status":{"get":{"tags":["User Authentication"],"summary":"Get Two-Factor Authentication Status","description":"**Plan usage:** Not billable — excluded from tenant plan metering (portal, auth, analytics, match-analytics record updates and deletes, onboarding, health/docs, etc.; see `BillingUsageClassifier`).\n\nRetrieves the current two-factor authentication status for the authenticated user.","operationId":"getTwoFactorStatus","responses":{"200":{"description":"2FA status retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorStatusResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessageModel"}}}}},"x-intellectapi-billable":false}}},"components":{"schemas":{"SubscriptionPlanModel":{"required":["billingCycle","currency","name","price"],"type":"object","properties":{"id":{"type":"integer","format":"int64"},"active":{"type":"boolean"},"planId":{"type":"string","description":"Unique identifier of the subscription plan"},"name":{"type":"string","description":"Name of the subscription plan"},"description":{"type":"string","description":"Description of the subscription plan"},"price":{"type":"number","description":"Price of the subscription plan"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"billingCycle":{"type":"string","description":"Billing cycle (e.g., MONTHLY, YEARLY)"},"features":{"type":"array","description":"List of features included in the plan","items":{"type":"string","description":"List of features included in the plan"}},"isActive":{"type":"boolean","description":"Whether the plan is active"},"createdAt":{"type":"string","description":"When the plan was created","format":"date-time"},"updatedAt":{"type":"string","description":"When the plan was last updated","format":"date-time"}},"description":"Subscription plan details"},"MatchProbability":{"type":"object","properties":{"federation":{"type":"string","enum":["AFC","CONCACAF","CONMEBOL","OFC","CAF","UEFA"]},"isExpired":{"type":"boolean"},"internalMatchProbabilityId":{"type":"string"},"externalMatchProbabilityId":{"type":"string"},"season":{"type":"string"},"result":{"type":"string"},"startDate":{"type":"string","format":"date"},"lastUpdated":{"type":"string","format":"date-time"},"homeTeam":{"type":"string"},"competitionName":{"type":"string"},"awayTeam":{"type":"string"},"market":{"type":"string"},"competitionCluster":{"type":"string"},"status":{"type":"string"},"homeWinProbability":{"type":"number","description":"Normalized probability for home win (1X2), when derivable from stored data","format":"double"},"drawProbability":{"type":"number","format":"double"},"awayWinProbability":{"type":"number","format":"double"},"modeledOutcome":{"type":"string","description":"Canonical modeled outcome code (e.g. HOME_TEAM_WIN, DRAW) for narrative context."},"modeledOutcomeDescription":{"type":"string","description":"Human-readable explanation of the modeled outcome for this fixture."},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}},"description":"Match fixture with normalized outcome probabilities derived from internal models (informational analytics).","example":{"internal_id":"pred-7a2f","external_id":"ext-4412","season":"2024/2025","home_team":"Arsenal FC","away_team":"Chelsea FC","competition_name":"Premier League","market":"1X2","status":"CREATED","result":null,"home_win_probability":0.52,"draw_probability":0.24,"away_win_probability":0.24,"start_date":"2024-09-01","last_update_at":"2024-08-30T10:15:00","is_expired":false,"competition_cluster":"England"}},"ErrorMessageModel":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"status":{"type":"string"},"message":{"type":"string"}}},"ChangePredictionDetailsModel":{"required":["awayWinProbability","drawProbability","homeWinProbability"],"type":"object","properties":{"federation":{"type":"string"},"internalMatchProbabilityId":{"type":"string"},"externalMatchProbabilityId":{"type":"string"},"isExpired":{"type":"boolean"},"season":{"type":"string"},"result":{"type":"string"},"startDate":{"type":"string","format":"date"},"lastUpdated":{"type":"string","format":"date-time"},"homeTeam":{"type":"string"},"competitionName":{"type":"string"},"awayTeam":{"type":"string"},"market":{"type":"string"},"competitionCluster":{"type":"string"},"homeWinProbability":{"type":"number","format":"double"},"drawProbability":{"type":"number","format":"double"},"awayWinProbability":{"type":"number","format":"double"},"status":{"type":"string"},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}},"description":"Updated fields"},"AddressModel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"country":{"type":"string","enum":["AFGHANISTAN","ALBANIA","ALGERIA","ANDORRA","ANGOLA","ANTIGUA_AND_BARBUDA","ARGENTINA","ARMENIA","AUSTRALIA","AUSTRIA","AZERBAIJAN","BAHAMAS","BAHRAIN","BANGLADESH","BARBADOS","BELARUS","BELGIUM","BELIZE","BENIN","BHUTAN","BOLIVIA","BOSNIA_AND_HERZEGOVINA","BOTSWANA","BRAZIL","BRUNEI","BULGARIA","BURKINA_FASO","BURUNDI","CABO_VERDE","CAMBODIA","CAMEROON","CANADA","CENTRAL_AFRICAN_REPUBLIC","CHAD","CHILE","CHINA","COLOMBIA","COMOROS","CONGO","CONGO_DEMOCRATIC_REPUBLIC","COSTA_RICA","CROATIA","CUBA","CYPRUS","CZECH_REPUBLIC","DENMARK","DJIBOUTI","DOMINICA","DOMINICAN_REPUBLIC","ECUADOR","EGYPT","EL_SALVADOR","EQUATORIAL_GUINEA","ERITREA","ESTONIA","ESWATINI","ETHIOPIA","FIJI","FINLAND","FRANCE","GABON","GAMBIA","GEORGIA","GERMANY","GHANA","GREECE","GRENADA","GUATEMALA","GUINEA","GUINEA_BISSAU","GUYANA","HAITI","HONDURAS","HUNGARY","ICELAND","INDIA","INDONESIA","IRAN","IRAQ","IRELAND","ISRAEL","ITALY","JAMAICA","JAPAN","JORDAN","KAZAKHSTAN","KENYA","KIRIBATI","KOREA_NORTH","KOREA_SOUTH","KUWAIT","KYRGYZSTAN","LAOS","LATVIA","LEBANON","LESOTHO","LIBERIA","LIBYA","LIECHTENSTEIN","LITHUANIA","LUXEMBOURG","MADAGASCAR","MALAWI","MALAYSIA","MALDIVES","MALI","MALTA","MARSHALL_ISLANDS","MAURITANIA","MAURITIUS","MEXICO","MICRONESIA","MOLDOVA","MONACO","MONGOLIA","MONTENEGRO","MOROCCO","MOZAMBIQUE","MYANMAR","NAMIBIA","NAURU","NEPAL","NETHERLANDS","NEW_ZEALAND","NICARAGUA","NIGER","NIGERIA","NORTH_MACEDONIA","NORWAY","OMAN","PAKISTAN","PALAU","PANAMA","PAPUA_NEW_GUINEA","PARAGUAY","PERU","PHILIPPINES","POLAND","PORTUGAL","QATAR","ROMANIA","RUSSIA","RWANDA","SAINT_KITTS_AND_NEVIS","SAINT_LUCIA","SAINT_VINCENT_AND_THE_GRENADINES","SAMOA","SAN_MARINO","SAO_TOME_AND_PRINCIPE","SAUDI_ARABIA","SENEGAL","SERBIA","SEYCHELLES","SIERRA_LEONE","SINGAPORE","SLOVAKIA","SLOVENIA","SOLOMON_ISLANDS","SOMALIA","SOUTH_AFRICA","SOUTH_SUDAN","SPAIN","SRI_LANKA","SUDAN","SURINAME","SWEDEN","SWITZERLAND","SYRIA","TAIWAN","TAJIKISTAN","TANZANIA","THAILAND","TIMOR_LESTE","TOGO","TONGA","TRINIDAD_AND_TOBAGO","TUNISIA","TURKEY","TURKMENISTAN","TUVALU","UGANDA","UKRAINE","UNITED_ARAB_EMIRATES","UNITED_KINGDOM","USA","URUGUAY","UZBEKISTAN","VANUATU","VATICAN_CITY","VENEZUELA","VIETNAM","YEMEN","ZAMBIA","ZIMBABWE","UNKNOWN"]},"city":{"type":"string"},"postalCode":{"type":"integer","format":"int32"},"streetAddress":{"type":"string"}}},"ChangeCustomerDetailsModel":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"birthDate":{"type":"string","format":"date"},"address":{"$ref":"#/components/schemas/AddressModel"},"gender":{"type":"string","enum":["MALE","FEMALE","UNKNOWN"]},"emailAddress":{"type":"string"},"customerStatus":{"type":"string","enum":["ACTIVE","INACTIVE","SUSPENDED","BLOCKED","UNKNOWN"]},"subscribedTo":{"type":"string"},"isPaid":{"type":"boolean"},"profileImageUrl":{"type":"string","description":"Preset /avatars/... path or https URL; omit to keep current; empty string to clear"},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}},"description":"Changed customer details"},"CustomerModel":{"type":"object","properties":{"isEmailConfirmed":{"type":"boolean"},"isLocked":{"type":"boolean"},"isPaid":{"type":"boolean"},"isVerified":{"type":"boolean"},"customerId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"birthDate":{"type":"string","format":"date"},"address":{"$ref":"#/components/schemas/AddressModel"},"gender":{"type":"string","enum":["MALE","FEMALE","UNKNOWN"]},"emailAddress":{"type":"string"},"profileImageUrl":{"type":"string"},"customerStatus":{"type":"string","enum":["ACTIVE","INACTIVE","SUSPENDED","BLOCKED","UNKNOWN"]},"subscribedTo":{"type":"string"},"phoneNumber":{"type":"string"},"preferredCommunicationMethod":{"type":"string"},"passwordHash":{"type":"string"},"passwordSalt":{"type":"string"},"oauthProvider":{"type":"string"},"oauthUserId":{"type":"string"},"verificationCode":{"type":"string"},"emailVerified":{"type":"boolean"},"paymentMethod":{"type":"string"},"subscriptionType":{"type":"string"},"subscriptionExpiryDate":{"type":"string","format":"date"},"autoRenewalEnabled":{"type":"boolean"},"localeCountry":{"type":"string"},"language":{"type":"string"},"timeZone":{"type":"string"},"currency":{"type":"string"},"loyaltyPoints":{"type":"integer","format":"int32"},"loyaltyTier":{"type":"string"},"referralSource":{"type":"string"},"lastLogin":{"type":"string","format":"date-time"},"failedLoginAttempts":{"type":"integer","format":"int32"},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}}},"CustomerSubscriptionsModel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"customerId":{"type":"string"},"subscriptions":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionModel"}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"SubscriptionModel":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"customerSubscriptions":{"$ref":"#/components/schemas/CustomerSubscriptionsModel"},"subscriptionId":{"type":"string"},"customerId":{"type":"string"},"subscriptionType":{"type":"string"},"subscriptionPlan":{"$ref":"#/components/schemas/SubscriptionPlanModel"},"startDate":{"type":"string","format":"date"},"expiryDate":{"type":"string","format":"date"},"autoRenewalEnabled":{"type":"boolean"},"subscriptionStatus":{"type":"string","enum":["ACTIVE","CANCELLED","EXPIRED","PENDING","SUSPENDED"]},"paymentMethod":{"type":"string"},"lastPaymentDate":{"type":"string","format":"date"},"nextBillingDate":{"type":"string","format":"date"},"price":{"type":"number"},"currency":{"type":"string"},"paymentStatus":{"type":"string"},"trialPeriodDays":{"type":"integer","format":"int32"},"isTrialActive":{"type":"boolean"},"cancelReason":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"description":"Subscription details"},"CreateMatchProbability":{"required":["awayWinProbability","drawProbability","homeWinProbability"],"type":"object","properties":{"internalMatchProbabilityId":{"type":"string"},"externalMatchProbabilityId":{"type":"string"},"federation":{"type":"string"},"isExpired":{"type":"boolean"},"season":{"type":"string"},"result":{"type":"string"},"startDate":{"type":"string","format":"date"},"lastUpdated":{"type":"string","format":"date-time"},"homeTeam":{"type":"string"},"competitionName":{"type":"string"},"awayTeam":{"type":"string"},"market":{"type":"string"},"competitionCluster":{"type":"string"},"homeWinProbability":{"type":"number","format":"double"},"drawProbability":{"type":"number","format":"double"},"awayWinProbability":{"type":"number","format":"double"},"status":{"type":"string"},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}},"description":"Create payload","example":{"internal_id":"pred-new","external_id":"ext-9001","season":"2024/2025","home_team":"Arsenal FC","away_team":"Chelsea FC","competition_name":"Premier League","home_win_probability":0.45,"draw_probability":0.28,"away_win_probability":0.27,"status":"PENDING","market":"1X2","start_date":"2024-09-01","federation":"England","competition_cluster":"England"}},"CommunicationPreferences":{"type":"object","properties":{"marketingEmails":{"type":"boolean"},"transactionalEmails":{"type":"boolean"}},"description":"Communication preferences"},"EmailRequest":{"type":"object","properties":{"email":{"type":"string"}},"description":"Email request for password reset"},"RegisterCustomerModel":{"required":["address","birthDate","emailAddress","firstName","gender","lastName"],"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"birthDate":{"type":"string","format":"date"},"address":{"$ref":"#/components/schemas/AddressModel"},"gender":{"type":"string","enum":["MALE","FEMALE","UNKNOWN"]},"emailAddress":{"type":"string"},"customerStatus":{"type":"string","enum":["ACTIVE","INACTIVE","SUSPENDED","BLOCKED","UNKNOWN"]},"subscribedTo":{"type":"string"},"isPaid":{"type":"boolean"},"password":{"type":"string"},"subscriptionType":{"type":"string"},"createdDate":{"type":"string","format":"date"},"createdTime":{"type":"string","format":"date-time"},"modifiedDate":{"type":"string","format":"date"},"modifiedTime":{"type":"string","format":"date-time"}},"description":"Customer registration details"},"PasswordChangeRequest":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"}}},"SetupPasswordRequest":{"type":"object","properties":{"password":{"type":"string"},"confirmPassword":{"type":"string"}}},"SetupPasswordResponse":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}},"ResetPasswordRequest":{"type":"object","properties":{"resetToken":{"type":"string"},"newPassword":{"type":"string"}},"description":"Reset password request"},"TokenResponse":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"}}},"RefreshTokenRequest":{"type":"object","properties":{"refreshToken":{"type":"string"}},"description":"Refresh token details"},"LoginResponse":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"requiresTwoFactor":{"type":"boolean"},"tempToken":{"type":"string"},"message":{"type":"string"},"tenant":{"$ref":"#/components/schemas/TenantInfo"}}},"TenantInfo":{"type":"object","properties":{"tenantId":{"type":"string","description":"Unique identifier for the tenant","example":"tenant_1234567890abcdef"},"tenantName":{"type":"string","description":"Name of the tenant organization","example":"Acme Corporation"},"contactEmail":{"type":"string","description":"Contact email for the tenant","example":"admin@acme.com"},"tenantType":{"type":"string","description":"Type of tenant (BUSINESS, INDIVIDUAL)","example":"BUSINESS"},"tenantStatus":{"type":"string","description":"Current status of the tenant (ACTIVE, SUSPENDED, INACTIVE)","example":"ACTIVE"},"subscriptionPlan":{"type":"string","description":"Current subscription plan","example":"PREMIUM"},"apiKey":{"type":"string","description":"Masked API key for security","example":"bic_******"},"createdAt":{"type":"string","description":"Timestamp when the tenant was created","format":"date-time"},"updatedAt":{"type":"string","description":"Timestamp when the tenant was last updated","format":"date-time"},"lastApiUsageAt":{"type":"string","description":"Timestamp of the last API usage","format":"date-time"}},"description":"Complete tenant information including subscription and usage details"},"OAuthCallbackRequest":{"required":["code","redirectUri"],"type":"object","properties":{"code":{"type":"string","description":"Authorization code from OAuth provider","example":"4/0AfJohXn..."},"state":{"type":"string","description":"State parameter for CSRF protection","example":"abc123def456"},"redirectUri":{"type":"string","description":"Redirect URI used in OAuth flow","example":"http://localhost:3000/auth/callback/google"}},"description":"OAuth callback request"},"LoginRequest":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"description":"Login credentials"},"ForgotPasswordRequest":{"type":"object","properties":{"email":{"type":"string"}},"description":"Forgot password request"},"CustomerInfo":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"TwoFactorVerificationResponse":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"customer":{"$ref":"#/components/schemas/CustomerInfo"}}},"TwoFactorVerificationRequest":{"type":"object","properties":{"tempToken":{"type":"string"},"twoFactorCode":{"type":"string"}},"description":"2FA verification request"},"TwoFactorSetupResponse":{"type":"object","properties":{"secret":{"type":"string"},"qrCodeUrl":{"type":"string"},"manualEntryKey":{"type":"string"},"backupCodes":{"type":"array","items":{"type":"string"}},"message":{"type":"string"}}},"TwoFactorSetupRequest":{"type":"object","properties":{"dummy":{"type":"string"}},"description":"2FA setup request"},"TwoFactorEnableResponse":{"type":"object","properties":{"message":{"type":"string"},"backupCodes":{"type":"array","items":{"type":"string"}},"success":{"type":"boolean"}}},"TwoFactorEnableRequest":{"type":"object","properties":{"secret":{"type":"string"},"code":{"type":"string"},"backupCodes":{"type":"array","items":{"type":"string"}}},"description":"2FA enable request"},"TwoFactorDisableResponse":{"type":"object","properties":{"message":{"type":"string"},"success":{"type":"boolean"}}},"TwoFactorDisableRequest":{"type":"object","properties":{"code":{"type":"string"},"backupCode":{"type":"string"}},"description":"2FA disable request"},"FeaturesModel":{"type":"object","properties":{"sports":{"type":"array","description":"Available sports","example":["FOOTBALL"],"items":{"type":"string","description":"Available sports","example":"[\"FOOTBALL\"]"}},"webhooks":{"type":"boolean","description":"Webhook feature availability","example":false},"bulkOperations":{"type":"boolean","description":"Bulk operations feature availability","example":false},"historicalDays":{"type":"integer","description":"Historical data access in days (null = unlimited)","format":"int32","example":7},"dataRetentionDays":{"type":"integer","description":"Data retention period in days (null = unlimited)","format":"int32","example":30}},"description":"Feature flags and capabilities"},"LimitsModel":{"type":"object","properties":{"totalMonthly":{"type":"integer","description":"Total API calls per month","format":"int32","example":100},"predictionsMonthly":{"type":"integer","description":"Prediction API calls per month","format":"int32","example":50},"customersMonthly":{"type":"integer","description":"Customer API calls per month","format":"int32","example":20},"rateLimitPerSecond":{"type":"integer","description":"Rate limit per second","format":"int32","example":1}},"description":"API usage limits"},"PricingModel":{"type":"object","properties":{"monthly":{"type":"number","description":"Monthly price","example":0},"currency":{"type":"string","description":"Currency code","example":"USD"}},"description":"Pricing information"},"SubscriptionFeaturesModel":{"type":"object","properties":{"plan":{"type":"string","description":"Subscription plan name","example":"FREE"},"limits":{"$ref":"#/components/schemas/LimitsModel"},"features":{"$ref":"#/components/schemas/FeaturesModel"},"pricing":{"$ref":"#/components/schemas/PricingModel"},"support":{"$ref":"#/components/schemas/SupportModel"}},"description":"Subscription features and limits for a plan"},"SupportModel":{"type":"object","properties":{"level":{"type":"string","description":"Support level","example":"COMMUNITY"}},"description":"Support level information"},"Field":{"type":"object","properties":{"field":{"type":"string","example":"email"},"message":{"type":"string","example":"must be a valid email"},"rejectedValue":{"type":"string","nullable":true,"example":"bad"}},"description":"Single field validation failure"},"StandardErrorResponseModel":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false for errors","example":false},"message":{"type":"string","description":"Human-readable message","example":"Validation failed"},"status":{"type":"integer","description":"HTTP status code","format":"int32","example":400},"errorCode":{"type":"string","description":"Stable machine-readable code, e.g. VALIDATION_ERROR, INTERNAL_ERROR","example":"VALIDATION_ERROR"},"timestamp":{"type":"string","description":"Error time (UTC)","format":"date-time","example":"2025-04-05T12:00:00Z"},"fieldErrors":{"type":"array","description":"Field-level validation errors, when applicable","items":{"$ref":"#/components/schemas/Field"}}},"description":"Standard API error response","example":{"success":false,"message":"Validation failed","status":400,"errorCode":"VALIDATION_ERROR","timestamp":"2025-04-05T12:00:00Z","fieldErrors":[{"field":"email","message":"must be a valid email","rejectedValue":"x"}]}},"FootballTeamDetail":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","description":"Upstream football-data team id (same id used in match references).","format":"int64"},"name":{"type":"string"},"short_name":{"type":"string"},"tla":{"type":"string"},"crest_url":{"type":"string","description":"Club crest image URL when present in the stored document."},"venue_name":{"type":"string","description":"Home venue name when present in the stored document."},"founded":{"type":"integer","description":"Founded year when present in the stored document.","format":"int32"},"document_present":{"type":"boolean","description":"True when a full upstream team JSON snapshot is stored for this row."}},"description":"IntellectAPI football catalog team. Core identity fields are always present when the team exists; crest, venue, and founded are populated when a full document has been synced (see document_present).","example":{"id":57,"name":"Arsenal FC","short_name":"Arsenal","tla":"ARS","crest_url":"https://crests.example/57.png","venue_name":"Emirates Stadium","founded":1886,"document_present":true}},"FootballMatchOdds":{"type":"object","properties":{"home_win":{"type":"number","format":"double","example":2.1},"draw":{"type":"number","format":"double","example":3.4},"away_win":{"type":"number","format":"double","example":3.6}},"description":"Optional match odds (home win, draw, away win). Omitted when not present in synced data."},"FootballMatchSummary":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"utc_date":{"type":"string","format":"date-time"},"status":{"type":"string"},"matchday":{"type":"integer","format":"int32"},"stage":{"type":"string"},"group":{"type":"string"},"home_team":{"$ref":"#/components/schemas/FootballTeamSummary"},"away_team":{"$ref":"#/components/schemas/FootballTeamSummary"},"score":{"$ref":"#/components/schemas/FootballScore"},"odds":{"$ref":"#/components/schemas/FootballMatchOdds"}},"description":"Fixture or result row. Score may be omitted until the configured consumer delay after kickoff. Odds are optional and sourced from synced match data (document or odds snapshot).","example":{"id":330299,"utc_date":"2024-09-01T15:00:00Z","status":"FINISHED","matchday":4,"stage":"REGULAR_SEASON","group":null,"home_team":{"id":57,"name":"Arsenal FC","short_name":"Arsenal","tla":"ARS"},"away_team":{"id":61,"name":"Chelsea FC","short_name":"Chelsea","tla":"CHE"},"score":{"winner":"HOME_TEAM","duration":"REGULAR","full_time":{"home":2,"away":1}},"odds":{"home_win":2.1,"draw":3.4,"away_win":3.6}}},"FootballScore":{"type":"object","properties":{"winner":{"type":"string"},"duration":{"type":"string"},"full_time":{"$ref":"#/components/schemas/FootballScoreSide"},"half_time":{"$ref":"#/components/schemas/FootballScoreSide"},"regular_time":{"$ref":"#/components/schemas/FootballScoreSide"}},"description":"Score breakdown aligned with Football-Data (full-time, half-time, regular time when present)."},"FootballScoreSide":{"type":"object","properties":{"home":{"type":"integer","format":"int32"},"away":{"type":"integer","format":"int32"}},"description":"Home and away goals for one period."},"FootballTeamSummary":{"type":"object","properties":{"id":{"type":"integer","format":"int64","example":57},"name":{"type":"string","example":"Arsenal FC"},"short_name":{"type":"string","example":"Arsenal"},"tla":{"type":"string","example":"ARS"}},"description":"Team reference (Football-Data id; no crest in v1)."},"FootballArea":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"code":{"type":"string"}},"description":"Geographic area for a competition."},"FootballCompetitionSummary":{"type":"object","properties":{"code":{"type":"string"},"external_id":{"type":"integer","format":"int64"},"name":{"type":"string"},"type":{"type":"string"},"area":{"$ref":"#/components/schemas/FootballArea"},"current_season":{"$ref":"#/components/schemas/FootballSeason"},"last_synced_at":{"type":"string","format":"date-time"}},"description":"Competition metadata and optional current season from the persisted catalog.","example":{"code":"PL","external_id":2021,"name":"Premier League","type":"LEAGUE","area":{"id":2072,"name":"England","code":"ENG"},"current_season":{"id":719,"year":2024,"start_date":"2024-08-16","end_date":"2025-05-25","current_matchday":5},"last_synced_at":"2025-04-05T10:00:00Z"}},"FootballSeason":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"year":{"type":"integer","format":"int32"},"start_date":{"type":"string","format":"date"},"end_date":{"type":"string","format":"date"},"current_matchday":{"type":"integer","format":"int32"}},"description":"Season window and current matchday for a competition."},"FootballStandingsResponse":{"type":"object","properties":{"competition":{"$ref":"#/components/schemas/FootballCompetitionSummary"},"season":{"$ref":"#/components/schemas/FootballSeason"},"standings":{"type":"array","items":{"type":"object","additionalProperties":{"type":"object"}}}},"description":"Standings as last synced from the provider. The `standings` array is an opaque snapshot: structure follows upstream data (stages, groups, table rows) and is not a separately versioned IntellectAPI schema. Clients should treat entries as loosely typed maps or consume only documented competition endpoints.","example":{"competition":{"code":"PL","external_id":2021,"name":"Premier League","type":"LEAGUE","area":{"id":2072,"name":"England","code":"ENG"}},"season":{"id":719,"year":2024,"start_date":"2024-08-16","end_date":"2025-05-25","current_matchday":5},"standings":[{"stage":"REGULAR_SEASON","type":"TOTAL","table":[{"position":1,"team":{"id":65,"name":"Manchester City FC","shortName":"Man City"},"playedGames":38,"won":28,"draw":7,"lost":3,"points":91,"goalsFor":96,"goalsAgainst":34}]}]}},"FootballMatchFiltersEcho":{"type":"object","properties":{"season":{"type":"integer","format":"int32"},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"},"date_from":{"type":"string","format":"date"},"date_to":{"type":"string","format":"date"},"matchday":{"type":"integer","format":"int32"},"status":{"type":"string"}},"description":"Resolved query parameters for the match list request."},"FootballMatchListResponse":{"type":"object","properties":{"competition":{"$ref":"#/components/schemas/FootballCompetitionSummary"},"season":{"$ref":"#/components/schemas/FootballSeason"},"filters_echo":{"$ref":"#/components/schemas/FootballMatchFiltersEcho"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/FootballMatchSummary"}}},"description":"Paged match list with competition, season, and echoed filter parameters.","example":{"competition":{"code":"PL","external_id":2021,"name":"Premier League","type":"LEAGUE","area":{"id":2072,"name":"England","code":"ENG"},"current_season":{"id":719,"year":2024,"start_date":"2024-08-16","end_date":"2025-05-25","current_matchday":5},"last_synced_at":"2025-04-05T10:00:00Z"},"season":{"id":719,"year":2024,"start_date":"2024-08-16","end_date":"2025-05-25","current_matchday":5},"filters_echo":{"season":2024,"page":0,"size":50,"date_from":null,"date_to":null,"matchday":null,"status":null},"matches":[{"id":330299,"utc_date":"2024-09-01T15:00:00Z","status":"SCHEDULED","matchday":4,"stage":"REGULAR_SEASON","group":null,"home_team":{"id":57,"name":"Arsenal FC","short_name":"Arsenal","tla":"ARS"},"away_team":{"id":61,"name":"Chelsea FC","short_name":"Chelsea","tla":"CHE"},"score":null,"odds":{"home_win":2.1,"draw":3.4,"away_win":3.6}}]}},"LocalizationSettings":{"type":"object","properties":{"language":{"type":"string"},"timeZone":{"type":"string"}}},"ApiUsageResponse":{"type":"object","properties":{"requestVolume":{"$ref":"#/components/schemas/RequestVolume"},"topEndpoints":{"type":"array","items":{"$ref":"#/components/schemas/TopEndpoint"}},"methodDistribution":{"$ref":"#/components/schemas/MethodDistribution"},"geographicDistribution":{"type":"array","items":{"$ref":"#/components/schemas/GeographicDistribution"}}}},"GeographicDistribution":{"type":"object","properties":{"country":{"type":"string"},"region":{"type":"string"},"requestCount":{"type":"integer","format":"int32"},"percentage":{"type":"number","format":"double"}}},"MethodDistribution":{"type":"object","properties":{"GET":{"type":"integer","format":"int32"},"POST":{"type":"integer","format":"int32"},"PUT":{"type":"integer","format":"int32"},"DELETE":{"type":"integer","format":"int32"},"OTHER":{"type":"integer","format":"int32"}}},"RequestVolume":{"type":"object","properties":{"timeSeries":{"type":"array","items":{"$ref":"#/components/schemas/TimeSeriesPoint"}},"period":{"type":"string"}}},"TimeSeriesPoint":{"type":"object","properties":{"timestamp":{"type":"string"},"value":{"type":"integer","format":"int32"}}},"TopEndpoint":{"type":"object","properties":{"endpoint":{"type":"string"},"method":{"type":"string"},"count":{"type":"integer","format":"int32"},"averageResponseTime":{"type":"number","format":"double"},"errorRate":{"type":"number","format":"double"}}},"TopEndpointsResponse":{"type":"object","properties":{"topEndpoints":{"type":"array","items":{"$ref":"#/components/schemas/TopEndpoint"}}}},"ActivitySummaryResponse":{"type":"object","properties":{"apiRequestsToday":{"$ref":"#/components/schemas/ApiRequestsToday"},"averageResponseTime":{"$ref":"#/components/schemas/AverageResponseTime"},"successRate":{"$ref":"#/components/schemas/SuccessRate"},"rateLimitUsage":{"$ref":"#/components/schemas/RateLimitUsage"},"activeSessions":{"type":"integer","format":"int32"},"lastLogin":{"$ref":"#/components/schemas/LastLogin"}}},"ApiRequestsToday":{"type":"object","properties":{"value":{"type":"integer","format":"int32"},"change":{"type":"number","format":"double"},"changeType":{"type":"string"}}},"AverageResponseTime":{"type":"object","properties":{"value":{"type":"number","format":"double"},"change":{"type":"number","format":"double"},"trend":{"type":"string"}}},"LastLogin":{"type":"object","properties":{"timestamp":{"type":"string"},"location":{"type":"string"},"device":{"type":"string"}}},"RateLimitUsage":{"type":"object","properties":{"used":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"percentage":{"type":"number","format":"double"},"resetTime":{"type":"string"}}},"SuccessRate":{"type":"object","properties":{"value":{"type":"number","format":"double"},"status":{"type":"string"}}},"AccountChange":{"type":"object","properties":{"timestamp":{"type":"string"},"changeType":{"type":"string"},"description":{"type":"string"},"ipAddress":{"type":"string"},"location":{"type":"string"}}},"FailedLogin":{"type":"object","properties":{"ipAddress":{"type":"string"},"attemptCount":{"type":"integer","format":"int32"},"lastAttempt":{"type":"string"},"location":{"type":"string"},"isBlocked":{"type":"boolean"}}},"LoginHistory":{"type":"object","properties":{"timestamp":{"type":"string"},"ipAddress":{"type":"string"},"location":{"type":"string"},"device":{"type":"string"},"userAgent":{"type":"string"},"success":{"type":"boolean"},"failureReason":{"type":"string"}}},"RateLimitViolation":{"type":"object","properties":{"timestamp":{"type":"string"},"limitType":{"type":"string"},"endpoint":{"type":"string"},"ipAddress":{"type":"string"},"exceededBy":{"type":"integer","format":"int32"}}},"SecurityEvent":{"type":"object","properties":{"timestamp":{"type":"string"},"eventType":{"type":"string"},"description":{"type":"string"},"severity":{"type":"string"},"ipAddress":{"type":"string"},"location":{"type":"string"}}},"SecurityEventsResponse":{"type":"object","properties":{"loginHistory":{"type":"array","items":{"$ref":"#/components/schemas/LoginHistory"}},"securityEvents":{"type":"array","items":{"$ref":"#/components/schemas/SecurityEvent"}},"failedLogins":{"type":"array","items":{"$ref":"#/components/schemas/FailedLogin"}},"accountChanges":{"type":"array","items":{"$ref":"#/components/schemas/AccountChange"}},"rateLimitViolations":{"type":"array","items":{"$ref":"#/components/schemas/RateLimitViolation"}}}},"RecentRequest":{"type":"object","properties":{"timestamp":{"type":"string"},"method":{"type":"string"},"endpoint":{"type":"string"},"statusCode":{"type":"integer","format":"int32"},"responseTime":{"type":"number","format":"double"},"ipAddress":{"type":"string"},"location":{"type":"string"},"billable":{"type":"boolean"}}},"RecentRequestsResponse":{"type":"object","properties":{"requests":{"type":"array","items":{"$ref":"#/components/schemas/RecentRequest"}},"totalCount":{"type":"integer","format":"int32"}}},"ErrorRateTrend":{"type":"object","properties":{"timestamp":{"type":"string"},"total":{"type":"number","format":"double"},"rate4xx":{"type":"number","format":"double"},"rate5xx":{"type":"number","format":"double"}}},"ErrorRates":{"type":"object","properties":{"total":{"type":"number","format":"double"},"rate4xx":{"type":"number","format":"double"},"rate5xx":{"type":"number","format":"double"},"trends":{"type":"array","items":{"$ref":"#/components/schemas/ErrorRateTrend"}}}},"Percentiles":{"type":"object","properties":{"p50":{"type":"number","format":"double"},"p95":{"type":"number","format":"double"},"p99":{"type":"number","format":"double"}}},"PerformanceAlert":{"type":"object","properties":{"timestamp":{"type":"string"},"type":{"type":"string"},"severity":{"type":"string"},"message":{"type":"string"},"threshold":{"type":"number","format":"double"},"currentValue":{"type":"number","format":"double"}}},"PerformanceMetricsResponse":{"type":"object","properties":{"responseTime":{"$ref":"#/components/schemas/ResponseTime"},"errorRates":{"$ref":"#/components/schemas/ErrorRates"},"throughput":{"$ref":"#/components/schemas/Throughput"},"slowestEndpoints":{"type":"array","items":{"$ref":"#/components/schemas/SlowestEndpoint"}},"performanceAlerts":{"type":"array","items":{"$ref":"#/components/schemas/PerformanceAlert"}}}},"ResponseTime":{"type":"object","properties":{"average":{"type":"number","format":"double"},"percentiles":{"$ref":"#/components/schemas/Percentiles"},"trends":{"type":"array","items":{"$ref":"#/components/schemas/ResponseTimeTrend"}}}},"ResponseTimeTrend":{"type":"object","properties":{"timestamp":{"type":"string"},"p50":{"type":"number","format":"double"},"p95":{"type":"number","format":"double"},"p99":{"type":"number","format":"double"}}},"SlowestEndpoint":{"type":"object","properties":{"endpoint":{"type":"string"},"method":{"type":"string"},"averageResponseTime":{"type":"number","format":"double"},"p95ResponseTime":{"type":"number","format":"double"},"requestCount":{"type":"integer","format":"int32"}}},"Throughput":{"type":"object","properties":{"current":{"type":"number","format":"double"},"peak":{"type":"number","format":"double"},"average":{"type":"number","format":"double"},"trends":{"type":"array","items":{"$ref":"#/components/schemas/ThroughputTrend"}}}},"ThroughputTrend":{"type":"object","properties":{"timestamp":{"type":"string"},"value":{"type":"number","format":"double"}}},"ActivityDashboardCoreResponse":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/ActivitySummaryResponse"},"apiUsage":{"$ref":"#/components/schemas/ApiUsageResponse"}}},"ActivityDashboardBundleResponse":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/ActivitySummaryResponse"},"apiUsage":{"$ref":"#/components/schemas/ApiUsageResponse"},"recentRequests":{"$ref":"#/components/schemas/RecentRequestsResponse"},"security":{"$ref":"#/components/schemas/SecurityEventsResponse"},"performance":{"$ref":"#/components/schemas/PerformanceMetricsResponse"}}},"CustomerWithTenantModel":{"type":"object","properties":{"customerId":{"type":"string","description":"Unique identifier for the customer","example":"customer_1234567890abcdef"},"firstName":{"type":"string","description":"Customer's first name","example":"John"},"lastName":{"type":"string","description":"Customer's last name","example":"Doe"},"emailAddress":{"type":"string","description":"Customer's email address","example":"john.doe@example.com"},"birthDate":{"type":"string","description":"Customer's birth date","format":"date"},"gender":{"type":"string","description":"Customer's gender"},"address":{"$ref":"#/components/schemas/AddressModel"},"customerStatus":{"type":"string","description":"Current status of the customer account"},"emailVerified":{"type":"boolean","description":"Whether the customer's email is verified","example":true},"profileImageUrl":{"type":"string","description":"Avatar path under /avatars/ or https URL"},"createdTime":{"type":"string","description":"When the customer account was created","format":"date-time"},"modifiedTime":{"type":"string","description":"When the customer account was last modified","format":"date-time"},"tenant":{"$ref":"#/components/schemas/TenantInfo"}},"description":"Customer profile with associated tenant information"},"AuthMethodsData":{"type":"object","properties":{"customerId":{"type":"string"},"hasPassword":{"type":"boolean"},"requiresPasswordSetup":{"type":"boolean"},"canSetupPassword":{"type":"boolean"},"googleLinked":{"type":"boolean"},"githubLinked":{"type":"boolean"},"oauthOnly":{"type":"boolean"}}},"AuthMethodsResponse":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/AuthMethodsData"}}},"AuthLinkStatusResponse":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"data":{"$ref":"#/components/schemas/DataPayload"}}},"DataPayload":{"type":"object","properties":{"passwordLinked":{"type":"boolean"},"googleLinked":{"type":"boolean"},"githubLinked":{"type":"boolean"}}},"TwoFactorStatusResponse":{"type":"object","properties":{"enabled":{"type":"boolean"},"message":{"type":"string"}}},"DeletePredictionResponse":{"type":"object","properties":{"id":{"type":"string","description":"Internal id of the deleted record","example":"pred-123"},"message":{"type":"string","description":"Status message","example":"Record successfully deleted"},"timestamp":{"type":"string","description":"Operation timestamp","example":"2024-03-20T10:00:00Z"}},"description":"Response after deleting a match probability record"}},"securitySchemes":{"bearerAuth":{"type":"http","description":"JWT Bearer token for user authentication","scheme":"bearer","bearerFormat":"JWT"},"apiKeyAuth":{"type":"apiKey","description":"API Key for service authentication","name":"X-API-Key","in":"header"}}}}