{"openapi":"3.1.0","info":{"title":"Carbon Arc - Client Admin API","version":"0.1.0"},"paths":{"/api/v1/admin/clients/account-manager-candidates":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Account Manager Candidates","description":"Emails of Customer Success members, for the Account Manager picker\n(PRO-1351). Deliberately scoped to just this — not ``admin-users``/\n``users`` — so Customer Success members (who hold only\n``client-account-manager:edit``, not ``cams-users``/``users:list``) can\nactually populate the picker.","operationId":"get_account_manager_candidates_api_v1_admin_clients_account_manager_candidates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Get Account Manager Candidates Api V1 Admin Clients Account Manager Candidates Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/clients/feature-options":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Client Feature Filter Options","description":"Feature id/name pairs for the Clients table filter.\n\n``GET /features`` requires product-management ``features``, but the Clients\npage is reachable with only ``clients``. This endpoint keeps the filter\npopulated for that narrower grant without widening the features CRUD API.","operationId":"get_client_feature_filter_options_api_v1_admin_clients_feature_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeatureFilterOption"},"type":"array","title":"Response Get Client Feature Filter Options Api V1 Admin Clients Feature Options Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/clients":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Clients","operationId":"get_clients_api_v1_admin_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientRead"},"title":"Response Get Clients Api V1 Admin Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","clients"],"summary":"Create Client","description":"Create a new client with audit field. Whenever a client is created,\na default wallet is also created. This is done based on logic in models/events/account.py.\nThis also assigns provider access to the client based on logic in models/events/provider.py,\nwhich depends on the client compliance managed status and provider properties.\n\nAddress validation is performed via stripe.tax.Calculation.create() before the client is\npersisted. This creates a lightweight Calculation record in the Stripe dashboard on every\nattempt (Stripe has no dry-run mode for this API). The records carry no financial impact and\nare not tied to a customer, but will be visible in the Stripe audit trail.\n\nArgs:\n    client: ClientCreate\n    user_email: str","operationId":"create_client_api_v1_admin_clients_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Client","operationId":"get_client_api_v1_admin_clients__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","clients"],"summary":"Update Client","operationId":"update_client_api_v1_admin_clients__client_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","clients"],"summary":"Delete Client","operationId":"delete_client_api_v1_admin_clients__client_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_client_api_v1_admin_clients__client_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/mcp-provider-access-follows":{"patch":{"tags":["Admin APIs","clients"],"summary":"Patch Mcp Provider Access Follows","description":"Set whether MCP access follows API access for this client, then align MCP\nflags on all client–provider rows from API access (respecting MCP locks).","operationId":"patch_mcp_provider_access_follows_api_v1_admin_clients__client_id__mcp_provider_access_follows_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientMcpProviderAccessFollowsPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/exchange":{"put":{"tags":["Admin APIs","clients"],"summary":"Set Client Exchange","description":"PRO-136: enable or disable Exchange for this client.\n\nAtomic toggle for Exchange across all plan tiers. Updates both the\n``client_feature_access`` row (source of truth for\n``Client.exchange_enabled``) and the platform\n``client_products.features`` entry (source of truth for the user-facing\n``/me/products/{pid}/feature-access`` response) in a single transaction.","operationId":"set_client_exchange_api_v1_admin_clients__client_id__exchange_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientExchangeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/bulk-plan-type":{"post":{"tags":["Admin APIs","clients"],"summary":"Bulk Set Client Plan Type","description":"Upsert plan_type for multiple clients in one call.\n\nEach upsert runs in a savepoint so one failure does not abort the shared\ntransaction or poison subsequent rows; successes match persisted rows.","operationId":"bulk_set_client_plan_type_api_v1_admin_clients_bulk_plan_type_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientBulkPlanTypeUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/clients/{client_id}/plan-type":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Client Plan Type","description":"Fetch plan_type from carcapi_config.catalog_clients for the given client UUID.","operationId":"get_client_plan_type_api_v1_admin_clients__client_id__plan_type_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","clients"],"summary":"Set Client Plan Type","description":"Upsert plan_type into carcapi_config.catalog_clients using the main client UUID.","operationId":"set_client_plan_type_api_v1_admin_clients__client_id__plan_type_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPlanTypeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/send-payment-collection-email":{"post":{"tags":["Admin APIs","clients"],"summary":"Send Payment Collection Email","description":"Send payment method collection email to the client.","operationId":"send_payment_collection_email_api_v1_admin_clients__client_id__send_payment_collection_email_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/groups":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Groups By Client","operationId":"get_groups_by_client_api_v1_admin_clients__client_id__groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupRead"},"title":"Response Get Groups By Client Api V1 Admin Clients  Client Id  Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/default-group":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Default Group","description":"Get the default group for a client","operationId":"get_default_group_api_v1_admin_clients__client_id__default_group_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/users":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Users By Client","description":"Get all users for a client","operationId":"get_users_by_client_api_v1_admin_clients__client_id__users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserRead"},"title":"Response Get Users By Client Api V1 Admin Clients  Client Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/sso-domains":{"get":{"tags":["Admin APIs","clients"],"summary":"List Client Sso Domains","description":"List the federated-SSO domain -> client mappings enrolled for this client.","operationId":"list_client_sso_domains_api_v1_admin_clients__client_id__sso_domains_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientSSODomainRead"},"title":"Response List Client Sso Domains Api V1 Admin Clients  Client Id  Sso Domains Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","clients"],"summary":"Add Client Sso Domain","description":"Enroll a federated SSO domain for JIT auto-provisioning under this client.\n\nThe domain must be a non-public company domain and globally unique.","operationId":"add_client_sso_domain_api_v1_admin_clients__client_id__sso_domains_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSSODomainCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSSODomainRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/sso-domains/{domain_id}":{"patch":{"tags":["Admin APIs","clients"],"summary":"Update Client Sso Domain","description":"Toggle jit_enabled/is_active or update the default group/role for a mapping.","operationId":"update_client_sso_domain_api_v1_admin_clients__client_id__sso_domains__domain_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSSODomainUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSSODomainRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","clients"],"summary":"Delete Client Sso Domain","description":"Remove a federated SSO domain mapping from this client.","operationId":"delete_client_sso_domain_api_v1_admin_clients__client_id__sso_domains__domain_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/issue-promotional-grants":{"post":{"tags":["Admin APIs","clients"],"summary":"Issue Promotional Grants","description":"Issue a promotional token grant to a client using existing or newly created promotional tokens.\n\nThis endpoint finds an existing promotional token and issues a single grant to the client.\nIf no promotional tokens exist, it creates a new one with a safe priority (10) to avoid conflicts.\nThis prevents the priority conflicts that occur when creating tokens with priority 1.\n\nArgs:\n    client_id: ID of the client to issue grant to\n    request: Promotional grant request with amount, expires_at, and priority\n    funding_service: Service for issuing token grants\n    token_service: Service for finding/creating promotional tokens\n    user: Authenticated admin user\n\nReturns:\n    Dict containing details of the issued grant\n\nRaises:\n    ValidationError: If promotional token creation fails or client not found","operationId":"issue_promotional_grants_api_v1_admin_clients__client_id__issue_promotional_grants_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuePromotionalGrantsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/buy-grants":{"post":{"tags":["Admin APIs","clients"],"summary":"Buy Grants","description":"Create a token purchase for the client with comprehensive validation and error handling.\n\nThis endpoint provides a production-ready token purchase flow supporting:\n- Credit card payments via Stripe PaymentIntent\n- ACH payments via Stripe PaymentIntent\n- Invoice payments for eligible plans\n\nThe endpoint implements proper:\n- Input validation and sanitization\n- User permission checks\n- Business rule enforcement\n- Comprehensive error handling\n- Audit logging\n\nArgs:\n    client_id: UUID string of the client to purchase tokens for\n    request: Purchase request with token_amount, payment_method, and optional fields\n    user: Authenticated user making the request\n\nReturns:\n    Dict containing purchase details:\n    - payment_method: The payment method used\n    - payment_id: Internal payment tracking ID\n    - token_amount: Number of tokens purchased\n    - total_amount: Total cost in USD\n    - For Card/ACH: PaymentIntent with client_secret for frontend processing\n    - For Invoice: Invoice details with hosted_invoice_url\n\nRaises:\n    400: Invalid input parameters or business rule violations\n    401: User not authenticated\n    403: User lacks permission for this client\n    404: Client plan or tokens not found\n    422: Business logic violations\n    500: System errors\n    502: External service (Stripe) errors","operationId":"buy_grants_api_v1_admin_clients__client_id__buy_grants_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyTokensRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Buy Grants Api V1 Admin Clients  Client Id  Buy Grants Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/mcp/daily-window":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Mcp Daily Window","description":"MCP daily issuance cap, balance, and today's activity (MCP timezone window).","operationId":"get_mcp_daily_window_api_v1_admin_clients__client_id__mcp_daily_window_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpDailyWindowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/recurring-token-grant-schedules":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Client Recurring Token Grant Schedules","description":"Get recurring token grant schedules for a client.","operationId":"get_client_recurring_token_grant_schedules_api_v1_admin_clients__client_id__recurring_token_grant_schedules_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RecurringGrantScheduleResponse"},"title":"Response Get Client Recurring Token Grant Schedules Api V1 Admin Clients  Client Id  Recurring Token Grant Schedules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/health":{"get":{"tags":["Admin APIs","clients"],"summary":"Get Client Health","operationId":"get_client_health_api_v1_admin_clients__client_id__health_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Client Health Api V1 Admin Clients  Client Id  Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users":{"get":{"tags":["Admin APIs","users"],"summary":"Get Users","operationId":"get_users_api_v1_admin_users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserRead"},"title":"Response Get Users Api V1 Admin Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","users"],"summary":"Create User","operationId":"create_user_api_v1_admin_users_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/admins":{"get":{"tags":["Admin APIs","users"],"summary":"Get Admin Users","operationId":"get_admin_users_api_v1_admin_users_admins_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserRead"},"title":"Response Get Admin Users Api V1 Admin Users Admins Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}":{"get":{"tags":["Admin APIs","users"],"summary":"Get User","operationId":"get_user_api_v1_admin_users__user_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","users"],"summary":"Update User","operationId":"update_user_api_v1_admin_users__user_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","users"],"summary":"Delete User","operationId":"delete_user_api_v1_admin_users__user_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_user_api_v1_admin_users__user_id__delete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/okta-status":{"get":{"tags":["Admin APIs","users"],"summary":"Get Okta User Status","operationId":"get_okta_user_status_api_v1_admin_users__user_id__okta_status_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Okta User Status Api V1 Admin Users  User Id  Okta Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/marketing-preferences":{"get":{"tags":["Admin APIs","users"],"summary":"Get User Marketing Preferences","description":"Admin view into a user's marketing subscription state.\n\nHubSpot is the source of truth.","operationId":"get_user_marketing_preferences_api_v1_admin_users__user_id__marketing_preferences_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","users"],"summary":"Update User Marketing Preferences","description":"Admin update of a user's marketing subscription state.\n\nThis has the same HubSpot effect as if the user updated their own preferences.","operationId":"update_user_marketing_preferences_api_v1_admin_users__user_id__marketing_preferences_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/data-collection-consent":{"put":{"tags":["Admin APIs","users"],"summary":"Update User Data Collection Consent","description":"Admin update of a user's data collection consent.\n\nDeliberately separate from PUT /{user_id}: that route validates against\nUserUpdate, which requires email/first_name/last_name, and treats their\npresence as a profile change that gets pushed to Okta. Consent has nothing\nto do with either, so it gets its own single-field route — the same split\nthe marketing-preferences routes above already use.","operationId":"update_user_data_collection_consent_api_v1_admin_users__user_id__data_collection_consent_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDataCollectionConsent"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataCollectionConsentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/payment-methods":{"get":{"tags":["Admin APIs","users"],"summary":"Get User Payment Methods","description":"Get saved payment methods for a user","operationId":"get_user_payment_methods_api_v1_admin_users__user_id__payment_methods_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/group/{group_id}":{"put":{"tags":["Admin APIs","users"],"summary":"Change User Group","description":"Change a user's group (admin only)","operationId":"change_user_group_api_v1_admin_users__user_id__group__group_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/group":{"delete":{"tags":["Admin APIs","users"],"summary":"Remove User From Group","description":"Remove a user from their current group (admin only)","operationId":"remove_user_from_group_api_v1_admin_users__user_id__group_delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/reset-password":{"post":{"tags":["Admin APIs","users"],"summary":"Reset User Password","description":"Reset a user's password (admin only)","operationId":"reset_user_password_api_v1_admin_users__user_id__reset_password_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/resend-activation":{"post":{"tags":["Admin APIs","users"],"summary":"Resend User Activation","description":"Resend activation email to a user (admin only)","operationId":"resend_user_activation_api_v1_admin_users__user_id__resend_activation_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/mcp-daily-limit/{mcp_daily_limit}":{"patch":{"tags":["Admin APIs","users"],"summary":"Update User Mcp Daily Limit","description":"Update user MCP daily token limit (admin only).\n\nAccepts a float value or the string \"null\" to remove the limit.\nThe new limit cannot exceed the group's mcp_period_limit if one is set.","operationId":"update_user_mcp_daily_limit_api_v1_admin_users__user_id__mcp_daily_limit__mcp_daily_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"mcp_daily_limit","in":"path","required":true,"schema":{"type":"string","title":"Mcp Daily Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/bulk/mcp-daily-limit":{"post":{"tags":["Admin APIs","users"],"summary":"Bulk Update Mcp Daily Limit","description":"Bulk-set the MCP daily limit for multiple users (admin only).\n\nSkips users whose new limit would exceed their group's mcp_period_limit.\nReturns a summary with updated count and skipped users with reasons.","operationId":"bulk_update_mcp_daily_limit_api_v1_admin_users_bulk_mcp_daily_limit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__routers__admin_routers__account__users__BulkMcpDailyLimitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/users/bulk/consumption-limits":{"post":{"tags":["Admin APIs","users"],"summary":"Bulk Update Consumption Limits","description":"Bulk-set platform token limits for multiple users (admin only).\n\nPer-user application is atomic: if either limit fails a precondition the\nuser is skipped entirely rather than left half-updated. Returns a summary\nwith the updated count and skipped users with reasons.","operationId":"bulk_update_consumption_limits_api_v1_admin_users_bulk_consumption_limits_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkConsumptionLimitsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/users/bulk/products/{product_id}/revoke-access":{"post":{"tags":["Admin APIs","users"],"summary":"Bulk Revoke User Access","description":"Bulk-revoke a product's access for multiple users (admin only).\n\nSkips users that don't exist or whose client has no entitlement for the\nproduct. Returns a summary with updated count and skipped users with\nreasons.","operationId":"bulk_revoke_user_access_api_v1_admin_users_bulk_products__product_id__revoke_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkProductAccessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/bulk/products/{product_id}/restore-access":{"post":{"tags":["Admin APIs","users"],"summary":"Bulk Restore User Access","description":"Bulk-restore a product's access for multiple users (admin only).","operationId":"bulk_restore_user_access_api_v1_admin_users_bulk_products__product_id__restore_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkProductAccessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/products/{product_id}/revoke-access":{"post":{"tags":["Admin APIs","users"],"summary":"Revoke User Access","description":"Revoke a user's access to a product (e.g. MCP) without touching the\nclient's entitlement or any other user's access.","operationId":"revoke_user_access_api_v1_admin_users__user_id__products__product_id__revoke_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/products/{product_id}/restore-access":{"post":{"tags":["Admin APIs","users"],"summary":"Restore User Access","description":"Restore a user's access to a product previously revoked via\nrevoke_user_access.","operationId":"restore_user_access_api_v1_admin_users__user_id__products__product_id__restore_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-data-collection-consent-history":{"get":{"tags":["Admin APIs","user-data-collection-consent-history"],"summary":"Get User Data Collection Consent History","operationId":"get_user_data_collection_consent_history_api_v1_admin_user_data_collection_consent_history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDataCollectionConsentHistoryRead"},"title":"Response Get User Data Collection Consent History Api V1 Admin User Data Collection Consent History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-data-collection-consent-history/{history_id}":{"get":{"tags":["Admin APIs","user-data-collection-consent-history"],"summary":"Get User Data Collection Consent History Record","operationId":"get_user_data_collection_consent_history_record_api_v1_admin_user_data_collection_consent_history__history_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"history_id","in":"path","required":true,"schema":{"type":"string","title":"History Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDataCollectionConsentHistoryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-data-collection-consent-restrictions/client/{client_id}":{"get":{"tags":["Admin APIs","client-data-collection-consent-restrictions"],"summary":"Get Client Data Collection Consent Restriction","operationId":"get_client_data_collection_consent_restriction_api_v1_admin_client_data_collection_consent_restrictions_client__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientDataCollectionConsentRestrictionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","client-data-collection-consent-restrictions"],"summary":"Set Client Data Collection Consent Restriction","operationId":"set_client_data_collection_consent_restriction_api_v1_admin_client_data_collection_consent_restrictions_client__client_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientDataCollectionConsentRestrictionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientDataCollectionConsentRestrictionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/products":{"get":{"tags":["Admin APIs","products"],"summary":"Get Products","operationId":"get_products_api_v1_admin_products_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","products"],"summary":"Create Product","operationId":"create_product_api_v1_admin_products_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/products/{product_id}":{"get":{"tags":["Admin APIs","products"],"summary":"Get Product","operationId":"get_product_api_v1_admin_products__product_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","products"],"summary":"Update Product","operationId":"update_product_api_v1_admin_products__product_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","products"],"summary":"Delete Product","operationId":"delete_product_api_v1_admin_products__product_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-products":{"get":{"tags":["Admin APIs","client-products"],"summary":"Get Client Products","operationId":"get_client_products_api_v1_admin_client_products_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientProductRead"},"title":"Response Get Client Products Api V1 Admin Client Products Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","client-products"],"summary":"Create Client Product","description":"Create a client product association.\n\nThis endpoint creates the database record. User onboarding to the product's\nOkta group is triggered automatically via SQLAlchemy event listeners and\nprocessed in the background.\n\nReturns HTTP 202 to indicate the request is accepted and Okta sync processing\ncontinues in the background.","operationId":"create_client_product_api_v1_admin_client_products_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductCreate"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductBackgroundTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-products/client/{client_id}/product/{product_id}":{"get":{"tags":["Admin APIs","client-products"],"summary":"Get Client Product","operationId":"get_client_product_api_v1_admin_client_products_client__client_id__product__product_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","client-products"],"summary":"Update Client Product","operationId":"update_client_product_api_v1_admin_client_products_client__client_id__product__product_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","client-products"],"summary":"Delete Client Product","description":"Delete a client product association.\n\nThis endpoint deletes the database record. User offboarding from the product's\nOkta group is triggered automatically via SQLAlchemy event listeners and\nprocessed in the background.\n\nReturns HTTP 202 to indicate the request is accepted and Okta sync processing\ncontinues in the background.","operationId":"delete_client_product_api_v1_admin_client_products_client__client_id__product__product_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProductBackgroundTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/features":{"get":{"tags":["Admin APIs","features"],"summary":"Get Features","operationId":"get_features_api_v1_admin_features_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureRead"},"title":"Response Get Features Api V1 Admin Features Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","features"],"summary":"Create Feature","operationId":"create_feature_api_v1_admin_features_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/features/{feature_id}":{"get":{"tags":["Admin APIs","features"],"summary":"Get Feature","operationId":"get_feature_api_v1_admin_features__feature_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","features"],"summary":"Update Feature","operationId":"update_feature_api_v1_admin_features__feature_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","features"],"summary":"Delete Feature","operationId":"delete_feature_api_v1_admin_features__feature_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-accesses":{"get":{"tags":["Admin APIs","client-feature-accesses"],"summary":"Get Client Feature Accesses","operationId":"get_client_feature_accesses_api_v1_admin_client_feature_accesses_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientFeatureAccessRead"},"title":"Response Get Client Feature Accesses Api V1 Admin Client Feature Accesses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","client-feature-accesses"],"summary":"Create Client Feature Access","operationId":"create_client_feature_access_api_v1_admin_client_feature_accesses_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureAccessCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-accesses/client/{client_id}/feature/{feature_id}":{"get":{"tags":["Admin APIs","client-feature-accesses"],"summary":"Get Client Feature Access","operationId":"get_client_feature_access_api_v1_admin_client_feature_accesses_client__client_id__feature__feature_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","client-feature-accesses"],"summary":"Update Client Feature Access","operationId":"update_client_feature_access_api_v1_admin_client_feature_accesses_client__client_id__feature__feature_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureAccessUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","client-feature-accesses"],"summary":"Delete Client Feature Access","operationId":"delete_client_feature_access_api_v1_admin_client_feature_accesses_client__client_id__feature__feature_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-feature-accesses":{"get":{"tags":["Admin APIs","user-feature-accesses"],"summary":"Get User Feature Accesses","operationId":"get_user_feature_accesses_api_v1_admin_user_feature_accesses_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserFeatureAccessRead"},"title":"Response Get User Feature Accesses Api V1 Admin User Feature Accesses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","user-feature-accesses"],"summary":"Create User Feature Access","operationId":"create_user_feature_access_api_v1_admin_user_feature_accesses_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureAccessCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-feature-accesses/user/{user_id}/feature/{feature_id}":{"get":{"tags":["Admin APIs","user-feature-accesses"],"summary":"Get User Feature Access","operationId":"get_user_feature_access_api_v1_admin_user_feature_accesses_user__user_id__feature__feature_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","user-feature-accesses"],"summary":"Update User Feature Access","operationId":"update_user_feature_access_api_v1_admin_user_feature_accesses_user__user_id__feature__feature_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureAccessUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","user-feature-accesses"],"summary":"Delete User Feature Access","operationId":"delete_user_feature_access_api_v1_admin_user_feature_accesses_user__user_id__feature__feature_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-flags":{"get":{"tags":["Admin APIs","feature-flags"],"summary":"Get Feature Flags","operationId":"get_feature_flags_api_v1_admin_feature_flags_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureFlagRead"},"title":"Response Get Feature Flags Api V1 Admin Feature Flags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","feature-flags"],"summary":"Create Feature Flag","operationId":"create_feature_flag_api_v1_admin_feature_flags_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-flags/{feature_flag_id}":{"get":{"tags":["Admin APIs","feature-flags"],"summary":"Get Feature Flag","operationId":"get_feature_flag_api_v1_admin_feature_flags__feature_flag_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","feature-flags"],"summary":"Update Feature Flag","operationId":"update_feature_flag_api_v1_admin_feature_flags__feature_flag_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","feature-flags"],"summary":"Delete Feature Flag","operationId":"delete_feature_flag_api_v1_admin_feature_flags__feature_flag_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-flags":{"get":{"tags":["Admin APIs","client-feature-flag"],"summary":"Get Client Feature Flags","operationId":"get_client_feature_flags_api_v1_admin_client_feature_flags_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientFeatureFlagRead"},"title":"Response Get Client Feature Flags Api V1 Admin Client Feature Flags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","client-feature-flag"],"summary":"Create Client Feature Flag","operationId":"create_client_feature_flag_api_v1_admin_client_feature_flags_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureFlagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-flags/client/{client_id}/feature_flag/{feature_flag_id}":{"get":{"tags":["Admin APIs","client-feature-flag"],"summary":"Get Client Feature Flag","operationId":"get_client_feature_flag_api_v1_admin_client_feature_flags_client__client_id__feature_flag__feature_flag_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","client-feature-flag"],"summary":"Update Client Feature Flag","operationId":"update_client_feature_flag_api_v1_admin_client_feature_flags_client__client_id__feature_flag__feature_flag_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureFlagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","client-feature-flag"],"summary":"Delete Client Feature Flag","operationId":"delete_client_feature_flag_api_v1_admin_client_feature_flags_client__client_id__feature_flag__feature_flag_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-feature-flags":{"get":{"tags":["Admin APIs","user-feature-flag"],"summary":"Get User Feature Flags","operationId":"get_user_feature_flags_api_v1_admin_user_feature_flags_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserFeatureFlagRead"},"title":"Response Get User Feature Flags Api V1 Admin User Feature Flags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","user-feature-flag"],"summary":"Create User Feature Flag","operationId":"create_user_feature_flag_api_v1_admin_user_feature_flags_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureFlagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/user-feature-flags/user/{user_id}/feature_flag/{feature_flag_id}":{"get":{"tags":["Admin APIs","user-feature-flag"],"summary":"Get User Feature Flag","operationId":"get_user_feature_flag_api_v1_admin_user_feature_flags_user__user_id__feature_flag__feature_flag_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","user-feature-flag"],"summary":"Update User Feature Flag","operationId":"update_user_feature_flag_api_v1_admin_user_feature_flags_user__user_id__feature_flag__feature_flag_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureFlagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureFlagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","user-feature-flag"],"summary":"Delete User Feature Flag","operationId":"delete_user_feature_flag_api_v1_admin_user_feature_flags_user__user_id__feature_flag__feature_flag_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"feature_flag_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Flag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys":{"get":{"tags":["Admin APIs","api-keys"],"summary":"Get Api Keys","operationId":"get_api_keys_api_v1_admin_api_keys_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyRead"},"title":"Response Get Api Keys Api V1 Admin Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/{api_key_id}":{"get":{"tags":["Admin APIs","api-keys"],"summary":"Get Api Key","operationId":"get_api_key_api_v1_admin_api_keys__api_key_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-elements":{"get":{"tags":["Admin APIs","feature-elements"],"summary":"Get Feature Elements","operationId":"get_feature_elements_api_v1_admin_feature_elements_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureElementRead"},"title":"Response Get Feature Elements Api V1 Admin Feature Elements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-elements/{feature_element_id}":{"get":{"tags":["Admin APIs","feature-elements"],"summary":"Get Feature Element","operationId":"get_feature_element_api_v1_admin_feature_elements__feature_element_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_element_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureElementRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","feature-elements"],"summary":"Delete Feature Element","operationId":"delete_feature_element_api_v1_admin_feature_elements__feature_element_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_element_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-element-accesses":{"get":{"tags":["Admin APIs","client-feature-element-accesses"],"summary":"Get Client Feature Element Accesses","operationId":"get_client_feature_element_accesses_api_v1_admin_client_feature_element_accesses_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientFeatureElementAccessRead"},"title":"Response Get Client Feature Element Accesses Api V1 Admin Client Feature Element Accesses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-feature-element-accesses/client/{client_id}/feature_element/{feature_element_id}":{"get":{"tags":["Admin APIs","client-feature-element-accesses"],"summary":"Get Client Feature Element Access","operationId":"get_client_feature_element_access_api_v1_admin_client_feature_element_accesses_client__client_id__feature_element__feature_element_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_element_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureElementAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","client-feature-element-accesses"],"summary":"Update Client Feature Element Access","operationId":"update_client_feature_element_access_api_v1_admin_client_feature_element_accesses_client__client_id__feature_element__feature_element_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"feature_element_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureElementAccessUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientFeatureElementAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-data-source-links":{"get":{"tags":["Admin APIs","feature-data-source-links"],"summary":"Get Feature Data Source Links","operationId":"get_feature_data_source_links_api_v1_admin_feature_data_source_links_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureDataSourceLinkRead"},"title":"Response Get Feature Data Source Links Api V1 Admin Feature Data Source Links Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","feature-data-source-links"],"summary":"Create Feature Data Source Link","operationId":"create_feature_data_source_link_api_v1_admin_feature_data_source_links_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureDataSourceLinkCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureDataSourceLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-data-source-links/feature/{feature_id}/data_source/{data_source_id}":{"get":{"tags":["Admin APIs","feature-data-source-links"],"summary":"Get Feature Data Source Link","operationId":"get_feature_data_source_link_api_v1_admin_feature_data_source_links_feature__feature_id__data_source__data_source_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}},{"name":"data_source_id","in":"path","required":true,"schema":{"type":"string","title":"Data Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureDataSourceLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","feature-data-source-links"],"summary":"Delete Feature Data Source Link","operationId":"delete_feature_data_source_link_api_v1_admin_feature_data_source_links_feature__feature_id__data_source__data_source_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Id"}},{"name":"data_source_id","in":"path","required":true,"schema":{"type":"string","title":"Data Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-element-data-sources":{"get":{"tags":["Admin APIs","feature-element-data-sources"],"summary":"Get Feature Element Data Sources","operationId":"get_feature_element_data_sources_api_v1_admin_feature_element_data_sources_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeatureElementDataSourceRead"},"title":"Response Get Feature Element Data Sources Api V1 Admin Feature Element Data Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","feature-element-data-sources"],"summary":"Create Feature Element Data Source","operationId":"create_feature_element_data_source_api_v1_admin_feature_element_data_sources_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureElementDataSourceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureElementDataSourceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feature-element-data-sources/{feature_element_data_source_id}":{"get":{"tags":["Admin APIs","feature-element-data-sources"],"summary":"Get Feature Element Data Source","operationId":"get_feature_element_data_source_api_v1_admin_feature_element_data_sources__feature_element_data_source_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_element_data_source_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Data Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureElementDataSourceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","feature-element-data-sources"],"summary":"Delete Feature Element Data Source","operationId":"delete_feature_element_data_source_api_v1_admin_feature_element_data_sources__feature_element_data_source_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_element_data_source_id","in":"path","required":true,"schema":{"type":"string","title":"Feature Element Data Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/providers":{"get":{"tags":["Admin APIs","providers"],"summary":"Get Providers","operationId":"get_providers_api_v1_admin_providers_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderRead"},"title":"Response Get Providers Api V1 Admin Providers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","providers"],"summary":"Create Provider","operationId":"create_provider_api_v1_admin_providers_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/providers/export":{"get":{"tags":["Admin APIs","providers"],"summary":"Get Providers Export","description":"Full provider rows from ``provider_admin_export`` (stage + channel restrictions).","operationId":"get_providers_export_api_v1_admin_providers_export_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Providers Export Api V1 Admin Providers Export Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/providers/{provider_id}":{"get":{"tags":["Admin APIs","providers"],"summary":"Get Provider","operationId":"get_provider_api_v1_admin_providers__provider_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","providers"],"summary":"Update Provider","operationId":"update_provider_api_v1_admin_providers__provider_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","providers"],"summary":"Delete Provider","operationId":"delete_provider_api_v1_admin_providers__provider_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/provider-services":{"get":{"tags":["Admin APIs","provider-services"],"summary":"Get Provider Services","operationId":"get_provider_services_api_v1_admin_provider_services_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderServiceRead"},"title":"Response Get Provider Services Api V1 Admin Provider Services Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","provider-services"],"summary":"Create Provider Service","operationId":"create_provider_service_api_v1_admin_provider_services_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderServiceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderServiceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/provider-services/{provider_service_id}":{"get":{"tags":["Admin APIs","provider-services"],"summary":"Get Provider Service","operationId":"get_provider_service_api_v1_admin_provider_services__provider_service_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_service_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderServiceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","provider-services"],"summary":"Update Provider Service","operationId":"update_provider_service_api_v1_admin_provider_services__provider_service_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_service_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderServiceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderServiceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","provider-services"],"summary":"Delete Provider Service","operationId":"delete_provider_service_api_v1_admin_provider_services__provider_service_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_service_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-restrictions":{"get":{"tags":["Admin APIs","client-provider-restrictions"],"summary":"Get Client Provider Restrictions","operationId":"get_client_provider_restrictions_api_v1_admin_client_provider_restrictions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderChannelRestrictionItemRead"},"title":"Response Get Client Provider Restrictions Api V1 Admin Client Provider Restrictions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","client-provider-restrictions"],"summary":"Create Client Provider Restrictions","operationId":"create_client_provider_restrictions_api_v1_admin_client_provider_restrictions_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderChannelRestrictionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderChannelRestrictionItemRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/provider-logs":{"get":{"tags":["Admin APIs","provider-logs"],"summary":"Get Provider Logs","operationId":"get_provider_logs_api_v1_admin_provider_logs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProviderLogRead"},"title":"Response Get Provider Logs Api V1 Admin Provider Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","provider-logs"],"summary":"Create Provider Log","operationId":"create_provider_log_api_v1_admin_provider_logs_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderLogCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderLogRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/provider-logs/{provider_log_id}":{"get":{"tags":["Admin APIs","provider-logs"],"summary":"Get Provider Log","operationId":"get_provider_log_api_v1_admin_provider_logs__provider_log_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_log_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderLogRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","provider-logs"],"summary":"Update Provider Log","operationId":"update_provider_log_api_v1_admin_provider_logs__provider_log_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_log_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Log Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderLogUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderLogRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","provider-logs"],"summary":"Delete Provider Log","operationId":"delete_provider_log_api_v1_admin_provider_logs__provider_log_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_log_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses":{"get":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Get Client Provider Accesses","operationId":"get_client_provider_accesses_api_v1_admin_client_provider_accesses_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientProviderAccessServiceCodeNameVendor"},"title":"Response Get Client Provider Accesses Api V1 Admin Client Provider Accesses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses/client/{client_id}/provider/{provider_id}":{"put":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Update Client Provider Access","operationId":"update_client_provider_access_api_v1_admin_client_provider_accesses_client__client_id__provider__provider_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProviderAccessServiceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProviderAccessServiceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses/client/{client_id}/":{"put":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Update Client Accesses For All Providers","operationId":"update_client_accesses_for_all_providers_api_v1_admin_client_provider_accesses_client__client_id___put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProviderAccessServiceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses/client-providers-table/":{"get":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Get Client Provider Accesses Table","operationId":"get_client_provider_accesses_table_api_v1_admin_client_provider_accesses_client_providers_table__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"client_filter","in":"query","required":false,"schema":{"type":"string","default":"","title":"Client Filter"}},{"name":"provider_filter","in":"query","required":false,"schema":{"type":"string","default":"","title":"Provider Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses/client/{client_id}/provider/{provider_id}/logs":{"get":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Get Client Provider Access Audit","operationId":"get_client_provider_access_audit_api_v1_admin_client_provider_accesses_client__client_id__provider__provider_id__logs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientProviderAccessAuditServiceRead"},"title":"Response Get Client Provider Access Audit Api V1 Admin Client Provider Accesses Client  Client Id  Provider  Provider Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-provider-accesses/bulk-update/":{"put":{"tags":["Admin APIs","client-provider-accesses"],"summary":"Update Provider Accesses For All Clients","operationId":"update_provider_accesses_for_all_clients_api_v1_admin_client_provider_accesses_bulk_update__put","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ClientProviderAccessServiceBulkUpdate"},"type":"array","title":"Client Provider Accesses"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/tags":{"get":{"tags":["Admin APIs","tags"],"summary":"Get Tags","operationId":"get_tags_api_v1_admin_tags_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagRead"},"title":"Response Get Tags Api V1 Admin Tags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","tags"],"summary":"Create Tag","operationId":"create_tag_api_v1_admin_tags_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tags/{tag_id}":{"get":{"tags":["Admin APIs","tags"],"summary":"Get Tag","operationId":"get_tag_api_v1_admin_tags__tag_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","tags"],"summary":"Update Tag","operationId":"update_tag_api_v1_admin_tags__tag_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","tags"],"summary":"Delete Tag","operationId":"delete_tag_api_v1_admin_tags__tag_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tags/create-bulk/":{"post":{"tags":["Admin APIs","tags"],"summary":"Create Bulk Tags","operationId":"create_bulk_tags_api_v1_admin_tags_create_bulk__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTagCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/taxonomy/entities":{"get":{"tags":["Admin APIs","taxonomy"],"summary":"Get Entities","operationId":"get_entities_api_v1_admin_taxonomy_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EntityRead"},"type":"array","title":"Response Get Entities Api V1 Admin Taxonomy Entities Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","taxonomy"],"summary":"Create Entity","operationId":"create_entity_api_v1_admin_taxonomy_entities_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityCreateOrUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/taxonomy/entities/bulk":{"post":{"tags":["Admin APIs","taxonomy"],"summary":"Create Entities Bulk","operationId":"create_entities_bulk_api_v1_admin_taxonomy_entities_bulk_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EntityCreateOrUpdate"},"type":"array","title":"Entities"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EntityRead"},"type":"array","title":"Response Create Entities Bulk Api V1 Admin Taxonomy Entities Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/taxonomy/entities/{entity_id}":{"put":{"tags":["Admin APIs","taxonomy"],"summary":"Update Entity","operationId":"update_entity_api_v1_admin_taxonomy_entities__entity_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/taxonomy/industries":{"get":{"tags":["Admin APIs","taxonomy"],"summary":"Get Industries","operationId":"get_industries_api_v1_admin_taxonomy_industries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IndustryRead"},"type":"array","title":"Response Get Industries Api V1 Admin Taxonomy Industries Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","taxonomy"],"summary":"Create Industry","operationId":"create_industry_api_v1_admin_taxonomy_industries_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryCreateOrUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/taxonomy/industries/bulk":{"post":{"tags":["Admin APIs","taxonomy"],"summary":"Create Industries Bulk","operationId":"create_industries_bulk_api_v1_admin_taxonomy_industries_bulk_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IndustryCreateOrUpdate"},"type":"array","title":"Industries"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IndustryRead"},"type":"array","title":"Response Create Industries Bulk Api V1 Admin Taxonomy Industries Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/taxonomy/industries/{industry_id}":{"put":{"tags":["Admin APIs","taxonomy"],"summary":"Update Industry","operationId":"update_industry_api_v1_admin_taxonomy_industries__industry_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"industry_id","in":"path","required":true,"schema":{"type":"string","title":"Industry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-tokens":{"get":{"tags":["Admin APIs","api-tokens"],"summary":"Get Api Tokens","operationId":"get_api_tokens_api_v1_admin_api_tokens_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/APITokenRead"},"title":"Response Get Api Tokens Api V1 Admin Api Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-tokens/{api_token_id}":{"get":{"tags":["Admin APIs","api-tokens"],"summary":"Get Api Token","operationId":"get_api_token_api_v1_admin_api_tokens__api_token_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"api_token_id","in":"path","required":true,"schema":{"type":"string","title":"Api Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APITokenRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","api-tokens"],"summary":"Update Api Token","operationId":"update_api_token_api_v1_admin_api_tokens__api_token_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"api_token_id","in":"path","required":true,"schema":{"type":"string","title":"Api Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APITokenUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APITokenRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/roles":{"get":{"tags":["Admin APIs","roles"],"summary":"Get Roles","description":"Get all roles with optional filtering based on client compliance status.\n\n- Non-compliance managed clients: Returns only Client Admin and User roles\n- Compliance managed clients: Returns all roles\n- No client_id: Returns all roles","operationId":"get_roles_api_v1_admin_roles_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"},{"type":"null"}],"description":"Filter roles by client's compliance status","title":"Client Id"},"description":"Filter roles by client's compliance status"},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RoleRead"},"title":"Response Get Roles Api V1 Admin Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","roles"],"summary":"Create Role","operationId":"create_role_api_v1_admin_roles_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/roles/{role_id}":{"get":{"tags":["Admin APIs","roles"],"summary":"Get Role","operationId":"get_role_api_v1_admin_roles__role_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","roles"],"summary":"Update Role","operationId":"update_role_api_v1_admin_roles__role_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","roles"],"summary":"Delete Role","operationId":"delete_role_api_v1_admin_roles__role_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/policy-elements":{"get":{"tags":["Admin APIs","policy-elements"],"summary":"Get Policy Elements","operationId":"get_policy_elements_api_v1_admin_policy_elements_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PolicyElementRead"},"title":"Response Get Policy Elements Api V1 Admin Policy Elements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","policy-elements"],"summary":"Create Policy Element","operationId":"create_policy_element_api_v1_admin_policy_elements_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyElementCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyElementRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/policy-elements/{policy_element_id}":{"get":{"tags":["Admin APIs","policy-elements"],"summary":"Get Policy Element","operationId":"get_policy_element_api_v1_admin_policy_elements__policy_element_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"policy_element_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyElementRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","policy-elements"],"summary":"Update Policy Element","operationId":"update_policy_element_api_v1_admin_policy_elements__policy_element_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"policy_element_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Element Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyElementCreateOrUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyElementRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","policy-elements"],"summary":"Delete Policy Element","operationId":"delete_policy_element_api_v1_admin_policy_elements__policy_element_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"policy_element_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-users":{"get":{"tags":["Admin APIs","admin-users"],"summary":"Get Admin Users","operationId":"get_admin_users_api_v1_admin_admin_users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminUserRead"},"title":"Response Get Admin Users Api V1 Admin Admin Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","admin-users"],"summary":"Create Admin User","operationId":"create_admin_user_api_v1_admin_admin_users_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-users/{user_id}":{"get":{"tags":["Admin APIs","admin-users"],"summary":"Get Admin User","operationId":"get_admin_user_api_v1_admin_admin_users__user_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","admin-users"],"summary":"Update Admin User","operationId":"update_admin_user_api_v1_admin_admin_users__user_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","admin-users"],"summary":"Delete Admin User","operationId":"delete_admin_user_api_v1_admin_admin_users__user_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles":{"get":{"tags":["Admin APIs","admin-roles"],"summary":"Get Roles","operationId":"get_roles_api_v1_admin_admin_roles_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminRoleRead"},"title":"Response Get Roles Api V1 Admin Admin Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","admin-roles"],"summary":"Create Role","operationId":"create_role_api_v1_admin_admin_roles_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/{role_id}":{"get":{"tags":["Admin APIs","admin-roles"],"summary":"Get Role","operationId":"get_role_api_v1_admin_admin_roles__role_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","admin-roles"],"summary":"Update Role","operationId":"update_role_api_v1_admin_admin_roles__role_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","admin-roles"],"summary":"Delete Role","operationId":"delete_role_api_v1_admin_admin_roles__role_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-groups":{"get":{"tags":["Admin APIs","admin-groups"],"summary":"Get Groups","operationId":"get_groups_api_v1_admin_admin_groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminGroupRead"},"title":"Response Get Groups Api V1 Admin Admin Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","admin-groups"],"summary":"Create Group","operationId":"create_group_api_v1_admin_admin_groups_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-groups/{group_id}":{"get":{"tags":["Admin APIs","admin-groups"],"summary":"Get Group","operationId":"get_group_api_v1_admin_admin_groups__group_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","admin-groups"],"summary":"Update Group","operationId":"update_group_api_v1_admin_admin_groups__group_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","admin-groups"],"summary":"Delete Group","operationId":"delete_group_api_v1_admin_admin_groups__group_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-permissions":{"get":{"tags":["Admin APIs","admin-permissions"],"summary":"Get Permissions","operationId":"get_permissions_api_v1_admin_admin_permissions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminPermissionRead"},"title":"Response Get Permissions Api V1 Admin Admin Permissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","admin-permissions"],"summary":"Create Permission","operationId":"create_permission_api_v1_admin_admin_permissions_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-permissions/bulk":{"post":{"tags":["Admin APIs","admin-permissions"],"summary":"Bulk Create Permissions","description":"Create multiple permissions in a single request.\n\nAccepts a JSON array of permission objects. Each is created individually\nso that partial success is possible — already-existing entries are\nskipped and reported in the response.","operationId":"bulk_create_permissions_api_v1_admin_admin_permissions_bulk_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdminPermissionCreate"},"type":"array","title":"Permissions"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdminPermissionRead"},"type":"array","title":"Response Bulk Create Permissions Api V1 Admin Admin Permissions Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-permissions/detect-resources":{"get":{"tags":["Admin APIs","admin-permissions"],"summary":"Detect Resources","description":"Introspect registered API routes and compare against existing permissions.\n\nReturns existing and missing resource names so admins can see which\nresources still need permission definitions created.","operationId":"detect_resources_api_v1_admin_admin_permissions_detect_resources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-permissions/sync-resources":{"post":{"tags":["Admin APIs","admin-permissions"],"summary":"Sync Resources","description":"Auto-create the 5 permission tiers for any API resources that are missing them.","operationId":"sync_resources_api_v1_admin_admin_permissions_sync_resources_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-permissions/export":{"get":{"tags":["Admin APIs","admin-permissions"],"summary":"Export Permissions","description":"Export all permission records as portable JSON (no UUIDs).\n\nUse this to capture the current state before a migration, or to\ngenerate a golden config that can be imported into other environments.","operationId":"export_permissions_api_v1_admin_admin_permissions_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionExportResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-permissions/{permission_id}":{"get":{"tags":["Admin APIs","admin-permissions"],"summary":"Get Permission","operationId":"get_permission_api_v1_admin_admin_permissions__permission_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","admin-permissions"],"summary":"Update Permission","operationId":"update_permission_api_v1_admin_admin_permissions__permission_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPermissionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","admin-permissions"],"summary":"Delete Permission","operationId":"delete_permission_api_v1_admin_admin_permissions__permission_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/tables":{"get":{"tags":["Admin APIs","delta-tables"],"summary":"Get Delta Tables","operationId":"get_delta_tables_api_v1_admin_delta_tables_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeltaTableRead"},"title":"Response Get Delta Tables Api V1 Admin Delta Tables Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","delta-tables"],"summary":"Create Delta Table","operationId":"create_delta_table_api_v1_admin_delta_tables_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaTableCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaTableRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/tables/{delta_table_id}":{"get":{"tags":["Admin APIs","delta-tables"],"summary":"Get Delta Table","operationId":"get_delta_table_api_v1_admin_delta_tables__delta_table_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_table_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Table Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaTableRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","delta-tables"],"summary":"Update Delta Table","operationId":"update_delta_table_api_v1_admin_delta_tables__delta_table_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_table_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Table Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaTableUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaTableRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","delta-tables"],"summary":"Delete Delta Table","operationId":"delete_delta_table_api_v1_admin_delta_tables__delta_table_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_table_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Table Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/schemas":{"get":{"tags":["Admin APIs","delta-schemas"],"summary":"Get Delta Schemas","operationId":"get_delta_schemas_api_v1_admin_delta_schemas_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeltaSchemaRead"},"title":"Response Get Delta Schemas Api V1 Admin Delta Schemas Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","delta-schemas"],"summary":"Create Delta Schema","operationId":"create_delta_schema_api_v1_admin_delta_schemas_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSchemaCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSchemaRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/schemas/{delta_schema_id}":{"get":{"tags":["Admin APIs","delta-schemas"],"summary":"Get Delta Schema","operationId":"get_delta_schema_api_v1_admin_delta_schemas__delta_schema_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_schema_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Schema Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSchemaRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","delta-schemas"],"summary":"Update Delta Schema","operationId":"update_delta_schema_api_v1_admin_delta_schemas__delta_schema_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_schema_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Schema Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSchemaUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSchemaRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","delta-schemas"],"summary":"Delete Delta Schema","operationId":"delete_delta_schema_api_v1_admin_delta_schemas__delta_schema_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_schema_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Schema Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/shares":{"get":{"tags":["Admin APIs","delta-shares"],"summary":"Get Delta Shares","operationId":"get_delta_shares_api_v1_admin_delta_shares_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeltaSharesRead"},"title":"Response Get Delta Shares Api V1 Admin Delta Shares Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","delta-shares"],"summary":"Create Delta Share","operationId":"create_delta_share_api_v1_admin_delta_shares_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSharesCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSharesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/shares/{delta_share_id}":{"get":{"tags":["Admin APIs","delta-shares"],"summary":"Get Delta Share","operationId":"get_delta_share_api_v1_admin_delta_shares__delta_share_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_share_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSharesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","delta-shares"],"summary":"Update Delta Share","operationId":"update_delta_share_api_v1_admin_delta_shares__delta_share_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_share_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSharesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaSharesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","delta-shares"],"summary":"Delete Delta Share","operationId":"delete_delta_share_api_v1_admin_delta_shares__delta_share_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"delta_share_id","in":"path","required":true,"schema":{"type":"string","title":"Delta Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/client-configs/{client_id}":{"get":{"tags":["Admin APIs","client-delta-configs"],"summary":"Get Client Delta Config","operationId":"get_client_delta_config_api_v1_admin_delta_client_configs__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Client Delta Config Api V1 Admin Delta Client Configs  Client Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","client-delta-configs"],"summary":"Create Client Delta Config","operationId":"create_client_delta_config_api_v1_admin_delta_client_configs__client_id__post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Config"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Client Delta Config Api V1 Admin Delta Client Configs  Client Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/delta/client-configs/create_with_shares_names":{"post":{"tags":["Admin APIs","client-delta-configs"],"summary":"Create Client Delta Config With Shares Names","operationId":"create_client_delta_config_with_shares_names_api_v1_admin_delta_client_configs_create_with_shares_names_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeltaClientConfigCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Client Delta Config With Shares Names Api V1 Admin Delta Client Configs Create With Shares Names Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/delta/client-configs/{client_id}/regenerate_token":{"post":{"tags":["Admin APIs","client-delta-configs"],"summary":"Regenerate Client Token","operationId":"regenerate_client_token_api_v1_admin_delta_client_configs__client_id__regenerate_token_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Regenerate Client Token Api V1 Admin Delta Client Configs  Client Id  Regenerate Token Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups":{"get":{"tags":["Admin APIs","groups"],"summary":"Get Groups","operationId":"get_groups_api_v1_admin_groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupRead"},"title":"Response Get Groups Api V1 Admin Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","groups"],"summary":"Create Group","description":"Create a group, optionally setting its MCP period limit, MCP access and\nBlock role in the same request.\n\nRuns under the router's ``groups:create`` permission even when it revokes\nMCP access, unlike revoke_group_access below which requires ``groups:edit``\n— a brand-new group has no members, so creating one pre-revoked takes\naccess away from nobody and cannot escalate anyone's privileges. No\nOktaService dependency for the same reason: the revocation touches no\nexisting membership, so there is nothing to sync.","operationId":"create_group_api_v1_admin_groups_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}":{"get":{"tags":["Admin APIs","groups"],"summary":"Get Group","operationId":"get_group_api_v1_admin_groups__group_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","groups"],"summary":"Update Group","operationId":"update_group_api_v1_admin_groups__group_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/users":{"get":{"tags":["Admin APIs","groups"],"summary":"Get Group Users","description":"Get users in a group.","operationId":"get_group_users_api_v1_admin_groups__group_id__users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserRead"},"title":"Response Get Group Users Api V1 Admin Groups  Group Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/users/{user_id}":{"post":{"tags":["Admin APIs","groups"],"summary":"Add Users To Group","description":"Add users to a group.","operationId":"add_users_to_group_api_v1_admin_groups__group_id__users__user_id__post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","groups"],"summary":"Remove User From Group","description":"Remove a user from a group","operationId":"remove_user_from_group_api_v1_admin_groups__group_id__users__user_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/limits":{"get":{"tags":["Admin APIs","groups"],"summary":"Get Group Limits","description":"Get group limits","operationId":"get_group_limits_api_v1_admin_groups__group_id__limits_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/mcp-period-limit/{mcp_period_limit}":{"patch":{"tags":["Admin APIs","groups"],"summary":"Update Group Mcp Period Limit","description":"Update group MCP collective period limit (admin only).\n\nAccepts a float value or \"null\" to remove the limit.\n\nCycle rules:\n- First time a limit is set: mcp_period_start_date = now, mcp_period_reset_date = now + 1 day.\n- Updating an existing limit: preserves cycle dates (no restart).\n- Removing the limit (\"null\"): clears both cycle dates.","operationId":"update_group_mcp_period_limit_api_v1_admin_groups__group_id__mcp_period_limit__mcp_period_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"mcp_period_limit","in":"path","required":true,"schema":{"type":"string","title":"Mcp Period Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/products/{product_id}/revoke-access":{"post":{"tags":["Admin APIs","groups"],"summary":"Revoke Group Access","description":"Revoke a product's access (e.g. MCP) for an entire Group.\n\nEvery current member loses access, except members already individually\nrevoked (whose state is unaffected). A member added to this Group later\ninherits the revocation automatically.","operationId":"revoke_group_access_api_v1_admin_groups__group_id__products__product_id__revoke_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/groups/{group_id}/products/{product_id}/restore-access":{"post":{"tags":["Admin APIs","groups"],"summary":"Restore Group Access","description":"Restore a product's access for an entire Group previously revoked via\nrevoke_group_access. Members who are individually revoked stay revoked.","operationId":"restore_group_access_api_v1_admin_groups__group_id__products__product_id__restore_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dashboard":{"get":{"tags":["Admin APIs","dashboard"],"summary":"Get Dashboard","operationId":"get_dashboard_api_v1_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Dashboard Api V1 Admin Dashboard Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/search/":{"get":{"tags":["Admin APIs","search"],"summary":"Search","operationId":"search_api_v1_admin_search__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Api V1 Admin Search  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/auth/resource-hierarchy":{"get":{"tags":["Admin APIs","auth"],"summary":"Get Resource Hierarchy","description":"Return the permission resource hierarchy (parent -> children).\n\nStatic structural metadata defining the permission model.  This is the\nsingle source of truth for the hierarchy: the UI fetches it once at startup\ninstead of hardcoding its own copy.  Served with an ETag so clients\nrevalidate with a cheap 304 until the hierarchy actually changes.","operationId":"get_resource_hierarchy_api_v1_admin_auth_resource_hierarchy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Response Get Resource Hierarchy Api V1 Admin Auth Resource Hierarchy Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/auth/permissions":{"get":{"tags":["Admin APIs","auth"],"summary":"Get Permissions","operationId":"get_permissions_api_v1_admin_auth_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Permissions Api V1 Admin Auth Permissions Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/auth/cookie/set":{"post":{"tags":["Admin APIs","auth"],"summary":"Set Auth Cookie","operationId":"set_auth_cookie_api_v1_admin_auth_cookie_set_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/auth/cookie/clear":{"post":{"tags":["Admin APIs","auth"],"summary":"Clear Auth Cookie","operationId":"clear_auth_cookie_api_v1_admin_auth_cookie_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/signup/ops/meta":{"get":{"tags":["Admin APIs","signup"],"summary":"Signup Ops Meta","description":"Expose PostgreSQL schema for signup tables so admin UI can build diagnostic SELECTs.","operationId":"signup_ops_meta_api_v1_admin_signup_ops_meta_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupOpsMetaResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/signup/ops/analytics":{"get":{"tags":["Admin APIs","signup"],"summary":"Signup Ops Analytics","operationId":"signup_ops_analytics_api_v1_admin_signup_ops_analytics_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive start date (UTC). Omit for no lower bound on signup created_at.","title":"Date From"},"description":"Inclusive start date (UTC). Omit for no lower bound on signup created_at."},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive end calendar day (UTC). Omit to use current time as the upper bound.","title":"Date To"},"description":"Inclusive end calendar day (UTC). Omit to use current time as the upper bound."},{"name":"bucket","in":"query","required":false,"schema":{"type":"string","description":"day, week, or month","default":"day","title":"Bucket"},"description":"day, week, or month"},{"name":"statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by one or more signup statuses","title":"Statuses"},"description":"Filter by one or more signup statuses"},{"name":"selected_plan_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by one or more plan ids","title":"Selected Plan Ids"},"description":"Filter by one or more plan ids"},{"name":"importances","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by one or more importance values","title":"Importances"},"description":"Filter by one or more importance values"},{"name":"tracking_statuses","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by one or more tracking statuses","title":"Tracking Statuses"},"description":"Filter by one or more tracking statuses"},{"name":"subscription_periods","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by one or more billing cycles","title":"Subscription Periods"},"description":"Filter by one or more billing cycles"},{"name":"plan_subscription_pairs","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by plan + billing cycle pairs (OR). Each value is plan_id:period (e.g. professional:monthly). When set, selected_plan_ids and subscription_periods are ignored.","title":"Plan Subscription Pairs"},"description":"Filter by plan + billing cycle pairs (OR). Each value is plan_id:period (e.g. professional:monthly). When set, selected_plan_ids and subscription_periods are ignored."},{"name":"verification_failure_any","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"If true, restrict to signups with at least one email_verification_failed event.","title":"Verification Failure Any"},"description":"If true, restrict to signups with at least one email_verification_failed event."},{"name":"verification_error_codes","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Restrict to signups whose latest email_verification_failed error_code is one of these (OR). Repeat query param.","title":"Verification Error Codes"},"description":"Restrict to signups whose latest email_verification_failed error_code is one of these (OR). Repeat query param."},{"name":"incomplete_segments","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Restrict analytics to incomplete buckets matching the Signup Lifecycle chart: `users_stuck` (non-completed with verification/payment/provisioning failure events), `users_opted_out` (non-completed without those). Omit or pass both for all non-completed.","title":"Incomplete Segments"},"description":"Restrict analytics to incomplete buckets matching the Signup Lifecycle chart: `users_stuck` (non-completed with verification/payment/provisioning failure events), `users_opted_out` (non-completed without those). Omit or pass both for all non-completed."},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default), omit signups whose email domain is in internal_email_domains or contains internal_email_domain_substring in the domain (see /signup/ops/meta).","default":true,"title":"Exclude Internal"},"description":"When true (default), omit signups whose email domain is in internal_email_domains or contains internal_email_domain_substring in the domain (see /signup/ops/meta)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupOpsAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/ops/pending":{"get":{"tags":["Admin APIs","signup"],"summary":"Signup Ops Pending","operationId":"signup_ops_pending_api_v1_admin_signup_ops_pending_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default), omit signups whose email domain is in internal_email_domains or contains internal_email_domain_substring in the domain (see /signup/ops/meta).","default":true,"title":"Exclude Internal"},"description":"When true (default), omit signups whose email domain is in internal_email_domains or contains internal_email_domain_substring in the domain (see /signup/ops/meta)."},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignupOpsPendingRow"},"title":"Response Signup Ops Pending Api V1 Admin Signup Ops Pending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/ops/{session_id}/tracking":{"patch":{"tags":["Admin APIs","signup"],"summary":"Signup Ops Patch Tracking","operationId":"signup_ops_patch_tracking_api_v1_admin_signup_ops__session_id__tracking_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalTrackingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalTrackingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/ops/{session_id}/tracking/audit":{"get":{"tags":["Admin APIs","signup"],"summary":"Signup Ops List Tracking Audit","operationId":"signup_ops_list_tracking_audit_api_v1_admin_signup_ops__session_id__tracking_audit_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalTrackingAuditListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/ops/{session_id}/notes":{"get":{"tags":["Admin APIs","signup"],"summary":"Signup Ops List Notes","operationId":"signup_ops_list_notes_api_v1_admin_signup_ops__session_id__notes_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalNoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","signup"],"summary":"Signup Ops Add Note","operationId":"signup_ops_add_note_api_v1_admin_signup_ops__session_id__notes_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalNoteCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInternalNoteRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/search":{"get":{"tags":["Admin APIs","signup"],"summary":"Search Signup Details","description":"Get comprehensive signup details for troubleshooting.\n\nSearch by either session_id or email. Exactly one must be provided.\n\nReturns:\n    - Signup basic information (email, name, status, plan)\n    - All events/transitions with timestamps\n    - All provisioning steps with status and errors\n    - Client and user IDs if signup is completed","operationId":"search_signup_details_api_v1_admin_signup_search_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","description":"Search by session ID","title":"Session Id"},"description":"Search by session ID"},{"name":"email","in":"query","required":false,"schema":{"type":"string","description":"Search by email address","title":"Email"},"description":"Search by email address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTroubleshootResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/{session_id}":{"get":{"tags":["Admin APIs","signup"],"summary":"Get Signup Details","description":"Get comprehensive signup details for troubleshooting by session ID.\n\nThis endpoint is kept for backward compatibility.\nUse /search endpoint for more flexible searching.\n\nReturns:\n    - Signup basic information (email, name, status, plan)\n    - All events/transitions with timestamps\n    - All provisioning steps with status and errors\n    - Client and user IDs if signup is completed","operationId":"get_signup_details_api_v1_admin_signup__session_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTroubleshootResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/{session_id}/retry-provisioning":{"post":{"tags":["Admin APIs","signup"],"summary":"Retry Signup Provisioning","description":"Retry provisioning for a signup session.\n\nRules:\n  - Only allowed if status == PROVISIONING_FAILED\n  - Resumes from the last successful step (tracked in signup_provisioning_steps)\n  - Emits provisioning_retry_started event","operationId":"retry_signup_provisioning_api_v1_admin_signup__session_id__retry_provisioning_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Retry Signup Provisioning Api V1 Admin Signup  Session Id  Retry Provisioning Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup/verification-attempts/reset":{"post":{"tags":["Admin APIs","signup"],"summary":"Reset Signup Verification Attempts","description":"Admin-only: reset verification attempts for an email (hard block is lifted).\n\nExactly one of `email` or `session_id` must be provided.\n\nRequires an existing `pending_signups` row for the given email or session_id.","operationId":"reset_signup_verification_attempts_api_v1_admin_signup_verification_attempts_reset_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"type":"string","description":"Reset attempts by email","title":"Email"},"description":"Reset attempts by email"},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","description":"Reset the code-attempt counter by resolving the pending signup via session_id.","title":"Session Id"},"description":"Reset the code-attempt counter by resolving the pending signup via session_id."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reset Signup Verification Attempts Api V1 Admin Signup Verification Attempts Reset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tokens/{token_id}":{"get":{"tags":["Admin APIs","tokens","tokens"],"summary":"Get Token","operationId":"get_token_api_v1_admin_tokens__token_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","tokens","tokens"],"summary":"Update Token","operationId":"update_token_api_v1_admin_tokens__token_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tokens":{"get":{"tags":["Admin APIs","tokens","tokens"],"summary":"Get Tokens","operationId":"get_tokens_api_v1_admin_tokens_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TokenResponse"},"title":"Response Get Tokens Api V1 Admin Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tokens/{token_id}/activate":{"post":{"tags":["Admin APIs","tokens","tokens"],"summary":"Activate Token","operationId":"activate_token_api_v1_admin_tokens__token_id__activate_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tokens/{token_id}/deactivate":{"post":{"tags":["Admin APIs","tokens","tokens"],"summary":"Deactivate Token","operationId":"deactivate_token_api_v1_admin_tokens__token_id__deactivate_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/accounts":{"get":{"tags":["Admin APIs","ledger"],"summary":"List Client Accounts","operationId":"list_client_accounts_api_v1_admin_ledger_accounts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"Client ID","title":"Client Id"},"description":"Client ID"},{"name":"include_integration_tokens","in":"query","required":false,"schema":{"type":"boolean","description":"Include integration tokens (e.g. MCP/S3)","default":true,"title":"Include Integration Tokens"},"description":"Include integration tokens (e.g. MCP/S3)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerClientAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/transactions/created":{"get":{"tags":["Admin APIs","ledger"],"summary":"List Created Transactions","operationId":"list_created_transactions_api_v1_admin_ledger_transactions_created_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"Client ID","title":"Client Id"},"description":"Client ID"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"usage_scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional usage_scope filter","title":"Usage Scope"},"description":"Optional usage_scope filter"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional direction filter: credit|debit","title":"Direction"},"description":"Optional direction filter: credit|debit"},{"name":"transaction_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional transaction_type filter (e.g. purchase, consume, promotion, expiration, adjustment, marketplace)","title":"Transaction Type"},"description":"Optional transaction_type filter (e.g. purchase, consume, promotion, expiration, adjustment, marketplace)"},{"name":"sort_field","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Column to sort by (e.g. created_at, amount, usage_scope, transaction_type, balance_before, balance_after, direction)","title":"Sort Field"},"description":"Column to sort by (e.g. created_at, amount, usage_scope, transaction_type, balance_before, balance_after, direction)"},{"name":"sort_order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort order: ASC or DESC","title":"Sort Order"},"description":"Sort order: ASC or DESC"},{"name":"include_integration_tokens","in":"query","required":false,"schema":{"type":"boolean","description":"Include integration tokens (e.g. MCP)","default":true,"title":"Include Integration Tokens"},"description":"Include integration tokens (e.g. MCP)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerTransactionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/transactions/created/count":{"get":{"tags":["Admin APIs","ledger"],"summary":"Count Created Transactions Last Hours","operationId":"count_created_transactions_last_hours_api_v1_admin_ledger_transactions_created_count_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Client ID (optional)","title":"Client Id"},"description":"Client ID (optional)"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Lookback window in hours","default":24,"title":"Hours"},"description":"Lookback window in hours"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerTransactionsCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/transactions/created/{transaction_id}":{"get":{"tags":["Admin APIs","ledger"],"summary":"Get Created Transaction Detail","operationId":"get_created_transaction_detail_api_v1_admin_ledger_transactions_created__transaction_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerTransactionDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/transactions/upcoming":{"get":{"tags":["Admin APIs","ledger"],"summary":"List Upcoming Transactions","operationId":"list_upcoming_transactions_api_v1_admin_ledger_transactions_upcoming_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"Client ID","title":"Client Id"},"description":"Client ID"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"usage_scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional usage_scope filter","title":"Usage Scope"},"description":"Optional usage_scope filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerUpcomingIssueListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/recurring":{"get":{"tags":["Admin APIs","ledger"],"summary":"List Recurring Actions","operationId":"list_recurring_actions_api_v1_admin_ledger_recurring_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ScheduledLedgerRecurringStatus"},{"type":"null"}],"title":"Status"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"}},{"name":"token_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Id"}},{"name":"token_is_promotional","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by Token.is_promotional","title":"Token Is Promotional"},"description":"Filter by Token.is_promotional"},{"name":"exclude_token_usage_scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exclude tokens with this usage_scope","title":"Exclude Token Usage Scope"},"description":"Exclude tokens with this usage_scope"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledLedgerRecurringActionResponse"},"title":"Response List Recurring Actions Api V1 Admin Ledger Recurring Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/adjustments/credit":{"post":{"tags":["Admin APIs","ledger"],"summary":"Adjustment Credit","operationId":"adjustment_credit_api_v1_admin_ledger_adjustments_credit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueTokensOneTimeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/ledger/adjustments/credit/recurring":{"post":{"tags":["Admin APIs","ledger"],"summary":"Adjustment Credit Recurring","operationId":"adjustment_credit_recurring_api_v1_admin_ledger_adjustments_credit_recurring_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueTokensRecurringRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/ledger/adjustments/debit":{"post":{"tags":["Admin APIs","ledger"],"summary":"Adjustment Debit","operationId":"adjustment_debit_api_v1_admin_ledger_adjustments_debit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeTokensRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/ledger/s3-summary":{"get":{"tags":["Admin APIs","ledger"],"summary":"Get Client S3 Summary","description":"One client's S3 rollup: Allocated / Accrued / Consumed / Available, plus its grants.\n\nThe client-facing twin (``/ledger/s3/summary``) scopes to the caller's own token, which is\nthe one thing CAMS cannot use — Cole is looking at somebody else's wallet. Same read\nservice, so the two surfaces cannot drift into reporting different numbers for the same\nclient.","operationId":"get_client_s3_summary_api_v1_admin_ledger_s3_summary_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"Client ID","title":"Client Id"},"description":"Client ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3BalanceSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/s3-grants":{"get":{"tags":["Admin APIs","ledger"],"summary":"List S3 Grants","description":"Every client's S3 awards, for Cole's oversight tab.\n\nThe same rows the client's own Vesting Schedule renders, from the same query — two\nimplementations of \"accrued\" or \"progress\" would drift, and the figure quoted to a client\nhas to be the one on their screen.\n\n**Bounded, not paginated.** The cap is applied in SQL and everything downstream — the\nvesting rollup, the debit attribution, the next-vest lookup — keys off the rows it returns,\nso the database read is bounded and not merely the response. Ordering is deterministic\n(client, effective_at, id), which is what makes real pagination a later addition rather than\na rewrite. ``has_more`` says outright whether anything was left behind — inferring it from\n``total_grants == limit`` is wrong at the boundary, where a system holding exactly ``limit``\ngrants looks identical to one holding more.","operationId":"list_s3_grants_api_v1_admin_ledger_s3_grants_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to one client; omit for every client.","title":"Client Id"},"description":"Narrow to one client; omit for every client."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"description":"Maximum grants to return, ordered by client then effective date.","default":500,"title":"Limit"},"description":"Maximum grants to return, ordered by client then effective date."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AdminGrantsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","ledger"],"summary":"Create S3 Grant","description":"Award S3 tokens to a client, writing the grant and its full vesting schedule.\n\nCredits nothing here — the vesting executor posts each period's credit when its\n``vest_at`` arrives, including an ``immediate`` grant's single already-due period. That\nkeeps every S3 credit on one code path with one idempotency anchor.\n\nReturns the ``grant_id`` so the UI can link to the award it just created, and replays\nsafely: the same idempotency key returns the stored grant with ``already_existed=true``\nand writes nothing.\n\nNaming a ``block_request_id`` whose contract does not exist yet holds the award\n``awaiting_contract`` with **no vesting rows**: there is no billing anchor until the\ncontract starts, and the subscription webhook builds the schedule then. Such a response\ncarries ``effective_at: null`` and ``vesting_count: 0``.","operationId":"create_s3_grant_api_v1_admin_ledger_s3_grants_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3GrantCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3GrantCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/s3-grants/{grant_id}/cancel":{"post":{"tags":["Admin APIs","ledger"],"summary":"Cancel S3 Grant","description":"Cancel an S3 token award — stops future vesting, keeps what already vested.\n\nIdempotent: cancelling an already-cancelled award reports the existing state rather\nthan erroring, so a double-confirmed dialog is harmless.","operationId":"cancel_s3_grant_api_v1_admin_ledger_s3_grants__grant_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","title":"Grant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelS3GrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelS3GrantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ledger/adjustments/credit/scheduled":{"post":{"tags":["Admin APIs","ledger"],"summary":"Adjustment Credit Scheduled","operationId":"adjustment_credit_scheduled_api_v1_admin_ledger_adjustments_credit_scheduled_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdjustmentCreditScheduledRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/sync_okta_data":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Sync Okta Data","operationId":"sync_okta_data_api_v1_admin_admin_utils_sync_okta_data_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/sync_okta_data_background":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Sync Okta Data Background","operationId":"sync_okta_data_background_api_v1_admin_admin_utils_sync_okta_data_background_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/sync-element-data-sources":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Sync Element Data Sources","operationId":"sync_element_data_sources_api_v1_admin_admin_utils_sync_element_data_sources_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/fill-client-provider-accesses-table":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Fill Client Provider Accesses Table","operationId":"fill_client_provider_accesses_table_api_v1_admin_admin_utils_fill_client_provider_accesses_table_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/generate-api-tokens-for-users":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Generate Api Tokens For Users","description":"Trigger the generation of API keys for all users in the background.","operationId":"generate_api_tokens_for_users_api_v1_admin_admin_utils_generate_api_tokens_for_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/deactivate-api-tokens-and-keys-for-deactivated-users":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Deactivate Api Tokens And Keys For Deactivated Users","description":"Deactivate API keys and tokens for users that have been deactivated.","operationId":"deactivate_api_tokens_and_keys_for_deactivated_users_api_v1_admin_admin_utils_deactivate_api_tokens_and_keys_for_deactivated_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/sync-client-provider-access-locks":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Client Provider Access Locks","description":"Sync the locks for client provider access.","operationId":"client_provider_access_locks_api_v1_admin_admin_utils_sync_client_provider_access_locks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/precompute/status":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Precompute Status","description":"What each ontology precompute has published, staged, and resident.\n\nDistinct from ``/clear-cache`` in every respect: that flushes this service's\nown Redis namespace, where these read and move power-api's precomputed\ngraph payloads. Nothing here evicts anything.","operationId":"precompute_status_api_v1_admin_admin_utils_precompute_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/precompute/shape/{name}":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Precompute Shape","description":"What is inside one precompute's published payload.\n\nThe rest of this surface reports whether a payload exists and how big it is.\nThis is the only thing that says what it contains — the stored blob is\ncompressed for the larger artifacts, so it cannot be read out of Redis\ndirectly.","operationId":"precompute_shape_api_v1_admin_admin_utils_precompute_shape__name__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-utils/precompute/diff/{name}":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Precompute Diff","description":"What the live payload added against the build before it.\n\nThe version stamp moving says the graph moved. This says what that meant for\none artifact — and a build that quietly dropped rows is only visible here.","operationId":"precompute_diff_api_v1_admin_admin_utils_precompute_diff__name__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-utils/precompute/archive/{name}":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Precompute Archive","description":"Which past payloads of one artifact are still recoverable.\n\npower-api archives every payload it stages to Postgres, so this reaches\nfurther back than Redis, whose copies expire after thirty days.","operationId":"precompute_archive_api_v1_admin_admin_utils_precompute_archive__name__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-utils/precompute/build":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Start Precompute Build","description":"Start a build, which publishes what it writes when it finishes.\n\nReturns the queued job; the scan runs for minutes on power-api and is\npolled through ``/precompute/build/{job_id}``.","operationId":"start_precompute_build_api_v1_admin_admin_utils_precompute_build_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrecomputeBuildRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/precompute/build/{job_id}":{"get":{"tags":["Admin APIs","admin-utils"],"summary":"Precompute Build","description":"Per-artifact progress for one build.","operationId":"precompute_build_api_v1_admin_admin_utils_precompute_build__job_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-utils/precompute/build/{job_id}/stop":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Stop Precompute Build","description":"End a build that is not going to finish on its own.\n\nA build whose process died clears itself once the lease it stopped renewing\nexpires. This is for the other case, which nothing else resolves: a build\nstill renewing its lease while making no progress, where the only other way\nout is the duration ceiling.\n\nNothing being served changes. A build stages under a new version key and\nonly its last phase moves the published pointer, so stopping one leaves\nevery pod on exactly what it was already serving.","operationId":"stop_precompute_build_api_v1_admin_admin_utils_precompute_build__job_id__stop_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrecomputeStopRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-utils/precompute/activate":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Activate Precompute","description":"Roll back to a payload an earlier build wrote, across every pod.","operationId":"activate_precompute_api_v1_admin_admin_utils_precompute_activate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrecomputeActivateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/admin-utils/clear-cache":{"post":{"tags":["Admin APIs","admin-utils"],"summary":"Clear Cache","operationId":"clear_cache_api_v1_admin_admin_utils_clear_cache_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClearCacheRequest","default":{"targets":["cams"],"power_api_caches":["all"]}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/audit-logs":{"get":{"tags":["Admin APIs","audit-logs"],"summary":"List CAMS Audit Logs","description":"Retrieve admin request audit logs with filtering, sorting, and pagination.","operationId":"get_audit_logs_api_v1_admin_audit_logs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/okta-events":{"get":{"tags":["Admin APIs","okta-events"],"summary":"List Okta Events","description":"Retrieve Okta events with filtering, sorting, and pagination.","operationId":"get_okta_events_api_v1_admin_okta_events_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/release-timer":{"get":{"tags":["Admin APIs","release-timer"],"summary":"Get Release Timer","description":"Return the current release timer state (the single open timing, if any).","operationId":"get_release_timer_api_v1_admin_release_timer_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseTimerRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"put":{"tags":["Admin APIs","release-timer"],"summary":"Set Release Timer","description":"Start or stop the release timer. Idempotent in both directions.","operationId":"set_release_timer_api_v1_admin_release_timer_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseTimerUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseTimerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reports/transactions/preview":{"get":{"tags":["Admin APIs","Admin - Reports"],"summary":"Preview Transactions","description":"Preview ledger transactions for admin tooling.\n\nThis replaces the legacy \"events\"-based detailed transactions preview.","operationId":"preview_transactions_api_v1_admin_reports_transactions_preview_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by client ID","title":"Client Id"},"description":"Filter by client ID"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source","title":"Source"},"description":"Filter by source"},{"name":"token_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by token name","title":"Token Name"},"description":"Filter by token name"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by client sector","title":"Sector"},"description":"Filter by client sector"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":25,"title":"Per Page"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reports/transactions/export":{"post":{"tags":["Admin APIs","Admin - Reports"],"summary":"Export Transactions","description":"Export ledger transactions with breakdown:\nTransaction -> (frameworks x sources) -> token entries","operationId":"export_transactions_api_v1_admin_reports_transactions_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reports/promo-codes/export":{"post":{"tags":["Admin APIs","Admin - Reports"],"summary":"Export Promo Codes","description":"Export promo codes as CSV using the same filters as /promo-codes/preview.","operationId":"export_promo_codes_api_v1_admin_reports_promo_codes_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodesExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reports/promo-codes/preview":{"get":{"tags":["Admin APIs","Admin - Reports"],"summary":"Preview Promo Codes","description":"Preview promo code usage by customer + plan.\n\nSource of truth:\n- Local `plans` joined to local `stripe_subscriptions.raw`\n- If the subscription discount references a promotion code id, we retrieve the PromotionCode\n  from Stripe to get the *human* promo code string (e.g. \"SAVE20\").","operationId":"preview_promo_codes_api_v1_admin_reports_promo_codes_preview_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by client ID","title":"Client Id"},"description":"Filter by client ID"},{"name":"has_promo_code","in":"query","required":false,"schema":{"type":"string","description":"Filter by whether a promo code is applied: all|yes|no","default":"all","title":"Has Promo Code"},"description":"Filter by whether a promo code is applied: all|yes|no"},{"name":"promo_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific promo code (e.g. SAVE20)","title":"Promo Code"},"description":"Filter by specific promo code (e.g. SAVE20)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":25,"title":"Per Page"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodesReportPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reports/deployment-report/options":{"get":{"tags":["Admin APIs","Admin - Reports"],"summary":"Deployment Report Options","operationId":"deployment_report_options_api_v1_admin_reports_deployment_report_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reports/deployment-report/export":{"get":{"tags":["Admin APIs","Admin - Reports"],"summary":"Export Deployment Report","operationId":"export_deployment_report_api_v1_admin_reports_deployment_report_export_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"code_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Name"}},{"name":"client_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/exchange-activity/overview":{"get":{"tags":["Admin APIs","exchange-activity","Exchange Activity"],"summary":"Exchange Admin Overview","operationId":"exchange_admin_overview_api_v1_admin_exchange_activity_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/exchange-activity/listings":{"get":{"tags":["Admin APIs","exchange-activity","Exchange Activity"],"summary":"Exchange Admin Listings","operationId":"exchange_admin_listings_api_v1_admin_exchange_activity_listings_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"creator_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Email"}},{"name":"creator_client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Client Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/exchange-activity/listings/{listing_id}/status":{"patch":{"tags":["Admin APIs","exchange-activity","Exchange Activity"],"summary":"Exchange Admin Update Listing Status","operationId":"exchange_admin_update_listing_status_api_v1_admin_exchange_activity_listings__listing_id__status_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/exchange-activity/transactions":{"get":{"tags":["Admin APIs","exchange-activity","Exchange Activity"],"summary":"Exchange Admin Transactions","operationId":"exchange_admin_transactions_api_v1_admin_exchange_activity_transactions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"buyer_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Email"}},{"name":"buyer_client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Client Id"}},{"name":"signal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Signal Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Distributors","description":"List every LP (distributor) client, one row per client with its\ncontracts aggregated (PRO-1980 Wholesale Distribution landing table).","operationId":"list_distributors_api_v1_admin_distributors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/distributors/enterprise-clients":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Enterprise Clients","description":"Active enterprise clients for the create-contract picker, with\nexisting-contract counts and inherited distributor admin details\n(PRO-1981 conditional form behavior).","operationId":"list_enterprise_clients_api_v1_admin_distributors_enterprise_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnterpriseClientOption"},"title":"Response List Enterprise Clients Api V1 Admin Distributors Enterprise Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/tou-templates":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Tou Templates","description":"Active library Terms of Use for the create-contract picker.\n\nEquivalent to ``GET /tous`` — latest active version per family. Kept for\nclients that still call ``/tou-templates``.","operationId":"list_tou_templates_api_v1_admin_distributors_tou_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DistributorTouRead"},"type":"array","title":"Response List Tou Templates Api V1 Admin Distributors Tou Templates Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/distributors/provisioning-template":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Get Provisioning Template","description":"The wholesale_client provisioning-template snapshot, so the\ncreate-contract form can pre-populate the per-tier template preview from\nthe Signup Provisioning config (PRO-2271).","operationId":"get_provisioning_template_api_v1_admin_distributors_provisioning_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DistributorTierTemplate"},{"type":"null"}],"title":"Response Get Provisioning Template Api V1 Admin Distributors Provisioning Template Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/distributors/wholesale-templates":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Wholesale Templates","description":"Every wholesale provisioning template — the base wholesale_client plan\nplus per-contract templates — for the create-contract tier picker\n(PRO-2309).","operationId":"list_wholesale_templates_api_v1_admin_distributors_wholesale_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DistributorTierTemplate"},"type":"array","title":"Response List Wholesale Templates Api V1 Admin Distributors Wholesale Templates Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Create Wholesale Template","description":"Mint a new wholesale provisioning template, cloned from the base\nwholesale template (or ``clone_from_plan_id``). Customize it afterwards in\nthe Signup Provisioning editor (PRO-2309).","operationId":"create_wholesale_template_api_v1_admin_distributors_wholesale_templates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WholesaleTemplateCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTierTemplate"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/distributors/tous":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Library Tous","description":"Latest version of every Terms of Use in the wholesale library.","operationId":"list_library_tous_api_v1_admin_distributors_tous_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DistributorTouRead"},"type":"array","title":"Response List Library Tous Api V1 Admin Distributors Tous Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Create Library Tou","description":"Create a new Terms of Use document (v1.0 by default) in the library.","operationId":"create_library_tou_api_v1_admin_distributors_tous_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/distributors/tous/{tou_id}":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Get Library Tou","operationId":"get_library_tou_api_v1_admin_distributors_tous__tou_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"tou_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tou Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/tous/{tou_id}/versions":{"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Create Library Tou Version","description":"Publish a new immutable version of an existing TOU (correction or\nsubstantive). ``tou_id`` may be any version in the family.","operationId":"create_library_tou_version_api_v1_admin_distributors_tous__tou_id__versions_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"tou_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tou Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouNewVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/contracts/{contract_id}/accounts":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Contract Accounts","description":"Paginated wholesale accounts (LPCs) under a contract, searchable by\ncompany or tier name (PRO-1983 portfolio table).","operationId":"list_contract_accounts_api_v1_admin_distributors_contracts__contract_id__accounts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contract Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAccountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/contracts/{contract_id}/tou":{"put":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Switch Contract Tou","description":"Make a different TOU version the contract's active click-through terms.\nThe rationale in the body is captured by the admin request audit log.","operationId":"switch_contract_tou_api_v1_admin_distributors_contracts__contract_id__tou_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contract Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouSwitchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTouRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/contracts/{contract_id}":{"patch":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Update Contract","description":"Rename a contract (PRO-2305). Terms, TOU, and tiers have their own\ndedicated edit endpoints; only the operator-facing name is set here.","operationId":"update_contract_api_v1_admin_distributors_contracts__contract_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contract Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorContractDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/tier-changes":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Tier Changes","description":"Record of applied tier changes (PRO-2569). No ``contract_id`` = every\ndistributor (the landing-page record); a ``contract_id`` scopes to one\ncontract (the contract-detail Change Requests subtab). Approval is\nautomatic, so this is a record of applied changes, not a review queue.","operationId":"list_tier_changes_api_v1_admin_distributors_tier_changes_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierChangeRecordListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/contracts/{contract_id}/tiers":{"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Add Contract Tier","description":"Add a tier to an existing contract (PRO-2569). Slots may be 0 — a 0-slot\ntier is a valid upgrade/downgrade target that fills only via transfers.","operationId":"add_contract_tier_api_v1_admin_distributors_contracts__contract_id__tiers_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contract Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractTierAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTierDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/contracts/{contract_id}/tiers/{tier_id}/capacity":{"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Update Tier Capacity","description":"Change a tier's number of accounts (PRO-2569). Capacity is absolute and\nincrease-only; a value at or below the current capacity is rejected.","operationId":"update_tier_capacity_api_v1_admin_distributors_contracts__contract_id__tiers__tier_id__capacity_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contract Id"}},{"name":"tier_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierCapacityUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorTierDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/{client_id}":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Get Distributor Detail","description":"Contract detail for one LP client: contracts (switcher), terms + TOU\nversions, tiers with provisioning-template snapshots, account counts, and\nthe client's distributor admins (PRO-1983). Distributor roles themselves\nare managed like ``block_role`` — via the user schemas and the CAMS\nuser-management UI.","operationId":"get_distributor_detail_api_v1_admin_distributors__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/{client_id}/contracts":{"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Create Contract","description":"Create a distributor contract for an enterprise client: contract terms,\nan attached library TOU, and one or more tiers, atomically (PRO-1981).\nThe client's first contract also seats the named distributor admin; later\ncontracts inherit the existing admin.\n\nThe named admin no longer has to be a user of the client already\n(PRO-3268). An address that resolves to nobody is provisioned here, as a\nClient Admin holding the Distributor Admin role, so the account cannot\nexist (and cannot be signed into) before the contract that justifies it.\nIt is invited as it is created: the ordering is what keeps the admin out\nearly, so once the contract exists there is nothing to gain by holding the\ninvite back. Naming a user who does already exist is unchanged: they are\ngranted the role by the create itself, and nothing is provisioned.\n\nOrder matters both ways. Anything that would stop the provisioning is\nchecked before the contract is written, so a rejected admin leaves no\ncontract behind; the account itself is created after, so a rejected\ncontract leaves no account behind. Between the two, the decision is taken\nagain under the client's create lock, because that first read happened\nbefore anything was serialized: see ``resolve_admin_to_provision`` for what\nthe second pass settles (a concurrent duplicate, and a replayed form\ncarrying a different address).","operationId":"create_contract_api_v1_admin_distributors__client_id__contracts_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/{client_id}/access/candidates":{"get":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"List Distributor Access Candidates","description":"Users of this client who can be granted distributor access (PRO-2681) —\nthe pool behind the add-user picker. Users who already hold either\ndistributor role are excluded; they show in ``distributor_admins`` on the\ndetail response.","operationId":"list_distributor_access_candidates_api_v1_admin_distributors__client_id__access_candidates_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAccessCandidateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/{client_id}/access":{"post":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Grant Distributor Access","description":"Grant distributor access to an existing user of this client (PRO-2681),\nas either a Distributor Admin or a Distributor User. Access applies across\nevery contract the distributor holds. Re-granting a user who already holds\na distributor role changes their role.","operationId":"grant_distributor_access_api_v1_admin_distributors__client_id__access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAccessGrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAdmin"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/distributors/{client_id}/access/{user_id}":{"delete":{"tags":["Admin APIs","distributors","Wholesale Distribution"],"summary":"Revoke Distributor Access","description":"Remove a user's distributor access (PRO-2681). The account itself is\nuntouched — only the distributor role is cleared.","operationId":"revoke_distributor_access_api_v1_admin_distributors__client_id__access__user_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/token-limits":{"get":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Get Mcp Token Limit Mappings","description":"Get all MCP token limit mappings with pagination and filtering support.\n\nReturns a list of all Stripe Product Catalog to token limit mappings.","operationId":"get_mcp_token_limit_mappings_api_v1_admin_mcp_token_limits_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MCPTokenLimitMappingRead"},"title":"Response Get Mcp Token Limit Mappings Api V1 Admin Mcp Token Limits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Create Mcp Token Limit Mapping","description":"Create a new MCP token limit mapping.\n\nCreates a mapping between a Stripe Product Catalog item and daily token reset limits.\n\nArgs:\n    mapping_data: The mapping data including product ID, name, and token limit\n\nReturns:\n    The created MCP token limit mapping","operationId":"create_mcp_token_limit_mapping_api_v1_admin_mcp_token_limits_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/token-limits/{mapping_id}":{"get":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Get Mcp Token Limit Mapping","description":"Get a specific MCP token limit mapping by ID.\n\nArgs:\n    mapping_id: UUID of the mapping to retrieve\n\nReturns:\n    The MCP token limit mapping details","operationId":"get_mcp_token_limit_mapping_api_v1_admin_mcp_token_limits__mapping_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Update Mcp Token Limit Mapping","operationId":"update_mcp_token_limit_mapping_api_v1_admin_mcp_token_limits__mapping_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Delete Mcp Token Limit Mapping","operationId":"delete_mcp_token_limit_mapping_api_v1_admin_mcp_token_limits__mapping_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Mcp Token Limit Mapping Api V1 Admin Mcp Token Limits  Mapping Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/token-limits/{mapping_id}/references":{"get":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Get Mcp Token Limit Mapping References","description":"List the entities currently referencing an MCP catalog entry.\n\nStripe products return the active plans on the tier; non-Stripe tiers\nreturn the active distributor contract tiers referencing them.","operationId":"get_mcp_token_limit_mapping_references_api_v1_admin_mcp_token_limits__mapping_id__references_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MCPTokenLimitReferenceRead"},"title":"Response Get Mcp Token Limit Mapping References Api V1 Admin Mcp Token Limits  Mapping Id  References Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/token-limits/product/{product_id}":{"get":{"tags":["Admin APIs","mcp-token-limits"],"summary":"Get Mcp Token Limit Mapping By Product Id","description":"Get MCP token limit mapping by Stripe product ID.\n\nArgs:\n    product_id: Stripe Product ID from the Product Catalog\n\nReturns:\n    The MCP token limit mapping for the specified product","operationId":"get_mcp_token_limit_mapping_by_product_id_api_v1_admin_mcp_token_limits_product__product_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPTokenLimitMappingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/m2m-access":{"get":{"tags":["Admin APIs","mcp-m2m-access"],"summary":"Get Mcp M2M Access","description":"List MCP M2M access with filtering, sorting, and pagination for React Admin","operationId":"get_mcp_m2m_access_api_v1_admin_mcp_m2m_access_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MCPM2MAccessRead"},"title":"Response Get Mcp M2M Access Api V1 Admin Mcp M2M Access Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","mcp-m2m-access"],"summary":"Create Mcp M2M Access","description":"Create a new MCP M2M access configuration.\n\nThis endpoint automatically provisions an Okta application for the selected client\nand creates a M2M access record linking the client to the Okta application.\n\nArgs:\n    mcp_m2m_access_data: The M2M access data including client_id\n\nReturns:\n    The created MCP M2M access configuration","operationId":"create_mcp_m2m_access_api_v1_admin_mcp_m2m_access_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPM2MAccessCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPM2MAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp/m2m-access/{mcp_m2m_access_id}":{"get":{"tags":["Admin APIs","mcp-m2m-access"],"summary":"Get Mcp M2M Access By Id","description":"Get a specific MCP M2M access configuration by ID.\n\nArgs:\n    mcp_m2m_access_id: UUID of the M2M access to retrieve\n\nReturns:\n    The MCP M2M access configuration details","operationId":"get_mcp_m2m_access_by_id_api_v1_admin_mcp_m2m_access__mcp_m2m_access_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"mcp_m2m_access_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mcp M2M Access Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPM2MAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/available-scripts":{"get":{"tags":["Admin APIs","migrations"],"summary":"Get Available Scripts","description":"Get list of available migration scripts.","operationId":"get_available_scripts_api_v1_admin_migrations_available_scripts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/migrations/run":{"post":{"tags":["Admin APIs","migrations"],"summary":"Run Migration","description":"Run a migration script by identifier.","operationId":"run_migration_api_v1_admin_migrations_run_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/run-sync":{"post":{"tags":["Admin APIs","migrations"],"summary":"Run Migration Sync","description":"Run a migration script synchronously (for testing or small migrations).","operationId":"run_migration_sync_api_v1_admin_migrations_run_sync_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/run-csv":{"post":{"tags":["Admin APIs","migrations"],"summary":"Run Migration From Csv","description":"Run a migration script for multiple clients specified in a CSV file.\n\nArgs:\n    csv_file: CSV file containing client IDs\n    script_identifier: The migration script to run\n    client_id_column: Name of the column containing client IDs (default: \"client_id\")\n    background_tasks: Background task handler\n    client_service: ClientService instance\n\nReturns:\n    CSVMigrationResponse with processing results","operationId":"run_migration_from_csv_api_v1_admin_migrations_run_csv_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"script_identifier","in":"query","required":true,"schema":{"type":"string","title":"Script Identifier"}},{"name":"client_id_column","in":"query","required":false,"schema":{"type":"string","default":"client_id","title":"Client Id Column"}},{"name":"send_email_summary","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Send Email Summary"}},{"name":"email_recipients","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Recipients"}},{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_run_migration_from_csv_api_v1_admin_migrations_run_csv_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVMigrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/run-csv-sync":{"post":{"tags":["Admin APIs","migrations"],"summary":"Run Migration From Csv Sync","description":"Run a migration script synchronously for multiple clients specified in a CSV file path.\n\nArgs:\n    request: CSVFilePathMigrationRequest containing all parameters\n    client_service: ClientService instance\n\nReturns:\n    CSVMigrationResponse with processing results","operationId":"run_migration_from_csv_sync_api_v1_admin_migrations_run_csv_sync_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVFilePathMigrationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVMigrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/run-csv-async":{"post":{"tags":["Admin APIs","migrations"],"summary":"Run Migration From Csv Async","description":"Run a migration script asynchronously for multiple clients specified in a CSV file path.\nReturns immediately with a task ID that can be used to check status.\n\nArgs:\n    request: CSVFilePathMigrationRequest containing all parameters\n    background_tasks: FastAPI BackgroundTasks for async execution\n\nReturns:\n    AsyncMigrationResponse with task ID and initial status","operationId":"run_migration_from_csv_async_api_v1_admin_migrations_run_csv_async_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSVFilePathMigrationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncMigrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/task-status/{task_id}":{"get":{"tags":["Admin APIs","migrations"],"summary":"Get Task Status","description":"Get the status of an async migration task.\n\nArgs:\n    task_id: The task ID returned from run-csv-async, ledger-backfill, or ledger-validation\n\nReturns:\n    Task status and results","operationId":"get_task_status_api_v1_admin_migrations_task_status__task_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/migrations/backfill-sector":{"post":{"tags":["Admin APIs","migrations"],"summary":"Backfill Sector","description":"One-off backfill to split \"Internal & Partners\" into \"Internal\" / \"Partners\".\n\nBody example::\n\n    {\n        \"sector_assignments\": {\n            \"Internal\": [\"<client-id-1>\", \"<client-id-2>\"],\n            \"Partners\": [\"<client-id-3>\"]\n        },\n        \"apply\": true\n    }\n\nSet ``apply: false`` (the default) for a dry-run.","operationId":"backfill_sector_api_v1_admin_migrations_backfill_sector_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillSectorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/migrations/assign-feature-flags":{"post":{"tags":["Admin APIs","migrations"],"summary":"Assign Feature Flags To All Clients","description":"Idempotently assign the given feature flags with value=\"true\" to all active\nclients.  Clients that already have a flag correctly assigned are skipped.\n\nBody example::\n\n    {\n        \"feature_flag_ids\": [\"<uuid-1>\", \"<uuid-2>\"],\n        \"dry_run\": false\n    }\n\nSet ``dry_run: true`` to preview what would be changed without writing to\nthe database.","operationId":"assign_feature_flags_to_all_clients_api_v1_admin_migrations_assign_feature_flags_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignFeatureFlagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignFeatureFlagsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/polaris/clients/{client_id}/credentials":{"get":{"tags":["Admin APIs","polaris"],"summary":"Get Client Polaris Credentials","description":"Return the current Polaris-credential state for a client. Plaintext\n``polaris_client_secret`` is included so CAMS staff can copy it back to\nan enterprise admin if they lost it — same privilege as the customer\n\"Connect Your Query Engine\" modal, just operated by staff.","operationId":"get_client_polaris_credentials_api_v1_admin_polaris_clients__client_id__credentials_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPolarisCredentialsState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","polaris"],"summary":"Set Client Polaris Credentials","description":"Persist an externally-obtained Polaris client_id/secret pair.\n\nUse when the Polaris principal already exists with credentials CAMS\ndidn't mint (e.g. created by a non-internal-token flow), so the normal\nmint/rotate path is unavailable. The operator pastes the existing\npair — sourced from the customer's vault, the original onboarding\nticket, etc. — and CAMS stores them so the SQL editor's \"Connect\nYour Query Engine\" modal can surface them like any other client.\n\nDoes not call Polaris and does not validate the pair against Polaris.\nIf the values are wrong, the customer's SQL editor sessions will 401\nwhen they try to use them.\n\nAll three columns (principal_name, client_id, client_secret) are\nrequired on the request and written together — the row never carries\nclient_id/secret without a principal_name.","operationId":"set_client_polaris_credentials_api_v1_admin_polaris_clients__client_id__credentials_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetClientPolarisCredentialsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPolarisCredentialsState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","polaris"],"summary":"Mint Client Polaris Credentials","description":"Mint Polaris credentials for a client on demand. Idempotent — if\ncredentials already exist the existing values are returned unchanged.\nUsed by the Block section in CAMS Client Management.","operationId":"mint_client_polaris_credentials_api_v1_admin_polaris_clients__client_id__credentials_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPolarisCredentialsState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/polaris/clients/{client_id}/credentials/reset":{"post":{"tags":["Admin APIs","polaris"],"summary":"Reset Client Polaris Credentials","description":"Clear a partial Polaris credential state and mint a fresh principal.\n\nFor recovering a client stuck with some-but-not-all of the three\ncredential columns set — the normal mint refuses to operate on a partial\nrow. Clears the orphaned columns and mints via the client's key. A fully\nprovisioned client is returned unchanged.","operationId":"reset_client_polaris_credentials_api_v1_admin_polaris_clients__client_id__credentials_reset_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPolarisCredentialsState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets":{"get":{"tags":["Admin APIs","catalog-assets"],"summary":"List Catalog Assets","description":"List all IDO catalog assets (any status) with pagination and filtering.","operationId":"list_catalog_assets_api_v1_admin_catalog_assets_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogAssetRead"},"title":"Response List Catalog Assets Api V1 Admin Catalog Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/bulk-status":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Bulk Status Change","description":"Apply publish, unpublish, or archive to multiple assets at once.","operationId":"bulk_status_change_api_v1_admin_catalog_assets_bulk_status_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkStatusChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkStatusChangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/catalog/assets/{asset_id}":{"get":{"tags":["Admin APIs","catalog-assets"],"summary":"Get Catalog Asset","description":"Get a single IDO catalog asset by ID.","operationId":"get_catalog_asset_api_v1_admin_catalog_assets__asset_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Update Catalog Asset","description":"Update title or is_new on a catalog asset.","operationId":"update_catalog_asset_api_v1_admin_catalog_assets__asset_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/publish":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Publish Catalog Asset","description":"Publish an asset (status=published, publish_date=now). Makes it visible in Power UI.","operationId":"publish_catalog_asset_api_v1_admin_catalog_assets__asset_id__publish_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/unpublish":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Unpublish Catalog Asset","description":"Unpublish an asset (status=draft, publish_date=null). Hides it from Power UI.","operationId":"unpublish_catalog_asset_api_v1_admin_catalog_assets__asset_id__unpublish_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/archive":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Archive Catalog Asset","description":"Archive an asset (status=archived). Hides it from Power UI.","operationId":"archive_catalog_asset_api_v1_admin_catalog_assets__asset_id__archive_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/flag-compliance":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Flag Catalog Asset For Compliance","description":"Flag an asset for compliance review (status=compliance_requested).","operationId":"flag_catalog_asset_for_compliance_api_v1_admin_catalog_assets__asset_id__flag_compliance_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/status":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Set Catalog Asset Status","description":"General status override. Validates against allowed values.","operationId":"set_catalog_asset_status_api_v1_admin_catalog_assets__asset_id__status_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/visibility":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Set Catalog Asset Visibility","description":"Set visibility on a catalog asset (public, gated, private).","operationId":"set_catalog_asset_visibility_api_v1_admin_catalog_assets__asset_id__visibility_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/assets/{asset_id}/tier":{"put":{"tags":["Admin APIs","catalog-assets"],"summary":"Set Catalog Asset Tier","description":"Set compliance tier (1=Sourced, 2=Documented, 3=Verified, null=unrestricted).","operationId":"set_catalog_asset_tier_api_v1_admin_catalog_assets__asset_id__tier_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogAssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/clients":{"get":{"tags":["Admin APIs","catalog-clients"],"summary":"List Catalog Clients","description":"List all catalog clients with their plan_type access level.","operationId":"list_catalog_clients_api_v1_admin_catalog_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogClientRead"},"title":"Response List Catalog Clients Api V1 Admin Catalog Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","catalog-clients"],"summary":"Create Catalog Client","description":"Create a new catalog client and set their plan_type access level.","operationId":"create_catalog_client_api_v1_admin_catalog_clients_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/catalog/clients/{client_id}":{"get":{"tags":["Admin APIs","catalog-clients"],"summary":"Get Catalog Client","description":"Get a single catalog client by ID.","operationId":"get_catalog_client_api_v1_admin_catalog_clients__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","catalog-clients"],"summary":"Update Catalog Client","description":"Update a catalog client's name or plan_type.","operationId":"update_catalog_client_api_v1_admin_catalog_clients__client_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogClientRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","catalog-clients"],"summary":"Delete Catalog Client","description":"Remove a catalog client.","operationId":"delete_catalog_client_api_v1_admin_catalog_clients__client_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Catalog Client Api V1 Admin Catalog Clients  Client Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List Transcripts","description":"List all transcripts with pagination, search, and status filtering.","operationId":"list_transcripts_api_v1_admin_transcripts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TranscriptRead"},"title":"Response List Transcripts Api V1 Admin Transcripts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/bulk-status":{"put":{"tags":["Admin APIs","transcripts"],"summary":"Bulk Status Change","description":"Apply publish / hide / remove to multiple transcripts at once.","operationId":"bulk_status_change_api_v1_admin_transcripts_bulk_status_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTranscriptStatusRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTranscriptStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/transcripts/entities":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Search Transcript Entities","description":"Search ontology entities for the transcript metadata edit form.","operationId":"search_transcript_entities_api_v1_admin_transcripts_entities_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Search Transcript Entities Api V1 Admin Transcripts Entities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/regions":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List Transcript Regions","description":"Return the allowed region values for the metadata edit form dropdown.","operationId":"list_transcript_regions_api_v1_admin_transcripts_regions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Transcript Regions Api V1 Admin Transcripts Regions Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/transcripts/{transcript_id}":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript","description":"Get a single transcript by ID.","operationId":"get_transcript_api_v1_admin_transcripts__transcript_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/purchases":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript Purchases","description":"List purchase history for a single transcript.","operationId":"get_transcript_purchases_api_v1_admin_transcripts__transcript_id__purchases_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPurchaseListRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/downloads":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript Downloads","description":"List download history for a single transcript.","operationId":"get_transcript_downloads_api_v1_admin_transcripts__transcript_id__downloads_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptDownloadListRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/content":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript Content","description":"Get the transcript's raw text content.","operationId":"get_transcript_content_api_v1_admin_transcripts__transcript_id__content_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptContentRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/download-url":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript Download Url","description":"Get a presigned download URL for the transcript file (txt or pdf).","operationId":"get_transcript_download_url_api_v1_admin_transcripts__transcript_id__download_url_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"fmt","in":"query","required":false,"schema":{"enum":["txt","pdf"],"type":"string","default":"txt","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptDownloadUrlRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/status":{"put":{"tags":["Admin APIs","transcripts"],"summary":"Set Transcript Status","description":"Set the visibility status of a single transcript.","operationId":"set_transcript_status_api_v1_admin_transcripts__transcript_id__status_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/{transcript_id}/metadata":{"patch":{"tags":["Admin APIs","transcripts"],"summary":"Update Transcript Metadata","description":"Correct title/description/entities/region on a published transcript\nwithout re-upload. Does not touch status.","operationId":"update_transcript_metadata_api_v1_admin_transcripts__transcript_id__metadata_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptMetadataUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/clients":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List All Client Wide Price Overrides","description":"One row per client that currently has a client-wide override set —\npowers the client-pricing table. Clients absent here are using the\nglobal default price.","operationId":"list_all_client_wide_price_overrides_api_v1_admin_transcripts_pricing_clients_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"},"type":"array","title":"Response List All Client Wide Price Overrides Api V1 Admin Transcripts Pricing Clients Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/transcripts/pricing/feature-access":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List Transcripts Feature Access","description":"client_ids that currently have the Transcripts product feature enabled —\npowers the \"Transcripts Status\" column in the client-pricing table.\n\nReads the Client Product feature-grant model (feature_client_product_\nassociation), not the legacy ClientFeatureAccess table — per-client\ngrants (ClientProductService.enable_features_by_ids, signup\nprovisioning's set_features) write only to the former, so the latter\nsilently omits every client onboarded through the modern flow.","operationId":"list_transcripts_feature_access_api_v1_admin_transcripts_pricing_feature_access_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Response List Transcripts Feature Access Api V1 Admin Transcripts Pricing Feature Access Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/transcripts/pricing/default":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Default Price","description":"Get the global default transcript price.","operationId":"get_default_price_api_v1_admin_transcripts_pricing_default_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptDefaultPriceRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["Admin APIs","transcripts"],"summary":"Update Default Price","description":"Update the global default transcript price. Super admin only — this\nprice applies platform-wide, unlike per-client overrides.","operationId":"update_default_price_api_v1_admin_transcripts_pricing_default_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptDefaultPriceUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptDefaultPriceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/transcripts/pricing/default/history":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Default Price History","description":"Get change history for the global default price.","operationId":"get_default_price_history_api_v1_admin_transcripts_pricing_default_history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceHistoryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/clients/{client_id}":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List Client Price Overrides","description":"List a client's transcript price overrides — the client-wide override\n(if any) plus any specific-transcript overrides.","operationId":"list_client_price_overrides_api_v1_admin_transcripts_pricing_clients__client_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"},"title":"Response List Client Price Overrides Api V1 Admin Transcripts Pricing Clients  Client Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","transcripts"],"summary":"Set Client Wide Price","description":"Set a client-wide price override (applies to every transcript for this client).","operationId":"set_client_wide_price_api_v1_admin_transcripts_pricing_clients__client_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","transcripts"],"summary":"Clear Client Wide Price","description":"Clear the client-wide override, falling back to the global default.\n\nA no-op (returns null) if there was nothing to clear.","operationId":"clear_client_wide_price_api_v1_admin_transcripts_pricing_clients__client_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideClear"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"},{"type":"null"}],"title":"Response Clear Client Wide Price Api V1 Admin Transcripts Pricing Clients  Client Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/clients/{client_id}/history":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Client Wide Price History","description":"Get change history for a client-wide price override.","operationId":"get_client_wide_price_history_api_v1_admin_transcripts_pricing_clients__client_id__history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceHistoryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/clients/{client_id}/transcripts/bulk":{"put":{"tags":["Admin APIs","transcripts"],"summary":"Bulk Set Client Transcript Price","description":"Set the same specific-transcript override across multiple transcripts,\nfor one client, at once — the mirror of PUT /{transcript_id}/clients/bulk.","operationId":"bulk_set_client_transcript_price_api_v1_admin_transcripts_pricing_clients__client_id__transcripts_bulk_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkClientTranscriptPriceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkClientTranscriptPriceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/{transcript_id}/clients":{"get":{"tags":["Admin APIs","transcripts"],"summary":"List Transcript Client Price Overrides","description":"One row per client that currently has a specific override set for this\ntranscript — powers the per-transcript pricing table. Clients absent\nhere fall back to their client-wide override or the global default.","operationId":"list_transcript_client_price_overrides_api_v1_admin_transcripts_pricing__transcript_id__clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"},"title":"Response List Transcript Client Price Overrides Api V1 Admin Transcripts Pricing  Transcript Id  Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/{transcript_id}/clients/bulk":{"put":{"tags":["Admin APIs","transcripts"],"summary":"Bulk Set Transcript Client Price","description":"Set the same specific-transcript override across multiple clients at once.\n\nRegistered before /{transcript_id}/clients/{client_id} below — FastAPI\nmatches path templates in registration order, and \"bulk\" would otherwise\nbe swallowed by that route's {client_id}: UUID parameter (and 422 on\nUUID parsing) if it came first.","operationId":"bulk_set_transcript_client_price_api_v1_admin_transcripts_pricing__transcript_id__clients_bulk_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTranscriptClientPriceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkTranscriptClientPriceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/{transcript_id}/clients/{client_id}":{"put":{"tags":["Admin APIs","transcripts"],"summary":"Set Transcript Client Price","description":"Set a specific-transcript price override for one client.","operationId":"set_transcript_client_price_api_v1_admin_transcripts_pricing__transcript_id__clients__client_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","transcripts"],"summary":"Clear Transcript Client Price","description":"Clear a specific-transcript override, falling back to the client-wide\noverride or global default. A no-op (returns null) if there was nothing to clear.","operationId":"clear_transcript_client_price_api_v1_admin_transcripts_pricing__transcript_id__clients__client_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceOverrideClear"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TranscriptPriceOverrideRead"},{"type":"null"}],"title":"Response Clear Transcript Client Price Api V1 Admin Transcripts Pricing  Transcript Id  Clients  Client Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/transcripts/pricing/{transcript_id}/clients/{client_id}/history":{"get":{"tags":["Admin APIs","transcripts"],"summary":"Get Transcript Client Price History","description":"Get change history for a specific-transcript price override.","operationId":"get_transcript_client_price_history_api_v1_admin_transcripts_pricing__transcript_id__clients__client_id__history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}},{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptPriceHistoryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/portal-users/catalog-sources":{"get":{"tags":["Admin APIs","portal-users"],"summary":"List active catalog sources for the source_type dropdown","operationId":"list_portal_catalog_sources_api_v1_admin_portal_users_catalog_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Portal Catalog Sources Api V1 Admin Portal Users Catalog Sources Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/portal-users":{"get":{"tags":["Admin APIs","portal-users"],"summary":"List portal users","operationId":"list_portal_users_api_v1_admin_portal_users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PortalUserRead"},"title":"Response List Portal Users Api V1 Admin Portal Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","portal-users"],"summary":"Provision a new portal user","operationId":"create_portal_user_api_v1_admin_portal_users_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalUserCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalUserCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/portal-users/{portal_user_id}":{"get":{"tags":["Admin APIs","portal-users"],"summary":"Get a portal user","operationId":"get_portal_user_api_v1_admin_portal_users__portal_user_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"portal_user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portal User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin APIs","portal-users"],"summary":"Update a portal user","operationId":"update_portal_user_api_v1_admin_portal_users__portal_user_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"portal_user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portal User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalUserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","portal-users"],"summary":"Delete a portal user and remove their Okta portal group memberships","operationId":"delete_portal_user_api_v1_admin_portal_users__portal_user_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"portal_user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portal User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/portal-users/{portal_user_id}/activation-link":{"post":{"tags":["Admin APIs","portal-users"],"summary":"Regenerate an activation link for a pending portal user","operationId":"regenerate_activation_link_api_v1_admin_portal_users__portal_user_id__activation_link_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"portal_user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Portal User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalActivationLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/portals":{"get":{"tags":["Admin APIs","portals"],"summary":"List portals","operationId":"list_portals_api_v1_admin_portals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortalRead"},"type":"array","title":"Response List Portals Api V1 Admin Portals Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/client-types":{"get":{"tags":["Admin APIs","client-types"],"summary":"Get Client Types","operationId":"get_client_types_api_v1_admin_client_types_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientTypeRead"},"title":"Response Get Client Types Api V1 Admin Client Types Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-types/{client_type_id}":{"get":{"tags":["Admin APIs","client-types"],"summary":"Get Client Type","operationId":"get_client_type_api_v1_admin_client_types__client_type_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_type_id","in":"path","required":true,"schema":{"type":"string","title":"Client Type Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTypeRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/client-types/":{"post":{"tags":["Admin APIs","client-types"],"summary":"Create Client Type","operationId":"create_client_type_api_v1_admin_client_types__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTypeCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/featured/items":{"get":{"tags":["Admin APIs","featured"],"summary":"Get Featured Items","description":"Get all featured entities and insights (active and inactive) for admin","operationId":"get_featured_items_api_v1_admin_featured_items_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedItemsResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/featured/entities":{"get":{"tags":["Admin APIs","featured"],"summary":"Get Featured Entities","description":"Get all featured entities (for admin UI)","operationId":"get_featured_entities_api_v1_admin_featured_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeaturedEntityRead"},"type":"array","title":"Response Get Featured Entities Api V1 Admin Featured Entities Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/featured/insights":{"get":{"tags":["Admin APIs","featured"],"summary":"Get Featured Insights","description":"Get all featured insights (for admin UI)","operationId":"get_featured_insights_api_v1_admin_featured_insights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeaturedInsightRead"},"type":"array","title":"Response Get Featured Insights Api V1 Admin Featured Insights Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/featured/bulk-replace/entities":{"post":{"tags":["Admin APIs","featured"],"summary":"Bulk Replace Featured Entities","description":"Replace all featured entities with data from CSV file.\nCSV format: entity_id,entity_name,representation","operationId":"bulk_replace_featured_entities_api_v1_admin_featured_bulk_replace_entities_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_bulk_replace_featured_entities_api_v1_admin_featured_bulk_replace_entities_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/featured/bulk-replace/insights":{"post":{"tags":["Admin APIs","featured"],"summary":"Bulk Replace Featured Insights","description":"Replace all featured insights with data from CSV file.\nCSV format: insight_id,dataset_id,subject,topic,insight_label","operationId":"bulk_replace_featured_insights_api_v1_admin_featured_bulk_replace_insights_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_bulk_replace_featured_insights_api_v1_admin_featured_bulk_replace_insights_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/stripe-subscriptions/products":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"List Stripe Products","description":"List the enabled Stripe products with their default price.\n\nAllowlist: a product appears only once it has been toggled on in the Stripe\nProducts tab, so a newly created product is invisible here until someone\ndeliberately enables it. Nothing enabled means nothing to show, so the Stripe\ncall is skipped entirely.","operationId":"list_stripe_products_api_v1_admin_stripe_subscriptions_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StripeProductRead"},"type":"array","title":"Response List Stripe Products Api V1 Admin Stripe Subscriptions Products Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/stripe-subscriptions/products/visibility":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"List Stripe Products Visibility","description":"List all active Stripe products with prices and their visibility toggle state.\n\nSuper Admin only. Used by the Stripe Products management tab in CAMS.","operationId":"list_stripe_products_visibility_api_v1_admin_stripe_subscriptions_products_visibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StripeProductWithVisibility"},"type":"array","title":"Response List Stripe Products Visibility Api V1 Admin Stripe Subscriptions Products Visibility Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"put":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"Update Stripe Products Visibility","description":"Bulk-update Stripe product visibility settings.\n\nSuper Admin only. Upserts all provided product toggles and returns the\nupdated full product list (same shape as GET /products/visibility).","operationId":"update_stripe_products_visibility_api_v1_admin_stripe_subscriptions_products_visibility_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeProductVisibilityBulkUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StripeProductWithVisibility"},"type":"array","title":"Response Update Stripe Products Visibility Api V1 Admin Stripe Subscriptions Products Visibility Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/stripe-subscriptions/products/{product_id}/prices":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"List Stripe Prices","description":"List active prices for a Stripe product.\n\nReturns 404 unless the product is enabled in visibility settings — a product\nwith no row is off, so its prices are not reachable either.","operationId":"list_stripe_prices_api_v1_admin_stripe_subscriptions_products__product_id__prices_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StripePriceRead"},"title":"Response List Stripe Prices Api V1 Admin Stripe Subscriptions Products  Product Id  Prices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stripe-subscriptions/customers/{stripe_customer_id}/has-chargeable-payment-method":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"Check Chargeable Payment Method","description":"Return whether the Stripe customer has a payment method that supports automatic charging.","operationId":"check_chargeable_payment_method_api_v1_admin_stripe_subscriptions_customers__stripe_customer_id__has_chargeable_payment_method_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"stripe_customer_id","in":"path","required":true,"schema":{"type":"string","title":"Stripe Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChargeablePaymentMethodResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stripe-subscriptions":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"List Plan Subscriptions","description":"List plan subscriptions enriched with Stripe data","operationId":"list_plan_subscriptions_api_v1_admin_stripe_subscriptions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StripeSubscriptionRead"},"title":"Response List Plan Subscriptions Api V1 Admin Stripe Subscriptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"Create Enterprise Subscription","description":"Create a Stripe subscription for enterprise client onboarding.\n\nSupports multiple line items, trial periods, and billing controls.\nAutomatically attaches client_id and product_id metadata.","operationId":"create_enterprise_subscription_api_v1_admin_stripe_subscriptions_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseSubscriptionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stripe-subscriptions/{subscription_id}":{"get":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"Get Subscription","description":"Get a specific Stripe subscription by ID","operationId":"get_subscription_api_v1_admin_stripe_subscriptions__subscription_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeSubscriptionWithItems"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stripe-subscriptions/{subscription_id}/cancel":{"post":{"tags":["Admin APIs","stripe-subscriptions"],"summary":"Cancel Subscription","description":"Cancel a Stripe subscription immediately, at period end, or on a custom date.\n\nOptionally issues a refund and converts the linked CAMS plan to a $0 plan.","operationId":"cancel_subscription_api_v1_admin_stripe_subscriptions__subscription_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/stripe-cancellations":{"get":{"tags":["Admin APIs","stripe-cancellations"],"summary":"List Stripe Cancellations","description":"List canceled Stripe subscriptions with cancellation reason details.","operationId":"list_stripe_cancellations_api_v1_admin_stripe_cancellations_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StripeCancellationRead"},"title":"Response List Stripe Cancellations Api V1 Admin Stripe Cancellations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/plans":{"get":{"tags":["Admin APIs","plans"],"summary":"Get Plans","description":"Get all plans with filtering, sorting, and pagination.\n\nWhen a client_id filter is present, Stripe subscriptions that exist in\nStripe but have not yet been synced to the database are appended to the\nresponse with ``source=\"stripe\"`` so admins can see the full picture.","operationId":"get_plans_api_v1_admin_plans_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlanRead"},"title":"Response Get Plans Api V1 Admin Plans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","plans"],"summary":"Create Plan","description":"Create a new plan.\n\nValidates that there's no other active plan for the same client-product pair.","operationId":"create_plan_api_v1_admin_plans_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/plans/{plan_id}":{"get":{"tags":["Admin APIs","plans"],"summary":"Get Plan","description":"Get a plan by ID.\n\nAccepts either a database UUID or a Stripe subscription ID (``sub_xxx``).\nStripe subscription IDs are fetched directly from Stripe; all other values\nare treated as database UUIDs.","operationId":"get_plan_api_v1_admin_plans__plan_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","plans"],"summary":"Update Plan","description":"Update a plan.\n\nOnly allowed if the plan doesn't have an associated Stripe subscription.","operationId":"update_plan_api_v1_admin_plans__plan_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","plans"],"summary":"Delete Plan","description":"Delete a plan.\n\nOnly allowed if the plan doesn't have an associated Stripe subscription.","operationId":"delete_plan_api_v1_admin_plans__plan_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"List Plan Configs","description":"List all signup plan configs (from DB).","operationId":"list_plan_configs_api_v1_admin_signup_plan_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SignupPlanConfigRead"},"type":"array","title":"Response List Plan Configs Api V1 Admin Signup Plan Config Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/signup-plan-config/plan-ids":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"List Plan Ids","operationId":"list_plan_ids_api_v1_admin_signup_plan_config_plan_ids_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Plan Ids Api V1 Admin Signup Plan Config Plan Ids Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/signup-plan-config/overview/{plan_id}":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"Get Plan Overview","description":"Get overview for a plan: active users, last modified, etc.","operationId":"get_plan_overview_api_v1_admin_signup_plan_config_overview__plan_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanConfigOverview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/{plan_id}/provider-channel-restrictions":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"Get Provider Channel Restrictions For Plan","description":"Per production provider signup-plan rules: which channels are denied for this plan.\nUsed by Automated Onboarding Provisioning to disable API/MCP checkboxes.\n\nRestriction rows are keyed by tier, so a per-contract wholesale template\n(PRO-2309) resolves to the wholesale_client rules it inherits.","operationId":"get_provider_channel_restrictions_for_plan_api_v1_admin_signup_plan_config__plan_id__provider_channel_restrictions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"boolean"}},"title":"Response Get Provider Channel Restrictions For Plan Api V1 Admin Signup Plan Config  Plan Id  Provider Channel Restrictions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/{plan_id}":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"Get Plan Config","description":"Get one plan config by plan_id.","operationId":"get_plan_config_api_v1_admin_signup_plan_config__plan_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPlanConfigRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","signup-plan-config"],"summary":"Update Plan Config","description":"Create or update a plan config. Writes version and audit log, then enqueues sync of existing users.","operationId":"update_plan_config_api_v1_admin_signup_plan_config__plan_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPlanConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPlanConfigRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/{plan_id}/versions":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"List Plan Config Versions","description":"List version history for a plan.","operationId":"list_plan_config_versions_api_v1_admin_signup_plan_config__plan_id__versions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlanConfigVersionRead"},"title":"Response List Plan Config Versions Api V1 Admin Signup Plan Config  Plan Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/{plan_id}/versions/{version_id}":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"Get Plan Config By Version","description":"Get full config snapshot for a specific version (read-only).","operationId":"get_plan_config_by_version_api_v1_admin_signup_plan_config__plan_id__versions__version_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPlanConfigRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/{plan_id}/audit":{"get":{"tags":["Admin APIs","signup-plan-config"],"summary":"List Plan Config Audit","description":"List audit log for a plan.","operationId":"list_plan_config_audit_api_v1_admin_signup_plan_config__plan_id__audit_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlanConfigAuditRead"},"title":"Response List Plan Config Audit Api V1 Admin Signup Plan Config  Plan Id  Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signup-plan-config/seed-from-json":{"post":{"tags":["Admin APIs","signup-plan-config"],"summary":"Seed From Json","description":"One-time seed: upsert the given plan config into signup_plan_config.\nSend a JSON body with a \"plans\" key (same structure as former plans json).","operationId":"seed_from_json_api_v1_admin_signup_plan_config_seed_from_json_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","description":"Plan config payload with 'plans' key, e.g. {\"plans\": {\"professional\": {...}, \"business\": {...}}}"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/system-settings/alert-settings":{"get":{"tags":["Admin APIs","system-settings"],"summary":"Get Alert Settings","description":"Return current internal signup alert tuning.","operationId":"get_alert_settings_api_v1_admin_system_settings_alert_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAlertSettingsRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["Admin APIs","system-settings"],"summary":"Update Alert Settings","description":"Update internal signup alert tuning. Only fields present in the body\nare written; omitted fields are left unchanged.","operationId":"update_alert_settings_api_v1_admin_system_settings_alert_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAlertSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupAlertSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/system-settings/in-progress-outreach-settings":{"get":{"tags":["Admin APIs","system-settings"],"summary":"Get In Progress Outreach Settings","description":"Return current customer outreach tuning for in-progress signups.","operationId":"get_in_progress_outreach_settings_api_v1_admin_system_settings_in_progress_outreach_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InProgressOutreachSettingsRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["Admin APIs","system-settings"],"summary":"Update In Progress Outreach Settings","description":"Update customer outreach tuning. Only fields present in the body are\nwritten; omitted fields are left unchanged.","operationId":"update_in_progress_outreach_settings_api_v1_admin_system_settings_in_progress_outreach_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InProgressOutreachSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InProgressOutreachSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/system-settings/block-data-settings":{"get":{"tags":["Admin APIs","system-settings"],"summary":"Get Block Data Settings","description":"Return Block Data feature settings.","operationId":"get_block_data_settings_api_v1_admin_system_settings_block_data_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDataSettingsRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["Admin APIs","system-settings"],"summary":"Update Block Data Settings","operationId":"update_block_data_settings_api_v1_admin_system_settings_block_data_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDataSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDataSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/system-settings/distributor-prompt-settings":{"get":{"tags":["Admin APIs","system-settings"],"summary":"Get Distributor Prompt Settings","description":"Return how many days of MCP prompt history the Platform Distributor View\nsurfaces to a distributor.","operationId":"get_distributor_prompt_settings_api_v1_admin_system_settings_distributor_prompt_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorPromptSettingsRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["Admin APIs","system-settings"],"summary":"Update Distributor Prompt Settings","description":"Widen or narrow the distributor prompt window. Takes effect on the next\nrequest — the read path resolves this setting per call, so no restart or\nredeploy is needed. A visibility cap only: nothing is deleted, and CAMS' own\nobservability views keep full history.","operationId":"update_distributor_prompt_settings_api_v1_admin_system_settings_distributor_prompt_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorPromptSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorPromptSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/requests":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List All Block Requests","operationId":"list_all_block_requests_api_v1_admin_block_requests_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestAdminListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/provisioned-clients":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Provisioned Clients","operationId":"list_provisioned_clients_api_v1_admin_block_provisioned_clients_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionedClientListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/active-contracts":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Active Contract Billing","description":"Active Block contracts with per-contract Stripe billing for the Active\nContracts tab. One row per active contract (keyed by ``block_request_id``\nso the UI joins it onto the request row it already renders). Subscription\nstatus + next-invoice date are fetched live from Stripe on view, best-effort\n— a Stripe miss falls back to the stored denormalized fields.","operationId":"list_active_contract_billing_api_v1_admin_block_active_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockActiveContractBillingListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/contract-payments":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Contract Payments","description":"Payment triage across Block contracts, for account management.\n\nFinance asked for \"dashboarding so account management can see the status of\nthe block payments and escalate outreach\" — while being explicit that an\noverdue invoice never revokes access. So this view exists precisely so the\nescalation is human.\n\nWider than the Active Contracts tab on purpose: it keeps terminal contracts\nwith money still outstanding, and contracts inside the access grace window —\nwhich is exactly when a contract vanishes from every \"active\" view while the\ncustomer is still being served.\n\n100% DB-backed, so it stays usable when Stripe is degraded. Counts are\ncomputed server-side so the chips and badges cannot disagree.","operationId":"list_contract_payments_api_v1_admin_block_contract_payments_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"payment_state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one payment state (paid/due/overdue/...).","title":"Payment State"},"description":"Filter to one payment state (paid/due/overdue/...)."},{"name":"in_grace","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"In Grace"}},{"name":"unpaid_after_term","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unpaid After Term"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"days_overdue","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Client or dataset substring.","title":"Q"},"description":"Client or dataset substring."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockContractPaymentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"Get Block Request Admin","operationId":"get_block_request_admin_api_v1_admin_block_requests__request_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/provisioning-errors":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Provisioning Errors","description":"Every currently-failed provisioning step across all requests. Powers\nthe CAMS \"Provisioning Errors\" table — each row shows which step broke,\nthe error code + message, and the owning request so ops can jump\nstraight to retrying it.","operationId":"list_provisioning_errors_api_v1_admin_block_provisioning_errors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockProvisioningErrorListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/requests/{request_id}/provisioning-steps":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"Get Block Request Provisioning Timeline","description":"Per-request provisioning timeline. Powers the CAMS debugging panel\nthat shows each step's status / timestamps / error payload so an\noperator can tell exactly where Polaris (or a future step) failed.","operationId":"get_block_request_provisioning_timeline_api_v1_admin_block_requests__request_id__provisioning_steps_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockProvisioningTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/timeline":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"Get Block Request Timeline","description":"Merged approval timeline (customer-side denormalized fields +\nadmin audit log) — powers the Approvals kanban modal.","operationId":"get_block_request_timeline_api_v1_admin_block_requests__request_id__timeline_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/internal-queue":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Internal Queue","operationId":"list_internal_queue_api_v1_admin_block_internal_queue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestAdminListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/requests/{request_id}/internal-approve/accounts":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Approve Accounts","description":"Approve at the Accounts internal step.\n\nBody is optional — bare approval keeps the captured-at-creation\ntrial duration and annual price. Pass ``trial_duration_months``\nand/or ``annual_price`` with a ``custom_adjustment_rationale``\nto apply a custom adjustment before the queue advances to Legal.\n\nAn ``annual_price`` above the catalog list price additionally requires\n``above_list_acknowledged`` — 400 ``above_list_price`` otherwise, carrying\nboth figures so the UI can render a confirmation.\n\n``s3_grant`` awards S3 tokens for the contract this request will become. The\ncontract does not exist yet — the trial has not even started — so the award is\nheld ``awaiting_contract`` and its vesting schedule is built when the\nsubscription webhook lands, which is what lines each vest up with the invoice\nit funds. A Historic (``one_time``) request is refused with 400\n``s3_grant_rejected``: its only invoice is raised before anything vests.","operationId":"internal_approve_accounts_api_v1_admin_block_requests__request_id__internal_approve_accounts_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BlockAccountsApprovalBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/internal-approve/legal":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Approve Legal","operationId":"internal_approve_legal_api_v1_admin_block_requests__request_id__internal_approve_legal_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/internal-approve/engineering":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Approve Engineering","operationId":"internal_approve_engineering_api_v1_admin_block_requests__request_id__internal_approve_engineering_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/reset-rejection":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Reset Rejection","description":"Reopen a rejected request back to the stage where it was denied.\n\nUseful when a Block Admin / Compliance / CarbonArc reviewer denied in\nerror and wants to let the approver reconsider without making the\ncustomer re-file a brand-new request.","operationId":"reset_rejection_api_v1_admin_block_requests__request_id__reset_rejection_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/contract-cancellation/approve":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Approve Contract Cancellation","description":"Carbon Arc Accounts confirms a client's mid-contract cancellation\nrequest: terminates the contract and revokes Block access. Accounts\ncancels the Stripe subscription manually (V1); this records the\ntermination in CAMS.","operationId":"approve_contract_cancellation_api_v1_admin_block_requests__request_id__contract_cancellation_approve_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/contract-cancellation/decline":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Decline Contract Cancellation","description":"Carbon Arc Accounts declines a client's mid-contract cancellation\nrequest: clears the pending flag and leaves the contract active, so the\nrow is no longer stuck and the client can request again if needed.","operationId":"decline_contract_cancellation_api_v1_admin_block_requests__request_id__contract_cancellation_decline_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCancellationRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/contract-grace":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"Get Contract Grace","description":"Post-term access window for one contract, for the extension modal.","operationId":"get_contract_grace_api_v1_admin_block_requests__request_id__contract_grace_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockContractGraceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/contract-grace/extend":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Extend Contract Grace","description":"Account Management lengthens a contract's post-term access window.\n\nGated on the Accounts permission rather than the generic approvals one:\nextending paid access is a commercial decision, like the cancellation\napprove/decline pair.\n\nNested under ``/requests/{request_id}/`` deliberately — that path shape is\nwhat makes ``AdminAuditLoggingMiddleware`` record the actor, body and\ntimestamp, so who/when/why come for free and the extension appears in the\nrequest's existing timeline with no new table.\n\nExtensions are monotonic: 422 if the proposal doesn't move the date later.\n409 if the contract is no longer live — revoked access has to be\nre-provisioned, not restored by editing a date.","operationId":"extend_contract_grace_api_v1_admin_block_requests__request_id__contract_grace_extend_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockGraceExtensionBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockContractGraceRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/retry-provisioning":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Retry Provisioning","description":"Unstick a ``provisioning_failed`` request. Re-runs the\nprovisioning pipeline (credentials lazy-mint + dataset grant via\npower-api) and cascades PROVISIONING_FAILED → PROVISIONING →\nINTAKE_PENDING on success, or back to PROVISIONING_FAILED on failure.","operationId":"retry_provisioning_api_v1_admin_block_requests__request_id__retry_provisioning_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/force-start-trial":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Force Start Trial","description":"Manually start the trial for an ``intake_pending`` row. Pulls\n``trial_start_date`` forward to now and runs the same cascade as the\nscheduled auto-start job (INTAKE_PENDING → TRIAL_PENDING →\nTRIAL_ACTIVE). Used when an admin wants to skip the wait for first\ningestion (or the 30-day fallback) — e.g. a customer is ready to\nintegrate today.","operationId":"force_start_trial_api_v1_admin_block_requests__request_id__force_start_trial_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/force-expire-trial":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Force Expire Trial","description":"Immediately convert a ``trial_active`` row to ``contracted`` and fire\nthe Cole/Finance subscription email.\n\nRuns the same conversion code path as the scheduled job, just without\nthe ``trial_end_date`` cutoff check — primarily a dev/QA lever to avoid\nwaiting out multi-month trial windows during testing, also useful in\nprod ops when a customer signs their contract early.","operationId":"force_expire_trial_api_v1_admin_block_requests__request_id__force_expire_trial_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/trial-window":{"put":{"tags":["Admin APIs","block-data-approvals"],"summary":"Shift Trial Window","description":"QA lever: time-warp a request's trial window so it ends N seconds\nfrom now, with ``trial_start_date`` derived from\n``trial_duration_months`` so the row stays internally consistent.\nDisabled in production.\n\nSeconds is the wire unit so callers can pick any granularity (days,\nhours, minutes, seconds). Useful for two test cases without waiting\nreal time:\n- \"Trial has X left\" — pass a small positive ``seconds_until_end``.\n- \"Trial starts in X\" (cancellation-cutoff UI) — pass\n  ``trial_duration_months * 30 * 86400 + X``.","operationId":"shift_trial_window_api_v1_admin_block_requests__request_id__trial_window_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ShiftTrialWindowBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/internal-reject/accounts":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Reject Accounts","description":"Reject while the request is on the Accounts internal step.","operationId":"internal_reject_accounts_api_v1_admin_block_requests__request_id__internal_reject_accounts_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/internal-reject/legal":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Reject Legal","description":"Reject while the request is on the Legal internal step.","operationId":"internal_reject_legal_api_v1_admin_block_requests__request_id__internal_reject_legal_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/requests/{request_id}/internal-reject/engineering":{"post":{"tags":["Admin APIs","block-data-approvals"],"summary":"Internal Reject Engineering","description":"Reject while the request is on the Engineering internal step.","operationId":"internal_reject_engineering_api_v1_admin_block_requests__request_id__internal_reject_engineering_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/clients/{client_id}/workflow-settings":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"Get Client Workflow Settings","description":"CAMS-side read of another client's Block workflow settings. Distinct\nfrom ``user_routers/block.py`` which is always scoped to the caller's\nown client.\n\nReports the *effective* mode, matching the customer-facing endpoint and\nactual routing. The raw column remains readable via ``GET /clients/{id}``\nfor anyone who needs to audit a dormant value.","operationId":"get_client_workflow_settings_api_v1_admin_block_clients__client_id__workflow_settings_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","block-data-approvals"],"summary":"Update Client Workflow Settings","description":"CAMS override of any client's ``block_compliance`` setting. Emits an\naudit log entry (resource=``block_workflow_settings``) capturing the\nprevious and new values.\n\nThe write stores the requested value verbatim; the response echoes the\n*effective* mode, so setting a mode on a client that isn't compliance\nmanaged reads back as ``disabled`` rather than implying it took effect.","operationId":"update_client_workflow_settings_api_v1_admin_block_clients__client_id__workflow_settings_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/clients/{client_id}/dataset-preapprovals":{"get":{"tags":["Admin APIs","block-data-approvals"],"summary":"List Client Dataset Preapprovals","operationId":"list_client_dataset_preapprovals_api_v1_admin_block_clients__client_id__dataset_preapprovals_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Client Dataset Preapprovals Api V1 Admin Block Clients  Client Id  Dataset Preapprovals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/clients/{client_id}/dataset-preapprovals/{dataset_id}":{"put":{"tags":["Admin APIs","block-data-approvals"],"summary":"Admin Add Dataset Preapproval","operationId":"admin_add_dataset_preapproval_api_v1_admin_block_clients__client_id__dataset_preapprovals__dataset_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Add Dataset Preapproval Api V1 Admin Block Clients  Client Id  Dataset Preapprovals  Dataset Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","block-data-approvals"],"summary":"Admin Remove Dataset Preapproval","operationId":"admin_remove_dataset_preapproval_api_v1_admin_block_clients__client_id__dataset_preapprovals__dataset_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Remove Dataset Preapproval Api V1 Admin Block Clients  Client Id  Dataset Preapprovals  Dataset Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"List Active Pricing","description":"Flat list of active pricing rows; SchedulePriceChangeModal uses\nit to compute ``expected_row_version`` for OCC.","operationId":"list_active_pricing_api_v1_admin_block_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockPricingActiveListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","block-pricing"],"summary":"Schedule Price Change","operationId":"schedule_price_change_api_v1_admin_block_pricing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchedulePriceChangeBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockPricingRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/pricing/catalog":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"List Pricing Catalog","operationId":"list_pricing_catalog_api_v1_admin_block_pricing_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockPricingCatalogResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/pricing/history":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"Get Pricing History","operationId":"get_pricing_history_api_v1_admin_block_pricing_history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"query","required":true,"schema":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"}},{"name":"cut","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockPricingHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/import":{"post":{"tags":["Admin APIs","block-pricing"],"summary":"Import Pricing Csv","description":"CSV or XLSX upload from the Pricing admin UI. Format is detected\nfrom the file's leading bytes.","operationId":"import_pricing_csv_api_v1_admin_block_pricing_import_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_pricing_csv_api_v1_admin_block_pricing_import_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CsvImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/pricing/export":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"Export Pricing","description":"Round-trippable CSV plus read-only XLSX / PDF / HTML mirrors.\nOnly ``format=csv`` round-trips through ``POST /import``.","operationId":"export_pricing_api_v1_admin_block_pricing_export_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}":{"put":{"tags":["Admin APIs","block-pricing"],"summary":"Update Dataset Setting","description":"Partial update of dataset-level CAMS levers. Each field is\nindependent — omit a key to leave it alone. ``status`` drives the\nsidebar segmented control and the customer \"Available\" rail (only\n``ready`` datasets are surfaced). ``trial_duration_months`` overrides\nthe global 1-month default for requests created against this dataset\n(existing requests are unaffected — they snapshot the duration at\ncreation).","operationId":"update_dataset_setting_api_v1_admin_block_pricing_dataset_settings__dataset_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_DatasetSettingUpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Dataset Setting Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/stripe/skus":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"List Dataset Stripe Skus","description":"Every OFFERED SKU of the dataset with its Stripe linkage and provisioning\nstate, so the editor can render \"3 of 5 provisioned\" plus a per-row action.\n\nServes the STORED product name by default. ``verify=true`` reads each linked\nproduct back from Stripe to confirm the live name — opt-in because per SKU\nthat is O(#cuts x #access_types) serial Stripe calls on a page load, where\nthe old dataset-grain endpoint was a single call.","operationId":"list_dataset_stripe_skus_api_v1_admin_block_pricing_dataset_settings__dataset_id__stripe_skus_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"verify","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Verify"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Dataset Stripe Skus Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Stripe Skus Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Admin APIs","block-pricing"],"summary":"Update Stripe Sku Metadata","description":"Set the Finance naming metadata for one SKU. Safe before provisioning —\nthe link row exists independently of the Stripe ids.","operationId":"update_stripe_sku_metadata_api_v1_admin_block_pricing_dataset_settings__dataset_id__stripe_skus_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_SkuMetadataBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Stripe Sku Metadata Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Stripe Skus Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/stripe/skus/link":{"post":{"tags":["Admin APIs","block-pricing"],"summary":"Link Stripe Sku Product","description":"Attach an EXISTING Stripe Product to this SKU.\n\nFinance maintains the Stripe catalog by hand, so most Block Products already\nexist. Provisioning never auto-matches them — the admin supplies the id —\nbut the id is validated: the Product must exist, must not already back\nanother SKU, and its name should match the convention (409\n``product_name_mismatch`` otherwise, overridable).\n\nLinks the PRODUCT only. Call ``.../list-price`` to mint the list Price; we\nnever adopt an existing one, because Finance's Prices use fractional cents.","operationId":"link_stripe_sku_product_api_v1_admin_block_pricing_dataset_settings__dataset_id__stripe_skus_link_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_SkuLinkBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Link Stripe Sku Product Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Stripe Skus Link Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/stripe/skus/create":{"post":{"tags":["Admin APIs","block-pricing"],"summary":"Create Stripe Sku Product","description":"Create this SKU's Stripe Product + list Price, or complete a partial one.\n\nIdempotent — safe to retry after a partial failure. The list Price is the\nSKU's OWN active price (÷12 for Forward Feed, full amount one-time for\nHistoric), not a dataset-wide default.","operationId":"create_stripe_sku_product_api_v1_admin_block_pricing_dataset_settings__dataset_id__stripe_skus_create_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_SkuCreateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Stripe Sku Product Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Stripe Skus Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/stripe/skus/create-all":{"post":{"tags":["Admin APIs","block-pricing"],"summary":"Create All Stripe Sku Products","description":"Create Products for every priced SKU of the dataset that has no Product.\n\nCommits per SKU, so a Stripe failure on the seventh does NOT roll back the\nfirst six — otherwise the retry would mint duplicates of everything that had\nalready succeeded. Returns 200 with a partial body; 502 only when every SKU\nfailed.","operationId":"create_all_stripe_sku_products_api_v1_admin_block_pricing_dataset_settings__dataset_id__stripe_skus_create_all_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create All Stripe Sku Products Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Stripe Skus Create All Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/sample":{"put":{"tags":["Admin APIs","block-pricing"],"summary":"Update Dataset Sample Settings","description":"Turn the sample catalog on/off per ``(dataset, cut)`` for ALL clients.\n\nOff hides the cut's sample in the SQL Editor and API for every client;\nlive/bulk access is unchanged. Absent ⇒ enabled. Each changed cut fans\nout a per-cut grant/revoke across providers (only when the value actually\nchanged, so a no-op save is cheap).","operationId":"update_dataset_sample_settings_api_v1_admin_block_pricing_dataset_settings__dataset_id__sample_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_DatasetSampleUpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Dataset Sample Settings Api V1 Admin Block Pricing Dataset Settings  Dataset Id  Sample Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/sample/preflight":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"Get Dataset Sample Preflight","description":"What each of this dataset's sample cuts would do if toggled.\n\nPowers the drawer's \"this toggle will do nothing\" warning and the OFF\nconfirmation's client list. Computed with the same resolver the fan-out uses\n(``sample_toggle_plan``) so the warning can't drift from the behaviour.","operationId":"get_dataset_sample_preflight_api_v1_admin_block_pricing_dataset_settings__dataset_id__sample_preflight_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamplePreflightResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/sample/status":{"get":{"tags":["Admin APIs","block-pricing"],"summary":"Get Dataset Sample Status","description":"Who actually has sample access right now, per cut.\n\nReads the LIVE bucket policy and diffs it against CAMS's intent, the recorded\ngrant ledger and the DLQ. This is the only endpoint that can contradict\nCAMS's own record — which is the point: a lost concurrent write leaves a\nledger row with nothing on the bucket.","operationId":"get_dataset_sample_status_api_v1_admin_block_pricing_dataset_settings__dataset_id__sample_status_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"cut","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Cut"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-settings/{dataset_id}/sample/reapply":{"post":{"tags":["Admin APIs","block-pricing"],"summary":"Reapply Dataset Sample Access","description":"Re-push sample grants for this dataset WITHOUT revoking first.\n\nThe safe retry. Re-saving the toggle at its current value is a deliberate\nno-op, which left off-then-on as the only way to re-apply — and off-then-on\nis what loses grants to concurrent writes. This re-runs the enable fan-out\nonly; no revoke is ever enqueued.\n\nStill default-deny: it reuses the enable plan, so it reaches only clients\nalready entitled on the cut. Rejects with 409 in the cases where it would\ngrant nothing, rather than reporting a success that did nothing.","operationId":"reapply_dataset_sample_access_api_v1_admin_block_pricing_dataset_settings__dataset_id__sample_reapply_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleReapplyBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleReapplyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/pricing/dataset-fees/{dataset_id}":{"put":{"tags":["Admin APIs","block-pricing"],"summary":"Update Dataset Fees","description":"Inline-edit revenue share / deployment fee / monthly fee on every\nactive block_pricing row for a dataset. Distinct from\n``schedule_price_change`` (which is price-only and append-only) —\nfees are dataset config and shouldn't accrete history rows.","operationId":"update_dataset_fees_api_v1_admin_block_pricing_dataset_fees__dataset_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_DatasetFeesUpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Dataset Fees Api V1 Admin Block Pricing Dataset Fees  Dataset Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions":{"get":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"List Access Grants","description":"List access-grant rows. Mode selected by query params:\n\n- ``client_id`` only ⇒ all rows for the client across every dataset\n  (client-side \"Block Restrictions\" section, read-only).\n- ``client_id`` + ``dataset_id`` ⇒ all cuts' rows for that\n  client+dataset (shared editor).\n- ``dataset_id`` + ``scope=dataset`` ⇒ all rows for the dataset across\n  every cut, with client info (dataset-side \"Manage access\" list).\n- ``dataset_id`` + ``cut`` ⇒ rows for that exact (dataset, cut), with\n  client info.\n\n``cut`` is ignored when ``scope=dataset`` or ``client_id`` is set.","operationId":"list_access_grants_api_v1_admin_block_dataset_restrictions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^CA\\d+[A-Z]*$"},{"type":"null"}],"title":"Dataset Id"}},{"name":"cut","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(cut|dataset)$"},{"type":"null"}],"title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockClientDataAccessListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Set Access Grant","description":"Upsert the served lag for ``(client_id, dataset_id, cut)`` — legacy\nsingle-row path (no rationale, no bulk-save). The Manage Data\nRestrictions admin UI uses ``bulk-update/`` below instead.\n\nOmit ``expected_row_version`` to create. Include it to update the\nexisting row under optimistic concurrency. ``served_lag=null`` records\n\"no access\"; clients should ``DELETE`` to clear the restriction\nentirely (which, under default-deny, is equivalent to no access).","operationId":"set_access_grant_api_v1_admin_block_dataset_restrictions_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockClientDataAccessSet"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockClientDataAccessRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Clear Access Grant","description":"Clear the grant for ``(client_id, dataset_id, cut)`` — under\ndefault-deny the cut returns to NO access. Idempotent.","operationId":"clear_access_grant_api_v1_admin_block_dataset_restrictions_delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"dataset_id","in":"query","required":true,"schema":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"}},{"name":"cut","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions/{access_id}":{"delete":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Delete Access Grant By Id","description":"Delete by primary key — convenience for the dataset-side admin\nlist where the row was already located by id.","operationId":"delete_access_grant_by_id_api_v1_admin_block_dataset_restrictions__access_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"access_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Access Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions/client/{client_id}/dataset/{dataset_id}/logs":{"get":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Get Access Audit","description":"Change history for one (client, dataset) pair, newest first —\npowers the Manage Data Restrictions admin UI's per-row expand panel.","operationId":"get_access_audit_api_v1_admin_block_dataset_restrictions_client__client_id__dataset__dataset_id__logs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockClientDataAccessAuditRead"},"title":"Response Get Access Audit Api V1 Admin Block Dataset Restrictions Client  Client Id  Dataset  Dataset Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions/client/{client_id}/access-history":{"get":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Get Client Access History","description":"Every ARN registration/removal and Polaris credential change for one\nclient, newest first.\n\nDistinct from the sibling ``/dataset/{dataset_id}/logs``, which covers\nrestriction changes for one (client, dataset). This is the other half of an\naccess incident: the client's own ARN edits. A client swapping in a\nmalformed ARN, or deleting one, breaks access without any restriction\nchanging, and nothing in the restriction log would show it.\n\nReads existing rows rather than a new audit stream, so it covers history\nfrom before the endpoint existed.","operationId":"get_client_access_history_api_v1_admin_block_dataset_restrictions_client__client_id__access_history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientAccessHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions/bulk-apply/eligible-clients":{"get":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"List Bulk Apply Eligible Clients","description":"Clients eligible for the \"enable/remove for all valid clients\"\nbulk action: enterprise plan tier + Block Data feature provisioned.","operationId":"list_bulk_apply_eligible_clients_api_v1_admin_block_dataset_restrictions_bulk_apply_eligible_clients_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BulkApplyEligibleClientsResponse"},"type":"array","title":"Response List Bulk Apply Eligible Clients Api V1 Admin Block Dataset Restrictions Bulk Apply Eligible Clients Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/dataset-restrictions/bulk-update/":{"put":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Bulk Update Access","description":"Apply a batch of access-grant changes in one transaction with a\nsingle commit (PRO-1667) — powers the Manage Data Restrictions admin\nUI's Save action, whether the batch came from By Dataset mode, By\nClient mode, or \"apply to all valid clients\".\n\nFires exactly ONE Slack message summarizing the whole batch (not one\nper dataset/client) — see ``block_slack.send_bulk_access_changed``.","operationId":"bulk_update_access_api_v1_admin_block_dataset_restrictions_bulk_update__put","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlockClientDataAccessBulkUpdate"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/dataset-restrictions/client/{client_id}/sample-coupled":{"patch":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Set Client Sample Coupled","description":"Toggle whether the client's Block sample access follows live/bulk.\n\nEntering MANUAL mode (``False``) is a pure flag flip — existing\nlive/sample values are left untouched. Re-COUPLING (``True``) is blocked\nwhen any dataset has a live≠sample mismatch: the caller must resolve\nthose first (409 ``sample_mismatch`` with the offending datasets/cuts).\nA clean re-couple needs no provider reconcile — every row already\nmatches, so effective sample is unchanged.","operationId":"set_client_sample_coupled_api_v1_admin_block_dataset_restrictions_client__client_id__sample_coupled_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientBlockSampleAccessFollowsPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Client Sample Coupled Api V1 Admin Block Dataset Restrictions Client  Client Id  Sample Coupled Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/dataset-restrictions/bulk-apply/":{"put":{"tags":["Admin APIs","block-dataset-restrictions"],"summary":"Bulk Apply Access","description":"Grant or revoke an entire dataset — every cut the catalog graph\ncurrently emits for it — across every Block-eligible client in one\ncall — \"enable/remove for all valid clients\" (PRO-1667).","operationId":"bulk_apply_access_api_v1_admin_block_dataset_restrictions_bulk_apply__put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkApplyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/s3-invoices/upcoming":{"get":{"tags":["Admin APIs","block-s3-invoices"],"summary":"List Upcoming Invoices","description":"Upcoming Block invoices with their applied S3 tokens, grouped per client.\n\nReads the same reservation rows and the same period calendar as the client's own Next\nBilling tab, so Cole and the client can never be looking at different numbers.","operationId":"list_upcoming_invoices_api_v1_admin_block_s3_invoices_upcoming_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to one client; omit for every Block client.","title":"Client Id"},"description":"Narrow to one client; omit for every Block client."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AdminUpcomingInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/s3-invoices/generated":{"get":{"tags":["Admin APIs","block-s3-invoices"],"summary":"List Generated Invoices","description":"Invoices already sent, with what the tokens took off them.\n\nThe counterpart to the upcoming view: once an invoice goes out it leaves that surface, and\nwithout this the applied tokens have nowhere to be seen after the fact. ``has_more`` says\noutright whether the page was capped rather than leaving it inferred from a full page.","operationId":"list_generated_invoices_api_v1_admin_block_s3_invoices_generated_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrow to one client; omit for every Block client.","title":"Client Id"},"description":"Narrow to one client; omit for every Block client."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum invoices to return, newest sent first.","default":200,"title":"Limit"},"description":"Maximum invoices to return, newest sent first."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockGeneratedInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/block/s3-invoices/override":{"post":{"tags":["Admin APIs","block-s3-invoices"],"summary":"Override Applied Tokens","description":"Override what is applied to one upcoming invoice. ``amount=0`` clears it.\n\nA ``reason`` is required — this changes a figure the client chose, so the row has to say\nwhy. Rejected with 409 ``invoice_no_longer_editable`` once the credit line is on the\nStripe draft, since the amount can no longer change there.","operationId":"override_applied_tokens_api_v1_admin_block_s3_invoices_override_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3OverrideRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AdminUpcomingInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/s3-invoices/auto-apply":{"patch":{"tags":["Admin APIs","block-s3-invoices"],"summary":"Set Auto Apply","description":"Turn automatic application on or off for a contract, or set its recurring amount.\n\nA ``reason`` is required for the same reason ``/override`` needs one: this changes how much\na client is charged, and the row has to say who decided that and why.\n\nThe listing is returned with ``include_contract_id`` forced, so the contract just changed\ncomes back even when the browse rules would not have offered it — the lesson from the\noverride endpoint, where a successful write could look like nothing happened.","operationId":"set_auto_apply_api_v1_admin_block_s3_invoices_auto_apply_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AdminAutoApplySettingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AdminUpcomingInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/s3-invoices/mark-ready":{"post":{"tags":["Admin APIs","block-s3-invoices"],"summary":"Mark Invoice Ready","description":"Lock one held invoice's applied S3 tokens. **Does not send it, and is not what sends it.**\n\nThe daily pass finalizes and emails every held invoice on its send date, locked or not\n(PRO-3535). What this changes is who may still alter the applied tokens before then: a locked\ninvoice leaves the client's Next Billing surface, so this is how an operator makes an override\nstick. To send *now*, call ``/send-now``, which exists as a separate endpoint precisely\nbecause that send cannot be undone.\n\nOutstanding S3 credits are written to Stripe as part of this call, since an override is the\nusual reason to lock and leaves exactly the state the guard below refuses on. Still refused\nwith 409 ``invoice_not_ready`` when a credit write is awaiting confirmation from Stripe, or\nwhen writing it here did not succeed — locking over an uncredited invoice would let it go out\nat full price while the client's tokens are consumed against a discount never given.","operationId":"mark_invoice_ready_api_v1_admin_block_s3_invoices_mark_ready_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockInvoiceMarkReadyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockInvoiceReviewRow"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/block/s3-invoices/send-now":{"post":{"tags":["Admin APIs","block-s3-invoices"],"summary":"Send Invoice Now","description":"Finalize and email one held invoice immediately, recording who and why.\n\nBrings the send forward; it does not authorise one. The daily pass would send the same\ninvoice on its next run, which for a send date already behind us means tomorrow morning —\nthis is for the operator who is looking at it now. Irreversible — a finalized invoice cannot\nbe returned to draft — so the caller is expected to have confirmed it with the operator, and\n``reason`` is required.\n\n``sent=false`` covers three different endings, and only the returned ``invoice.state``\nseparates them: still ``ready`` means a guard held it — an S3 credit is not yet on Stripe —\nand the daily pass retries; ``void`` means Stripe has voided or written off the invoice, so\nthe review row is retired and nothing retries; ``sent`` means it had already gone. A caller\nthat reads ``sent`` alone will tell the operator the wrong thing in two cases out of three.","operationId":"send_invoice_now_api_v1_admin_block_s3_invoices_send_now_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockInvoiceSendNowRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockInvoiceSendNowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/datasets/audit":{"get":{"tags":["Admin APIs","dataset-audit"],"summary":"List All Dataset Audit","operationId":"list_all_dataset_audit_api_v1_admin_datasets_audit_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetAuditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/datasets/{dataset_id}/audit":{"get":{"tags":["Admin APIs","dataset-audit"],"summary":"List Dataset Audit","operationId":"list_dataset_audit_api_v1_admin_datasets__dataset_id__audit_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetAuditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/entities/types":{"get":{"tags":["Admin APIs","openbb-entities"],"summary":"List Entity Types","description":"List all OpenBB entity types.","operationId":"list_entity_types_api_v1_admin_openbb_entities_types_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":100,"title":"Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityTypeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","openbb-entities"],"summary":"Create Entity Type","description":"Create a new OpenBB entity type.","operationId":"create_entity_type_api_v1_admin_openbb_entities_types_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityTypeCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/entities/{entity_uuid}/permission-map/{role}":{"get":{"tags":["Admin APIs","openbb-entities"],"summary":"Get Permission Map By Role","description":"Get permission map for an entity by role name.\n\nArgs:\n    entity_uuid: UUID of the entity.\n    role: Role name ('admin' or 'user', case-insensitive).\n\nReturns:\n    Permission map with UUID, name, and entity UUID.","operationId":"get_permission_map_by_role_api_v1_admin_openbb_entities__entity_uuid__permission_map__role__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_uuid","in":"path","required":true,"schema":{"type":"string","title":"Entity Uuid"}},{"name":"role","in":"path","required":true,"schema":{"type":"string","title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBPermissionMapRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/entities/provision":{"post":{"tags":["Admin APIs","openbb-entities"],"summary":"Provision Entity With Users","description":"Provision a complete OpenBB entity with admins and users.\n\nThis is a convenience endpoint that:\n1. Creates the entity\n2. Sets up default entitlements\n3. Creates admin users\n4. Creates regular users\n\nAll users receive temporary passwords that should be changed on first login.","operationId":"provision_entity_with_users_api_v1_admin_openbb_entities_provision_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBProvisionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBProvisionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/openbb/entities":{"get":{"tags":["Admin APIs","openbb-entities"],"summary":"List Entities","description":"List all OpenBB entities with pagination.","operationId":"list_entities_api_v1_admin_openbb_entities_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":100,"title":"Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","openbb-entities"],"summary":"Create Entity","description":"Create a new OpenBB entity.\n\nThis also sets up default entitlements for the entity.","operationId":"create_entity_api_v1_admin_openbb_entities_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"idempotent","in":"query","required":false,"schema":{"type":"boolean","description":"If True (default), return the existing entity when the name already matches one instead of creating a new one. Pass False to force a genuinely new entity even on a name collision — e.g. to remediate an existing entity that's missing default permission maps, since those are only bootstrapped by OpenBB Hub on real creation, not on an idempotent match.","default":true,"title":"Idempotent"},"description":"If True (default), return the existing entity when the name already matches one instead of creating a new one. Pass False to force a genuinely new entity even on a name collision — e.g. to remediate an existing entity that's missing default permission maps, since those are only bootstrapped by OpenBB Hub on real creation, not on an idempotent match."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/entities/{entity_uuid}":{"get":{"tags":["Admin APIs","openbb-entities"],"summary":"Get Entity","description":"Get a specific OpenBB entity by UUID.","operationId":"get_entity_api_v1_admin_openbb_entities__entity_uuid__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_uuid","in":"path","required":true,"schema":{"type":"string","title":"Entity Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","openbb-entities"],"summary":"Update Entity","description":"Update an existing OpenBB entity.","operationId":"update_entity_api_v1_admin_openbb_entities__entity_uuid__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_uuid","in":"path","required":true,"schema":{"type":"string","title":"Entity Uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBEntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users":{"get":{"tags":["Admin APIs","openbb-users"],"summary":"List Users","description":"List all OpenBB users with pagination.\n\nOptionally filter by exact email match.","operationId":"list_users_api_v1_admin_openbb_users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":100,"title":"Size"},"description":"Items per page"},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by email","title":"Email"},"description":"Filter by email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users/move":{"post":{"tags":["Admin APIs","openbb-users"],"summary":"Move User","description":"Move an OpenBB user to another entity.\n\nThis changes the user's entity membership and role without sending an invitation.","operationId":"move_user_api_v1_admin_openbb_users_move_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserMoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/openbb/users/by-email/{email}":{"get":{"tags":["Admin APIs","openbb-users"],"summary":"Get User By Email","description":"Get a specific OpenBB user by email.","operationId":"get_user_by_email_api_v1_admin_openbb_users_by_email__email__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","openbb-users"],"summary":"Delete User By Email","description":"Delete an OpenBB user by email.","operationId":"delete_user_by_email_api_v1_admin_openbb_users_by_email__email__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users/entity/{entity_uuid}":{"get":{"tags":["Admin APIs","openbb-users"],"summary":"List Entity Users","description":"List all users belonging to a specific entity.\n\nNote: This endpoint fetches all users from OpenBB Hub and filters by entity\nclient-side, as the OpenBB Hub API doesn't support direct entity-based\nuser filtering. All pages are fetched to ensure complete results.","operationId":"list_entity_users_api_v1_admin_openbb_users_entity__entity_uuid__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_uuid","in":"path","required":true,"schema":{"type":"string","title":"Entity Uuid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":100,"title":"Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users/{entity_uuid}":{"post":{"tags":["Admin APIs","openbb-users"],"summary":"Create User","description":"Create a new OpenBB user and assign to an entity.\n\nThe user will receive a temporary password that must be changed on first login.","operationId":"create_user_api_v1_admin_openbb_users__entity_uuid__post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_uuid","in":"path","required":true,"schema":{"type":"string","title":"Entity Uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users/{user_uuid}/entity":{"put":{"tags":["Admin APIs","openbb-users"],"summary":"Update User Entity","description":"Update a user's entity assignment (move user to a different entity).","operationId":"update_user_entity_api_v1_admin_openbb_users__user_uuid__entity_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_uuid","in":"path","required":true,"schema":{"type":"string","title":"User Uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserUpdateEntityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBBUserUpdateEntityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/openbb/users/{user_uuid}":{"delete":{"tags":["Admin APIs","openbb-users"],"summary":"Delete User","description":"Delete an OpenBB user by UUID.","operationId":"delete_user_api_v1_admin_openbb_users__user_uuid__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_uuid","in":"path","required":true,"schema":{"type":"string","title":"User Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/framework-carts/stats":{"get":{"tags":["Admin APIs","framework-carts"],"summary":"Get Cart Stats","description":"Compute aggregate statistics for abandoned carts.","operationId":"get_cart_stats_api_v1_admin_framework_carts_stats_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default), omit carts whose user email domain is internal (CarbonArc and related domains).","default":true,"title":"Exclude Internal"},"description":"When true (default), omit carts whose user email domain is internal (CarbonArc and related domains)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/framework-carts":{"get":{"tags":["Admin APIs","framework-carts"],"summary":"Get Cart Statuses","description":"Get all cart status records with filtering, sorting, and pagination.","operationId":"get_cart_statuses_api_v1_admin_framework_carts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","description":"When true (default), omit carts whose user email domain is internal (CarbonArc and related domains).","default":true,"title":"Exclude Internal"},"description":"When true (default), omit carts whose user email domain is internal (CarbonArc and related domains)."},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CartStatusRead"},"title":"Response Get Cart Statuses Api V1 Admin Framework Carts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/framework-carts/{id}":{"get":{"tags":["Admin APIs","framework-carts"],"summary":"Get Cart Status","description":"Get a single cart status record by ID.","operationId":"get_cart_status_api_v1_admin_framework_carts__id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartStatusRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/cache":{"delete":{"tags":["Admin APIs","Reporting"],"summary":"Clear Reporting Cache","description":"Clear all reporting caches. Super admin only. Requires X-Confirm-Destructive: true.","operationId":"clear_reporting_cache_api_v1_admin_reporting_cache_delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"X-Confirm-Destructive","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm-Destructive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/health":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Health","description":"Return the cached reporting health status. Accessible to all admins.","operationId":"get_health_api_v1_admin_reporting_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportingHealthStatus"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reporting/health/override":{"post":{"tags":["Admin APIs","Reporting"],"summary":"Set Health Override","description":"Suppress the degraded health banner for the given number of hours. Super admin only.","operationId":"set_health_override_api_v1_admin_reporting_health_override_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"ttl_hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":2,"title":"Ttl Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","Reporting"],"summary":"Clear Health Override","description":"Remove the health override, restoring the real health status. Super admin only.","operationId":"clear_health_override_api_v1_admin_reporting_health_override_delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/reporting/filters":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Filters","operationId":"get_filters_api_v1_admin_reporting_filters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FiltersResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reporting/kpi-weekly/history":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Kpi Weekly History","operationId":"get_kpi_weekly_history_api_v1_admin_reporting_kpi_weekly_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KPIWeeklyHistoryResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reporting/kpi-weekly":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Kpi Weekly","operationId":"get_kpi_weekly_api_v1_admin_reporting_kpi_weekly_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KPIWeeklyResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/reporting/kpi-weekly/{week_ending}/drilldown":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Kpi Weekly Drilldown","operationId":"get_kpi_weekly_drilldown_api_v1_admin_reporting_kpi_weekly__week_ending__drilldown_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"week_ending","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Week Ending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KPIWeeklyDrilldownResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/kpi-weekly/backfill":{"post":{"tags":["Admin APIs","Reporting"],"summary":"Backfill Kpi Weekly","operationId":"backfill_kpi_weekly_api_v1_admin_reporting_kpi_weekly_backfill_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start"}},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KPIWeeklyBackfillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/backfill":{"post":{"tags":["Admin APIs","Reporting"],"summary":"Backfill Snapshot Reporting","description":"Backfill snapshot_reporting tables for [start, end] (inclusive, max 30 days per call).\n\nAll saves are upserts — safe to re-run. ETL/ledger routing (cutover 2026-05-29)\nis handled automatically by the underlying data fetch.\nUse skip_existing=true to skip dates that already have a snapshot row.","operationId":"backfill_snapshot_reporting_api_v1_admin_reporting_snapshot_backfill_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start"}},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End"}},{"name":"skip_existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Skip Existing"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/export":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Export Snapshot Reporting","description":"Export snapshot data as a ZIP of 4 CSVs (overview, clients, users, suppliers)\nwithout writing to the database. Provide either start+end (range, max {_SNAPSHOT_EXPORT_MAX_DAYS} days)\nor dates (comma-separated list of specific dates). concurrency controls parallel day fetches.","operationId":"export_snapshot_reporting_api_v1_admin_reporting_snapshot_export_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}},{"name":"dates","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated specific dates, e.g. 2025-11-07,2025-11-10","title":"Dates"},"description":"Comma-separated specific dates, e.g. 2025-11-07,2025-11-10"},{"name":"concurrency","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":3,"title":"Concurrency"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/export/suppliers":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Export Snapshot Suppliers","description":"Export suppliers-only data as a CSV for a date range.\n\nFetches only S3, Polaris, Consumption, and MCP data — skips platform/user fetches\nfor faster exports over large date ranges. Returns a single suppliers.csv.\nProvide either start+end (range, max 365 days) or dates (comma-separated list).","operationId":"export_snapshot_suppliers_api_v1_admin_reporting_snapshot_export_suppliers_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}},{"name":"dates","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated specific dates, e.g. 2025-11-07,2025-11-10","title":"Dates"},"description":"Comma-separated specific dates, e.g. 2025-11-07,2025-11-10"},{"name":"concurrency","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":3,"title":"Concurrency"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/import":{"post":{"tags":["Admin APIs","Reporting"],"summary":"Import Snapshot Reporting","description":"Import snapshot data from a directory of 4 CSVs into the snapshot tables.\n\nThe directory must contain: overview.csv, clients.csv, suppliers.csv, users.csv.\nAll inserts are upserts — safe to re-run. Use skip_existing=true to skip dates\nthat already have an overview row.","operationId":"import_snapshot_reporting_api_v1_admin_reporting_snapshot_import_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"directory","in":"query","required":true,"schema":{"type":"string","description":"Path to directory containing overview.csv, clients.csv, suppliers.csv, users.csv","title":"Directory"},"description":"Path to directory containing overview.csv, clients.csv, suppliers.csv, users.csv"},{"name":"skip_existing","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Skip Existing"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing or invalid authentication credentials."},"403":{"description":"You are not allowed to perform this action."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/history":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Snapshot History","description":"Return daily overview snapshot rows for [start, end].\n\nIf start is omitted, returns all rows up to end.\nIf client (short_name) is provided, returns per-client rows instead of platform totals.\nToday's data point uses the live engagement query (15-min cache) so it matches\nthe Overview widget; all prior dates come from snapshots.","operationId":"get_snapshot_history_api_v1_admin_reporting_snapshot_history_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"client","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/snapshot/clients":{"get":{"tags":["Admin APIs","Reporting"],"summary":"List Snapshot Clients","description":"Return unique clients present in reporting_snapshots_clients, sorted by business name.","operationId":"list_snapshot_clients_api_v1_admin_reporting_snapshot_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"metric","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/client-engagement":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Client Engagement","operationId":"get_client_engagement_api_v1_admin_reporting_client_engagement_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientEngagementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/user-consumption":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get User Consumption","operationId":"get_user_consumption_api_v1_admin_reporting_user_consumption_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserConsumptionRow"},"title":"Response Get User Consumption Api V1 Admin Reporting User Consumption Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/user-access":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get User Access","operationId":"get_user_access_api_v1_admin_reporting_user_access_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAccessRow"},"title":"Response Get User Access Api V1 Admin Reporting User Access Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/supplier-engagement":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Supplier Engagement","operationId":"get_supplier_engagement_api_v1_admin_reporting_supplier_engagement_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"data_source","in":"query","required":false,"schema":{"type":"string","default":"general_consumption","title":"Data Source"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"tokens","title":"Metric"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierMatrixResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/supplier-combined":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Supplier Combined","operationId":"get_supplier_combined_api_v1_admin_reporting_supplier_combined_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Top N"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierCombinedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/raw-export":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Raw Export","operationId":"raw_export_api_v1_admin_reporting_raw_export_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataframe","in":"query","required":true,"schema":{"$ref":"#/components/schemas/RawExportDataframe"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing or invalid authentication credentials."},"403":{"description":"You are not allowed to perform this action."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/client-rum-metrics":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Client Rum Metrics","operationId":"get_client_rum_metrics_api_v1_admin_reporting_client_rum_metrics_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientRumMetricsRow"},"title":"Response Get Client Rum Metrics Api V1 Admin Reporting Client Rum Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/user-rum-metrics":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get User Rum Metrics","operationId":"get_user_rum_metrics_api_v1_admin_reporting_user_rum_metrics_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserRumMetricsRow"},"title":"Response Get User Rum Metrics Api V1 Admin Reporting User Rum Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reporting/summary/pdf":{"get":{"tags":["Admin APIs","Reporting"],"summary":"Get Summary Pdf","operationId":"get_summary_pdf_api_v1_admin_reporting_summary_pdf_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Exclude Internal"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/product-metrics":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get Product Metrics Endpoint","description":"Aggregate product-level RUM metrics: session length, frustration count,\nload time, and percentage of sessions with errors.","operationId":"get_product_metrics_endpoint_api_v1_admin_analytics_product_metrics_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter_from","in":"query","required":false,"schema":{"type":"string","description":"Start time, e.g. now-30d or ISO8601","default":"now-30d","title":"Filter From"},"description":"Start time, e.g. now-30d or ISO8601"},{"name":"filter_to","in":"query","required":false,"schema":{"type":"string","description":"End time, e.g. now or ISO8601","default":"now","title":"Filter To"},"description":"End time, e.g. now or ISO8601"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/user-tracking":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get User Tracking","operationId":"get_user_tracking_api_v1_admin_analytics_user_tracking_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"User email address to look up","title":"Email"},"description":"User email address to look up"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Number of days to look back","default":30,"title":"Days"},"description":"Number of days to look back"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/rum/page-performance":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get Rum Page Performance Endpoint","description":"Page-performance summary for the CAMS Summary tab.\n\nAggregates view counts, avg loading time, and daily timeseries for the current\nand previous period. Used to power the treemap, total-views stat, area chart,\nand top-routes table — replacing previously hardcoded mock data.","operationId":"get_rum_page_performance_endpoint_api_v1_admin_analytics_rum_page_performance_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter_from","in":"query","required":false,"schema":{"type":"string","description":"Start time, e.g. now-7d or ISO8601","default":"now-7d","title":"Filter From"},"description":"Start time, e.g. now-7d or ISO8601"},{"name":"filter_to","in":"query","required":false,"schema":{"type":"string","description":"End time, e.g. now or ISO8601","default":"now","title":"Filter To"},"description":"End time, e.g. now or ISO8601"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/rum/events":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get Rum Events","description":"Proxy to Datadog GET /api/v2/rum/events.\n\nAll queries are automatically scoped to the configured application ID\nto prevent cross-application data access. Returns raw API response.","operationId":"get_rum_events_api_v1_admin_analytics_rum_events_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Minimum time, e.g. now-24h or ISO8601","title":"Filter From"},"description":"Minimum time, e.g. now-24h or ISO8601"},{"name":"filter_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Maximum time, e.g. now or ISO8601","title":"Filter To"},"description":"Maximum time, e.g. now or ISO8601"},{"name":"filter_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Additional RUM search query (automatically scoped to app)","title":"Filter Query"},"description":"Additional RUM search query (automatically scoped to app)"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: timestamp or -timestamp","title":"Sort"},"description":"Sort: timestamp or -timestamp"},{"name":"page_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from previous response","title":"Page Cursor"},"description":"Pagination cursor from previous response"},{"name":"page_limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max events per page","default":100,"title":"Page Limit"},"description":"Max events per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/financial/cohort-ltv":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get Cohort Ltv Endpoint","operationId":"get_cohort_ltv_endpoint_api_v1_admin_analytics_financial_cohort_ltv_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"type":"string","default":"business,professional","title":"Plan Tiers"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Exclude Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/user-tracking/conversion-funnel":{"get":{"tags":["Admin APIs","Analytics"],"summary":"Get Conversion Funnel Endpoint","operationId":"get_conversion_funnel_endpoint_api_v1_admin_analytics_user_tracking_conversion_funnel_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"plan_tiers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tiers"}},{"name":"exclude_internal","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Exclude Internal"}},{"name":"coupon","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/release-timing-logs":{"get":{"tags":["Admin APIs","release-timing-logs"],"summary":"List Release Timing Logs","description":"Retrieve historical release timing records with filtering, sorting, and pagination.","operationId":"get_release_timing_logs_api_v1_admin_release_timing_logs_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReleaseTimingRead"},"title":"Response Get Release Timing Logs Api V1 Admin Release Timing Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/tools":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"List Tools","operationId":"list_tools_api_v1_admin_mcp_observability_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Tools Api V1 Admin Mcp Observability Tools Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/mcp-observability/date-bounds":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Date Bounds","operationId":"date_bounds_api_v1_admin_mcp_observability_date_bounds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DateBounds"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/mcp-observability/filter-clients":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Filter Clients","operationId":"filter_clients_api_v1_admin_mcp_observability_filter_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Filter Clients Api V1 Admin Mcp Observability Filter Clients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/summary":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Summary","operationId":"summary_api_v1_admin_mcp_observability_summary_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KpiSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/traces-by-tool":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Traces By Tool","operationId":"traces_by_tool_api_v1_admin_mcp_observability_traces_by_tool_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ToolMetric"},"title":"Response Traces By Tool Api V1 Admin Mcp Observability Traces By Tool Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/latency-by-tool":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Latency By Tool","operationId":"latency_by_tool_api_v1_admin_mcp_observability_latency_by_tool_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LatencyByTool"},"title":"Response Latency By Tool Api V1 Admin Mcp Observability Latency By Tool Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/traces-by-client":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Traces By Client","operationId":"traces_by_client_api_v1_admin_mcp_observability_traces_by_client_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ClientMetric"},"title":"Response Traces By Client Api V1 Admin Mcp Observability Traces By Client Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/error-codes":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Error Codes","operationId":"error_codes_api_v1_admin_mcp_observability_error_codes_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorCodeRow"},"title":"Response Error Codes Api V1 Admin Mcp Observability Error Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/error-codes-heatmap":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Error Codes Heatmap","operationId":"error_codes_heatmap_api_v1_admin_mcp_observability_error_codes_heatmap_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorCodeHeatmapCell"},"title":"Response Error Codes Heatmap Api V1 Admin Mcp Observability Error Codes Heatmap Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/tool-error-hierarchy":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Tool Error Hierarchy","operationId":"tool_error_hierarchy_api_v1_admin_mcp_observability_tool_error_hierarchy_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HierarchyNode"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/traces-by-dataset":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Traces By Dataset","operationId":"traces_by_dataset_api_v1_admin_mcp_observability_traces_by_dataset_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DatasetRow"},"title":"Response Traces By Dataset Api V1 Admin Mcp Observability Traces By Dataset Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/volume-over-time":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Volume Over Time","operationId":"volume_over_time_api_v1_admin_mcp_observability_volume_over_time_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"agg","in":"query","required":false,"schema":{"type":"string","default":"day","title":"Agg"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VolumePoint"},"title":"Response Volume Over Time Api V1 Admin Mcp Observability Volume Over Time Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/latency-over-time":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Latency Over Time","operationId":"latency_over_time_api_v1_admin_mcp_observability_latency_over_time_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"agg","in":"query","required":false,"schema":{"type":"string","default":"day","title":"Agg"}},{"name":"tool_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Filter"}},{"name":"split","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Split"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LatencyTimePoint"},"title":"Response Latency Over Time Api V1 Admin Mcp Observability Latency Over Time Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/latency-by-error-code":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Latency By Error Code","operationId":"latency_by_error_code_api_v1_admin_mcp_observability_latency_by_error_code_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LatencyByErrorCode"},"title":"Response Latency By Error Code Api V1 Admin Mcp Observability Latency By Error Code Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/insight-error-rate":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Insight Error Rate","operationId":"insight_error_rate_api_v1_admin_mcp_observability_insight_error_rate_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InsightErrorRow"},"title":"Response Insight Error Rate Api V1 Admin Mcp Observability Insight Error Rate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/trace-details":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Trace Details","operationId":"trace_details_api_v1_admin_mcp_observability_trace_details_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"outcome","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Outcome"}},{"name":"message_filter","in":"query","required":false,"schema":{"type":"string","default":"any","title":"Message Filter"}},{"name":"error_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Types"}},{"name":"trace_clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Trace Clients"}},{"name":"charged_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Charged Only"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/mcp-observability/trace-details/csv":{"get":{"tags":["Admin APIs","MCP Observability"],"summary":"Trace Details Csv","operationId":"trace_details_csv_api_v1_admin_mcp_observability_trace_details_csv_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"outcome","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Outcome"}},{"name":"message_filter","in":"query","required":false,"schema":{"type":"string","default":"any","title":"Message Filter"}},{"name":"error_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Types"}},{"name":"trace_clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Trace Clients"}},{"name":"charged_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Charged Only"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"tools","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tools"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Type"}},{"name":"clients","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Clients"}},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Internal"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/scalability-dashboard/status":{"get":{"tags":["Admin APIs","Scalability Dashboard"],"summary":"Get Status","operationId":"get_status_api_v1_admin_scalability_dashboard_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalabilityStatusResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/scalability-dashboard/query":{"post":{"tags":["Admin APIs","Scalability Dashboard"],"summary":"Query","operationId":"query_api_v1_admin_scalability_dashboard_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalabilityQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScalabilityQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/eval-runs/config":{"get":{"tags":["Admin APIs","Eval Runs"],"summary":"Get Eval Config","operationId":"get_eval_config_api_v1_admin_eval_runs_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalConfig"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/eval-runs":{"get":{"tags":["Admin APIs","Eval Runs"],"summary":"List Eval Runs","operationId":"list_eval_runs_api_v1_admin_eval_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EvalJob"},"type":"array","title":"Response List Eval Runs Api V1 Admin Eval Runs Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","Eval Runs"],"summary":"Create Eval Run","operationId":"create_eval_run_api_v1_admin_eval_runs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalRunRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Eval Run Api V1 Admin Eval Runs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/eval-runs/{job_id}":{"get":{"tags":["Admin APIs","Eval Runs"],"summary":"Get Eval Run","operationId":"get_eval_run_api_v1_admin_eval_runs__job_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalJob"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/eval-runs/{job_id}/cancel":{"post":{"tags":["Admin APIs","Eval Runs"],"summary":"Cancel Eval Run","operationId":"cancel_eval_run_api_v1_admin_eval_runs__job_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalJob"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/historical-replay/config":{"get":{"tags":["Admin APIs","Historical Replay"],"summary":"Get Replay Config","operationId":"get_replay_config_api_v1_admin_historical_replay_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplayConfig"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/historical-replay":{"get":{"tags":["Admin APIs","Historical Replay"],"summary":"List Replay Runs","operationId":"list_replay_runs_api_v1_admin_historical_replay_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EvalJob"},"type":"array","title":"Response List Replay Runs Api V1 Admin Historical Replay Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","Historical Replay"],"summary":"Create Replay Run","operationId":"create_replay_run_api_v1_admin_historical_replay_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReplayRunRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Replay Run Api V1 Admin Historical Replay Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/historical-replay/{job_id}":{"get":{"tags":["Admin APIs","Historical Replay"],"summary":"Get Replay Run","operationId":"get_replay_run_api_v1_admin_historical_replay__job_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalJob"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/historical-replay/{job_id}/cancel":{"post":{"tags":["Admin APIs","Historical Replay"],"summary":"Cancel Replay Run","operationId":"cancel_replay_run_api_v1_admin_historical_replay__job_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalJob"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/tous":{"get":{"tags":["Admin APIs","Legal"],"summary":"List Tou Versions","description":"List all TOU versions with filtering, sorting, and pagination.","operationId":"list_tou_versions_api_v1_admin_legal_tous_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignupTOUVersionResponse"},"title":"Response List Tou Versions Api V1 Admin Legal Tous Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","Legal"],"summary":"Update Tou","description":"Update TOU content (creates new version).","operationId":"update_tou_api_v1_admin_legal_tous_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTOUUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTOUVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/tous/latest":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Latest Tou","description":"Get the latest published TOU version. Returns 404 if no TOU exists.","operationId":"get_latest_tou_api_v1_admin_legal_tous_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTOUVersionResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/legal/tous/{id}":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Tou Version","description":"Get a specific TOU version by ID.","operationId":"get_tou_version_api_v1_admin_legal_tous__id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTOUVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/tous/{id}/previous-revision":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Previous Tou Revision","description":"Get the previous revision of a TOU.","operationId":"get_previous_tou_revision_api_v1_admin_legal_tous__id__previous_revision_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SignupTOUVersionResponse"},{"type":"null"}],"title":"Response Get Previous Tou Revision Api V1 Admin Legal Tous  Id  Previous Revision Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/tou-acceptances":{"get":{"tags":["Admin APIs","Legal","Legal"],"summary":"List Pending Tou Users","description":"List users who haven't accepted the latest TOU version with filtering, sorting, and pagination.","operationId":"list_pending_tou_users_api_v1_admin_legal_tou_acceptances_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignupTOUAcceptanceResponse"},"title":"Response List Pending Tou Users Api V1 Admin Legal Tou Acceptances Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/block-tous/{dataset_id}/latest":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Latest Block Dataset Tou","description":"Get the latest published TOU for a dataset. 404 if no TOU exists for\nthis dataset — that absence is meaningful and not an error.","operationId":"get_latest_block_dataset_tou_api_v1_admin_legal_block_tous__dataset_id__latest_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDatasetTOULatestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/block-tous/{dataset_id}/versions":{"get":{"tags":["Admin APIs","Legal"],"summary":"List Block Dataset Tou Versions","description":"List every published version of a dataset's TOU, newest first.","operationId":"list_block_dataset_tou_versions_api_v1_admin_legal_block_tous__dataset_id__versions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockDatasetTOUVersionResponse"},"title":"Response List Block Dataset Tou Versions Api V1 Admin Legal Block Tous  Dataset Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","Legal"],"summary":"Publish Block Dataset Tou","description":"Publish a new TOU version for ``dataset_id``.","operationId":"publish_block_dataset_tou_api_v1_admin_legal_block_tous__dataset_id__versions_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDatasetTOUUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDatasetTOUVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/block-tous/{dataset_id}":{"delete":{"tags":["Admin APIs","Legal"],"summary":"Clear Block Dataset Tou","description":"Hard-clear all TOU versions for a dataset, returning it to the\nno-TOU state (the public request modal will hide the acceptance\ncheckbox). Once cleared the version history is no longer legally\nmeaningful, so we don't soft-delete.","operationId":"clear_block_dataset_tou_api_v1_admin_legal_block_tous__dataset_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/privacy-policies":{"get":{"tags":["Admin APIs","Legal"],"summary":"List Privacy Policy Versions","description":"List all privacy policy versions with filtering, sorting, and pagination.","operationId":"list_privacy_policy_versions_api_v1_admin_legal_privacy_policies_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrivacyPolicyVersionResponse"},"title":"Response List Privacy Policy Versions Api V1 Admin Legal Privacy Policies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","Legal"],"summary":"Create Privacy Policy Version","description":"Create a new privacy policy version.","operationId":"create_privacy_policy_version_api_v1_admin_legal_privacy_policies_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyPolicyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyPolicyVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/privacy-policies/latest":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Latest Privacy Policy","description":"Get the latest published privacy policy version. Returns 404 if none exists.","operationId":"get_latest_privacy_policy_api_v1_admin_legal_privacy_policies_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyPolicyVersionResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/legal/privacy-policies/{id}":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Privacy Policy Version","description":"Get a specific privacy policy version by ID.","operationId":"get_privacy_policy_version_api_v1_admin_legal_privacy_policies__id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyPolicyVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/legal/privacy-policies/{id}/previous-revision":{"get":{"tags":["Admin APIs","Legal"],"summary":"Get Previous Privacy Policy Revision","description":"Get the previous revision of a privacy policy version.","operationId":"get_previous_privacy_policy_revision_api_v1_admin_legal_privacy_policies__id__previous_revision_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivacyPolicyVersionResponse"},{"type":"null"}],"title":"Response Get Previous Privacy Policy Revision Api V1 Admin Legal Privacy Policies  Id  Previous Revision Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tickers":{"get":{"tags":["Admin APIs","tickers"],"summary":"Get Tickers","operationId":"get_tickers_api_v1_admin_tickers_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TickerResponse"},"title":"Response Get Tickers Api V1 Admin Tickers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","tickers"],"summary":"Create Ticker","operationId":"create_ticker_api_v1_admin_tickers_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tickers/{ticker_id}":{"get":{"tags":["Admin APIs","tickers"],"summary":"Get Ticker","operationId":"get_ticker_api_v1_admin_tickers__ticker_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"ticker_id","in":"path","required":true,"schema":{"type":"string","title":"Ticker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","tickers"],"summary":"Update Ticker","operationId":"update_ticker_api_v1_admin_tickers__ticker_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"ticker_id","in":"path","required":true,"schema":{"type":"string","title":"Ticker Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","tickers"],"summary":"Delete Ticker","operationId":"delete_ticker_api_v1_admin_tickers__ticker_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"ticker_id","in":"path","required":true,"schema":{"type":"string","title":"Ticker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/graph/insights/catalog":{"get":{"tags":["Admin APIs","prisms"],"summary":"Graph Insight Catalog","description":"The whole prism-eligible insight corpus in one response.\n\nSame filters and ``excluded`` counts as ``/graph/insights``, unpaginated,\nso the picker fetches once and searches in memory instead of per keystroke.\nThe ETag and the caller's ``If-None-Match`` are relayed both ways so a\nclient holding the current version revalidates into a 304 rather than\nre-downloading the corpus.","operationId":"graph_insight_catalog_api_v1_admin_prisms_graph_insights_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/graph/insights/linked":{"get":{"tags":["Admin APIs","prisms"],"summary":"Graph Linked Insight Ids","description":"Graph adjacency for the current prism entity selection.\n\nThe browser intersects these ids with the catalog it already holds, so\nsearching and combining entity selections remain entirely in memory.","operationId":"graph_linked_insight_ids_api_v1_admin_prisms_graph_insights_linked_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_id","in":"query","required":true,"schema":{"type":"array","items":{"type":"integer"},"title":"Entity Id"}},{"name":"entity_representation","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"title":"Entity Representation"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/graph/entities":{"get":{"tags":["Admin APIs","prisms"],"summary":"Search Graph Entities","description":"Entity typeahead for the prism form. ``insight_id`` is optional so\nentities can be picked first; when set, results are scoped to that insight.","operationId":"search_graph_entities_api_v1_admin_prisms_graph_entities_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"insight_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Insight Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/location-resolutions":{"post":{"tags":["Admin APIs","prisms"],"summary":"Location Resolutions","description":"Available location grains for the chosen insight + entities.\n\nUses the same power-api error translation as preview/refresh so a blocked\ninsight (provider restriction) surfaces as structured\n``provider_restriction`` instead of a bare 404 that the form mislabels as\n\"no valid daily configuration\".","operationId":"location_resolutions_api_v1_admin_prisms_location_resolutions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/framework-filters":{"post":{"tags":["Admin APIs","prisms"],"summary":"Framework Filters","description":"The framework's advertised filter set for the chosen insight + entities.\n\nSame shape the platform builder renders, resolved as the Prism service\naccount and pinned to what a prism can purchase. ``payload[\"filters\"]``\ncarries the admin's selections so far — the advertised set depends on them.","operationId":"framework_filters_api_v1_admin_prisms_framework_filters_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/framework-filters/{filter_key}/options":{"post":{"tags":["Admin APIs","prisms"],"summary":"Framework Filter Options","description":"Option values for one dependent filter, scoped by the current\nselections in ``payload[\"filters\"]``.","operationId":"framework_filter_options_api_v1_admin_prisms_framework_filters__filter_key__options_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter_key","in":"path","required":true,"schema":{"type":"string","title":"Filter Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/tou":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prisms Tou Versions","description":"List all Prisms TOU versions with filtering, sorting, and pagination.","operationId":"list_prisms_tou_versions_api_v1_admin_prisms_tou_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrismsTouVersionResponse"},"title":"Response List Prisms Tou Versions Api V1 Admin Prisms Tou Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","prisms"],"summary":"Create Prisms Tou Version","description":"Publish a new Prisms TOU version.","operationId":"create_prisms_tou_version_api_v1_admin_prisms_tou_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismsTouCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismsTouVersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/tou/latest":{"get":{"tags":["Admin APIs","prisms"],"summary":"Get Latest Prisms Tou","description":"Get the latest published Prisms TOU version. 404 if none exists.","operationId":"get_latest_prisms_tou_api_v1_admin_prisms_tou_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismsTouVersionResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/categories":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prism Categories","operationId":"list_prism_categories_api_v1_admin_prisms_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PrismCategoryResponse"},"type":"array","title":"Response List Prism Categories Api V1 Admin Prisms Categories Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Admin APIs","prisms"],"summary":"Create Prism Category","operationId":"create_prism_category_api_v1_admin_prisms_categories_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismCategoryCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/creators":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prism Creators","description":"Distinct created_by emails for the prisms list filter.","operationId":"list_prism_creators_api_v1_admin_prisms_creators_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Prism Creators Api V1 Admin Prisms Creators Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/categories/{category_id}":{"put":{"tags":["Admin APIs","prisms"],"summary":"Rename Prism Category","description":"Rename a category. The public page regroups immediately (attached live\nprisms' cache entries are re-composed); historical compute snapshots keep\nthe category name they served with.","operationId":"rename_prism_category_api_v1_admin_prisms_categories__category_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismCategoryRenameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","prisms"],"summary":"Delete Prism Category","operationId":"delete_prism_category_api_v1_admin_prisms_categories__category_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}},{"name":"reassign_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Target category for attached prisms. Required when the category has prisms — they are reassigned, never deleted.","title":"Reassign To"},"description":"Target category for attached prisms. Required when the category has prisms — they are reassigned, never deleted."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/prism-account":{"get":{"tags":["Admin APIs","prisms"],"summary":"Get Prism Account","description":"The Prism service account's client id (env-configured) — the\nprovider-access editor uses it to decide when to show the restriction\nimpact panel.","operationId":"get_prism_account_api_v1_admin_prisms_prism_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/restriction-impact":{"get":{"tags":["Admin APIs","prisms"],"summary":"Prism Restriction Impact","description":"Which live prisms would the given blocked-source set unpublish, and\nwhy. Called by the provider-access editor (Prism account only) *before*\nsaving, against the pending toggles. Live prisms come from CAMS's own DB;\npower-api only resolves the ontology dependency sets.","operationId":"prism_restriction_impact_api_v1_admin_prisms_restriction_impact_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"blocked","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"Pending blocked source code_names (e.g. fawn)","title":"Blocked"},"description":"Pending blocked source code_names (e.g. fawn)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismRestrictionImpactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prisms","operationId":"list_prisms_api_v1_admin_prisms_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrismDefinitionResponse"},"title":"Response List Prisms Api V1 Admin Prisms Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","prisms"],"summary":"Create Prism","description":"Create a prism. A live prism is computed immediately through the real\npurchase path; if that fails (e.g. provider restriction) nothing is kept,\nso a tile never exists without data behind it.","operationId":"create_prism_api_v1_admin_prisms_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}":{"get":{"tags":["Admin APIs","prisms"],"summary":"Get Prism","operationId":"get_prism_api_v1_admin_prisms__prism_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","prisms"],"summary":"Update Prism","description":"Update a prism. Live saves recompute only under the 5:00 PM ET / freshness\nrules (see ``_should_recompute_on_live_save``); copy-only skips re-compose\nthe cached tile (display fields come from the definition, not the compute).\nUnpublishing drops the tile from the serving cache.\n\nGoing live always requires a successful recompute. If refresh fails on a\ndraft→live transition, ``publish_state`` is rolled back to draft — a\nprism never sits live without a computed snapshot. Other field edits from\nthe same request are kept. Already-live edits that fail recompute keep\nlive + last-good tile; the structured error says so.","operationId":"update_prism_api_v1_admin_prisms__prism_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/preview":{"post":{"tags":["Admin APIs","prisms"],"summary":"Preview Prism","description":"Compute a prism's data through the real purchase path without touching\nthe public page — so an admin can view the exact platform rendering of a\ndraft (saved or unsaved) before it goes live. Read-through cached here in\nCAMS; ``force`` re-purchases.","operationId":"preview_prism_api_v1_admin_prisms_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/refresh-all":{"post":{"tags":["Admin APIs","prisms"],"summary":"Refresh All Prisms","description":"Force a recompute of every live prism, bypassing the freshness gate.\n\nThe gate only opens once every granted table's ``table_max_date``\nadvances, so a compute-side change can't reach the public page while\nsources are idle — the last-good graphs keep serving indefinitely. This\nis the operator escape hatch for that case.\n\nQueues one ``task_refresh_prism`` per prism rather than computing inline:\neach is a real purchase against the warehouse, and 20+ of them would run\nwell past any HTTP timeout. Outcomes land in the recompute-attempts log\nlike any other compute. Dispatched by name because ``prism_tasks``\nimports from this module.","operationId":"refresh_all_prisms_api_v1_admin_prisms_refresh_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismRefreshAllResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/prisms/{prism_id}/refresh":{"post":{"tags":["Admin APIs","prisms"],"summary":"Refresh Prism","description":"Manually recompute a live prism (retry after a failed refresh).","operationId":"refresh_prism_api_v1_admin_prisms__prism_id__refresh_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/archive":{"post":{"tags":["Admin APIs","prisms"],"summary":"Archive Prism","description":"Archive a prism.\n\nRemoves it from the public page and hides it from admin lists / recompute,\nbut keeps the definition row and append-only compute/attempt audit trail.","operationId":"archive_prism_api_v1_admin_prisms__prism_id__archive_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/computes":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prism Computes","description":"The compute timeline: by default one effective row per compute day\n(latest ``computed_at`` wins). Light rows only — fetch a row's full\n``snapshot`` via the detail endpoint when rendering its graph.","operationId":"list_prism_computes_api_v1_admin_prisms__prism_id__computes_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","description":"Include within-day history: earlier computes for a day that a later run (e.g. a manual repair) superseded.","default":false,"title":"Include Superseded"},"description":"Include within-day history: earlier computes for a day that a later run (e.g. a manual repair) superseded."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrismComputeSnapshotResponse"},"title":"Response List Prism Computes Api V1 Admin Prisms  Prism Id  Computes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/computes/{compute_id}":{"get":{"tags":["Admin APIs","prisms"],"summary":"Get Prism Compute","description":"One audit row including the full snapshot — exactly the payload the\npublic page rendered from on that day.","operationId":"get_prism_compute_api_v1_admin_prisms__prism_id__computes__compute_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}},{"name":"compute_id","in":"path","required":true,"schema":{"type":"string","title":"Compute Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismComputeSnapshotDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/computes/recompute":{"post":{"tags":["Admin APIs","prisms"],"summary":"Recompute Prism Day","description":"Re-run *today's* compute. Appends a new audit row that supersedes the\nday's earlier compute in the history view — the original stays on record\n— and updates the live public page plus ``last_refreshed_at``. Past-day\nrepairs are not allowed.","operationId":"recompute_prism_day_api_v1_admin_prisms__prism_id__computes_recompute_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismComputeRecomputeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismComputeSnapshotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/recompute-attempts":{"get":{"tags":["Admin APIs","prisms"],"summary":"List Prism Recompute Attempts","description":"The recompute attempt log, newest first: every gate *decision*, forced\ncompute, failure and restriction-unpublish for this prism, each with its\nreason and per-source freshness detail. The UI polls this to watch\ndecisions land in realtime.\n\nOne row per decision, not per tick: the gate runs every few seconds and an\nunchanged verdict appends nothing, so the newest row is the latest thing\nthat changed rather than the latest time anything was checked.","operationId":"list_prism_recompute_attempts_api_v1_admin_prisms__prism_id__recompute_attempts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"computed | skipped | failed | unpublished","title":"Status"},"description":"computed | skipped | failed | unpublished"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrismRecomputeAttemptListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prisms/{prism_id}/restrictions":{"get":{"tags":["Admin APIs","prisms"],"summary":"Get Prism Restrictions","description":"Sources this prism needs that the Prism service account is currently\nblocked from. Derived live (nothing stored): nonempty means the edit page\nshows the restriction banner and the prism cannot go (back) live; lifting\nthe restriction clears it immediately.","operationId":"get_prism_restrictions_api_v1_admin_prisms__prism_id__restrictions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"prism_id","in":"path","required":true,"schema":{"type":"string","title":"Prism Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Email Recipient Groups","operationId":"list_email_recipient_groups_api_v1_admin_email_recipient_groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailRecipientGroupRead"},"title":"Response List Email Recipient Groups Api V1 Admin Email Recipient Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Create Email Recipient Group","operationId":"create_email_recipient_group_api_v1_admin_email_recipient_groups_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/cams-groups":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Cams Groups","operationId":"list_cams_groups_api_v1_admin_email_recipient_groups_cams_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CamsGroupRead"},"type":"array","title":"Response List Cams Groups Api V1 Admin Email Recipient Groups Cams Groups Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/email-recipient-groups/user-suggestions":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Internal User Suggestions","description":"Typeahead for the add-recipient input — internal domains only.\n\nDeliberately not the generic /users listing: recipient groups may only hold\ninternal addresses, and this keeps the page on the email-recipient-groups\npermission instead of also requiring users:list.","operationId":"list_internal_user_suggestions_api_v1_admin_email_recipient_groups_user_suggestions_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserSuggestionRead"},"title":"Response List Internal User Suggestions Api V1 Admin Email Recipient Groups User Suggestions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/allowed-domains":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Get Allowed Recipient Domains","operationId":"get_allowed_recipient_domains_api_v1_admin_email_recipient_groups_allowed_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllowedRecipientDomainsResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/email-recipient-groups/{group_id}":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Get Email Recipient Group","operationId":"get_email_recipient_group_api_v1_admin_email_recipient_groups__group_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Update Email Recipient Group","operationId":"update_email_recipient_group_api_v1_admin_email_recipient_groups__group_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Delete Email Recipient Group","operationId":"delete_email_recipient_group_api_v1_admin_email_recipient_groups__group_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/{group_id}/effective-members":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Effective Members","description":"Return all recipients — manual members and users from linked CAMS groups.","operationId":"list_effective_members_api_v1_admin_email_recipient_groups__group_id__effective_members_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EffectiveMemberRead"},"title":"Response List Effective Members Api V1 Admin Email Recipient Groups  Group Id  Effective Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/{group_id}/members":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Email Recipient Group Members","operationId":"list_email_recipient_group_members_api_v1_admin_email_recipient_groups__group_id__members_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailRecipientGroupMemberRead"},"title":"Response List Email Recipient Group Members Api V1 Admin Email Recipient Groups  Group Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Add Email Recipient Group Member","operationId":"add_email_recipient_group_member_api_v1_admin_email_recipient_groups__group_id__members_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupMemberCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRecipientGroupMemberRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/{group_id}/members/{member_id}":{"delete":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Remove Email Recipient Group Member","operationId":"remove_email_recipient_group_member_api_v1_admin_email_recipient_groups__group_id__members__member_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/{group_id}/linked-groups":{"get":{"tags":["Admin APIs","email-recipient-groups"],"summary":"List Linked Cams Groups","operationId":"list_linked_cams_groups_api_v1_admin_email_recipient_groups__group_id__linked_groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LinkedCamsGroupRead"},"title":"Response List Linked Cams Groups Api V1 Admin Email Recipient Groups  Group Id  Linked Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Add Linked Cams Group","operationId":"add_linked_cams_group_api_v1_admin_email_recipient_groups__group_id__linked_groups_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddLinkedCamsGroupRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedCamsGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-recipient-groups/{group_id}/linked-groups/{link_id}":{"delete":{"tags":["Admin APIs","email-recipient-groups"],"summary":"Remove Linked Cams Group","operationId":"remove_linked_cams_group_api_v1_admin_email_recipient_groups__group_id__linked_groups__link_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-triggers":{"get":{"tags":["Admin APIs","email-triggers"],"summary":"List Email Triggers","operationId":"list_email_triggers_api_v1_admin_email_triggers_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailTriggerRead"},"title":"Response List Email Triggers Api V1 Admin Email Triggers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","email-triggers"],"summary":"Create Email Trigger","operationId":"create_email_trigger_api_v1_admin_email_triggers_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-triggers/{trigger_id}":{"get":{"tags":["Admin APIs","email-triggers"],"summary":"Get Email Trigger","operationId":"get_email_trigger_api_v1_admin_email_triggers__trigger_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","email-triggers"],"summary":"Update Email Trigger","operationId":"update_email_trigger_api_v1_admin_email_triggers__trigger_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","email-triggers"],"summary":"Delete Email Trigger","operationId":"delete_email_trigger_api_v1_admin_email_triggers__trigger_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-triggers/{trigger_id}/groups":{"get":{"tags":["Admin APIs","email-triggers"],"summary":"List Email Trigger Groups","operationId":"list_email_trigger_groups_api_v1_admin_email_triggers__trigger_id__groups_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailRecipientGroupRead"},"title":"Response List Email Trigger Groups Api V1 Admin Email Triggers  Trigger Id  Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-triggers/{trigger_id}/groups/{group_id}":{"post":{"tags":["Admin APIs","email-triggers"],"summary":"Assign Group To Trigger","operationId":"assign_group_to_trigger_api_v1_admin_email_triggers__trigger_id__groups__group_id__post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","email-triggers"],"summary":"Unassign Group From Trigger","operationId":"unassign_group_from_trigger_api_v1_admin_email_triggers__trigger_id__groups__group_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-triggers/{trigger_id}/emails":{"get":{"tags":["Admin APIs","email-triggers"],"summary":"Get Trigger Emails","operationId":"get_trigger_emails_api_v1_admin_email_triggers__trigger_id__emails_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trigger Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTriggerEmailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-notifications":{"get":{"tags":["Admin APIs","email-notifications"],"summary":"List Email Notifications","operationId":"list_email_notifications_api_v1_admin_email_notifications_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filter"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailNotificationResponse"},"title":"Response List Email Notifications Api V1 Admin Email Notifications Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin APIs","email-notifications"],"summary":"Create Email Notification","operationId":"create_email_notification_api_v1_admin_email_notifications_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailNotificationCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-notifications/preview-audience":{"post":{"tags":["Admin APIs","email-notifications"],"summary":"Preview Email Notification Audience","operationId":"preview_email_notification_audience_api_v1_admin_email_notifications_preview_audience_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudiencePreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudiencePreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/email-notifications/preview-audience-users":{"post":{"tags":["Admin APIs","email-notifications"],"summary":"Preview Email Notification Audience Users","operationId":"preview_email_notification_audience_users_api_v1_admin_email_notifications_preview_audience_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudiencePreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AudienceUserItem"},"type":"array","title":"Response Preview Email Notification Audience Users Api V1 Admin Email Notifications Preview Audience Users Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/email-notifications/{notification_id}":{"get":{"tags":["Admin APIs","email-notifications"],"summary":"Get Email Notification","operationId":"get_email_notification_api_v1_admin_email_notifications__notification_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin APIs","email-notifications"],"summary":"Update Email Notification","operationId":"update_email_notification_api_v1_admin_email_notifications__notification_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailNotificationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin APIs","email-notifications"],"summary":"Delete Email Notification","operationId":"delete_email_notification_api_v1_admin_email_notifications__notification_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-notifications/{notification_id}/send":{"post":{"tags":["Admin APIs","email-notifications"],"summary":"Send Email Notification","operationId":"send_email_notification_api_v1_admin_email_notifications__notification_id__send_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-notifications/{notification_id}/resend-failed":{"post":{"tags":["Admin APIs","email-notifications"],"summary":"Resend Failed Email Notification","operationId":"resend_failed_email_notification_api_v1_admin_email_notifications__notification_id__resend_failed_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/email-notifications/{notification_id}/recipients":{"get":{"tags":["Admin APIs","email-notifications"],"summary":"List Email Notification Recipients","operationId":"list_email_notification_recipients_api_v1_admin_email_notifications__notification_id__recipients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailNotificationRecipientResponse"},"title":"Response List Email Notification Recipients Api V1 Admin Email Notifications  Notification Id  Recipients Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/onboarding":{"get":{"tags":["Admin APIs","enterprise-onboarding"],"summary":"Get Client Onboarding","operationId":"get_client_onboarding_api_v1_admin_clients__client_id__onboarding_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOnboardingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/clients/{client_id}/onboarding/steps/{step_number}/complete":{"post":{"tags":["Admin APIs","enterprise-onboarding"],"summary":"Complete Onboarding Step","operationId":"complete_onboarding_step_api_v1_admin_clients__client_id__onboarding_steps__step_number__complete_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"step_number","in":"path","required":true,"schema":{"type":"integer","title":"Step Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientOnboardingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ontology/csv-drafter/parse":{"post":{"tags":["Admin APIs","ontology-csv-drafter"],"summary":"Parse Csv","description":"Parse and validate a CSV file for the ontology CSV drafter.","operationId":"parse_csv_api_v1_admin_ontology_csv_drafter_parse_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_parse_csv_api_v1_admin_ontology_csv_drafter_parse_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/ontology/entity-context/{entity_id}/insights":{"get":{"tags":["Admin APIs","ontology-entity-context"],"summary":"Get Entity Insights","operationId":"get_entity_insights_api_v1_admin_ontology_entity_context__entity_id__insights_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Id"}},{"name":"entity_representation","in":"query","required":true,"schema":{"type":"string","description":"Entity representation, e.g. 'company'","title":"Entity Representation"},"description":"Entity representation, e.g. 'company'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/maintenance":{"put":{"tags":["Admin APIs","maintenance"],"summary":"Set Platform Maintenance Mode","description":"Enable or disable platform maintenance mode.\n\nWhen enabled, power-ui shows the maintenance screen to all visitors.\nRequires the ``maintenance-mode`` permission (or super admin).","operationId":"set_platform_maintenance_mode_api_v1_admin_maintenance_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformMaintenanceModeUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformMaintenanceModeRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/load-test/health":{"get":{"tags":["Super Admin APIs","load-testing"],"summary":"Load Test Health","operationId":"load_test_health_api_v1_admin_load_test_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/load-test/enqueue-task":{"post":{"tags":["Super Admin APIs","load-testing"],"summary":"Enqueue Task","description":"Enqueue a Celery task by name. Returns the async task_id for polling.","operationId":"enqueue_task_api_v1_admin_load_test_enqueue_task_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueueRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/load-test/task-status/{task_id}":{"get":{"tags":["Super Admin APIs","load-testing"],"summary":"Get Task Status","description":"Poll Celery task status by task_id.","operationId":"get_task_status_api_v1_admin_load_test_task_status__task_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/load-test/signup-provisioning/seed":{"post":{"tags":["Super Admin APIs","load-testing"],"summary":"Seed Signup Provisioning","description":"Insert a **PAID** ``pending_signups`` row plus Stripe-shaped ``stripe_subscription_data``,\noptionally synthetic events and an async ``task_signup_provisioning`` run.\n\nRequires Stripe test credentials and signup plan config that match ``selected_plan_id`` so\nprovisioning can call Stripe (e.g. ``Price.retrieve``, ``upsert_plan_from_strip_subscription``).","operationId":"seed_signup_provisioning_api_v1_admin_load_test_signup_provisioning_seed_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSignupProvisioningFixtureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSignupProvisioningFixtureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/admin/load-test/signup-provisioning/status":{"get":{"tags":["Super Admin APIs","load-testing"],"summary":"Get Signup Provisioning Status","description":"Resolve a signup by **exactly one** of ``session_id`` or ``email`` and return status plus\na compact provisioning timeline derived from events and step rows.\n\nCelery retry counts are not stored on the signup; use admin retry events and\n``/load-test/task-status/{task_id}`` when you enqueue with a returned task id.","operationId":"get_signup_provisioning_status_api_v1_admin_load_test_signup_provisioning_status_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"include_events","in":"query","required":false,"schema":{"type":"boolean","description":"Include full pending_signup_events list","default":false,"title":"Include Events"},"description":"Include full pending_signup_events list"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoadTestSignupProvisioningStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/portal/transcripts-upload/transcripts":{"get":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"List own submissions","description":"Return transcripts submitted by the current portal user.\n\nAdmin users see all transcripts; portal users see only their own.","operationId":"list_own_transcripts_api_v1_portal_transcripts_upload_transcripts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortalTranscriptListItem"},"type":"array","title":"Response List Own Transcripts Api V1 Portal Transcripts Upload Transcripts Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"Upload a transcript draft","description":"Accept a .txt transcript upload from a portal user and create a Draft.","operationId":"upload_transcript_api_v1_portal_transcripts_upload_transcripts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalTranscriptUploadRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalTranscriptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/portal/transcripts-upload/transcripts/{transcript_id}":{"get":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"Get own submission for editing","operationId":"get_own_transcript_api_v1_portal_transcripts_upload_transcripts__transcript_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalTranscriptDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"Correct title/description/entities/region on own submission","operationId":"update_own_transcript_api_v1_portal_transcripts_upload_transcripts__transcript_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"transcript_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transcript Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalTranscriptMetadataUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalTranscriptDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/portal/transcripts-upload/entities":{"get":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"Search ontology entities","description":"Return ontology entities matching the search query (combobox data source).","operationId":"search_entities_api_v1_portal_transcripts_upload_entities_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Search Entities Api V1 Portal Transcripts Upload Entities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/portal/transcripts-upload/regions":{"get":{"tags":["Portal APIs","portal-transcripts-upload"],"summary":"List valid regions","description":"Return the allowed region values for the upload form dropdown.","operationId":"list_regions_api_v1_portal_transcripts_upload_regions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Regions Api V1 Portal Transcripts Upload Regions Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/system/maintenance":{"get":{"tags":["System"],"summary":"Get Platform Maintenance Mode","description":"Return the current platform maintenance mode status.\n\nThis endpoint requires no authentication so that power-ui can check\nmaintenance state before any user session is established.","operationId":"get_platform_maintenance_mode_api_v1_system_maintenance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformMaintenanceModeRead"}}}}}}},"/api/v1/auth/suspension-status":{"get":{"tags":["User APIs","auth"],"summary":"Get Suspension Status","description":"Check if the current user's client is suspended.\n\nCall this on first app load so the frontend can show a suspended state\nwithout waiting for a 403 on other APIs. This endpoint is not blocked\nfor suspended users (unlike protected user APIs).","operationId":"get_suspension_status_api_v1_auth_suspension_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspensionStatusResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/auth/products/{product_id}/authorize":{"post":{"tags":["User APIs","auth"],"summary":"Authorize Product User","operationId":"authorize_product_user_api_v1_auth_products__product_id__authorize_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizeProductUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizedUser"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/authorize":{"post":{"tags":["User APIs","auth"],"summary":"Authorize","operationId":"authorize_api_v1_auth_authorize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorizedUser"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]},{"Client Id":[]}]}},"/api/v1/auth/cookie/set":{"post":{"tags":["User APIs","auth"],"summary":"Set Auth Cookie","operationId":"set_auth_cookie_api_v1_auth_cookie_set_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/auth/cookie/clear":{"post":{"tags":["User APIs","auth"],"summary":"Clear Auth Cookie","operationId":"clear_auth_cookie_api_v1_auth_cookie_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/auth/signup/initiate":{"post":{"tags":["User APIs","auth"],"summary":"Initiate Signup","description":"Start a new signup session.\n\n- Validates password / plan / subscription_period at the schema layer\n- Rejects emails already registered as real users\n- Stages an Okta user (activate=false) so Okta's password-policy checks\n  surface synchronously\n- Creates a PendingSignup in DRAFT with the staged okta_user_id, issues a\n  verification code, sends the verification email, and transitions to\n  EMAIL_VERIFICATION_IN_PROGRESS.","operationId":"initiate_signup_api_v1_auth_signup_initiate_post","parameters":[{"name":"x-captcha-token","in":"header","required":true,"schema":{"type":"string","title":"X-Captcha-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInitiateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInitiateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/email-verification/verify":{"post":{"tags":["User APIs","auth"],"summary":"Verify Email Code","description":"Verify an email verification code submitted by the user in the onboarding UI.\nOn success transitions the signup to EMAIL_VERIFICATION_VERIFIED so payment\ncan begin.","operationId":"verify_email_code_api_v1_auth_signup__session_id__email_verification_verify_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/email-verification/resend":{"post":{"tags":["User APIs","auth"],"summary":"Resend Email Verification","description":"Generate a fresh code and re-send the verification email.","operationId":"resend_email_verification_api_v1_auth_signup__session_id__email_verification_resend_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerificationResendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/checkout/create":{"post":{"tags":["User APIs","auth"],"summary":"Create Checkout Session","description":"Create Stripe Checkout session.\n\nValidates:\n- Status is EMAIL_VERIFICATION_VERIFIED or PAYMENT_FAILED (allows retry)\n- Creates Stripe Checkout session for subscription","operationId":"create_checkout_session_api_v1_auth_signup__session_id__checkout_create_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CheckoutInitiateData"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupCheckoutCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/billing-portal":{"post":{"tags":["User APIs","auth"],"summary":"Create Signup Billing Portal","description":"Create a Stripe Billing Portal session for a signup in payment_failed state.\nThe frontend should pass return_url that includes the signup session_id so\nwhen the user returns from the portal they can poll GET /signup/{session_id}/status.","operationId":"create_signup_billing_portal_api_v1_auth_signup__session_id__billing_portal_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupBillingPortalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupBillingPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/status":{"get":{"tags":["User APIs","auth"],"summary":"Get Signup Status","description":"Get signup status by session_id.\n\nOptimized for long polling - uses minimal database query\n\nReturns 404 if signup not found.","operationId":"get_signup_status_api_v1_auth_signup__session_id__status_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/{session_id}/is-complete":{"get":{"tags":["User APIs","auth"],"summary":"Is Signup Complete","description":"Check if signup is complete by checking if a signup_completed event exists.","operationId":"is_signup_complete_api_v1_auth_signup__session_id__is_complete_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/wholesale/{token}":{"get":{"tags":["User APIs","auth"],"summary":"Get Wholesale Signup Link","description":"Resolve a distributor signup link for the landing page: the distributor\nname, the allowed email domains, and the click-through TOU to display.","operationId":"get_wholesale_signup_link_api_v1_auth_signup_wholesale__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional - when supplied, the email-domain gate is checked","title":"Email"},"description":"Optional - when supplied, the email-domain gate is checked"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WholesaleSignupLinkPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/wholesale/initiate":{"post":{"tags":["User APIs","auth"],"summary":"Initiate Wholesale Signup","description":"Redeem a signup link and start a wholesale signup session. Validates the\nlink (active, unexpired, capacity) and the email domain, then stages the\nsigner and sends the email verification code.","operationId":"initiate_wholesale_signup_api_v1_auth_signup_wholesale_initiate_post","parameters":[{"name":"x-captcha-token","in":"header","required":true,"schema":{"type":"string","title":"X-Captcha-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WholesaleSignupInitiateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupInitiateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/wholesale/{session_id}/complete":{"post":{"tags":["User APIs","auth"],"summary":"Complete Wholesale Signup","description":"Provision the wholesale account from the redeemed slot. Call after the\nemail is verified; there is no payment step. Idempotent - a completed\nsession returns success without re-provisioning.","operationId":"complete_wholesale_signup_api_v1_auth_signup_wholesale__session_id__complete_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/me/customer-portal":{"get":{"tags":["User APIs","payments"],"summary":"Get Customer Portal Url","operationId":"get_customer_portal_url_api_v1_payments_me_customer_portal_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"enum":["payment_method_update","subscription_cancel","subscription_update","billing_update"],"type":"string","description":"Type of customer portal session","title":"Type"},"description":"Type of customer portal session"},{"name":"return_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL to redirect to after the customer portal session","title":"Return Url"},"description":"URL to redirect to after the customer portal session"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/plans/available":{"get":{"tags":["User APIs","payments"],"summary":"Get Available Plans","description":"Return plan tiers available for subscription / reactivation.","operationId":"get_available_plans_api_v1_payments_plans_available_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePlansResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/payments/me/reactivate":{"post":{"tags":["User APIs","payments"],"summary":"Reactivate Subscription","description":"Create a Stripe Checkout Session for subscription reactivation.\n\nThe user picks a plan tier and billing period; this endpoint resolves the\nStripe price, creates a hosted Checkout Session (pre-filling saved payment\nmethods when possible), and returns the redirect URL.","operationId":"reactivate_subscription_api_v1_payments_me_reactivate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactivateSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactivationCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/legal/tou/latest":{"get":{"tags":["User APIs","Legal"],"summary":"Get Latest Tou","description":"Get the latest published TOU version. Returns null if no TOU exists.","operationId":"get_latest_tou_api_v1_legal_tou_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LatestSignupTOUVersionResponse"},{"type":"null"}],"title":"Response Get Latest Tou Api V1 Legal Tou Latest Get"}}}}}}},"/api/v1/legal/tou/accept":{"post":{"tags":["User APIs","Legal"],"summary":"Accept Tou","description":"Accept a specific TOU version. Creates or updates the user's acceptance record.","operationId":"accept_tou_api_v1_legal_tou_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupTOUAcceptanceRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/legal/tou/report-load-failure":{"post":{"tags":["User APIs","Legal"],"summary":"Report Tou Load Failure","operationId":"report_tou_load_failure_api_v1_legal_tou_report_load_failure_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/legal/privacy-policy/latest":{"get":{"tags":["User APIs","Legal"],"summary":"Get Latest Privacy Policy","description":"Get the latest published privacy policy version. Returns null if none exists.","operationId":"get_latest_privacy_policy_api_v1_legal_privacy_policy_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LatestPrivacyPolicyVersionResponse"},{"type":"null"}],"title":"Response Get Latest Privacy Policy Api V1 Legal Privacy Policy Latest Get"}}}}}}},"/api/v1/featured/featured-items":{"get":{"tags":["User APIs","featured"],"summary":"Get Featured Items","description":"Get IDs of all active featured entities and insights for user portal","operationId":"get_featured_items_api_v1_featured_featured_items_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedItemsResponse"}}}}}}},"/api/v1/featured/entities":{"get":{"tags":["User APIs","featured"],"summary":"Get Featured Entities","description":"Get all featured entities for user portal","operationId":"get_featured_entities_api_v1_featured_entities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FeaturedEntityRead"},"type":"array","title":"Response Get Featured Entities Api V1 Featured Entities Get"}}}}}}},"/api/v1/featured/insights":{"get":{"tags":["User APIs","featured"],"summary":"Get Featured Insights","description":"Get all featured insights for user portal","operationId":"get_featured_insights_api_v1_featured_insights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"integer"},"type":"array","title":"Response Get Featured Insights Api V1 Featured Insights Get"}}}}}}},"/api/v1/tags":{"get":{"tags":["User APIs","tags"],"summary":"Get Tags","operationId":"get_tags_api_v1_tags_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Filter by type","title":"Type"},"description":"Filter by type"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/me/m2m/client-info":{"get":{"tags":["User APIs","mcp"],"summary":"Get Client Info","description":"Get the user info for a given product. This API is used for API token validation in products like Platform, MCP, etc.\nUser info includes feature flags, providers access, unmetered providers, role with permissions, and features.","operationId":"get_client_info_api_v1_mcp_me_m2m_client_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientInfoResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/me/profile":{"get":{"tags":["User APIs","users"],"summary":"Get User Profile","operationId":"get_user_profile_api_v1_users_me_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/username-availability":{"get":{"tags":["User APIs","users"],"summary":"Check Username Availability","operationId":"check_username_availability_api_v1_users_username_availability_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":30,"title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameAvailabilityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/username-lookup":{"get":{"tags":["User APIs","users"],"summary":"Lookup Usernames By Emails","description":"Return {email: username} for the given emails across all clients.\n\nUsername is a globally-unique public identifier (see username-availability),\nso cross-client exposure is intentional. Missing users map to null.","operationId":"lookup_usernames_by_emails_api_v1_users_username_lookup_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"emails","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[],"title":"Emails"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/products/{product_id}/feature-access":{"get":{"tags":["User APIs","users"],"summary":"Get User Features Access","operationId":"get_user_features_access_api_v1_users_me_products__product_id__feature_access_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get User Features Access Api V1 Users Me Products  Product Id  Feature Access Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/features/{feature_key}/element-access":{"get":{"tags":["User APIs","users"],"summary":"Get User Feature Elements Access","operationId":"get_user_feature_elements_access_api_v1_users_me_features__feature_key__element_access_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"feature_key","in":"path","required":true,"schema":{"type":"string","title":"Feature Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get User Feature Elements Access Api V1 Users Me Features  Feature Key  Element Access Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/provider-accesses":{"get":{"tags":["User APIs","users"],"summary":"Get User Provider Accesses","operationId":"get_user_provider_accesses_api_v1_users_me_provider_accesses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get User Provider Accesses Api V1 Users Me Provider Accesses Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/me/track-action":{"post":{"tags":["User APIs","users"],"summary":"Track User Action","operationId":"track_user_action_api_v1_users_me_track_action_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActionLogCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/me/products/{product_id}/team":{"get":{"tags":["User APIs","users"],"summary":"Get User Team","operationId":"get_user_team_api_v1_users_me_products__product_id__team_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/products/{product_id}/user-info":{"get":{"tags":["User APIs","users"],"summary":"Get User Info","description":"Get the user info for a given product. This API is used for API token validation in products like Platform, MCP, etc.\nUser info includes feature flags, providers access, unmetered providers, role with permissions, and features.","operationId":"get_user_info_api_v1_users_me_products__product_id__user_info_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/products/{product_id}/user-info-from-id-token":{"get":{"tags":["User APIs","users"],"summary":"Get User Info From Id Token Endpoint","description":"Get the user info for a given product using an Okta ID token.\n\nThis endpoint is designed for OpenBB workspace integration where the ID token\nis passed in the Authorization Bearer header.\n\nArgs:\n    product_id: The product UUID\n    Authorization: Bearer {id_token} header (handled by get_user_from_id_token dependency)\n\nReturns:\n    UserInfoResponse with full user details including feature flags, permissions, etc.","operationId":"get_user_info_from_id_token_endpoint_api_v1_users_me_products__product_id__user_info_from_id_token_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/self/client/users-from-id-token":{"get":{"tags":["User APIs","users"],"summary":"Get Client Users From Id Token","description":"Return paginated users for the caller's client, authenticated via Okta ID token.\n\nAccepts the Okta ID token in the Authorization Bearer header, allowing\nintegrations such as OpenBB workspace widgets to retrieve team members\nwithout requiring a regular API key / Bearer token.\n\nNote: require_permissions cannot be used here as a route dependency because\nit internally calls get_user_from_token (regular JWT Bearer), which rejects\nOkta ID tokens. The same permission gate is applied inline instead.","operationId":"get_client_users_from_id_token_api_v1_users_self_client_users_from_id_token_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUsersRoleOnlyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/self/info":{"patch":{"tags":["User APIs","users"],"summary":"Update User Info","operationId":"update_user_info_api_v1_users_self_info_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserInfo"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/data-collection-consent":{"patch":{"tags":["User APIs","users"],"summary":"Update Data Collection Consent","operationId":"update_data_collection_consent_api_v1_users_self_data_collection_consent_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDataCollectionConsent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataCollectionConsentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/sample-catalog-disclaimer/accept":{"post":{"tags":["User APIs","users"],"summary":"Accept Sample Catalog Disclaimer","operationId":"accept_sample_catalog_disclaimer_api_v1_users_self_sample_catalog_disclaimer_accept_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleCatalogDisclaimerResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/marketing-preferences":{"get":{"tags":["User APIs","users"],"summary":"Get Marketing Preferences","operationId":"get_marketing_preferences_api_v1_users_self_marketing_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"put":{"tags":["User APIs","users"],"summary":"Update Marketing Preferences","operationId":"update_marketing_preferences_api_v1_users_self_marketing_preferences_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingPreferencesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/role":{"get":{"tags":["User APIs","users"],"summary":"Get User Role","operationId":"get_user_role_api_v1_users_self_role_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get User Role Api V1 Users Self Role Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/role-from-id-token":{"get":{"tags":["User APIs","users"],"summary":"Get User Role From Id Token","description":"Return the role for the authenticated user using an Okta ID token.\n\nAccepts the Okta ID token in the Authorization Bearer header.  Mirrors\n/self/role but uses the Okta ID token issuer so that integrations such\nas OpenBB workspace widgets can check the caller's role without a\nregular API Bearer token.\n\nNote: require_permissions cannot be used here as a route dependency\nbecause it internally calls get_user_from_token (regular JWT Bearer),\nwhich rejects Okta ID tokens.  The role response is inherently tied to\nthe authenticated user, so no additional permission gate is needed.","operationId":"get_user_role_from_id_token_api_v1_users_self_role_from_id_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get User Role From Id Token Api V1 Users Self Role From Id Token Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/{user_id}/role":{"put":{"tags":["User APIs","users"],"summary":"Update User Role","operationId":"update_user_role_api_v1_users__user_id__role_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/block-role":{"put":{"tags":["User APIs","users"],"summary":"Update User Block Role","description":"Set or clear the additive Block role (block_user / block_admin) on\na user. ``block_role = null`` unsets it. The enum type on the DB\ncolumn rejects any value outside the two valid enum members, so no\nextra application-level validation is needed.","operationId":"update_user_block_role_api_v1_users__user_id__block_role_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBlockRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/self/interests":{"get":{"tags":["User APIs","users"],"summary":"Get User Interests","operationId":"get_user_interests_api_v1_users_self_interests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserInterestRead"},"type":"array","title":"Response Get User Interests Api V1 Users Self Interests Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"patch":{"tags":["User APIs","users"],"summary":"Update User Interests","operationId":"update_user_interests_api_v1_users_self_interests_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterestsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/api-tokens/regenerate":{"post":{"tags":["User APIs","users"],"summary":"Regenerate User Api Tokens","operationId":"regenerate_user_api_tokens_api_v1_users_self_api_tokens_regenerate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/reset-password":{"post":{"tags":["User APIs","users"],"summary":"Reset My Password","description":"Trigger a password reset email for the currently authenticated user.\nRate-limited to prevent abuse.","operationId":"reset_my_password_api_v1_users_self_reset_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/me/reset-password":{"post":{"tags":["User APIs","users"],"summary":"Reset My Password","description":"Trigger a password reset email for the currently authenticated user.\nRate-limited to prevent abuse.","operationId":"reset_my_password_api_v1_users_me_reset_password_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/{user_id}/transaction-limit/{transaction_limit}":{"patch":{"tags":["User APIs","users"],"summary":"Update User Transaction Limit","description":"Update user transaction limit","operationId":"update_user_transaction_limit_api_v1_users__user_id__transaction_limit__transaction_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"transaction_limit","in":"path","required":true,"schema":{"type":"string","title":"Transaction Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/total-consumption-limit/{allocated_amount}":{"patch":{"tags":["User APIs","users"],"summary":"Update User Allocated Amount","description":"Update user wallet allocation","operationId":"update_user_allocated_amount_api_v1_users__user_id__total_consumption_limit__allocated_amount__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"allocated_amount","in":"path","required":true,"schema":{"type":"string","title":"Allocated Amount"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/mcp-daily-limit/{mcp_daily_limit}":{"patch":{"tags":["User APIs","users"],"summary":"Update User Mcp Daily Limit","description":"Update user MCP daily token limit.\n\nAccepts a float value or the string \"null\" to remove the limit.\nThe new limit cannot exceed the group's mcp_period_limit if one is set.","operationId":"update_user_mcp_daily_limit_api_v1_users__user_id__mcp_daily_limit__mcp_daily_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"mcp_daily_limit","in":"path","required":true,"schema":{"type":"string","title":"Mcp Daily Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/bulk/mcp-daily-limit":{"post":{"tags":["User APIs","users"],"summary":"Bulk Update Mcp Daily Limit","description":"Bulk-set the MCP daily limit for multiple users.\n\nSkips users whose new limit would exceed their group's mcp_period_limit.\nReturns a summary with updated count and skipped users with reasons.","operationId":"bulk_update_mcp_daily_limit_api_v1_users_bulk_mcp_daily_limit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__routers__user_routers__users__BulkMcpDailyLimitRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/bulk/mcp-access/revoke":{"post":{"tags":["User APIs","users"],"summary":"Bulk Revoke Own User Mcp Access","description":"Bulk-revoke MCP access for multiple team members (Client Admin self-service).","operationId":"bulk_revoke_own_user_mcp_access_api_v1_users_bulk_mcp_access_revoke_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMcpAccessRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/bulk/mcp-access/restore":{"post":{"tags":["User APIs","users"],"summary":"Bulk Restore Own User Mcp Access","description":"Bulk-restore MCP access for multiple team members (Client Admin self-service).","operationId":"bulk_restore_own_user_mcp_access_api_v1_users_bulk_mcp_access_restore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMcpAccessRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/{user_id}/mcp-access/revoke":{"post":{"tags":["User APIs","users"],"summary":"Revoke Own User Mcp Access","description":"Revoke a team member's MCP access (Client Admin self-service).","operationId":"revoke_own_user_mcp_access_api_v1_users__user_id__mcp_access_revoke_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/mcp-access/restore":{"post":{"tags":["User APIs","users"],"summary":"Restore Own User Mcp Access","description":"Restore a team member's MCP access (Client Admin self-service).\n\nA no-op (reported, not a hard error) if the user's Group still has MCP\naccess revoked — see ProductAccessService.restore_user.","operationId":"restore_own_user_mcp_access_api_v1_users__user_id__mcp_access_restore_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/consumption/reset":{"post":{"tags":["User APIs","users"],"summary":"Reset User Consumption","description":"Close the user's ongoing consumption cycle and open a new one (reset to 0).","operationId":"reset_user_consumption_api_v1_users__user_id__consumption_reset_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing or invalid authentication credentials."},"403":{"description":"You are not allowed to perform this action."},"404":{"description":"Target user not found in the caller's client."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/consumption/cycles":{"get":{"tags":["User APIs","users"],"summary":"Get User Consumption Cycles","description":"Return all consumption reset cycles for a user, newest first.","operationId":"get_user_consumption_cycles_api_v1_users__user_id__consumption_cycles_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumptionCyclesResponse"}}}},"401":{"description":"Missing or invalid authentication credentials."},"403":{"description":"You are not allowed to perform this action."},"404":{"description":"Target user not found in the caller's client."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/group/{group_id}":{"patch":{"tags":["User APIs","users"],"summary":"Update User Group","description":"Update user group","operationId":"update_user_group_api_v1_users__user_id__group__group_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing or invalid authentication credentials."},"403":{"description":"You are not allowed to perform this action."},"404":{"description":"Target user not found in the caller's client."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/self/onboarding/{status}":{"patch":{"tags":["User APIs","users"],"summary":"Update User Onboarding","description":"Update user onboarding status","operationId":"update_user_onboarding_api_v1_users_self_onboarding__status__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"status","in":"path","required":true,"schema":{"enum":["started","completed"],"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/self/profile":{"patch":{"tags":["User APIs","users"],"summary":"Update User Profile","operationId":"update_user_profile_api_v1_users_self_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/add-user":{"post":{"tags":["User APIs","users"],"summary":"Add User","operationId":"add_user_api_v1_users_self_add_user_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddUser"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/users/self/add-users":{"post":{"tags":["User APIs","users"],"summary":"Add Users","description":"Add multiple users to the team","operationId":"add_users_api_v1_users_self_add_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAddUsers"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/users":{"get":{"tags":["User APIs","clients"],"summary":"Get Client Users","operationId":"get_client_users_api_v1_clients_self_users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":10000,"title":"Size"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"created_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(asc|desc)$"},{"type":"null"}],"default":"desc","title":"Sort Order"}},{"name":"filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"{}","title":"Filters"}},{"name":"pre_load","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":["role","client","group","current_consumption"],"title":"Pre Load"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/self/users/{user_id}":{"put":{"tags":["User APIs","clients"],"summary":"Update User","operationId":"update_user_api_v1_clients_self_users__user_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActiveUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoWithRoleStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/self/users/{user_id}/deactivate":{"put":{"tags":["User APIs","clients"],"summary":"Deactivate User","operationId":"deactivate_user_api_v1_clients_self_users__user_id__deactivate_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActiveUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoWithRoleStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/self/delta-sharing":{"get":{"tags":["User APIs","clients"],"summary":"Get Delta Sharing","operationId":"get_delta_sharing_api_v1_clients_self_delta_sharing_get","responses":{"200":{"description":"Json file","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/provider-accesses":{"get":{"tags":["User APIs","clients"],"summary":"Get Client Provider Accesses","operationId":"get_client_provider_accesses_api_v1_clients_self_provider_accesses_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":10,"title":"Size"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(asc|desc)$"},{"type":"null"}],"default":"desc","title":"Sort Order"}},{"name":"filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"{}","title":"Filters"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedClientProviderAccess"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/self/provider-accesses/{provider_id}":{"put":{"tags":["User APIs","clients"],"summary":"Update Client Provider Access","operationId":"update_client_provider_access_api_v1_clients_self_provider_accesses__provider_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProviderAccessUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/clients/self/day-lag":{"get":{"tags":["User APIs","clients"],"summary":"Get Client Day Lag","operationId":"get_client_day_lag_api_v1_clients_self_day_lag_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["User APIs","clients"],"summary":"Update Client Day Lag","operationId":"update_client_day_lag_api_v1_clients_self_day_lag_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientProviderDayLagUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/row-limit":{"get":{"tags":["User APIs","clients"],"summary":"Get Row Limit","operationId":"get_row_limit_api_v1_clients_self_row_limit_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowLimitResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/unmetered-sources":{"get":{"tags":["User APIs","clients"],"summary":"Get Client Unmetered Sources","operationId":"get_client_unmetered_sources_api_v1_clients_unmetered_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Client Unmetered Sources Api V1 Clients Unmetered Sources Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/invoices":{"get":{"tags":["User APIs","clients"],"summary":"Get Client Invoices","description":"Get all Stripe invoices for the authenticated client.\nReturns invoice details including status, amount, token information, and payment URLs.\n\nThis endpoint uses StripeInvoiceService to retrieve invoices from the database\nthat were created through the Stripe payment gateway.","operationId":"get_client_invoices_api_v1_clients_self_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicesResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/recurring-token-grant-schedules":{"get":{"tags":["User APIs","clients"],"summary":"Get Recurring Token Grant Schedules","operationId":"get_recurring_token_grant_schedules_api_v1_clients_self_recurring_token_grant_schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RecurringGrantScheduleResponse"},"type":"array","title":"Response Get Recurring Token Grant Schedules Api V1 Clients Self Recurring Token Grant Schedules Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/clients/self/scheduled-transactions":{"get":{"tags":["User APIs","clients"],"summary":"Get Scheduled Transactions","description":"Get scheduled transactions for the authenticated client.\n\nIncludes recurring token grant schedules and one-time future-effective grants.","operationId":"get_scheduled_transactions_api_v1_clients_self_scheduled_transactions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ScheduledTransactionResponse"},"type":"array","title":"Response Get Scheduled Transactions Api V1 Clients Self Scheduled Transactions Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/roles":{"get":{"tags":["User APIs","roles"],"summary":"Get Roles","operationId":"get_roles_api_v1_roles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RolePreview"},"type":"array","title":"Response Get Roles Api V1 Roles Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/groups/groups-by-client":{"get":{"tags":["User APIs","groups"],"summary":"Get Client Groups","description":"Get client groups with pagination, sorting and filtering.\n\nOmit ``size`` to return all groups without pagination.","operationId":"get_client_groups_api_v1_groups_groups_by_client_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"{}","title":"Filters"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Size"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"created_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(asc|desc)$"},{"type":"null"}],"default":"desc","title":"Sort Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedGroupsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}":{"get":{"tags":["User APIs","groups"],"summary":"Get Group","description":"Get a single group with full computed MCP fields (consumption, next reset date).","operationId":"get_group_api_v1_groups__group_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["User APIs","groups"],"summary":"Delete Group","description":"Delete a group\n\nNote:\n- Default groups cannot be deleted to prevent issues with new user assignments.\n  If you need to delete a default group, first set another group as default.\n- Groups with users assigned cannot be deleted. Please reassign or remove all users first.","operationId":"delete_group_api_v1_groups__group_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/set-default":{"patch":{"tags":["User APIs","groups"],"summary":"Set Default Group","description":"Set group as default","operationId":"set_default_group_api_v1_groups__group_id__set_default_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/transaction-limit/{transaction_limit}":{"patch":{"tags":["User APIs","groups"],"summary":"Update Group Transaction Limit","description":"Update group transaction limit","operationId":"update_group_transaction_limit_api_v1_groups__group_id__transaction_limit__transaction_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"transaction_limit","in":"path","required":true,"schema":{"type":"string","title":"Transaction Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/allocated-amount/{allocated_amount}":{"patch":{"tags":["User APIs","groups"],"summary":"Update Group Allocated Amount","description":"Update group wallet allocation","operationId":"update_group_allocated_amount_api_v1_groups__group_id__allocated_amount__allocated_amount__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"allocated_amount","in":"path","required":true,"schema":{"type":"string","title":"Allocated Amount"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/mcp-period-limit/{mcp_period_limit}":{"patch":{"tags":["User APIs","groups"],"summary":"Update Group Mcp Period Limit","description":"Update group MCP collective period limit.\n\nAccepts a float value or \"null\" to remove the limit.\n\nCycle rules:\n- First time a limit is set: mcp_period_start_date = now, mcp_period_reset_date = now + 1 day.\n- Updating an existing limit: preserves cycle dates (no restart).\n- Removing the limit (\"null\"): clears both cycle dates.","operationId":"update_group_mcp_period_limit_api_v1_groups__group_id__mcp_period_limit__mcp_period_limit__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"mcp_period_limit","in":"path","required":true,"schema":{"type":"string","title":"Mcp Period Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/":{"post":{"tags":["User APIs","groups"],"summary":"Create Group","description":"Create new group, optionally setting its MCP period limit, MCP access\nand Block role in the same request.","operationId":"create_group_api_v1_groups__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/groups/{group_id}/block-role":{"patch":{"tags":["User APIs","groups"],"summary":"Update Group Block Role","description":"Set or clear a group's additive Block role (block_user / block_admin).\n\nReuses the ``UserBlockRoleUpdate`` schema because the shape is\nidentical — both set ``block_role`` on their entity. The Postgres enum\nrejects unknown values, so no extra validation is needed.","operationId":"update_group_block_role_api_v1_groups__group_id__block_role_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBlockRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/mcp-access/revoke":{"post":{"tags":["User APIs","groups"],"summary":"Revoke Own Group Mcp Access","description":"Revoke MCP access for an entire Group (Client Admin self-service).","operationId":"revoke_own_group_mcp_access_api_v1_groups__group_id__mcp_access_revoke_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/groups/{group_id}/mcp-access/restore":{"post":{"tags":["User APIs","groups"],"summary":"Restore Own Group Mcp Access","description":"Restore MCP access for an entire Group (Client Admin self-service).\n\nIndividually-revoked members stay revoked — see ProductAccessService.restore_group.","operationId":"restore_own_group_mcp_access_api_v1_groups__group_id__mcp_access_restore_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/me/balance":{"get":{"tags":["User APIs","payments"],"summary":"Get Client Balance","description":"Get client balance with wallet details (from ledger).","operationId":"get_client_balance_api_v1_payments_me_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientBalanceResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/payments/balance-summary":{"get":{"tags":["User APIs","payments"],"summary":"Get Expiry Schedule With Balance","description":"Get token expiry schedule (excluding MCP tokens) with balance summary (from ledger).","operationId":"get_expiry_schedule_with_balance_api_v1_payments_balance_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenExpiryScheduleWithBalanceResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/transactions/platform":{"get":{"tags":["User APIs","ledger-platform"],"summary":"List Platform Transactions","description":"List ledger transactions for the authenticated client — platform scope.\n\nExcludes rows with future effective_at (only currently effective transactions).","operationId":"list_platform_transactions_api_v1_ledger_transactions_platform_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of records to return","default":100,"title":"Limit"},"description":"Number of records to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedCreditEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ledger/transactions/mcp":{"get":{"tags":["User APIs","ledger-platform"],"summary":"List Mcp Transactions","description":"List MCP integration ledger transactions for the authenticated client.","operationId":"list_mcp_transactions_api_v1_ledger_transactions_mcp_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of records to return","default":100,"title":"Limit"},"description":"Number of records to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedCreditEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ledger/wallet-summary":{"get":{"tags":["User APIs","ledger-platform"],"summary":"Get Wallet Summary","description":"Get wallet summary for the authenticated client (ledger-native shape).","operationId":"get_wallet_summary_api_v1_ledger_wallet_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerWalletSummaryResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/mcp/daily-window":{"get":{"tags":["User APIs","ledger-platform"],"summary":"Get Mcp Daily Window","description":"MCP daily issuance cap, balance, and today's activity (MCP timezone window).","operationId":"get_mcp_daily_window_api_v1_ledger_mcp_daily_window_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpDailyWindowResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/s3/summary":{"get":{"tags":["User APIs","ledger-platform"],"summary":"Get S3 Summary","description":"The S3 wallet tiles and apply header.\n\nAllocated / Accrued / Consumed / Available, plus reserved and remaining — what is\nalready applied to upcoming invoices and what is left after it.","operationId":"get_s3_summary_api_v1_ledger_s3_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3BalanceSummaryResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/s3/vesting-schedule":{"get":{"tags":["User APIs","ledger-platform"],"summary":"Get S3 Vesting Schedule","description":"One row per grant: award date, status, progress, and the next vest.","operationId":"get_s3_vesting_schedule_api_v1_ledger_s3_vesting_schedule_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/S3GrantBalanceRow"},"type":"array","title":"Response Get S3 Vesting Schedule Api V1 Ledger S3 Vesting Schedule Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/transactions/s3":{"get":{"tags":["User APIs","ledger-platform"],"summary":"List S3 Transactions","description":"Activity History: accruals and consumptions, newest first.\n\nMirrors ``/transactions/mcp`` in shape and placement. The totals are lifetime figures\nrather than page sums, so the header agrees with the wallet tiles at any page size.","operationId":"list_s3_transactions_api_v1_ledger_transactions_s3_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of events to return","default":100,"title":"Limit"},"description":"Number of events to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3ActivityFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ledger/s3/upcoming-invoices":{"get":{"tags":["User APIs","ledger-platform"],"summary":"List S3 Upcoming Invoices","description":"The Next Billing apply surface: one row per upcoming Block invoice.","operationId":"list_s3_upcoming_invoices_api_v1_ledger_s3_upcoming_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3UpcomingInvoicesResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/s3/apply":{"post":{"tags":["User APIs","ledger-platform"],"summary":"Apply S3 Tokens","description":"Apply tokens to one upcoming invoice.\n\nSynchronous on purpose: the client has to learn *now* that an invoice is no longer\neditable, rather than discovering later that their application silently did nothing.\n\nApplying reserves the tokens; it writes no ledger transaction. The CONSUME lands only\nwhen the invoice finalizes, which is what makes editing and un-applying free.\n\nReturns 409 ``invoice_no_longer_editable`` once the credit line is on the Stripe draft.","operationId":"apply_s3_tokens_api_v1_ledger_s3_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3ApplyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3ApplyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/s3/apply/{reservation_id}":{"delete":{"tags":["User APIs","ledger-platform"],"summary":"Remove S3 Application","description":"Un-apply, freeing the tokens again. Writes no ledger transaction.\n\nReturns the refreshed apply surface so the caller does not need a second round trip.\nReturns 409 ``invoice_no_longer_editable`` once the credit line is on the draft.","operationId":"remove_s3_application_api_v1_ledger_s3_apply__reservation_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","title":"Reservation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3UpcomingInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ledger/s3/auto-apply":{"put":{"tags":["User APIs","ledger-platform"],"summary":"Set S3 Auto Apply","description":"Turn automatic application on or off for one contract, or set its recurring amount.\n\nReturns the refreshed apply surface, so the row the caller just changed comes back with its\nnew state and no second request is needed. The contract is looked up through the reservation\nworkflow's own ownership check, so another client's id is a 404 with no hint that it exists.\n\nThe reservations are recomputed before this responds, rather than being left to the hourly\nsweep: switching auto-apply on and seeing no tokens appear until the next hour reads as a\nbroken control.","operationId":"set_s3_auto_apply_api_v1_ledger_s3_auto_apply_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3AutoApplySettingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3UpcomingInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/ledger/token-usage-summary":{"get":{"tags":["User APIs","ledger-platform"],"summary":"Get Token Usage Summary","description":"PRO-1894: Platform (org wallet + Group/User limits) and MCP\n(org/Group/User limits) usage for the authenticated user's top-bar\npopover, in one call.","operationId":"get_token_usage_summary_api_v1_ledger_token_usage_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenUsageSummaryResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/purchases/token-grants":{"post":{"tags":["User APIs","purchases"],"summary":"Purchase Token Grants","description":"Create a token purchase for the client with comprehensive validation and error handling.\n\nThis endpoint provides a production-ready token purchase flow supporting:\n- Credit card payments via Stripe PaymentIntent\n- ACH payments via Stripe PaymentIntent\n- Invoice payments for eligible plans\n\nThe endpoint implements proper:\n- Input validation and sanitization\n- User permission checks\n- Business rule enforcement\n- Comprehensive error handling\n- Audit logging\n\nArgs:\n    request: Purchase request with token_amount, payment_method, and optional fields\n    user: Authenticated user making the request\n    token_purchase_service: Service handling the token purchase logic\n\nReturns:\n    Dict containing purchase details:\n    - payment_method: The payment method used\n    - payment_id: Internal payment tracking ID\n    - token_amount: Number of tokens purchased\n    - total_amount: Total cost in USD\n    - For Card/ACH: PaymentIntent with client_secret for frontend processing\n    - For Invoice: Invoice details with hosted_invoice_url\n\nRaises:\n    400: Invalid input parameters or business rule violations\n    401: User not authenticated\n    403: User lacks permission for this client, or the client is a\n         wholesale client (their allowance comes from the contract tier)\n    404: Client plan or tokens not found\n    422: Business logic violations\n    500: System errors\n    502: External service (Stripe) errors","operationId":"purchase_token_grants_api_v1_purchases_token_grants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyTokensRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/subscriptions/plan":{"get":{"tags":["User APIs","subscriptions"],"summary":"Get User Plan","description":"Get all active subscription plans for the current user's client.\n\nReturns all subscriptions with active status (active/trialing/past_due).\nIf no active subscriptions exist, returns an empty list.\n\nAll data is sourced from:\n- StripeSubscription model columns\n- meta_data field (custom Stripe metadata)\n- raw field (full Stripe subscription object)\n- daily_token_limit column\n\nReturns:\n    List[ClientPlanDetails]: List of all active subscription plans for the client","operationId":"get_user_plan_api_v1_subscriptions_plan_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ClientPlanDetails"},"type":"array","title":"Response Get User Plan Api V1 Subscriptions Plan Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/plans":{"get":{"tags":["User APIs","plans"],"summary":"Get User Plans","description":"Get all active subscription plans for the current user's client.\n\nReturns the active plan (status: active/trialing) with full details.\nIf the plan has a Stripe subscription, all Stripe subscription fields\nare included in the stripe_subscription field. If the plan doesn't have a Stripe subscription,\nthis should be beacuse it's an Enterprise plan.\n\nThis is the new version of the plans endpoint. The /subscriptions/plan\nendpoint is kept for backward compatibility.\n\nReturns:\n    PlanFullResponse: Active plan with full details","operationId":"get_user_plans_api_v1_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanFullResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/stripe-invoices/create":{"post":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Create Invoice","description":"Create a Stripe invoice for token purchase\n\nThis endpoint implements the complete invoice flow:\n1. Creates Stripe Invoice (open) with line item amount\n2. Metadata: client_id, user_id, token_amount\n3. Create local Payment record (status=PENDING, link to Invoice id)\n4. Optionally emails hosted invoice URL to customer's billing email\n\nThe token granting happens automatically via webhook when the invoice is paid.","operationId":"create_invoice_api_v1_stripe_invoices_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInvoiceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/stripe-invoices/customers/invoices":{"get":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Get Customer Invoices","operationId":"get_customer_invoices_api_v1_stripe_invoices_customers_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeCustomerInvoiceListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/stripe-invoices/failed":{"get":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Get Failed Invoices","description":"Get all failed invoices for the user","operationId":"get_failed_invoices_api_v1_stripe_invoices_failed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Failed Invoices Api V1 Stripe Invoices Failed Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/stripe-invoices/{invoice_id}":{"get":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Get Invoice","description":"Get invoice details by ID","operationId":"get_invoice_api_v1_stripe_invoices__invoice_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Invoice Api V1 Stripe Invoices  Invoice Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stripe-invoices/{invoice_id}/send-email":{"post":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Send Invoice Email","description":"Send an existing invoice via email to the customer's billing email\n\nThis uses Stripe's send_invoice API to email the hosted invoice URL\nto the customer's billing email address.","operationId":"send_invoice_email_api_v1_stripe_invoices__invoice_id__send_email_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Invoice Email Api V1 Stripe Invoices  Invoice Id  Send Email Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stripe-invoices/{invoice_id}/retry-payment":{"post":{"tags":["User APIs","stripe-invoices","stripe-invoices"],"summary":"Retry Failed Payment","description":"Retry a failed invoice payment by creating a new payment intent\n\nThis endpoint allows users to retry payment for a failed invoice.\nIt creates a new payment intent for the same amount and tokens.","operationId":"retry_failed_payment_api_v1_stripe_invoices__invoice_id__retry_payment_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Retry Failed Payment Api V1 Stripe Invoices  Invoice Id  Retry Payment Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/builder-favorites":{"get":{"tags":["User APIs","builder-favorites"],"summary":"Get User Builder Favorites","description":"Get all builder favorites for the current user","operationId":"get_user_builder_favorites_api_v1_builder_favorites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesReadList"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["User APIs","builder-favorites"],"summary":"Create Builder Favorite","description":"Create a new builder favorite","operationId":"create_builder_favorite_api_v1_builder_favorites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/builder-favorites/{favorite_id}":{"put":{"tags":["User APIs","builder-favorites"],"summary":"Update Builder Favorite","description":"Update an existing builder favorite","operationId":"update_builder_favorite_api_v1_builder_favorites__favorite_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["User APIs","builder-favorites"],"summary":"Delete Builder Favorite","description":"Delete a builder favorite","operationId":"delete_builder_favorite_api_v1_builder_favorites__favorite_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tickers":{"get":{"tags":["User APIs","tickers"],"summary":"Get Tickers","description":"Get active tickers for authenticated users based on client assignments.\n\nAuthenticated users see tickers assigned to their client OR tickers with no assignments.","operationId":"get_tickers_api_v1_tickers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PublicTickerResponse"},"type":"array","title":"Response Get Tickers Api V1 Tickers Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/cart-status":{"post":{"tags":["User APIs","cart-status"],"summary":"Create Cart Status","description":"Create a new cart status record for abandoned framework configuration.\n\nThe user_email and client_id are automatically populated from the authenticated user's session.\nThe status defaults to 'abandoned' if not provided.","operationId":"create_cart_status_api_v1_cart_status_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartStatusCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Cart Status Api V1 Cart Status Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/cart-status/{id}":{"put":{"tags":["User APIs","cart-status"],"summary":"Update Cart Status","description":"Update price and/or status for a cart status record.","operationId":"update_cart_status_api_v1_cart_status__id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartStatusRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications":{"get":{"tags":["User APIs","notifications"],"summary":"Get Notifications","description":"Get notifications for the current user.\n\n- **status**: Filter by notification status (unread, read, archived)\n- **limit**: Maximum number of notifications to return (default: 50)\n- **offset**: Number of notifications to skip for pagination (default: 0)","operationId":"get_notifications_api_v1_notifications_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NotificationStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of notifications to return","default":50,"title":"Limit"},"description":"Maximum number of notifications to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of notifications to skip for pagination","default":0,"title":"Offset"},"description":"Number of notifications to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/unread-count":{"get":{"tags":["User APIs","notifications"],"summary":"Get Unread Count","description":"Get the count of unread notifications for the current user.","operationId":"get_unread_count_api_v1_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Unread Count Api V1 Notifications Unread Count Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/notifications/{notification_id}":{"get":{"tags":["User APIs","notifications"],"summary":"Get Notification","description":"Get a specific notification by ID.","operationId":"get_notification_api_v1_notifications__notification_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["User APIs","notifications"],"summary":"Update Notification Status","description":"Update the status of a notification.\n\n- **notification_id**: The ID of the notification to update\n- **status**: The new status (read or archived)","operationId":"update_notification_status_api_v1_notifications__notification_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/{notification_id}/read":{"post":{"tags":["User APIs","notifications"],"summary":"Mark Notification As Read","description":"Mark a notification as read.","operationId":"mark_notification_as_read_api_v1_notifications__notification_id__read_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/{notification_id}/archive":{"post":{"tags":["User APIs","notifications"],"summary":"Archive Notification","description":"Archive a notification.","operationId":"archive_notification_api_v1_notifications__notification_id__archive_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/datasets":{"get":{"tags":["User APIs","block-data"],"summary":"List Block Datasets","description":"Customer-facing Block catalog. Source of truth is the CAMS\n``block_pricing`` table for prices + neo4j ``TearSheet`` for\nlabel/description/use-cases. One entry per ``dataset_id`` with the\ncuts that have an active priced row; each cut surfaces the offered\naccess type's annual price and the lag list filtered against the\ncaller's ``block_client_data_access`` entries.\n\nRequires a Block role — browsing the catalog is itself a Block\nfeature. The power-ui Block experience is already gated client-side\nby the same condition (``hasAnyBlockAccess``); this guard closes the\nsame hole for API-key / SDK callers that bypass the frontend.","operationId":"list_block_datasets_api_v1_block_datasets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Block Datasets Api V1 Block Datasets Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/datasets/{dataset_id}/compliance-tear-sheet":{"get":{"tags":["User APIs","block-data"],"summary":"Download Compliance Tear Sheet","description":"Stream the legal & compliance tear-sheet PDF for a dataset.\n\nOpen to any Block-role user — the sheets aren't sensitive, and the\ncatalog response advertises their availability to every (Block-role)\ncaller. The Content-Disposition uses the user-facing dataset_id\nrather than the on-disk filename so the internal numbering never\nleaks. Successful downloads are recorded to the ``block.audit`` logger.","operationId":"download_compliance_tear_sheet_api_v1_block_datasets__dataset_id__compliance_tear_sheet_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/credentials":{"get":{"tags":["User APIs","block-data"],"summary":"Get Block Query Engine Credentials","description":"Per-client Polaris credentials for the \"Connect Your Query Engine\" modal.\n\nLazy-mints when the client has no Polaris credentials yet — the SQL\neditor calls this on load, before a Block request has ever run the\nprovisioning step. Eligibility (Enterprise plan + Block role) is\nalready enforced above, so a missing-creds call here is a legitimate\nfirst-time mint, not a leaked admin path.","operationId":"get_block_query_engine_credentials_api_v1_block_credentials_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockQueryEngineCredentials"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/polaris/rotate-credentials":{"post":{"tags":["User APIs","block-data"],"summary":"Rotate Block Polaris Credentials","description":"Rotate the caller's Polaris client credentials.\n\nMints a fresh client_id/secret for the client's existing Polaris\nprincipal, persists it (the secret lands in the encrypted column), and\nreturns the new pair. The previous credentials are invalidated\nserver-side, so this is the caller's only chance to capture the new\nsecret. Exposed to the carbonarc SDK as\n``client.block.rotate_polaris_credentials``.\n\nGated like the \"Connect Your Query Engine\" credential read (Enterprise +\nany Block role). The rotation is stamped on the client row (attributed to\nthe caller) so it surfaces in the CAMS Client Management Block section.","operationId":"rotate_block_polaris_credentials_api_v1_block_polaris_rotate_credentials_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRotatedCredentials"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/arns/sample":{"post":{"tags":["User APIs","block-data"],"summary":"Register Sample Arns","description":"Register sample-scoped IAM ARN(s) — grants access to ALL sample datasets\nthe client is entitled to (present + future). Enqueues a sample fan-out per\nnewly-active ARN.","operationId":"register_sample_arns_api_v1_block_arns_sample_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleArnRegisterBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArnRegisterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/arns/block":{"post":{"tags":["User APIs","block-data"],"summary":"Register Block Arns","description":"Register block-scoped IAM ARN(s) for exactly one resolved SKU bucket.\n422s if the (dataset_id, lag, cut) SKU has no bucket. Enqueues a\nsingle-bucket grant per newly-active ARN.","operationId":"register_block_arns_api_v1_block_arns_block_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockArnRegisterBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArnRegisterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/arns":{"get":{"tags":["User APIs","block-data"],"summary":"List Arns","description":"List the caller's active registered ARNs (both scopes).","operationId":"list_arns_api_v1_block_arns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArnListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/arns/bucket-path":{"get":{"tags":["User APIs","block-data"],"summary":"Get Bucket Path","description":"The S3 bucket to surface in the \"you'll have access to <bucket>\" hint, or\nnull if none is provisioned yet. Bucket identity is not client-specific, so\nthis is gated only by Enterprise + Block role (not client-scoped).\n\n``catalog`` selects both the row to match and how: a dataset can have rows in\nboth catalogs, so it must be an explicit input rather than inferred.\n\n- Bulk flow (default, ``catalog=bulk``): exact SKU match on (dataset_id, lag,\n  cut) within the bulk catalog.\n- Sample flow (``catalog=sample``): sample access is lag-agnostic, so resolve\n  the dataset's sample bucket rather than an exact SKU.","operationId":"get_bucket_path_api_v1_block_arns_bucket_path_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"query","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"lag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"}},{"name":"cut","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"}},{"name":"catalog","in":"query","required":false,"schema":{"type":"string","default":"bulk","title":"Catalog"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPathResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/arns/{arn_id}":{"delete":{"tags":["User APIs","block-data"],"summary":"Deregister Arn","description":"Deregister a registered ARN: soft-delete the row (status='revoked') and\nenqueue the matching S3 revoke. A sample ARN is stripped from every entitled\nsample bucket; a block ARN from its one resolved SKU bucket (mirrors how each\nwas granted). Unconditional — this is a deliberate client removal, not the\nlegacy-backfill restriction hook, so it is not gated by any enforcement flag.","operationId":"deregister_arn_api_v1_block_arns__arn_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"arn_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Arn Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deregister Arn Api V1 Block Arns  Arn Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests":{"get":{"tags":["User APIs","block-data"],"summary":"List Block Requests","operationId":"list_block_requests_api_v1_block_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["User APIs","block-data"],"summary":"Create Block Request","operationId":"create_block_request_api_v1_block_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/contracts":{"get":{"tags":["User APIs","block-data"],"summary":"List Block Contracts","description":"The caller's own active Block contracts for the Block Admin Dashboard's\nActive Contracts section (E1). Client-scoped by ``user.client_id`` (never\ninput) and CLIENT-SAFE — no Stripe ids. Keyed by ``block_request_id`` so the\nUI joins it onto the request row it already renders.\n\nBlock-Admin only: contract billing detail (amounts, invoice status) is\nadmin-facing, matching the rest of this dashboard and the UI's ``isBlockAdmin``\ntab gate — a plain Block user must not read it via the API.","operationId":"list_block_contracts_api_v1_block_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockClientContractListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/contracts/{block_request_id}/invoices/{period_seq}":{"get":{"tags":["User APIs","block-data"],"summary":"Open Block Invoice","description":"Live Stripe hosted page for one issued invoice on the caller's contract.\n\nClient-safe: the path is keyed by request + period, never a Stripe id.\nRetrieved from Stripe at click time because mirrored hosted URLs expire\nabout 30 days after the due date.","operationId":"open_block_invoice_api_v1_block_contracts__block_request_id__invoices__period_seq__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"block_request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Request Id"}},{"name":"period_seq","in":"path","required":true,"schema":{"type":"integer","title":"Period Seq"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockClientInvoiceOpenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/block-admins":{"get":{"tags":["User APIs","block-data"],"summary":"List Client Block Admins","description":"Return the names / emails of users in the caller's client who can\napprove Block Data requests as Block Admin — i.e. anyone with\n``block_role = Block Admin`` (which by migration / role-change hook\nalso covers Super Admin users).\n\nPowers the \"Your Block Admin(s)\" tooltip in power-ui's request modal.","operationId":"list_client_block_admins_api_v1_block_block_admins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Client Block Admins Api V1 Block Block Admins Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/dataset-preapprovals":{"get":{"tags":["User APIs","block-data"],"summary":"List Dataset Preapprovals","description":"List dataset IDs preapproved for the caller's client.","operationId":"list_dataset_preapprovals_api_v1_block_dataset_preapprovals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Dataset Preapprovals Api V1 Block Dataset Preapprovals Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/dataset-preapprovals/{dataset_id}":{"put":{"tags":["User APIs","block-data"],"summary":"Add Dataset Preapproval","description":"Mark a dataset as preapproved for the caller's client. Compliance\nAdmin only — preapproval bypasses the Legal & Compliance review step,\nso the lever belongs to compliance, not to Block Admins. Idempotent.","operationId":"add_dataset_preapproval_api_v1_block_dataset_preapprovals__dataset_id__put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Dataset Preapproval Api V1 Block Dataset Preapprovals  Dataset Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["User APIs","block-data"],"summary":"Remove Dataset Preapproval","description":"Un-preapprove a dataset for the caller's client. Compliance Admin\nonly. Idempotent (no-op if the row doesn't exist).","operationId":"remove_dataset_preapproval_api_v1_block_dataset_preapprovals__dataset_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Dataset Preapproval Api V1 Block Dataset Preapprovals  Dataset Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/compliance-admins":{"get":{"tags":["User APIs","block-data"],"summary":"List Client Compliance Admins","description":"Mirror of ``list_client_block_admins`` for Compliance Admins. Powers\nthe \"Your Compliance Admin(s)\" tooltip in power-ui.\n\nCompliance Admin is a PRIMARY role (``users.role_id``), not an additive\nblock role. Super Admin is NOT included here — the per-client compliance\nnotification path only fires to explicit Compliance Admins (matches\n``_list_compliance_admin_emails`` in block_notifications).","operationId":"list_client_compliance_admins_api_v1_block_compliance_admins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Client Compliance Admins Api V1 Block Compliance Admins Get"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/block/requests/{request_id}":{"get":{"tags":["User APIs","block-data"],"summary":"Get Block Request","operationId":"get_block_request_api_v1_block_requests__request_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/cancel":{"post":{"tags":["User APIs","block-data"],"summary":"Cancel Block Request","description":"Direct cancellation — Block Admins only. Regular users must go\nthrough the two-step ``request-cancellation`` → admin-approve flow.","operationId":"cancel_block_request_api_v1_block_requests__request_id__cancel_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/recipients":{"patch":{"tags":["User APIs","block-data"],"summary":"Update Block Request Recipients","description":"Replace ``additional_email_recipients`` on an existing request.\n\nAuth mirrors the cancellation-request endpoint: the requestor edits\ntheir own row, a Block Admin can edit anyone in the client. No status\ntransition — recipients are metadata on the row, so the state machine\nis bypassed and we just write through.","operationId":"update_block_request_recipients_api_v1_block_requests__request_id__recipients_patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRecipientsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/request-cancellation":{"post":{"tags":["User APIs","block-data"],"summary":"Request Block Request Cancellation","description":"User-initiated cancellation request. Any Block-role user can submit\na cancellation ask on their OWN request; a Block Admin must then\napprove or reject it via the two sibling endpoints.","operationId":"request_block_request_cancellation_api_v1_block_requests__request_id__request_cancellation_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCancellationRequestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/approve-cancellation":{"post":{"tags":["User APIs","block-data"],"summary":"Approve Block Request Cancellation","description":"Block Admin approves a pending cancellation request — kicks off the\nterminal transition via the shared ``cancel()`` path.","operationId":"approve_block_request_cancellation_api_v1_block_requests__request_id__approve_cancellation_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/reject-cancellation":{"post":{"tags":["User APIs","block-data"],"summary":"Reject Block Request Cancellation","description":"Block Admin declines a pending cancellation request. ``reason`` is\nrequired so the requestor sees why.","operationId":"reject_block_request_cancellation_api_v1_block_requests__request_id__reject_cancellation_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCancellationRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/approve":{"post":{"tags":["User APIs","block-data"],"summary":"Approve Block Request","description":"Client-side Block Admin approves a pending_block_admin request.\n\nRouting is driven by two per-client signals:\n  - ``clients.block_compliance`` (managed / notified / disabled)\n  - whether the dataset is preapproved for this client (``block_dataset_preapprovals``)\n\nManaged + NOT preapproved → ``pending_compliance``; otherwise →\n``pending_internal`` with ``internal_queue_step=accounts``.","operationId":"approve_block_request_api_v1_block_requests__request_id__approve_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/reject":{"post":{"tags":["User APIs","block-data"],"summary":"Reject Block Request","description":"Client-side Block Admin rejects a request.","operationId":"reject_block_request_api_v1_block_requests__request_id__reject_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/compliance-approve":{"post":{"tags":["User APIs","block-data"],"summary":"Compliance Approve Block Request","description":"Client-side Compliance Admin approves a pending_compliance request.","operationId":"compliance_approve_block_request_api_v1_block_requests__request_id__compliance_approve_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/requests/{request_id}/compliance-reject":{"post":{"tags":["User APIs","block-data"],"summary":"Compliance Reject Block Request","description":"Client-side Compliance Admin rejects a pending_compliance request.","operationId":"compliance_reject_block_request_api_v1_block_requests__request_id__compliance_reject_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequestCustomerRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/block/settings":{"get":{"tags":["User APIs","block-data"],"summary":"Get Block Settings","description":"Anyone with Block access can read their client's workflow settings (so\nthe UI can render the right approval flow preview).\n\nReports the *effective* mode, not the raw column: a client that isn't\ncompliance managed always reads as ``disabled`` so the preview can't\npromise a review step that routing would never perform.","operationId":"get_block_settings_api_v1_block_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsRead"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"put":{"tags":["User APIs","block-data"],"summary":"Update Block Settings","description":"Only Block Admin (or Super Admin) can mutate workflow settings.","operationId":"update_block_settings_api_v1_block_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockWorkflowSettingsRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/contracts":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Distributor View Contracts","description":"Every contract the LP holds — powers the contract switcher.","operationId":"list_distributor_view_contracts_api_v1_distributor_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewContractListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/contract":{"get":{"tags":["User APIs","distributor-view"],"summary":"Get Distributor View Contract","operationId":"get_distributor_view_contract_api_v1_distributor_contract_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewContractResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Wholesale Clients","operationId":"list_wholesale_clients_api_v1_distributor_wholesale_clients_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewWholesaleClientListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}":{"get":{"tags":["User APIs","distributor-view"],"summary":"Get Wholesale Client","operationId":"get_wholesale_client_api_v1_distributor_wholesale_clients__lpc_id__get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewWholesaleClient"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}/tier-change-options":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Tier Change Options","description":"Tiers this LPC can upgrade/downgrade to on its contract, each with the\nper-account monthly delta and the total prorated remaining-term cost.","operationId":"list_tier_change_options_api_v1_distributor_wholesale_clients__lpc_id__tier_change_options_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierChangeOptionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}/tier-change":{"post":{"tags":["User APIs","distributor-view"],"summary":"Apply Tier Change","description":"Apply a tier upgrade/downgrade for one LPC. Approval is automatic — the\nchange takes effect immediately (PRO-2600); the slot transfers with the\naccount, so per-tier availability is unchanged.","operationId":"apply_tier_change_api_v1_distributor_wholesale_clients__lpc_id__tier_change_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierChangeApplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewWholesaleClient"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/tier-changes":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Distributor View Tier Changes","description":"Record of applied tier changes for the LP's own contracts. No\n``contract_id`` spans every contract the LP holds; a ``contract_id`` scopes\nto one owned contract (ownership-checked). Changes apply immediately, so\nthis is a record of applied changes, not a review queue.","operationId":"list_distributor_view_tier_changes_api_v1_distributor_tier_changes_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierChangeRecordListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}/deactivate":{"post":{"tags":["User APIs","distributor-view"],"summary":"Deactivate Wholesale Client","description":"Deactivating a wholesale client does not return a slot to the pool —\nthe license stays consumed for the term (no recycling, WR-3). Access is\ncut for real, same as the admin client-deactivation flow: Okta users are\ndeactivated so platform and MCP access ends immediately.","operationId":"deactivate_wholesale_client_api_v1_distributor_wholesale_clients__lpc_id__deactivate_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewWholesaleClient"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}/reactivate":{"post":{"tags":["User APIs","distributor-view"],"summary":"Reactivate Wholesale Client","description":"Users regain platform and MCP access under the existing wholesale\naccount (the consumed license is reused, not re-issued).","operationId":"reactivate_wholesale_client_api_v1_distributor_wholesale_clients__lpc_id__reactivate_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewWholesaleClient"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/wholesale-clients/{lpc_id}/users":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Wholesale Client Users","description":"Read-only: the LP can see a wholesale client's users but never\ncreate or edit them from this view.","operationId":"list_wholesale_client_users_api_v1_distributor_wholesale_clients__lpc_id__users_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"lpc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewClientUsersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/signup-links":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Signup Links","operationId":"list_signup_links_api_v1_distributor_signup_links_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLinkListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/signup-links/check-conflicts":{"post":{"tags":["User APIs","distributor-view"],"summary":"Check Signup Link Conflicts","description":"Duplicate-slot guardrail for the create modal: which of these admin\nemails already have an active or pending sign-up under this LP (exact\nemail or corporate domain; public mail providers only match on exact\nemail). Both exact-email and corporate-domain hits are hard-blocked on\nbulk create.","operationId":"check_signup_link_conflicts_api_v1_distributor_signup_links_check_conflicts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLinkConflictRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLinkConflictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/signup-links/bulk":{"post":{"tags":["User APIs","distributor-view"],"summary":"Bulk Create Signup Links","description":"Create one single-use signup link per address in recipient_emails.\nAddresses that already have a pending invite or active client under this\nLP — by exact email or corporate domain — are skipped (returned in\n``skipped``); public mail domains never block on domain alone.","operationId":"bulk_create_signup_links_api_v1_distributor_signup_links_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLinkCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewBulkSignupLinkResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/signup-links/{link_id}/revoke":{"post":{"tags":["User APIs","distributor-view"],"summary":"Revoke Signup Link","operationId":"revoke_signup_link_api_v1_distributor_signup_links__link_id__revoke_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/signup-links/{link_id}/restore":{"post":{"tags":["User APIs","distributor-view"],"summary":"Restore Signup Link","description":"Reactivate a revoked or expired link with its original token.","operationId":"restore_signup_link_api_v1_distributor_signup_links__link_id__restore_post","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/signup-links/{link_id}":{"patch":{"tags":["User APIs","distributor-view"],"summary":"Update Signup Link","description":"Edit a link's expiration, allowed domains, and seat cap. Raising the cap\non a capped link or setting a future expiration on an expired one puts it\nback in circulation. Editing never consumes slots — only redemptions do\n(WR-4).","operationId":"update_signup_link_api_v1_distributor_signup_links__link_id__patch","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLinkUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewSignupLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/activity":{"get":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Activity","operationId":"distributor_view_activity_api_v1_distributor_activity_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewActivityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/team":{"get":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Team","operationId":"distributor_view_team_api_v1_distributor_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewTeamResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]},"post":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Grant Team Access","description":"Grant distributor access to a teammate on the same account, in the role\nthe caller chose. Scoped to the caller's own client, so an LP can only ever\ngrant to its own users.","operationId":"distributor_view_grant_team_access_api_v1_distributor_team_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAccessGrantRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewTeamMember"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/team/candidates":{"get":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Team Candidates","description":"Users on the LP's own account who don't hold distributor access yet\n(PRO-2681) — the pool behind the add-user picker.","operationId":"distributor_view_team_candidates_api_v1_distributor_team_candidates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorAccessCandidateListResponse"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/team/users":{"post":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Create Team Users","description":"Seat brand new users on the distributor's own client, each with a\ndistributor role.\n\nThe grant endpoint above can only reach users who already exist, which is a\ndead end for a distributor whose every user already holds a role. This one\nprovisions the accounts.\n\nEvery row is checked before anything is created: neither Okta nor the users\ntable rolls back, so a bad role or an address already in use has to fail\nthe batch while it is still cost-free to fail.","operationId":"distributor_view_create_team_users_api_v1_distributor_team_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewTeamUserBulkCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewTeamUserBulkResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2AuthorizationCodeBearer":[]}]}},"/api/v1/distributor/team/{member_id}":{"delete":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Revoke Team Access","description":"Remove a teammate's distributor access (PRO-2681). Removing your own\naccess is rejected — that would lock the account out of this view.","operationId":"distributor_view_revoke_team_access_api_v1_distributor_team__member_id__delete","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/team/{member_id}/prompt-access":{"put":{"tags":["User APIs","distributor-view"],"summary":"Distributor View Set Team Prompt Access","description":"Set whether a teammate gets the MCP Prompts tab.\n\nA Distributor Admin distributes the grant across their own roster; Carbon\nArc still decides whether the distributor has it at all, since setting it\non your own row is rejected. One PUT rather than grant/revoke siblings —\n``users.prompt_access`` is a single boolean and the roster drives it from a\ntoggle.","operationId":"distributor_view_set_team_prompt_access_api_v1_distributor_team__member_id__prompt_access_put","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorViewPromptAccessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/prompts":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Distributor Prompts","description":"One page of the caller's wholesale clients' MCP prompts.\n\nThe email allowlist is derived from the authenticated caller, so ``lpc_id``\ncan only narrow it. The retention window is resolved on the request session;\nthe warehouse read then runs in a worker thread on its own Pancake session,\nmatching the admin observability router.","operationId":"list_distributor_prompts_api_v1_distributor_prompts_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}},{"name":"lpc_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lpc Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistributorPromptListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/prompts/tools":{"get":{"tags":["User APIs","distributor-view"],"summary":"List Distributor Prompt Tools","description":"Options for the tool filter: the tools the caller's own rows actually name.\n\nRead under the same tenant boundary and retention clamp as the table, so the\nlist cannot report a tool whose traces the caller may not open. Not the admin\ndashboards' static ``TOOLS`` constant, which names internal base tools a\ndistributor's clients never invoke.","operationId":"list_distributor_prompt_tools_api_v1_distributor_prompts_tools_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}},{"name":"lpc_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lpc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Distributor Prompt Tools Api V1 Distributor Prompts Tools Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/distributor/prompts/csv":{"get":{"tags":["User APIs","distributor-view"],"summary":"Distributor Prompts Csv","description":"The current filtered view as CSV.\n\nSame scoping and same retention clamp as the table — an export can never\nreach rows the table would not show. Streamed in batches so a wide window\ndoes not materialise in memory.","operationId":"distributor_prompts_csv_api_v1_distributor_prompts_csv_get","security":[{"OAuth2AuthorizationCodeBearer":[]}],"parameters":[{"name":"contract_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"}},{"name":"lpc_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lpc Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/okta/okta-sync-webhook":{"get":{"tags":["Okta Event Hook"],"summary":"Okta Event Hook Verify","operationId":"okta_event_hook_verify_api_v1_okta_okta_sync_webhook_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Okta Event Hook Verify Api V1 Okta Okta Sync Webhook Get"}}}}}},"post":{"tags":["Okta Event Hook"],"summary":"Okta Event Hook","operationId":"okta_event_hook_api_v1_okta_okta_sync_webhook_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OktaEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Okta Event Hook Api V1 Okta Okta Sync Webhook Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Token":[]}]}},"/api/v1/integration/users/{user_email}/interests":{"get":{"tags":["Integration APIs"],"summary":"Get User Interests","operationId":"get_user_interests_api_v1_integration_users__user_email__interests_get","security":[{"API Key":[]}],"parameters":[{"name":"user_email","in":"path","required":true,"schema":{"type":"string","title":"User Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserInterestRead"},"title":"Response Get User Interests Api V1 Integration Users  User Email  Interests Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/users/{user_email}/provider-accesses":{"get":{"tags":["Integration APIs"],"summary":"Get User Provider Accesses","operationId":"get_user_provider_accesses_api_v1_integration_users__user_email__provider_accesses_get","security":[{"API Key":[]}],"parameters":[{"name":"user_email","in":"path","required":true,"schema":{"type":"string","title":"User Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Provider Accesses Api V1 Integration Users  User Email  Provider Accesses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/users/mcp/feature-flags":{"get":{"tags":["Integration APIs"],"summary":"Get User Or Client Feature Flags","operationId":"get_user_or_client_feature_flags_api_v1_integration_users_mcp_feature_flags_get","security":[{"API Key":[]}],"parameters":[{"name":"user_email","in":"query","required":false,"schema":{"type":"string","description":"User email","title":"User Email"},"description":"User email"},{"name":"client_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","description":"Client ID","title":"Client Id"},"description":"Client ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Or Client Feature Flags Api V1 Integration Users Mcp Feature Flags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/users/resolve-client-ids":{"post":{"tags":["Integration APIs"],"summary":"Resolve Client Ids","description":"Resolve client IDs for a list of user emails.","operationId":"resolve_client_ids_api_v1_integration_users_resolve_client_ids_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserClientResolutionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserClientResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/clients/{client_id}/context":{"get":{"tags":["Integration APIs"],"summary":"Get Client Context","description":"Return plan tier and distributor name for MCP limit-hit messaging.","operationId":"get_client_context_api_v1_integration_clients__client_id__context_get","security":[{"API Key":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/metering/ensure_sufficient":{"post":{"tags":["Integration APIs"],"summary":"Ensure Sufficient Metering","operationId":"ensure_sufficient_metering_api_v1_integration_metering_ensure_sufficient_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsureSufficientRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ensure Sufficient Metering Api V1 Integration Metering Ensure Sufficient Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/metering/deduct_tokens":{"post":{"tags":["Integration APIs"],"summary":"Deduct Tokens","operationId":"deduct_tokens_api_v1_integration_metering_deduct_tokens_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeductTokensRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Deduct Tokens Api V1 Integration Metering Deduct Tokens Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/metering/mcp/balance":{"get":{"tags":["Integration APIs"],"summary":"Get Client Mcp Balance","operationId":"get_client_mcp_balance_api_v1_integration_metering_mcp_balance_get","security":[{"API Key":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"type":"string","description":"Client ID","title":"Client Id"},"description":"Client ID"},{"name":"user_id","in":"query","required":false,"schema":{"type":"string","description":"User ID","title":"User Id"},"description":"User ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Client Mcp Balance Api V1 Integration Metering Mcp Balance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/metering/mcp/consume":{"post":{"tags":["Integration APIs"],"summary":"Consume Client Mcp Tokens","operationId":"consume_client_mcp_tokens_api_v1_integration_metering_mcp_consume_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeMcpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Consume Client Mcp Tokens Api V1 Integration Metering Mcp Consume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/metering/marketplace_order":{"post":{"tags":["Integration APIs"],"summary":"Marketplace Order","operationId":"marketplace_order_api_v1_integration_metering_marketplace_order_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Marketplace Order Api V1 Integration Metering Marketplace Order Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/metering/mcp/check-admin-limits":{"get":{"tags":["Integration APIs"],"summary":"Check Mcp Admin Limits","description":"Check whether a user is blocked by their personal MCP daily limit or their\ngroup's MCP period limit.  Called by power-api before forwarding chat to the\nMCP service for power-ui (bypass_subscription) sessions.","operationId":"check_mcp_admin_limits_api_v1_integration_metering_mcp_check_admin_limits_get","security":[{"API Key":[]}],"parameters":[{"name":"user_email","in":"query","required":true,"schema":{"type":"string","description":"Email of the user to check","title":"User Email"},"description":"Email of the user to check"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpAdminLimitsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/metering/agent/consume":{"post":{"tags":["Integration APIs"],"summary":"Consume Agent Tokens","operationId":"consume_agent_tokens_api_v1_integration_metering_agent_consume_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeAgentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Consume Agent Tokens Api V1 Integration Metering Agent Consume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/metering/agent/balance":{"get":{"tags":["Integration APIs"],"summary":"Get Agent Balance","operationId":"get_agent_balance_api_v1_integration_metering_agent_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Agent Balance Api V1 Integration Metering Agent Balance Get"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/okta/sso-events":{"get":{"tags":["Integration APIs"],"summary":"List Sso Events","description":"List paginated Okta SSO login events.\n\nSupports:\n- Pagination (page, size)\n- Sorting (sort_by, sort_order)\n- Filtering (JSON filter string)","operationId":"list_sso_events_api_v1_integration_okta_sso_events_get","security":[{"API Key":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Size"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"published_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Order"}},{"name":"filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"JSON string or empty {}","default":"{}","title":"Filters"},"description":"JSON string or empty {}"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/ask-ai-logs":{"post":{"tags":["Integration APIs","ask-ai-logs"],"summary":"Create Ask AI Log (Deprecated)","description":"Deprecated: ask_ai_logs table has been dropped. Accepts and discards the payload.","operationId":"create_ask_ai_log_api_v1_integration_ask_ai_logs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AskAiLogCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_AskAiLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/lenses-artifact-events":{"post":{"tags":["Integration APIs","lenses-artifact-events"],"summary":"Record Lenses Artifact Event","description":"Receive and store Lenses artifact pin/unpin events from the power-api service.","operationId":"create_artifact_event_api_v1_integration_lenses_artifact_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensesArtifactEventCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensesArtifactEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/lenses-judge-verdicts":{"post":{"tags":["Integration APIs","lenses-judge-verdicts"],"summary":"Record Lenses Answer-Judge Verdict","description":"Receive a runtime answer-judge verdict from power-api and upsert it into Pancake tracking.llm_judge_results, keyed by trace_id, for use as the historical-replay prod baseline.","operationId":"create_judge_verdict_api_v1_integration_lenses_judge_verdicts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensesJudgeVerdictCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LensesJudgeVerdictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/agent/{external_agent_id}/provider-access":{"get":{"tags":["Integration APIs"],"summary":"Get Agent Provider Access","description":"Return the MCP-channel blocked provider list for the agent's owning client.\n\nUsed by mcp-service to enforce per-client data source restrictions on x402\nagent tool calls.  Returns only ``mcp_blocked`` — the minimal slice needed by\nthe caller — to avoid over-sharing internal access configuration.","operationId":"get_agent_provider_access_api_v1_integration_agent__external_agent_id__provider_access_get","security":[{"API Key":[]}],"parameters":[{"name":"external_agent_id","in":"path","required":true,"schema":{"type":"string","title":"External Agent Id"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","description":"Agent source (default: x402)","default":"x402","title":"Source"},"description":"Agent source (default: x402)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Agent Provider Access Api V1 Integration Agent  External Agent Id  Provider Access Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integration/agent/register":{"post":{"tags":["Integration APIs"],"summary":"Register Agent","operationId":"register_agent_api_v1_integration_agent_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAgentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Register Agent Api V1 Integration Agent Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]}]}},"/api/v1/integration/prisms/public-snapshot":{"get":{"tags":["Integration APIs"],"summary":"Get Public Snapshot","description":"The composed public /prisms payload, served from the CAMS cache.\n\nConsumed only by power-api's unauthenticated ``GET /v2/public-prisms``\nproxy — the shape is exactly what that endpoint returns to the browser:\n``{tou, prisms: [...]}``.","operationId":"get_public_snapshot_api_v1_integration_prisms_public_snapshot_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"API Key":[]}]}},"/api/v1/billing/webhooks/stripe":{"post":{"tags":["Billing Webhooks","webhooks"],"summary":"Stripe Webhook","description":"Stripe webhook endpoint.\n\nValidates the Stripe-Signature header before processing. Returns HTTP 400\nfor missing or invalid signatures so Stripe can retry delivery.","operationId":"stripe_webhook_api_v1_billing_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/health":{"get":{"summary":"Perform Healthcheck","description":"Simple route for the GitHub Actions to healthcheck on.","operationId":"perform_healthcheck_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Perform Healthcheck","description":"Simple route for the GitHub Actions to healthcheck on.","operationId":"perform_healthcheck_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Perform Healthcheck","description":"Simple route for the GitHub Actions to healthcheck on.","operationId":"perform_healthcheck__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"APITokenRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"token":{"type":"string","title":"Token"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","token","user_id","created_at","updated_at","expires_at","active"],"title":"APITokenRead"},"APITokenUpdate":{"properties":{"active":{"type":"boolean","title":"Active"}},"type":"object","required":["active"],"title":"APITokenUpdate"},"AddLinkedCamsGroupRequest":{"properties":{"admin_group_id":{"type":"string","format":"uuid","title":"Admin Group Id"}},"type":"object","required":["admin_group_id"],"title":"AddLinkedCamsGroupRequest"},"AddUser":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"extra_profile_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Profile Data"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"mcp_daily_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Mcp Daily Limit"},"group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Group Id"}},"type":"object","required":["email","first_name","last_name"],"title":"AddUser"},"AdjustmentCreditScheduledRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"client_id":{"type":"string","title":"Client Id"},"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"string"}],"title":"Amount"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"token_expires_days":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Token Expires Days"},"reason":{"type":"string","title":"Reason"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["token_id","client_id","amount","effective_at","reason"],"title":"AdjustmentCreditScheduledRequest"},"AdminGroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group_type":{"type":"string","title":"Group Type","default":"organizational"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Permission Ids","default":[]}},"type":"object","required":["name"],"title":"AdminGroupCreate"},"AdminGroupRead":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group_type":{"type":"string","title":"Group Type","default":"organizational"},"id":{"type":"string","format":"uuid4","title":"Id"},"permissions":{"items":{"$ref":"#/components/schemas/AdminPermissionSummaryRead"},"type":"array","title":"Permissions"}},"type":"object","required":["name","id","permissions"],"title":"AdminGroupRead"},"AdminGroupSummaryRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group_type":{"type":"string","title":"Group Type","default":"organizational"}},"type":"object","required":["id","name"],"title":"AdminGroupSummaryRead"},"AdminGroupUpdate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group_type":{"type":"string","title":"Group Type","default":"organizational"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Permission Ids"}},"type":"object","required":["name"],"title":"AdminGroupUpdate"},"AdminPermissionCreate":{"properties":{"name":{"type":"string","title":"Name"},"resource":{"type":"string","title":"Resource"},"action":{"items":{"type":"string"},"type":"array","title":"Action"},"extra_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Fields","default":{}}},"type":"object","required":["name","resource","action"],"title":"AdminPermissionCreate"},"AdminPermissionRead":{"properties":{"name":{"type":"string","title":"Name"},"resource":{"type":"string","title":"Resource"},"action":{"items":{"type":"string"},"type":"array","title":"Action"},"extra_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Fields","default":{}},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["name","resource","action","id"],"title":"AdminPermissionRead"},"AdminPermissionSummaryRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"resource":{"type":"string","title":"Resource"},"action":{"items":{"type":"string"},"type":"array","title":"Action"}},"type":"object","required":["id","name","resource","action"],"title":"AdminPermissionSummaryRead"},"AdminPermissionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"},"action":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Action"},"extra_fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Fields"}},"type":"object","title":"AdminPermissionUpdate"},"AdminRoleCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Permission Ids","default":[]}},"type":"object","required":["name"],"title":"AdminRoleCreate"},"AdminRoleRead":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"id":{"type":"string","format":"uuid4","title":"Id"},"permissions":{"items":{"$ref":"#/components/schemas/AdminPermissionSummaryRead"},"type":"array","title":"Permissions"}},"type":"object","required":["name","id","permissions"],"title":"AdminRoleRead"},"AdminRoleUpdate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Permission Ids"}},"type":"object","required":["name"],"title":"AdminRoleUpdate"},"AdminUserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"is_super_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Super Admin","default":false},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Group Ids","default":[]},"direct_permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Direct Permission Ids","default":[]}},"type":"object","required":["email","first_name","last_name"],"title":"AdminUserCreate"},"AdminUserRead":{"properties":{"user_id":{"type":"string","format":"uuid4","title":"User Id"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"id":{"type":"string","format":"uuid4","title":"Id"},"is_super_admin":{"type":"boolean","title":"Is Super Admin"},"groups":{"items":{"$ref":"#/components/schemas/AdminGroupSummaryRead"},"type":"array","title":"Groups","default":[]},"direct_permissions":{"items":{"$ref":"#/components/schemas/AdminPermissionSummaryRead"},"type":"array","title":"Direct Permissions","default":[]}},"type":"object","required":["user_id","id","is_super_admin"],"title":"AdminUserRead"},"AdminUserUpdate":{"properties":{"user_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"User Id"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"is_super_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Super Admin"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Group Ids"},"direct_permission_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Direct Permission Ids"}},"type":"object","title":"AdminUserUpdate"},"AllowedRecipientDomainsResponse":{"properties":{"domains":{"items":{"type":"string"},"type":"array","title":"Domains"}},"type":"object","required":["domains"],"title":"AllowedRecipientDomainsResponse"},"ApiKeyRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"key":{"type":"string","title":"Key"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","key","user_id","created_at","updated_at","expires_at","active"],"title":"ApiKeyRead"},"ArnListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ArnRow"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ArnListResponse"},"ArnRegisterResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ArnRegisterResult"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"ArnRegisterResponse"},"ArnRegisterResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"arn":{"type":"string","title":"Arn"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","arn","status"],"title":"ArnRegisterResult","description":"Per-ARN outcome of a register call."},"ArnRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"aws_arn":{"type":"string","title":"Aws Arn"},"scope":{"type":"string","title":"Scope"},"catalog":{"type":"string","title":"Catalog"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","aws_arn","scope","catalog","status","created_at"],"title":"ArnRow","description":"One active registered ARN row (GET /block/arns)."},"AssignFeatureFlagsRequest":{"properties":{"feature_flag_ids":{"items":{"type":"string"},"type":"array","title":"Feature Flag Ids"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["feature_flag_ids"],"title":"AssignFeatureFlagsRequest","description":"Assign a list of feature flags (value='true') to every active client."},"AssignFeatureFlagsResponse":{"properties":{"status":{"type":"string","title":"Status"},"total_clients":{"type":"integer","title":"Total Clients"},"successful":{"type":"integer","title":"Successful"},"skipped":{"type":"integer","title":"Skipped"},"failed":{"type":"integer","title":"Failed"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","default":[]},"dry_run":{"type":"boolean","title":"Dry Run"}},"type":"object","required":["status","total_clients","successful","skipped","failed","dry_run"],"title":"AssignFeatureFlagsResponse"},"AsyncMigrationResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"message":{"type":"string","title":"Message"},"script_identifier":{"type":"string","title":"Script Identifier"},"status":{"type":"string","title":"Status","default":"submitted"},"csv_file_path":{"type":"string","title":"Csv File Path"},"total_clients":{"type":"integer","title":"Total Clients"},"submitted_at":{"type":"string","title":"Submitted At"}},"type":"object","required":["task_id","message","script_identifier","csv_file_path","total_clients","submitted_at"],"title":"AsyncMigrationResponse"},"AudienceFilter":{"properties":{"mode":{"type":"string","enum":["all","plan-tier","clients","dataset-access","users"],"title":"Mode"},"plan_tiers":{"anyOf":[{"items":{"type":"string","enum":["professional","business","enterprise","wholesale_client"]},"type":"array"},{"type":"null"}],"title":"Plan Tiers"},"client_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Client Ids"},"asset_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"User Ids"}},"type":"object","required":["mode"],"title":"AudienceFilter","description":"Audience filter as sent by the UI and stored (denormalised) on the\n``email_notifications`` row. Validator guarantees the selector fields\nmatch ``mode`` so the resolver doesn't have to second-guess the input."},"AudiencePreviewRequest":{"properties":{"audience":{"$ref":"#/components/schemas/AudienceFilter"}},"type":"object","required":["audience"],"title":"AudiencePreviewRequest","description":"Payload for ``POST /email-notifications/preview-audience``."},"AudiencePreviewResponse":{"properties":{"recipient_count":{"type":"integer","title":"Recipient Count"},"client_count":{"type":"integer","title":"Client Count"}},"type":"object","required":["recipient_count","client_count"],"title":"AudiencePreviewResponse"},"AudienceUserItem":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["email","first_name","last_name"],"title":"AudienceUserItem"},"AuthorizeProductUserRequest":{"properties":{"include_info":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include Info","example":["feature_flags","feature_access","providers_access","role"]}},"type":"object","title":"AuthorizeProductUserRequest"},"AuthorizeRequest":{"properties":{"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"include_info":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include Info","example":["feature_flags","feature_access","providers_access","role"]}},"type":"object","required":["product_id"],"title":"AuthorizeRequest"},"AuthorizedUser":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"feature_flags":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Flags"},"providers_access":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Providers Access"}},"type":"object","required":["email","first_name","last_name"],"title":"AuthorizedUser"},"AvailablePlan":{"properties":{"plan_id":{"type":"string","title":"Plan Id","description":"Plan tier key, e.g. 'professional'"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable plan name"},"has_monthly":{"type":"boolean","title":"Has Monthly","description":"Whether a monthly billing option exists"},"has_annual":{"type":"boolean","title":"Has Annual","description":"Whether an annual billing option exists"}},"type":"object","required":["plan_id","display_name","has_monthly","has_annual"],"title":"AvailablePlan","description":"A plan tier available for subscription."},"AvailablePlansResponse":{"properties":{"plans":{"items":{"$ref":"#/components/schemas/AvailablePlan"},"type":"array","title":"Plans"}},"type":"object","required":["plans"],"title":"AvailablePlansResponse","description":"Response listing plans a user can subscribe to."},"BackfillSectorRequest":{"properties":{"sector_assignments":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Sector Assignments"},"apply":{"type":"boolean","title":"Apply","default":false}},"type":"object","required":["sector_assignments"],"title":"BackfillSectorRequest","description":"Map each new sector value to the client IDs that should receive it."},"BlockAccountsApprovalBody":{"properties":{"trial_duration_months":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":0.0},{"type":"null"}],"title":"Trial Duration Months"},"annual_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Annual Price"},"custom_adjustment_rationale":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Custom Adjustment Rationale"},"above_list_acknowledged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Above List Acknowledged"},"s3_grant":{"anyOf":[{"$ref":"#/components/schemas/BlockAccountsS3Grant"},{"type":"null"}]}},"type":"object","title":"BlockAccountsApprovalBody","description":"Body for ``POST /block/requests/{id}/internal-approve/accounts``.\n\nAll three fields optional — a bare approval (no body, or empty body)\naccepts the captured-at-creation trial duration + annual price.\nSupplying ``trial_duration_months`` OR ``annual_price`` (to override\nthe catalog/dataset snapshot) requires ``custom_adjustment_rationale``\nso the adjustment lands with a CarbonArc-authored audit string. 0 is\na valid trial value and bypasses the trial/intake phases entirely\n(provisioning success transitions straight to ``contracted``).\n\n``annual_price`` must be positive: free access is expressed with\n``trial_duration_months``, not a $0 twelve-month contract, so a 0 here is a\nfat-finger that would open a $0 Stripe subscription.\n\nAn override ABOVE the catalog list price additionally requires\n``above_list_acknowledged``. Finance leaves list as list and promotes against\nit, so below-list is a discount while above-list is the exceptional path that\nmints a bespoke Price — worth making deliberate."},"BlockAccountsS3Grant":{"properties":{"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"order_id":{"type":"string","maxLength":255,"minLength":1,"title":"Order Id"},"reason":{"type":"string","maxLength":2000,"minLength":1,"title":"Reason"},"auto_apply":{"type":"boolean","title":"Auto Apply","default":true}},"type":"object","required":["amount","order_id","reason"],"title":"BlockAccountsS3Grant","description":"An S3 token award made at the Accounts approval step.\n\n**Independent of the custom adjustment.** Awarding tokens is not a change to the trial or\nthe price, so it does not require ``custom_adjustment_rationale`` and does not count as one\nof the adjustments that rationale explains. It was originally folded in, which forced an\noperator who only wanted to award tokens to invent a trial or price change to unlock the\nfield, and then to justify a change they had not made.\n\nIt carries its own ``reason`` instead: the grant row has a NOT NULL ``reason`` that CAMS\nrenders on the Vesting Schedule, and \"why does this client have 12,000 tokens\" and \"why did\nwe shorten their trial\" are different questions with different answers.\n\nNo ``vesting_kind``: an award tied to a contract always vests over the 12 billing\nperiods, because that is what makes each month's vest land on the invoice it funds.\nOffering ``immediate`` here would only allow the one shape that cannot line up."},"BlockActiveContractBilling":{"properties":{"block_request_id":{"type":"string","format":"uuid","title":"Block Request Id"},"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"fee_type":{"type":"string","title":"Fee Type"},"s3_auto_apply_enabled":{"type":"boolean","title":"S3 Auto Apply Enabled","default":true},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"stripe_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Id"},"stripe_product_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Name"},"monthly_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Amount"},"annual_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Amount"},"contract_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Started At"},"contract_ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Ended At"},"next_invoice_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Invoice Date"},"last_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Invoice Id"},"last_invoice_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Invoice Status"},"last_invoice_due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Invoice Due Date"},"lifecycle_badge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lifecycle Badge"},"access_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Access Ends At"},"in_grace":{"type":"boolean","title":"In Grace","default":false},"grace_days_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grace Days Remaining"},"original_term_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Term End"}},"type":"object","required":["block_request_id","block_contract_id","client_id","dataset_id","fee_type"],"title":"BlockActiveContractBilling","description":"One active Block contract's billing snapshot for the Active Contracts\ntab (D2). Keyed by ``block_request_id`` so the UI can join it onto the\nrequest row it already renders. Billing state is the webhook-maintained\ndenormalized values on ``block_contracts``; the product name is read live\nfrom Stripe on view (best-effort)."},"BlockActiveContractBillingListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockActiveContractBilling"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockActiveContractBillingListResponse"},"BlockArnRegisterBody":{"properties":{"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"arns":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Arns"}},"type":"object","required":["dataset_id","arns"],"title":"BlockArnRegisterBody","description":"``POST /block/arns/block`` — register block-scoped ARN(s) for one SKU."},"BlockCancellationRejectBody":{"properties":{"reason":{"type":"string","maxLength":2000,"minLength":1,"title":"Reason"}},"type":"object","required":["reason"],"title":"BlockCancellationRejectBody","description":"Body for ``POST /block/requests/{id}/reject-cancellation`` — Block\nAdmin's reason is required so the requestor sees why their cancellation\nask was denied."},"BlockCancellationRequestBody":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"BlockCancellationRequestBody","description":"Body for ``POST /block/requests/{id}/request-cancellation``.\n\nReason is optional — the UI encourages it but the server doesn't gate\non it so a user who just wants out can still submit."},"BlockClientContract":{"properties":{"block_request_id":{"type":"string","format":"uuid","title":"Block Request Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"fee_type":{"type":"string","title":"Fee Type"},"monthly_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Amount"},"annual_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Amount"},"contract_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Started At"},"contract_ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Ended At"},"last_invoice_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Invoice Status"},"last_invoice_due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Invoice Due Date"},"next_invoice_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Invoice Date"},"applied_tokens":{"type":"string","title":"Applied Tokens","default":"0"},"contract_term_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Term Months"},"next_invoice_seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Invoice Seq"},"invoice_line_item":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Line Item"},"period_applied_tokens":{"items":{"$ref":"#/components/schemas/BlockClientPeriodTokens"},"type":"array","title":"Period Applied Tokens","default":[]},"issued_invoices":{"items":{"$ref":"#/components/schemas/BlockClientIssuedInvoice"},"type":"array","title":"Issued Invoices","default":[]}},"type":"object","required":["block_request_id","dataset_id","fee_type"],"title":"BlockClientContract","description":"A client's own active Block contract, for the Power UI Block Admin\nDashboard (E1). Deliberately CLIENT-SAFE: no Stripe ids (subscription /\nprice / product / invoice / customer) and no CAMS-internal fields — only\nwhat a client Block Admin should see. Keyed by ``block_request_id`` so the\nUI joins it onto the request row it already has. ``last_invoice_status`` is\na plain billing status (e.g. ``paid`` / ``open`` / ``past_due``), NOT an id;\nthe UI renders the high-level \"Paid\" / \"Due [date]\" label from it."},"BlockClientContractListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockClientContract"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockClientContractListResponse"},"BlockClientDataAccessAuditRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"access_new_value":{"type":"boolean","title":"Access New Value"},"sample_access_new_value":{"type":"boolean","title":"Sample Access New Value","default":false},"served_lag_new_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Served Lag New Value"},"rationale":{"type":"string","title":"Rationale"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","client_id","dataset_id","access_new_value","rationale","created_at"],"title":"BlockClientDataAccessAuditRead"},"BlockClientDataAccessBulkUpdate":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"access":{"type":"boolean","title":"Access","default":false},"sample_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sample Access"},"served_lag":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Served Lag"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["client_id","dataset_id","rationale"],"title":"BlockClientDataAccessBulkUpdate","description":"One row of a ``PUT /block/dataset-restrictions/bulk-update/`` batch.\n\nMirrors ``ClientProviderAccessServiceBulkUpdate`` — a new/changed\nrationale is required whenever ``access`` or ``served_lag`` changes\nrelative to the row's current stored value (enforced server-side in\nthe service, not just this schema)."},"BlockClientDataAccessListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockClientDataAccessRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"block_sample_access_follows_live":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Block Sample Access Follows Live"}},"type":"object","required":["items","total"],"title":"BlockClientDataAccessListResponse"},"BlockClientDataAccessRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"client_external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client External Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"access":{"type":"boolean","title":"Access","default":false},"sample_access":{"type":"boolean","title":"Sample Access","default":false},"served_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Served Lag"},"served_lag_is_stale":{"type":"boolean","title":"Served Lag Is Stale","default":false},"row_version":{"type":"integer","title":"Row Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"previous_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Rationale"}},"type":"object","required":["id","client_id","dataset_id","row_version","created_at","updated_at"],"title":"BlockClientDataAccessRead"},"BlockClientDataAccessSet":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"served_lag":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Served Lag"},"expected_row_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Row Version"}},"type":"object","required":["client_id","dataset_id"],"title":"BlockClientDataAccessSet","description":"Upsert body for ``PUT /block/dataset-restrictions`` (legacy single-row\npath — kept at its original contract; the new admin UI uses the bulk\nendpoint below instead).\n\n``expected_row_version`` is required to update an existing row\n(optimistic concurrency); omit it to create. ``served_lag = None``\nrecords \"no access\" (``access`` is derived server-side: ``False`` when\n``served_lag`` is ``None``, ``True`` otherwise — this endpoint has never\nhad a way to express \"granted, freshest lag\", which under the old\ndefault-allow model was reachable only via row absence). Use ``DELETE``\nto remove the row entirely — under default-deny that now means \"no\naccess\" rather than \"unrestricted\"."},"BlockClientInvoiceOpenResponse":{"properties":{"invoice_url":{"type":"string","title":"Invoice Url"}},"type":"object","required":["invoice_url"],"title":"BlockClientInvoiceOpenResponse","description":"Live hosted invoice page, retrieved from Stripe at click time."},"BlockClientIssuedInvoice":{"properties":{"period_seq":{"type":"integer","title":"Period Seq"},"invoice_url":{"type":"string","title":"Invoice Url"}},"type":"object","required":["period_seq","invoice_url"],"title":"BlockClientIssuedInvoice","description":"A finalized invoice the customer can open.\n\n``invoice_url`` is a CAMS path, not a frozen Stripe hosted page — those\nexpire about 30 days after the due date. The dashboard fetches this path\nat click time to retrieve a live hosted URL. Upcoming / scheduled periods\nare omitted — those invoices have not been issued."},"BlockClientPeriodTokens":{"properties":{"period_seq":{"type":"integer","title":"Period Seq"},"applied_tokens":{"type":"string","title":"Applied Tokens","default":"0"}},"type":"object","required":["period_seq"],"title":"BlockClientPeriodTokens","description":"Tokens settled (or reserved) against one invoice in the term.\n\n``period_seq`` is 1-based, matching ``next_invoice_seq``. Client-safe: an\namount, not a reservation or Stripe id."},"BlockComplianceTearSheetMeta":{"properties":{"available":{"type":"boolean","title":"Available"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"}},"type":"object","required":["available"],"title":"BlockComplianceTearSheetMeta","description":"Per-dataset compliance tear sheet metadata. Mirrors the\n``ComplianceTearSheetMeta`` TypedDict in\n``app.services.compliance_tear_sheet`` so the same dict shape can be\nmodel_validate'd onto a pydantic schema."},"BlockContractGraceRead":{"properties":{"block_request_id":{"type":"string","format":"uuid","title":"Block Request Id"},"contract_status":{"type":"string","title":"Contract Status"},"request_status":{"type":"string","title":"Request Status"},"contract_ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Ended At"},"last_invoice_due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Invoice Due Date"},"grace_period_days_effective":{"type":"integer","title":"Grace Period Days Effective"},"grace_period_days_override":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grace Period Days Override"},"grace_extended_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Extended Until"},"grace_extended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Extended At"},"grace_extended_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grace Extended By"},"grace_extension_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grace Extension Reason"},"access_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Access Ends At"},"in_grace":{"type":"boolean","title":"In Grace","default":false},"grace_days_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grace Days Remaining"}},"type":"object","required":["block_request_id","contract_status","request_status","grace_period_days_effective"],"title":"BlockContractGraceRead","description":"Post-term access window for one Block contract.\n\nADMIN-ONLY: ``grace_extension_reason`` / ``grace_extended_by`` are internal\naudit text and must never appear on a customer-facing schema."},"BlockContractPaymentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockContractPaymentRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts","default":{}}},"type":"object","required":["items","total"],"title":"BlockContractPaymentListResponse"},"BlockContractPaymentRow":{"properties":{"block_request_id":{"type":"string","format":"uuid","title":"Block Request Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"fee_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Type"},"contract_status":{"type":"string","title":"Contract Status"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"annual_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Amount"},"monthly_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Amount"},"pricing_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Mode"},"contract_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Started At"},"contract_ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Ended At"},"next_invoice_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Invoice Date"},"last_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Invoice Id"},"last_invoice_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Invoice Status"},"last_invoice_due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Invoice Due Date"},"payment_state":{"type":"string","title":"Payment State"},"days_overdue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Overdue"},"invoice_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invoice Amount Cents"},"invoice_positive_subtotal_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invoice Positive Subtotal Cents"},"invoice_tokens_applied_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invoice Tokens Applied Cents"},"invoice_net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invoice Net Cents"},"invoice_review_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Review State"},"invoice_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Currency"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"},"payment_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Payment Seen At"},"access_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Access Ends At"},"in_grace":{"type":"boolean","title":"In Grace","default":false},"grace_days_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grace Days Remaining"},"grace_extended_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Extended Until"},"grace_extended_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grace Extended By"}},"type":"object","required":["block_request_id","client_id","dataset_id","contract_status","payment_state"],"title":"BlockContractPaymentRow","description":"One row of the account-management payments view.\n\n100% DB-backed. Field names reflect what the mirrored data actually MEANS:\n\n* ``invoice_amount_cents`` is the invoice amount, NOT a balance — the mirror\n  stores ``amount_due`` while unpaid but falls back to ``amount_paid``/\n  ``total`` once paid, and ``amount_remaining`` is not mirrored at all.\n* ``payment_seen_at`` is when the paid webhook LANDED, not Stripe's payment\n  timestamp, so it must not be reconciled against as a payment date.\n* ``days_overdue`` derives from ``block_contracts.last_invoice_due_date``,\n  which the webhooks keep current — not ``stripe_invoices.due_date``, which\n  is written once at row creation and never refreshed.\n\nSubscription status is deliberately absent: Block subscription events are\nshort-circuited before the generic handler, so ``stripe_subscriptions`` has\nno Block rows and it is persisted nowhere. ``stripe_subscription_id`` is here\nso the UI can deep-link into Stripe instead."},"BlockDataSettingsRead":{"properties":{"notifications_enabled":{"$ref":"#/components/schemas/SettingField_bool_"},"trial_end_recipient_email":{"$ref":"#/components/schemas/SettingField_str_"},"trial_ending_notice_days":{"$ref":"#/components/schemas/SettingField_int_"},"contract_ending_notice_days":{"$ref":"#/components/schemas/SettingField_int_"},"contract_grace_days":{"$ref":"#/components/schemas/SettingField_int_"},"invoice_edit_window_days":{"$ref":"#/components/schemas/SettingField_int_"},"payment_alerts_enabled":{"$ref":"#/components/schemas/SettingField_bool_"},"overdue_alert_after_days":{"$ref":"#/components/schemas/SettingField_int_"},"overdue_alert_repeat_days":{"$ref":"#/components/schemas/SettingField_int_"},"access_failure_p3_sla_minutes":{"$ref":"#/components/schemas/SettingField_int_"},"access_failure_drain_enabled":{"$ref":"#/components/schemas/SettingField_bool_"},"access_failure_drain_batch_limit":{"$ref":"#/components/schemas/SettingField_int_"}},"type":"object","required":["notifications_enabled","trial_end_recipient_email","trial_ending_notice_days","contract_ending_notice_days","contract_grace_days","invoice_edit_window_days","payment_alerts_enabled","overdue_alert_after_days","overdue_alert_repeat_days","access_failure_p3_sla_minutes","access_failure_drain_enabled","access_failure_drain_batch_limit"],"title":"BlockDataSettingsRead","description":"Block Data feature-level settings surfaced on the System Settings page."},"BlockDataSettingsUpdate":{"properties":{"notifications_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notifications Enabled"},"trial_end_recipient_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Trial End Recipient Email"},"trial_ending_notice_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Trial Ending Notice Days"},"contract_ending_notice_days":{"anyOf":[{"type":"integer","maximum":180.0,"minimum":1.0},{"type":"null"}],"title":"Contract Ending Notice Days"},"contract_grace_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Contract Grace Days"},"invoice_edit_window_days":{"anyOf":[{"type":"integer","maximum":60.0,"minimum":1.0},{"type":"null"}],"title":"Invoice Edit Window Days"},"payment_alerts_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Payment Alerts Enabled"},"overdue_alert_after_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":0.0},{"type":"null"}],"title":"Overdue Alert After Days"},"overdue_alert_repeat_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Overdue Alert Repeat Days"},"access_failure_p3_sla_minutes":{"anyOf":[{"type":"integer","maximum":20160.0,"minimum":1.0},{"type":"null"}],"title":"Access Failure P3 Sla Minutes"},"access_failure_drain_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Access Failure Drain Enabled"},"access_failure_drain_batch_limit":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Access Failure Drain Batch Limit"},"rationale":{"type":"string","maxLength":500,"title":"Rationale","description":"Required. Why this change is being made (min 3 characters, trimmed)."}},"type":"object","required":["rationale"],"title":"BlockDataSettingsUpdate","description":"Payload to update Block Data settings. Omitted fields are left untouched.\n``rationale`` is always required."},"BlockDatasetStatus":{"type":"string","enum":["hidden","coming_soon","ready"],"title":"BlockDatasetStatus"},"BlockDatasetTOULatestResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"version_num":{"type":"integer","title":"Version Num"}},"type":"object","required":["id","dataset_id","content","effective_at","version_num"],"title":"BlockDatasetTOULatestResponse","description":"Lightweight latest-version view, used by request modal."},"BlockDatasetTOUUpdateRequest":{"properties":{"content":{"type":"string","title":"Content"},"change_type":{"type":"string","enum":["substantive","typo_formatting"],"title":"Change Type"},"change_reason":{"type":"string","minLength":1,"title":"Change Reason","description":"Required reason for change"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At","description":"Effective date/time for this TOU version. Defaults to published_at if not provided."},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id","description":"Optimistic concurrency check. The block-dataset TOU version id the user based their edit on. If the latest published version for this dataset has a different id, the update is rejected and the user should reload."}},"type":"object","required":["content","change_type","change_reason"],"title":"BlockDatasetTOUUpdateRequest","description":"Publish a new version of a dataset's TOU.\n\nMirrors ``SignupTOUUpdateRequest`` but is scoped per\n``dataset_id`` (which comes from the URL path, not the body)."},"BlockDatasetTOUVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"version_num":{"type":"integer","title":"Version Num"},"content":{"type":"string","title":"Content"},"checksum":{"type":"string","title":"Checksum"},"published_at":{"type":"string","format":"date-time","title":"Published At"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"requires_reacceptance":{"type":"boolean","title":"Requires Reacceptance"},"change_reason":{"type":"string","title":"Change Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","dataset_id","version_num","content","checksum","published_at","effective_at","requires_reacceptance","change_reason","created_at"],"title":"BlockDatasetTOUVersionResponse","description":"A single published version of a dataset's TOU."},"BlockGeneratedInvoiceRow":{"properties":{"block_invoice_draft_id":{"type":"string","format":"uuid","title":"Block Invoice Draft Id"},"stripe_invoice_id":{"type":"string","title":"Stripe Invoice Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"period_seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Seq"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"contract_monthly":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contract Monthly"},"invoice_amount_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invoice Amount Cents"},"tokens_applied_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Applied Cents"},"net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Net Cents"}},"type":"object","required":["block_invoice_draft_id","stripe_invoice_id","client_id"],"title":"BlockGeneratedInvoiceRow","description":"One invoice that has already gone to the customer.\n\nMoney comes from ``block_invoice_drafts``, not from ``stripe_invoices.amount_cents``: that\ncolumn is only written when the resolved amount is > 0, so a fully-credited invoice keeps a\nstale pre-credit figure there forever."},"BlockGeneratedInvoicesResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/BlockGeneratedInvoiceRow"},"type":"array","title":"Invoices"},"total_invoices":{"type":"integer","title":"Total Invoices"},"has_more":{"type":"boolean","title":"Has More","default":false}},"type":"object","required":["invoices","total_invoices"],"title":"BlockGeneratedInvoicesResponse"},"BlockGraceExtensionBody":{"properties":{"extend_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Extend Until"},"additional_days":{"anyOf":[{"type":"integer","maximum":180.0,"minimum":1.0},{"type":"null"}],"title":"Additional Days"},"grace_period_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Grace Period Days"},"reason":{"type":"string","maxLength":1000,"minLength":3,"title":"Reason"}},"type":"object","required":["reason"],"title":"BlockGraceExtensionBody","description":"Body for ``POST /block/requests/{id}/contract-grace/extend``.\n\nExactly one of ``extend_until`` / ``additional_days``. ``reason`` is required\nand CarbonArc-internal — it IS the audit record, and is never returned to the\ncustomer."},"BlockInvoiceMarkReadyRequest":{"properties":{"block_invoice_draft_id":{"type":"string","format":"uuid","title":"Block Invoice Draft Id"}},"type":"object","required":["block_invoice_draft_id"],"title":"BlockInvoiceMarkReadyRequest","description":"Lock one held invoice's applied S3 tokens. Never sends it, and is not what makes it send —\nevery held invoice goes out on its own send date. See the send-now request to bring that\nforward."},"BlockInvoiceReviewRow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"stripe_invoice_id":{"type":"string","title":"Stripe Invoice Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"period_seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Seq"},"state":{"type":"string","title":"State"},"send_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Send Date"},"edit_window_days":{"type":"integer","title":"Edit Window Days"},"approval_overdue_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approval Overdue At"},"marked_ready_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Marked Ready At"},"marked_ready_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Marked Ready By"},"finalized_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finalized At"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"positive_subtotal_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Positive Subtotal Cents"},"tokens_applied_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Applied Cents"},"net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Net Cents"},"manual_override_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Manual Override At"},"manual_override_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Override By"},"manual_override_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manual Override Reason"}},"type":"object","required":["id","stripe_invoice_id","client_id","state","edit_window_days"],"title":"BlockInvoiceReviewRow","description":"The review state of one held Block invoice, for E3's Upcoming Invoices tab.\n\nDeliberately carries no payment fields. ``state`` answers \"where is this in our own flow\",\n``payment_state`` answers \"does the customer owe us money\", and a draft is emphatically not\nmoney owed — merging the two would put \"Overdue\" on an invoice the customer has never been\nshown."},"BlockInvoiceSendNowRequest":{"properties":{"block_invoice_draft_id":{"type":"string","format":"uuid","title":"Block Invoice Draft Id"},"reason":{"type":"string","minLength":1,"title":"Reason"}},"type":"object","required":["block_invoice_draft_id","reason"],"title":"BlockInvoiceSendNowRequest","description":"Send one held invoice immediately, outside the daily schedule.\n\n``reason`` is required and recorded: this is irreversible, and an audited path has to be\nmore attractive than finalizing in the Stripe Dashboard, which leaves CAMS holding a row\nthat thinks the invoice is still waiting."},"BlockInvoiceSendNowResponse":{"properties":{"sent":{"type":"boolean","title":"Sent"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"invoice":{"$ref":"#/components/schemas/BlockInvoiceReviewRow"}},"type":"object","required":["sent","invoice"],"title":"BlockInvoiceSendNowResponse"},"BlockPricingAccessTypeOut":{"type":"string","enum":["Forward Feed","Historic"],"title":"BlockPricingAccessTypeOut"},"BlockPricingActiveListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockPricingRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockPricingActiveListResponse"},"BlockPricingBulkRowStatusOut":{"type":"string","enum":["AVAILABLE","IN_PROCESS","COMING_SOON"],"title":"BlockPricingBulkRowStatusOut"},"BlockPricingCatalogCut":{"properties":{"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"lags":{"items":{"type":"string"},"type":"array","title":"Lags","default":[]},"sample_enabled":{"type":"boolean","title":"Sample Enabled","default":true},"sample_exists":{"type":"boolean","title":"Sample Exists","default":true},"pricing":{"additionalProperties":{"$ref":"#/components/schemas/BlockPricingRead"},"propertyNames":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"type":"object","title":"Pricing","default":{}},"scheduled":{"additionalProperties":{"$ref":"#/components/schemas/BlockPricingScheduledChange"},"propertyNames":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"type":"object","title":"Scheduled","default":{}},"stripe":{"additionalProperties":{"$ref":"#/components/schemas/BlockPricingCatalogStripeLink"},"propertyNames":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"type":"object","title":"Stripe","default":{}}},"type":"object","required":["cut"],"title":"BlockPricingCatalogCut"},"BlockPricingCatalogEntry":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"internal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Name"},"core_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Core Source"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"bulk_row_status":{"anyOf":[{"$ref":"#/components/schemas/BlockPricingBulkRowStatusOut"},{"type":"null"}]},"primary_access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut","default":"Forward Feed"},"revenue_share_pct":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revenue Share Pct"},"deployment_fee":{"type":"boolean","title":"Deployment Fee","default":false},"monthly_fee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Fee"},"terms_of_use_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Use Html"},"terms_of_use_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Terms Of Use Version Id"},"status":{"type":"string","enum":["hidden","coming_soon","ready"],"title":"Status","default":"hidden"},"trial_duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Duration Months"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"notes_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Notes Updated At"},"notes_updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes Updated By"},"provisioning_errors":{"$ref":"#/components/schemas/BlockPricingErrorFacets","default":{"total":0,"s3":0,"polaris":0,"sample":0,"bulk":0}},"block_client_names":{"items":{"type":"string"},"type":"array","title":"Block Client Names","default":[]},"provisioning_error_clients":{"items":{"type":"string"},"type":"array","title":"Provisioning Error Clients","default":[]},"cuts":{"items":{"$ref":"#/components/schemas/BlockPricingCatalogCut"},"type":"array","title":"Cuts","default":[]}},"type":"object","required":["dataset_id"],"title":"BlockPricingCatalogEntry"},"BlockPricingCatalogResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockPricingCatalogEntry"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockPricingCatalogResponse"},"BlockPricingCatalogStripeLink":{"properties":{"custom_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Label"},"history_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"History Range"},"stripe_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Id"},"stripe_default_price_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Default Price Id"},"stripe_product_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Name"},"provisioned":{"type":"boolean","title":"Provisioned","default":false}},"type":"object","title":"BlockPricingCatalogStripeLink","description":"Stripe linkage for one billing SKU — ``(dataset, cut, access_type)``.\n\nFinance requires each cut to be its own Stripe Product so invoice line items\nare unambiguous, so this hangs off the cut rather than the dataset.\n``history_range`` / ``custom_label`` are the admin-set segments of Finance's\nproduct-name convention; both are required before a Product can be created\n(``history_range`` for Historic only)."},"BlockPricingErrorFacets":{"properties":{"total":{"type":"integer","title":"Total","default":0},"s3":{"type":"integer","title":"S3","default":0},"polaris":{"type":"integer","title":"Polaris","default":0},"sample":{"type":"integer","title":"Sample","default":0},"bulk":{"type":"integer","title":"Bulk","default":0}},"type":"object","title":"BlockPricingErrorFacets","description":"Unresolved access-failure counts for one dataset, split the two ways the\nManage Datasets toolbar filters on.\n\n``s3`` + ``polaris`` sum to ``total``; ``sample`` + ``bulk`` may sum to less\nthan it, because a row written before the fan-out target carried a\n``catalog`` field belongs to neither. Counting those under a guessed catalog\nwould put a dataset in a filtered list on a fact nobody recorded."},"BlockPricingHistoryResponse":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"history":{"additionalProperties":{"items":{"$ref":"#/components/schemas/BlockPricingRead"},"type":"array"},"propertyNames":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"type":"object","title":"History"}},"type":"object","required":["dataset_id","history"],"title":"BlockPricingHistoryResponse","description":"Full effective-date timeline grouped by access_type for one (dataset_id, cut) SKU."},"BlockPricingRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"effective_date":{"type":"string","format":"date","title":"Effective Date"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"revenue_share_pct":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revenue Share Pct"},"deployment_fee":{"type":"boolean","title":"Deployment Fee","default":false},"monthly_fee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Fee"},"bulk_row_status":{"$ref":"#/components/schemas/BlockPricingBulkRowStatusOut"},"internal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Name"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"row_version":{"type":"integer","title":"Row Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"}},"type":"object","required":["id","dataset_id","access_type","effective_date","price","revenue_share_pct","monthly_fee","bulk_row_status","row_version","created_at","updated_at"],"title":"BlockPricingRead"},"BlockPricingScheduledChange":{"properties":{"effective_date":{"type":"string","format":"date","title":"Effective Date"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"}},"type":"object","required":["effective_date","price","updated_at"],"title":"BlockPricingScheduledChange","description":"A future-dated row that hasn't activated yet.\n\nSurfaced on top of the active price so the UI can flag a pending\nchange (when it will take effect, who scheduled it, what the new\nprice is). Distinct from ``BlockPricingRead`` because it carries\nonly the fields the tooltip needs and avoids implying that the row\nis currently active."},"BlockProvisioningErrorListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockProvisioningErrorRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockProvisioningErrorListResponse"},"BlockProvisioningErrorRow":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"internal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Name"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"requestor_email":{"type":"string","title":"Requestor Email"},"request_status":{"$ref":"#/components/schemas/BlockRequestStatus"},"step_name":{"type":"string","title":"Step Name"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failed At"}},"type":"object","required":["request_id","dataset_id","client_id","requestor_email","request_status","step_name"],"title":"BlockProvisioningErrorRow","description":"One row of the CAMS \"Provisioning Errors\" table: the failed step\nsurfaced with enough parent-request context to render without a\nper-row lookup."},"BlockProvisioningStepRead":{"properties":{"step_name":{"type":"string","title":"Step Name"},"status":{"$ref":"#/components/schemas/BlockProvisioningStepStatus"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failed At"},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"}},"type":"object","required":["step_name","status","started_at"],"title":"BlockProvisioningStepRead","description":"One row of the per-Block-request provisioning timeline shown in CAMS.\n\n``error`` carries the JSONB payload recorded on failure (typically\n``{error_code, message}``); null for in-flight or successful steps."},"BlockProvisioningStepStatus":{"type":"string","enum":["started","completed","failed"],"title":"BlockProvisioningStepStatus"},"BlockProvisioningTimelineResponse":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"request_status":{"$ref":"#/components/schemas/BlockRequestStatus"},"steps":{"items":{"$ref":"#/components/schemas/BlockProvisioningStepRead"},"type":"array","title":"Steps"}},"type":"object","required":["request_id","request_status","steps"],"title":"BlockProvisioningTimelineResponse"},"BlockQueryEngineCredentials":{"properties":{"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"},"catalog_uri":{"type":"string","title":"Catalog Uri"},"warehouse":{"type":"string","title":"Warehouse"}},"type":"object","required":["client_id","client_secret","catalog_uri","warehouse"],"title":"BlockQueryEngineCredentials","description":"Per-client Polaris (Iceberg REST catalog) connection details for the\n\"Connect Your Query Engine\" modal. ``client_secret`` is the raw plaintext\nsecret — sensitive, only returned to the client's own users over HTTPS."},"BlockRequestAdminListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockRequestRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"BlockRequestAdminListResponse","description":"Admin-side list shell. Uses unfiltered ``BlockRequestRead`` so internal\nfields stripped from ``BlockRequestCustomerRead`` (notably\n``accounts_extension_rationale``, which carries CarbonArc-authored audit\ntext and is hidden from customers via ``exclude=True``) survive\nserialization on admin endpoints. The customer list endpoint deliberately\nkeeps using ``BlockRequestListResponse`` so the same field stays out of\ncustomer-visible JSON."},"BlockRequestCreate":{"properties":{"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"lag":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"additional_email_recipients":{"items":{"type":"string"},"type":"array","title":"Additional Email Recipients"},"accepted_block_tou_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Accepted Block Tou Version Id"},"use_case":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Use Case"}},"type":"object","required":["dataset_id"],"title":"BlockRequestCreate"},"BlockRequestCustomerRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"internal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Name"},"core_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Core Source"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_polaris_principal_missing":{"type":"boolean","title":"Client Polaris Principal Missing","default":false},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"requestor_email":{"type":"string","title":"Requestor Email"},"status":{"$ref":"#/components/schemas/BlockRequestStatus"},"internal_queue_step":{"anyOf":[{"$ref":"#/components/schemas/InternalQueueStep"},{"type":"null"}]},"rejection_source":{"anyOf":[{"$ref":"#/components/schemas/RejectionSource"},{"type":"null"}]},"rejection_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Message"},"rejected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejected By"},"trial_duration_months":{"type":"integer","title":"Trial Duration Months"},"annual_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Price"},"original_trial_duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Trial Duration Months"},"original_annual_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Annual Price"},"additional_email_recipients":{"items":{"type":"string"},"type":"array","title":"Additional Email Recipients"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"trial_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start Date"},"trial_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End Date"},"original_trial_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Trial Start Date"},"original_trial_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Trial End Date"},"first_ingestion_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Ingestion At"},"trial_start_trigger":{"anyOf":[{"$ref":"#/components/schemas/TrialStartTrigger"},{"type":"null"}]},"approved_by_block_admin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Block Admin"},"approved_by_compliance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Compliance"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"},"cancellation_requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancellation Requested At"},"cancellation_requested_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Requested By"},"cancellation_request_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Request Reason"},"compliance_tear_sheet":{"anyOf":[{"$ref":"#/components/schemas/BlockComplianceTearSheetMeta"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","dataset_id","client_id","requestor_email","status","trial_duration_months","created_at","updated_at"],"title":"BlockRequestCustomerRead","description":"Customer-facing variant of ``BlockRequestRead``. Collapses\n``provisioning_failed`` → ``provisioning`` in the serialized output so\nrequestors see a stuck attempt as still in-flight (\"access provisioning\")\nrather than a failure they can't act on. The failure remains visible to\nCAMS admins via the underlying status + the per-step audit table.\n\n``custom_adjustment_rationale`` is internal — overriding the field with\n``exclude=True`` drops it from the serialized response so customers\nnever see the CarbonArc-authored note."},"BlockRequestListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BlockRequestCustomerRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"users_by_email":{"additionalProperties":{"$ref":"#/components/schemas/BlockRequestUserRef"},"type":"object","title":"Users By Email"}},"type":"object","required":["items","total"],"title":"BlockRequestListResponse"},"BlockRequestRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"internal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Internal Name"},"core_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Core Source"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_polaris_principal_missing":{"type":"boolean","title":"Client Polaris Principal Missing","default":false},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"requestor_email":{"type":"string","title":"Requestor Email"},"status":{"$ref":"#/components/schemas/BlockRequestStatus"},"internal_queue_step":{"anyOf":[{"$ref":"#/components/schemas/InternalQueueStep"},{"type":"null"}]},"rejection_source":{"anyOf":[{"$ref":"#/components/schemas/RejectionSource"},{"type":"null"}]},"rejection_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Message"},"rejected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejected By"},"fee_type":{"$ref":"#/components/schemas/FeeType"},"trial_duration_months":{"type":"integer","title":"Trial Duration Months"},"annual_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annual Price"},"original_trial_duration_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Original Trial Duration Months"},"original_annual_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Annual Price"},"custom_adjustment_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Adjustment Rationale"},"additional_email_recipients":{"items":{"type":"string"},"type":"array","title":"Additional Email Recipients"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"trial_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start Date"},"trial_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End Date"},"original_trial_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Trial Start Date"},"original_trial_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Trial End Date"},"first_ingestion_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Ingestion At"},"trial_start_trigger":{"anyOf":[{"$ref":"#/components/schemas/TrialStartTrigger"},{"type":"null"}]},"approved_by_block_admin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Block Admin"},"approved_by_compliance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Compliance"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"},"cancellation_requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancellation Requested At"},"cancellation_requested_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Requested By"},"cancellation_request_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Request Reason"},"compliance_tear_sheet":{"anyOf":[{"$ref":"#/components/schemas/BlockComplianceTearSheetMeta"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","dataset_id","client_id","requestor_email","status","fee_type","trial_duration_months","created_at","updated_at"],"title":"BlockRequestRead"},"BlockRequestRecipientsUpdate":{"properties":{"additional_email_recipients":{"items":{"type":"string"},"type":"array","title":"Additional Email Recipients"}},"type":"object","title":"BlockRequestRecipientsUpdate","description":"Body for ``PATCH /block/requests/{id}/recipients``.\n\nReplaces ``additional_email_recipients`` wholesale — the UI ships the\nfull list each time, mirroring how it's edited on the request-creation\nform. Server-side validation matches the client regex; addresses are\nnormalized to lower-case before storing so set-based dedupe is stable\nacross casings the user typed."},"BlockRequestRejectBody":{"properties":{"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"BlockRequestRejectBody"},"BlockRequestStatus":{"type":"string","enum":["pending_block_admin","pending_compliance","pending_internal","approved","intake_pending","provisioning","provisioning_failed","trial_pending","trial_active","contracted","contract_expired","request_cancelled","trial_cancelled","contract_cancelled","block_cancelled","rejected"],"title":"BlockRequestStatus"},"BlockRequestTimelineEvent":{"properties":{"kind":{"$ref":"#/components/schemas/BlockRequestTimelineEventKind"},"stage":{"anyOf":[{"$ref":"#/components/schemas/InternalQueueStep"},{"type":"null"}]},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"},"at":{"type":"string","format":"date-time","title":"At"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["kind","at"],"title":"BlockRequestTimelineEvent"},"BlockRequestTimelineEventKind":{"type":"string","enum":["submitted","block_admin_approve","block_admin_reject","compliance_approve","compliance_reject","compliance_skipped","internal_approve","internal_reject","reset_rejection","provisioning_failed","provisioning_retried","trial_started","trial_expired","cancellation_requested","cancellation_approved","cancellation_rejected","cancelled_direct","grace_extended"],"title":"BlockRequestTimelineEventKind","description":"Discrete event types surfaced in the per-request timeline.\n\n``submitted`` / ``block_admin_*`` / ``compliance_*`` are derived from\ndenormalized columns on ``block_requests`` (power-ui actions don't\nwrite to the admin audit log). Internal-stage events come from\n``admin_requests_audit_logs`` entries written by the admin audit\nmiddleware. ``compliance_skipped`` fires when the workflow setting\nor preapproval bypassed the compliance step entirely."},"BlockRequestTimelineResponse":{"properties":{"request_id":{"type":"string","format":"uuid","title":"Request Id"},"events":{"items":{"$ref":"#/components/schemas/BlockRequestTimelineEvent"},"type":"array","title":"Events"}},"type":"object","required":["request_id","events"],"title":"BlockRequestTimelineResponse"},"BlockRequestUserRef":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["email"],"title":"BlockRequestUserRef","description":"Lightweight name lookup for an email present on a Block request row\n(``requestor_email``, ``approved_by_block_admin``, ``approved_by_compliance``).\nSurfaced on the list response so the admin dashboard can render the\nrequestor / approver as \"First Last\" instead of the raw email."},"BlockRoleName":{"type":"string","enum":["block_user","block_admin"],"title":"BlockRoleName","description":"Additive Block role values stored directly on ``users.block_role``\nand ``groups.block_role`` (``block_role_enum`` Postgres enum). Matches\nthe snake_case value set used elsewhere in the Block domain."},"BlockRotatedCredentials":{"properties":{"principal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Principal Name"},"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"}},"type":"object","required":["client_id","client_secret"],"title":"BlockRotatedCredentials","description":"Freshly-rotated Polaris client credentials returned to the carbonarc\nSDK's ``block.rotate_polaris_credentials``. The previous pair is invalid\nserver-side the moment this returns, so the plaintext ``client_secret``\nis the caller's only chance to capture the new value."},"BlockWorkflowSettingsRead":{"properties":{"block_compliance":{"$ref":"#/components/schemas/ComplianceMode"}},"type":"object","required":["block_compliance"],"title":"BlockWorkflowSettingsRead"},"BlockWorkflowSettingsUpdate":{"properties":{"block_compliance":{"$ref":"#/components/schemas/ComplianceMode"}},"type":"object","required":["block_compliance"],"title":"BlockWorkflowSettingsUpdate"},"Body_bulk_replace_featured_entities_api_v1_admin_featured_bulk_replace_entities_post":{"properties":{"csv_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Csv File"}},"type":"object","required":["csv_file"],"title":"Body_bulk_replace_featured_entities_api_v1_admin_featured_bulk_replace_entities_post"},"Body_bulk_replace_featured_insights_api_v1_admin_featured_bulk_replace_insights_post":{"properties":{"csv_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Csv File"}},"type":"object","required":["csv_file"],"title":"Body_bulk_replace_featured_insights_api_v1_admin_featured_bulk_replace_insights_post"},"Body_delete_client_api_v1_admin_clients__client_id__delete":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"Body_delete_client_api_v1_admin_clients__client_id__delete"},"Body_delete_user_api_v1_admin_users__user_id__delete":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"Body_delete_user_api_v1_admin_users__user_id__delete"},"Body_import_pricing_csv_api_v1_admin_block_pricing_import_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_import_pricing_csv_api_v1_admin_block_pricing_import_post"},"Body_parse_csv_api_v1_admin_ontology_csv_drafter_parse_post":{"properties":{"csv_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Csv File"}},"type":"object","required":["csv_file"],"title":"Body_parse_csv_api_v1_admin_ontology_csv_drafter_parse_post"},"Body_run_migration_from_csv_api_v1_admin_migrations_run_csv_post":{"properties":{"csv_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Csv File"}},"type":"object","required":["csv_file"],"title":"Body_run_migration_from_csv_api_v1_admin_migrations_run_csv_post"},"BucketPathResponse":{"properties":{"bucket_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bucket Path"}},"type":"object","title":"BucketPathResponse","description":"``GET /block/arns/bucket-path`` — the provisioned S3 bucket for a SKU.\n\n``bucket_path`` is ``None`` when no bucket has been provisioned for the\n(dataset_id, lag, cut) yet (the UI then shows a \"not provisioned\" hint)."},"BulkAddUsers":{"properties":{"users":{"items":{"$ref":"#/components/schemas/AddUser"},"type":"array","minItems":1,"title":"Users","description":"List of users to add"}},"type":"object","required":["users"],"title":"BulkAddUsers"},"BulkApplyEligibleClientsResponse":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_key":{"type":"string","title":"Client Key"},"client_name":{"type":"string","title":"Client Name"},"block_sample_access_follows_live":{"type":"boolean","title":"Block Sample Access Follows Live","default":true}},"type":"object","required":["client_id","client_key","client_name"],"title":"BulkApplyEligibleClientsResponse","description":"One entry per client eligible for the \"enable/remove for all valid\nclients\" bulk action — enterprise plan tier + Block Data feature\nprovisioned (mirrors ``block_enabled_clients``)."},"BulkApplyRequest":{"properties":{"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"access":{"type":"boolean","title":"Access"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["dataset_id","access","rationale"],"title":"BulkApplyRequest","description":"Grant or revoke an entire dataset — every cut the catalog graph\ncurrently emits for it — across every eligible client in one call."},"BulkClientTranscriptPriceRequest":{"properties":{"transcript_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200,"minItems":1,"title":"Transcript Ids"},"price":{"type":"number","minimum":0.0,"title":"Price"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["transcript_ids","price","rationale"],"title":"BulkClientTranscriptPriceRequest","description":"Set the same specific-transcript override across multiple transcripts,\nfor one client, at once — the mirror of BulkTranscriptClientPriceRequest\n(which bulks by client for one transcript)."},"BulkClientTranscriptPriceResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BulkClientTranscriptPriceResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["results","total","succeeded","failed"],"title":"BulkClientTranscriptPriceResponse"},"BulkClientTranscriptPriceResult":{"properties":{"transcript_id":{"type":"string","format":"uuid","title":"Transcript Id"},"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["transcript_id","success"],"title":"BulkClientTranscriptPriceResult"},"BulkConsumptionLimitsRequest":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","title":"User Ids"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocated Amount"}},"type":"object","required":["user_ids"],"title":"BulkConsumptionLimitsRequest","description":"Bulk platform-token limit update.\n\nBoth limit fields are tri-state, keyed off *presence* rather than value:\n\n  - omitted           -> leave that limit unchanged\n  - explicit ``null`` -> remove that limit\n  - number            -> set that limit\n\n``model_dump(exclude_unset=True)`` is the only thing distinguishing the\nfirst two cases, so neither limit field may carry a non-None default, and\nneither may use ``Field(gt=0)`` — a pydantic rejection would 422 with a\nlist ``detail``, while the sibling bulk endpoints 400 with a string, which\nis the shape the CAMS UI's error handling expects. Range checks are\ntherefore done manually below."},"BulkMcpAccessRequest":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"User Ids"}},"type":"object","required":["user_ids"],"title":"BulkMcpAccessRequest"},"BulkProductAccessRequest":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","title":"User Ids"}},"type":"object","required":["user_ids"],"title":"BulkProductAccessRequest"},"BulkStatusChangeRequest":{"properties":{"asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200,"minItems":1,"title":"Asset Ids"},"action":{"type":"string","enum":["publish","unpublish","archive"],"title":"Action"}},"type":"object","required":["asset_ids","action"],"title":"BulkStatusChangeRequest"},"BulkStatusChangeResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BulkStatusChangeResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["results","total","succeeded","failed"],"title":"BulkStatusChangeResponse"},"BulkStatusChangeResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","success"],"title":"BulkStatusChangeResult"},"BulkTagCreate":{"additionalProperties":{"additionalProperties":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"type":"object"},"type":"object","title":"BulkTagCreate"},"BulkTranscriptClientPriceRequest":{"properties":{"client_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200,"minItems":1,"title":"Client Ids"},"price":{"type":"number","minimum":0.0,"title":"Price"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["client_ids","price","rationale"],"title":"BulkTranscriptClientPriceRequest","description":"Set the same specific-transcript override across multiple clients at once."},"BulkTranscriptClientPriceResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BulkTranscriptClientPriceResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["results","total","succeeded","failed"],"title":"BulkTranscriptClientPriceResponse"},"BulkTranscriptClientPriceResult":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["client_id","success"],"title":"BulkTranscriptClientPriceResult"},"BulkTranscriptStatusRequest":{"properties":{"transcript_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200,"minItems":1,"title":"Transcript Ids"},"action":{"type":"string","enum":["publish","hide","remove"],"title":"Action"},"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["transcript_ids","action"],"title":"BulkTranscriptStatusRequest"},"BulkTranscriptStatusResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BulkTranscriptStatusResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["results","total","succeeded","failed"],"title":"BulkTranscriptStatusResponse"},"BulkTranscriptStatusResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","success"],"title":"BulkTranscriptStatusResult"},"BulkUpdateResponse":{"properties":{"changed":{"type":"integer","title":"Changed"},"results":{"items":{"$ref":"#/components/schemas/BulkUpdateResultRow"},"type":"array","title":"Results"}},"type":"object","required":["changed","results"],"title":"BulkUpdateResponse"},"BulkUpdateResultRow":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"dataset_id":{"type":"string","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"previous_access":{"type":"boolean","title":"Previous Access"},"previous_sample_access":{"type":"boolean","title":"Previous Sample Access","default":false},"previous_served_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Served Lag"},"access":{"type":"boolean","title":"Access"},"sample_access":{"type":"boolean","title":"Sample Access","default":false},"served_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Served Lag"},"rationale":{"type":"string","title":"Rationale"}},"type":"object","required":["client_id","dataset_id","previous_access","access","rationale"],"title":"BulkUpdateResultRow","description":"One applied change, as returned by ``bulk-update/`` and ``bulk-apply/``."},"BuyTokensRequest":{"properties":{"token_amount":{"type":"number","title":"Token Amount"},"payment_method":{"type":"string","title":"Payment Method"},"is_recurring":{"type":"boolean","title":"Is Recurring","default":false},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","default":""},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","default":""},"token_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Token Id","description":"Optional token ID to use for purchase. If not provided, the primary active token will be used."},"token_purchase_type":{"anyOf":[{"type":"string","enum":["primary","mcp","mcp_primary"]},{"type":"null"}],"title":"Token Purchase Type","description":"Optional token purchase type. If 'mcp_primary' (or legacy 'mcp') is provided and token_id is not set, the backend will use the MCP Primary token id from environment configuration."}},"type":"object","required":["token_amount","payment_method"],"title":"BuyTokensRequest"},"CSVFilePathMigrationRequest":{"properties":{"csv_file_path":{"type":"string","title":"Csv File Path"},"script_identifier":{"type":"string","title":"Script Identifier"},"client_id_column":{"type":"string","title":"Client Id Column","default":"client_id"},"send_email_summary":{"type":"boolean","title":"Send Email Summary","default":false},"email_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Email Recipients"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters","default":{}}},"type":"object","required":["csv_file_path","script_identifier"],"title":"CSVFilePathMigrationRequest"},"CSVMigrationResponse":{"properties":{"message":{"type":"string","title":"Message"},"script_identifier":{"type":"string","title":"Script Identifier"},"status":{"type":"string","title":"Status"},"total_clients":{"type":"integer","title":"Total Clients"},"processed_clients":{"type":"integer","title":"Processed Clients","default":0},"successful_migrations":{"type":"integer","title":"Successful Migrations","default":0},"failed_migrations":{"type":"integer","title":"Failed Migrations","default":0},"skipped_migrations":{"type":"integer","title":"Skipped Migrations","default":0},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","default":[]},"email_sent":{"type":"boolean","title":"Email Sent","default":false},"email_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Email Recipients"}},"type":"object","required":["message","script_identifier","status","total_clients"],"title":"CSVMigrationResponse"},"CamsGroupRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"member_count":{"type":"integer","title":"Member Count"}},"type":"object","required":["id","name","description","member_count"],"title":"CamsGroupRead","description":"Lightweight admin group record for the linked-group combobox."},"CancelS3GrantRequest":{"properties":{"reason":{"type":"string","minLength":1,"title":"Reason"}},"type":"object","required":["reason"],"title":"CancelS3GrantRequest","description":"Cancel an S3 token award. Stops future vesting; already-vested tokens remain."},"CancelS3GrantResponse":{"properties":{"grant_id":{"type":"string","title":"Grant Id"},"status":{"type":"string","title":"Status"},"cancelled_vestings":{"type":"integer","title":"Cancelled Vestings"},"already_cancelled":{"type":"boolean","title":"Already Cancelled"}},"type":"object","required":["grant_id","status","cancelled_vestings","already_cancelled"],"title":"CancelS3GrantResponse"},"CancelSubscriptionRequest":{"properties":{"cancel_when":{"type":"string","enum":["immediately","end_of_period","custom_date"],"title":"Cancel When"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At"},"refund":{"type":"string","enum":["none","last_payment","prorated"],"title":"Refund","default":"none"},"mode":{"type":"string","enum":["cancel_only","cancel_and_convert"],"title":"Mode","default":"cancel_only"},"convert_starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Convert Starts At"},"convert_plan_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Convert Plan Name"}},"type":"object","required":["cancel_when"],"title":"CancelSubscriptionRequest"},"CancelSubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"cancel_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cancel At"},"canceled_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Canceled At"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":false},"current_period_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Period End"},"refund_status":{"type":"string","enum":["not_requested","succeeded","failed","no_payment_intent"],"title":"Refund Status","default":"not_requested"},"refund_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refund Error"},"plan_conversion_status":{"type":"string","enum":["not_applicable","succeeded","failed"],"title":"Plan Conversion Status","default":"not_applicable"},"plan_conversion_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Conversion Error"}},"type":"object","required":["id","status"],"title":"CancelSubscriptionResponse"},"CartStatusCreate":{"properties":{"framework":{"additionalProperties":true,"type":"object","title":"Framework","description":"Framework configuration data and identifier"},"price":{"type":"number","minimum":0.0,"title":"Price"},"status":{"anyOf":[{"$ref":"#/components/schemas/CartStatusEnum"},{"type":"null"}],"description":"Status of the cart - 'bought' or 'abandoned'. Defaults to 'abandoned' if not provided."}},"type":"object","required":["framework","price"],"title":"CartStatusCreate","description":"Schema for creating a new cart status record"},"CartStatusEnum":{"type":"string","enum":["bought","abandoned"],"title":"CartStatusEnum"},"CartStatusRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"framework":{"additionalProperties":true,"type":"object","title":"Framework"},"user_email":{"type":"string","format":"email","title":"User Email"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"price":{"type":"number","title":"Price"},"status":{"anyOf":[{"$ref":"#/components/schemas/CartStatusEnum"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"}},"type":"object","required":["id","framework","user_email","client_id","price","created_at","updated_at"],"title":"CartStatusRead","description":"Schema for reading a cart status record"},"CartStatusUpdate":{"properties":{"framework":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Framework","description":"Framework configuration data and identifier"},"price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price"},"status":{"anyOf":[{"$ref":"#/components/schemas/CartStatusEnum"},{"type":"null"}],"description":"Status of the cart - 'bought' or 'abandoned'"}},"type":"object","title":"CartStatusUpdate","description":"Schema for updating a cart status record"},"CatalogAssetRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"external_id":{"type":"string","title":"External Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"},"tier":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tier"},"is_new":{"type":"boolean","title":"Is New","default":false},"is_premium":{"type":"boolean","title":"Is Premium","default":false},"publish_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publish Date"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"vote_count":{"type":"integer","title":"Vote Count","default":0}},"type":"object","required":["id","source_id","external_id","title","status","created_at","updated_at"],"title":"CatalogAssetRead"},"CatalogAssetUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"is_new":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New"}},"type":"object","title":"CatalogAssetUpdate","description":"General field update — title, flags only. Status/tier have dedicated endpoints."},"CatalogClientCreate":{"properties":{"name":{"type":"string","title":"Name"},"plan_type":{"type":"string","enum":["standard","library_only","enterprise","ido_premium"],"title":"Plan Type","default":"standard"}},"type":"object","required":["name"],"title":"CatalogClientCreate"},"CatalogClientRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"plan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","plan_type","created_at","updated_at"],"title":"CatalogClientRead"},"CatalogClientUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"plan_type":{"anyOf":[{"type":"string","enum":["standard","library_only","enterprise","ido_premium"]},{"type":"null"}],"title":"Plan Type"}},"type":"object","title":"CatalogClientUpdate"},"ChargeablePaymentMethodResponse":{"properties":{"has_chargeable_payment_method":{"type":"boolean","title":"Has Chargeable Payment Method"}},"type":"object","required":["has_chargeable_payment_method"],"title":"ChargeablePaymentMethodResponse"},"CheckoutInitiateData":{"properties":{"fbp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbp","description":"Meta _fbp browser cookie"},"fbc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbc","description":"Meta _fbc click ID cookie"},"marketing_consent":{"type":"boolean","title":"Marketing Consent","description":"Visitor granted the CMP's marketing category. Persisted on the signup so the Purchase webhook can honour it later (PRO-3255).","default":false},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code","description":"Curated ad-attribution promo slug (e.g. utm_campaign when utm_source='promo'); resolved server-side to a Stripe promotion code."}},"type":"object","title":"CheckoutInitiateData"},"ChoiceType":{"properties":{"code":{"type":"string","title":"Code"},"value":{"type":"string","title":"Value"}},"type":"object","required":["code","value"],"title":"ChoiceType"},"ClearCacheRequest":{"properties":{"targets":{"items":{"type":"string","enum":["cams","power-api","mcp","all"]},"type":"array","title":"Targets","default":["cams"]},"power_api_caches":{"items":{"type":"string","enum":["all","ontology_entities","insights_search","framework_filters","data_library","query_result_cache","auth_sessions","flight_result","flight_facade"]},"type":"array","minItems":1,"title":"Power Api Caches","default":["all"]}},"type":"object","title":"ClearCacheRequest","description":"Which service(s) to flush. ``\"all\"`` clears every service, regardless\nof what else is listed alongside it."},"ClientAccessEvent":{"properties":{"id":{"type":"string","title":"Id"},"at":{"type":"string","format":"date-time","title":"At"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor","description":"Who did it: created_by on a register, updated_by on a remove. Null for rows written before attribution existed, or by a system path; rendered as 'unknown', never as nobody."},"kind":{"type":"string","enum":["arn_registered","arn_removed","polaris_credentials_minted","polaris_credentials_reset","polaris_credentials_set"],"title":"Kind"},"summary":{"type":"string","title":"Summary","description":"One-line human description."},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope","description":"'sample' | 'block' for ARNs."},"aws_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Arn"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"malformed_arn":{"type":"boolean","title":"Malformed Arn","default":false}},"type":"object","required":["id","at","kind","summary"],"title":"ClientAccessEvent"},"ClientAccessHistoryResponse":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"events":{"items":{"$ref":"#/components/schemas/ClientAccessEvent"},"type":"array","title":"Events"},"polaris_events_available":{"type":"boolean","title":"Polaris Events Available","description":"False when Polaris credential events could not be read. The list is then ARN-only, and an absence of credential events must not be read as 'none happened'.","default":true}},"type":"object","required":["client_id"],"title":"ClientAccessHistoryResponse"},"ClientBalanceResponse":{"properties":{"balance":{"type":"number","title":"Balance"},"wallet":{"$ref":"#/components/schemas/WalletMetadata"}},"type":"object","required":["balance","wallet"],"title":"ClientBalanceResponse"},"ClientBlockSampleAccessFollowsPatch":{"properties":{"block_sample_access_follows_live":{"type":"boolean","title":"Block Sample Access Follows Live"}},"type":"object","required":["block_sample_access_follows_live"],"title":"ClientBlockSampleAccessFollowsPatch","description":"Toggle whether Block sample access mirrors live/bulk access for this\nclient (True = coupled). Re-coupling is rejected when any dataset has a\nlive≠sample mismatch."},"ClientBulkPlanTypeUpdate":{"properties":{"client_ids":{"items":{"type":"string"},"type":"array","title":"Client Ids"},"plan_type":{"anyOf":[{"type":"string","enum":["standard","library_only","enterprise","ido_premium"]},{"type":"null"}],"title":"Plan Type"}},"type":"object","required":["client_ids","plan_type"],"title":"ClientBulkPlanTypeUpdate"},"ClientContextResponse":{"properties":{"plan_tier":{"type":"string","title":"Plan Tier"},"distributor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distributor Name"}},"type":"object","required":["plan_tier"],"title":"ClientContextResponse","description":"Lightweight client identity for service-to-service consumers (e.g. MCP)."},"ClientCreate":{"properties":{"client_info":{"$ref":"#/components/schemas/ClientInfoCreate"},"skip_stripe_validation":{"type":"boolean","title":"Skip Stripe Validation","default":false}},"type":"object","required":["client_info"],"title":"ClientCreate"},"ClientDataCollectionConsentRestrictionStatus":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"restricted":{"type":"boolean","title":"Restricted"}},"type":"object","required":["client_id","restricted"],"title":"ClientDataCollectionConsentRestrictionStatus"},"ClientDataCollectionConsentRestrictionUpdate":{"properties":{"restricted":{"type":"boolean","title":"Restricted"}},"type":"object","required":["restricted"],"title":"ClientDataCollectionConsentRestrictionUpdate"},"ClientEngagementResponse":{"properties":{"totals":{"$ref":"#/components/schemas/ClientEngagementTotals"},"rows":{"items":{"$ref":"#/components/schemas/ClientEngagementRow"},"type":"array","title":"Rows"},"sources":{"$ref":"#/components/schemas/DataSourcesHealth","default":{"platform":"ok","s3":"ok","polaris":"ok"}},"cached_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cached At"}},"type":"object","required":["totals","rows"],"title":"ClientEngagementResponse"},"ClientEngagementRow":{"properties":{"short_name":{"type":"string","title":"Short Name"},"client_id":{"type":"string","title":"Client Id","default":""},"business_name":{"type":"string","title":"Business Name"},"sector":{"type":"string","title":"Sector"},"plan_tier":{"type":"string","title":"Plan Tier","default":"Unassigned"},"is_new":{"type":"boolean","title":"Is New","default":false},"is_canceled":{"type":"boolean","title":"Is Canceled","default":false},"is_expiring":{"type":"boolean","title":"Is Expiring","default":false},"is_distributor":{"type":"boolean","title":"Is Distributor","default":false},"all_engagement":{"type":"integer","title":"All Engagement","default":0},"tokens":{"type":"number","title":"Tokens","default":0},"primary_tokens":{"type":"number","title":"Primary Tokens","default":0},"promotional_tokens":{"type":"number","title":"Promotional Tokens","default":0},"mbs":{"type":"number","title":"Mbs","default":0},"records":{"type":"integer","title":"Records","default":0},"s3_mbs":{"type":"number","title":"S3 Mbs","default":0},"polaris_s3_mbs":{"type":"number","title":"Polaris S3 Mbs","default":0},"polaris_s3_requests":{"type":"integer","title":"Polaris S3 Requests","default":0},"mcp_tokens":{"type":"number","title":"Mcp Tokens","default":0},"mcp_tool_calls":{"type":"integer","title":"Mcp Tool Calls","default":0}},"type":"object","required":["short_name","business_name","sector"],"title":"ClientEngagementRow"},"ClientEngagementTotals":{"properties":{"total_clients":{"type":"integer","title":"Total Clients","default":0},"total_clients_by_plan_tier":{"additionalProperties":{"type":"integer"},"type":"object","title":"Total Clients By Plan Tier","default":{}},"weekly_active_clients":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weekly Active Clients"},"new_clients_count":{"type":"integer","title":"New Clients Count","default":0},"new_clients_by_plan_tier":{"additionalProperties":{"type":"integer"},"type":"object","title":"New Clients By Plan Tier","default":{}},"total_server_requests":{"type":"integer","title":"Total Server Requests","default":0},"total_tokens":{"type":"number","title":"Total Tokens","default":0},"total_primary_tokens":{"type":"number","title":"Total Primary Tokens","default":0},"total_promotional_tokens":{"type":"number","title":"Total Promotional Tokens","default":0},"total_mbs":{"type":"number","title":"Total Mbs","default":0},"total_records":{"type":"integer","title":"Total Records","default":0},"total_s3_mbs":{"type":"number","title":"Total S3 Mbs","default":0},"total_polaris_s3_mbs":{"type":"number","title":"Total Polaris S3 Mbs","default":0},"total_polaris_s3_requests":{"type":"integer","title":"Total Polaris S3 Requests","default":0},"total_mcp_tokens":{"type":"number","title":"Total Mcp Tokens","default":0},"total_mcp_tool_calls":{"type":"integer","title":"Total Mcp Tool Calls","default":0}},"type":"object","title":"ClientEngagementTotals"},"ClientExchangeUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"ClientExchangeUpdate","description":"PRO-136: payload for ``PUT /admin/clients/{id}/exchange``.\n\nA single admin-facing toggle that enables or disables the Exchange feature\nfor the client for any plan tier (professional, business, enterprise)."},"ClientFeatureAccessCreate":{"properties":{"extra_info":{"additionalProperties":true,"type":"object","title":"Extra Info","default":{}},"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"}},"type":"object","required":["feature_id","client_id"],"title":"ClientFeatureAccessCreate"},"ClientFeatureAccessRead":{"properties":{"extra_info":{"additionalProperties":true,"type":"object","title":"Extra Info","default":{}},"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["feature_id","client_id","id"],"title":"ClientFeatureAccessRead"},"ClientFeatureAccessUpdate":{"properties":{"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info"}},"type":"object","title":"ClientFeatureAccessUpdate"},"ClientFeatureElementAccessRead":{"properties":{"feature_element_id":{"type":"string","format":"uuid4","title":"Feature Element Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"visible":{"type":"boolean","title":"Visible"},"subscribed":{"type":"boolean","title":"Subscribed"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["feature_element_id","client_id","visible","subscribed","id"],"title":"ClientFeatureElementAccessRead"},"ClientFeatureElementAccessUpdate":{"properties":{"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Visible"},"subscribed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subscribed"}},"type":"object","title":"ClientFeatureElementAccessUpdate"},"ClientFeatureFlagCreate":{"properties":{"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active"},"feature_flag_id":{"type":"string","format":"uuid4","title":"Feature Flag Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"metadata_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Json"}},"type":"object","required":["value","is_active","feature_flag_id","client_id"],"title":"ClientFeatureFlagCreate"},"ClientFeatureFlagRead":{"properties":{"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active"},"feature_flag_id":{"type":"string","format":"uuid4","title":"Feature Flag Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"value_type":{"anyOf":[{"$ref":"#/components/schemas/FeatureFlagValueType"},{"type":"null"}]},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["value","is_active","feature_flag_id","client_id","id"],"title":"ClientFeatureFlagRead"},"ClientFeatureFlagUpdate":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"metadata_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Json"}},"type":"object","title":"ClientFeatureFlagUpdate"},"ClientInfo":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"key":{"type":"string","title":"Key"},"client_id":{"type":"string","title":"Client Id"},"has_delta_config":{"type":"boolean","title":"Has Delta Config"},"plan_tier":{"type":"string","title":"Plan Tier"},"is_compliance_managed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Compliance Managed"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method","description":"Client billing payment method (card | ach | invoice). Used by power-ui to gate invoice payment options."}},"type":"object","required":["id","name","key","client_id","has_delta_config","plan_tier"],"title":"ClientInfo"},"ClientInfoCreate":{"properties":{"name":{"type":"string","title":"Name"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"client_type_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Type Id"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"is_compliance_managed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Compliance Managed","default":false},"is_distributor":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Distributor","default":false},"account_manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Account Manager Email"},"entity_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Entity Ids","default":[]},"industry_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Industry Ids","default":[]},"block_compliance":{"anyOf":[{"type":"string","enum":["managed","notified","disabled"]},{"type":"null"}],"title":"Block Compliance","default":"disabled"},"bill_to_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Bill To Email"},"bill_to_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Name"},"payment_method":{"anyOf":[{"type":"string","enum":["card","ach","invoice"]},{"type":"null"}],"title":"Payment Method"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"}},"type":"object","required":["name"],"title":"ClientInfoCreate"},"ClientInfoResponse":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"feature_flags":{"additionalProperties":true,"type":"object","title":"Feature Flags"},"unmetered_providers":{"items":{"type":"string"},"type":"array","title":"Unmetered Providers"},"features":{"items":{"type":"string"},"type":"array","title":"Features"}},"type":"object","required":["id","name","feature_flags","unmetered_providers","features"],"title":"ClientInfoResponse"},"ClientMcpProviderAccessFollowsPatch":{"properties":{"mcp_provider_access_follows_api":{"type":"boolean","title":"Mcp Provider Access Follows Api"}},"type":"object","required":["mcp_provider_access_follows_api"],"title":"ClientMcpProviderAccessFollowsPatch","description":"Toggle whether MCP provider access mirrors API access for this client."},"ClientMetric":{"properties":{"client":{"type":"string","title":"Client"},"total":{"type":"integer","title":"Total","default":0},"errors":{"type":"integer","title":"Errors","default":0},"error_rate_pct":{"type":"number","title":"Error Rate Pct","default":0.0}},"type":"object","required":["client"],"title":"ClientMetric"},"ClientOnboardingResponse":{"properties":{"steps":{"items":{"$ref":"#/components/schemas/OnboardingStepRead"},"type":"array","title":"Steps"},"steps_complete":{"type":"integer","title":"Steps Complete"},"current_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Step"},"is_complete":{"type":"boolean","title":"Is Complete"}},"type":"object","required":["steps","steps_complete","current_step","is_complete"],"title":"ClientOnboardingResponse"},"ClientPlanDetails":{"properties":{"id":{"type":"string","title":"Id"},"slug":{"type":"string","title":"Slug"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"platform_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Platform Fee"},"client_admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Admin Email"},"client_admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Admin Name"},"platform_fee_schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Fee Schedule"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"plan_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Plan Start Date"},"free_tokens_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Free Tokens Amount"},"free_tokens_duration_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Tokens Duration Count"},"free_tokens_duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Free Tokens Duration"},"daily_token_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Token Limit"},"is_mcp_plan":{"type":"boolean","title":"Is Mcp Plan","default":false},"plan_type":{"type":"string","title":"Plan Type","default":"enterprise"},"setup_payment_on_behalf_of_the_client":{"type":"boolean","title":"Setup Payment On Behalf Of The Client","default":false},"billing_cycle_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Billing Cycle Limit"},"auto_renew":{"type":"boolean","title":"Auto Renew","default":false},"disable_invoice_as_payment_method":{"type":"boolean","title":"Disable Invoice As Payment Method","default":false},"invoice_payment":{"type":"boolean","title":"Invoice Payment","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"product_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Name"},"subscription_id":{"type":"string","title":"Subscription Id"},"status":{"type":"string","title":"Status"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"extra_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Data"}},"type":"object","required":["id","slug","client_id","subscription_id","status"],"title":"ClientPlanDetails","description":"User-facing response schema for subscription plan details combining PlanSubscription and Stripe data"},"ClientPlanTier":{"type":"string","enum":["enterprise","professional","business","wholesale_client"],"title":"ClientPlanTier","description":"Values match ``admin_config.clients.plan_tier`` (``client_plan_tier_enum``)."},"ClientPlanTypeUpdate":{"properties":{"plan_type":{"anyOf":[{"type":"string","enum":["standard","library_only","enterprise","ido_premium"]},{"type":"null"}],"title":"Plan Type"}},"type":"object","required":["plan_type"],"title":"ClientPlanTypeUpdate","description":"``plan_type`` may be ``null`` to clear the catalog row's plan type."},"ClientPolarisCredentialsState":{"properties":{"minted":{"type":"boolean","title":"Minted"},"polaris_principal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Principal Name"},"polaris_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Client Id"},"polaris_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Client Secret"},"polaris_provisioned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Polaris Provisioned At"},"polaris_provisioning_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Provisioning Status"},"polaris_provisioning_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Provisioning Error"},"polaris_provisioning_attempted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Polaris Provisioning Attempted At"},"polaris_provisioning_attempted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Provisioning Attempted By"},"polaris_provisioning_attempted_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Provisioning Attempted Source"}},"type":"object","required":["minted"],"title":"ClientPolarisCredentialsState"},"ClientProductBackgroundTaskResponse":{"properties":{"id":{"type":"string","title":"Id"},"message":{"type":"string","title":"Message"},"status":{"type":"string","title":"Status","default":"processing"},"client_id":{"type":"string","title":"Client Id"},"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["id","message","client_id","product_id"],"title":"ClientProductBackgroundTaskResponse","description":"Response model for client product operations that trigger background Okta tasks."},"ClientProductCreate":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info","default":{}}},"type":"object","required":["client_id","product_id"],"title":"ClientProductCreate"},"ClientProductRead":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"extra_info":{"additionalProperties":true,"type":"object","title":"Extra Info"},"feature_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Feature Ids"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["client_id","product_id","extra_info","feature_ids","id"],"title":"ClientProductRead"},"ClientProductUpdate":{"properties":{"feature_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Feature Ids"}},"type":"object","required":["feature_ids"],"title":"ClientProductUpdate"},"ClientProviderAccessAuditServiceRead":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"api_access_new_value":{"type":"boolean","title":"Api Access New Value"},"mcp_access_new_value":{"type":"boolean","title":"Mcp Access New Value"},"unmetered_new_value":{"type":"boolean","title":"Unmetered New Value"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"rationale":{"type":"string","title":"Rationale"}},"type":"object","required":["client_id","provider_id","api_access_new_value","mcp_access_new_value","unmetered_new_value","updated_by","updated_at","rationale"],"title":"ClientProviderAccessAuditServiceRead"},"ClientProviderAccessInfo":{"properties":{"provider":{"$ref":"#/components/schemas/ProviderRead"},"enabled":{"type":"boolean","title":"Enabled"},"locked":{"type":"boolean","title":"Locked"},"unmetered":{"type":"boolean","title":"Unmetered"},"production_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Production Date"},"day_lag":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Day Lag"}},"type":"object","required":["provider","enabled","locked","unmetered"],"title":"ClientProviderAccessInfo"},"ClientProviderAccessServiceBulkUpdate":{"properties":{"client_id":{"type":"string","title":"Client Id"},"provider_id":{"type":"string","title":"Provider Id"},"api_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Api Access"},"mcp_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access"},"unmetered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unmetered"},"rationale":{"type":"string","title":"Rationale"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","required":["client_id","provider_id","rationale"],"title":"ClientProviderAccessServiceBulkUpdate"},"ClientProviderAccessServiceCodeNameVendor":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"api_access":{"type":"boolean","title":"Api Access"},"mcp_access":{"type":"boolean","title":"Mcp Access"},"unmetered":{"type":"boolean","title":"Unmetered"},"api_access_locked":{"type":"boolean","title":"Api Access Locked","default":false},"mcp_access_locked":{"type":"boolean","title":"Mcp Access Locked","default":false},"mcp_provider_access_follows_api":{"type":"boolean","title":"Mcp Provider Access Follows Api","default":true},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"data_vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Vendor"},"code_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Name"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"provider_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Note"},"client_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Note"},"rationale":{"type":"string","title":"Rationale"},"pid":{"type":"string","title":"Pid"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["client_id","provider_id","api_access","mcp_access","unmetered","updated_by","updated_at","data_vendor","code_name","key","name","rationale","pid","id"],"title":"ClientProviderAccessServiceCodeNameVendor"},"ClientProviderAccessServiceRead":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"api_access":{"type":"boolean","title":"Api Access"},"mcp_access":{"type":"boolean","title":"Mcp Access"},"unmetered":{"type":"boolean","title":"Unmetered"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["client_id","provider_id","api_access","mcp_access","unmetered","updated_by","updated_at","id"],"title":"ClientProviderAccessServiceRead"},"ClientProviderAccessServiceUpdate":{"properties":{"api_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Api Access"},"mcp_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access"},"unmetered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unmetered"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"ClientProviderAccessServiceUpdate"},"ClientProviderAccessUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"ClientProviderAccessUpdate"},"ClientProviderDayLagUpdate":{"properties":{"provider_name":{"type":"string","title":"Provider Name"},"day_lag":{"type":"integer","title":"Day Lag"}},"type":"object","required":["provider_name","day_lag"],"title":"ClientProviderDayLagUpdate"},"ClientRead":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"id":{"type":"string","format":"uuid4","title":"Id"},"client_id":{"type":"string","title":"Client Id"},"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info"},"is_active":{"type":"boolean","title":"Is Active"},"tag_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Tag Ids"},"client_type_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Type Id"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"is_compliance_managed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Compliance Managed"},"is_distributor":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Distributor"},"account_manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Account Manager Email"},"entity_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Entity Ids","default":[]},"industry_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Industry Ids","default":[]},"block_compliance":{"anyOf":[{"type":"string","enum":["managed","notified","disabled"]},{"type":"null"}],"title":"Block Compliance"},"plan_tier":{"type":"string","title":"Plan Tier"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"group_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Group Ids","default":[]},"bill_to_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Bill To Email"},"bill_to_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Name"},"payment_method":{"anyOf":[{"type":"string","enum":["card","ach","invoice"]},{"type":"null"}],"title":"Payment Method"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"data_collection_consent_restricted":{"type":"boolean","title":"Data Collection Consent Restricted","default":false},"mcp_provider_access_follows_api":{"type":"boolean","title":"Mcp Provider Access Follows Api","default":true},"block_sample_access_follows_live":{"type":"boolean","title":"Block Sample Access Follows Live","default":true},"exchange_enabled":{"type":"boolean","title":"Exchange Enabled","default":false},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deletion_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deletion Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"plan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Type"},"distributor_client_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Distributor Client Id"},"distributor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distributor Name"}},"type":"object","required":["key","name","id","client_id","extra_info","is_active","tag_ids","plan_tier","created_at"],"title":"ClientRead"},"ClientRumMetricsRow":{"properties":{"avg_session_length_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Session Length Min"},"avg_frustration_count":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Frustration Count"},"avg_load_time_sec":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Load Time Sec"},"pct_sessions_with_errors":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct Sessions With Errors"},"short_name":{"type":"string","title":"Short Name"},"business_name":{"type":"string","title":"Business Name"}},"type":"object","required":["short_name","business_name"],"title":"ClientRumMetricsRow"},"ClientSSODomainCreate":{"properties":{"domain":{"type":"string","title":"Domain"},"default_group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Group Id"},"default_role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Role Id"},"jit_enabled":{"type":"boolean","title":"Jit Enabled","default":true},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["domain"],"title":"ClientSSODomainCreate"},"ClientSSODomainRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"domain":{"type":"string","title":"Domain"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"default_group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Group Id"},"default_role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Role Id"},"jit_enabled":{"type":"boolean","title":"Jit Enabled"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","domain","client_id","jit_enabled","is_active"],"title":"ClientSSODomainRead"},"ClientSSODomainUpdate":{"properties":{"default_group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Group Id"},"default_role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Default Role Id"},"jit_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Jit Enabled"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ClientSSODomainUpdate"},"ClientTypeCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["name","description"],"title":"ClientTypeCreate"},"ClientTypeRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["id","name","description"],"title":"ClientTypeRead"},"ClientUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"tag_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Tag Ids"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"is_compliance_managed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Compliance Managed"},"is_distributor":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Distributor"},"account_manager_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Account Manager Email"},"entity_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Entity Ids"},"industry_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Industry Ids"},"block_compliance":{"anyOf":[{"type":"string","enum":["managed","notified","disabled"]},{"type":"null"}],"title":"Block Compliance"},"client_type_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Type Id"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"bill_to_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Bill To Email"},"bill_to_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bill To Name"},"payment_method":{"anyOf":[{"type":"string","enum":["card","ach","invoice"]},{"type":"null"}],"title":"Payment Method"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"data_collection_consent_restricted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Data Collection Consent Restricted"},"mcp_provider_access_follows_api":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Provider Access Follows Api"},"block_sample_access_follows_live":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Block Sample Access Follows Live"}},"type":"object","title":"ClientUpdate","description":"``update_client`` applies ``exclude_unset=True``, so every field is\noptional: a caller may send only the fields it is changing (the wholesale\naccount roster, for example, PUTs ``is_active`` alone). ``name`` and the\nrelation id lists still may not be sent as ``null`` — omitting them leaves\nthem untouched, whereas nulling them would clear a non-nullable column or\nwipe the relation."},"ComplianceMode":{"type":"string","enum":["managed","notified","disabled"],"title":"ComplianceMode"},"ConsumeAgentRequest":{"properties":{"agent_id":{"type":"string","maxLength":255,"minLength":1,"title":"Agent Id"},"tool_name":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Name"},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"tool_call_id":{"type":"string","maxLength":255,"minLength":1,"title":"Tool Call Id"}},"type":"object","required":["agent_id","tool_name","amount","tool_call_id"],"title":"ConsumeAgentRequest"},"ConsumeMcpRequest":{"properties":{"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Amount"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["amount"],"title":"ConsumeMcpRequest"},"ConsumeTokensRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"client_id":{"type":"string","title":"Client Id"},"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"reason":{"type":"string","title":"Reason"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["token_id","client_id","amount","reason"],"title":"ConsumeTokensRequest"},"ConsumptionCycleRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"opened_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Opened At"},"closed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closed At"},"consumed_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consumed Amount"},"is_ongoing":{"type":"boolean","title":"Is Ongoing"},"reset_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reset By"}},"type":"object","required":["id","opened_at","closed_at","consumed_amount","is_ongoing"],"title":"ConsumptionCycleRead"},"ConsumptionCyclesResponse":{"properties":{"total_ever_consumed":{"type":"number","title":"Total Ever Consumed"},"cycles":{"items":{"$ref":"#/components/schemas/ConsumptionCycleRead"},"type":"array","title":"Cycles"}},"type":"object","required":["total_ever_consumed","cycles"],"title":"ConsumptionCyclesResponse"},"ContractCreateRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Name"},"term_start":{"type":"string","format":"date","title":"Term Start"},"term_end":{"type":"string","format":"date","title":"Term End"},"tou_id":{"type":"string","format":"uuid4","title":"Tou Id"},"signup_plan_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Signup Plan Id"},"tiers":{"items":{"$ref":"#/components/schemas/ContractTierCreate"},"type":"array","minItems":1,"title":"Tiers"}},"type":"object","required":["name","term_start","term_end","tou_id","tiers"],"title":"ContractCreateRequest"},"ContractCreateResponse":{"properties":{"contract_id":{"type":"string","format":"uuid4","title":"Contract Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"}},"type":"object","required":["contract_id","client_id"],"title":"ContractCreateResponse"},"ContractTierAdd":{"properties":{"mcp_mapping_id":{"type":"string","format":"uuid4","title":"Mcp Mapping Id"},"slots_purchased":{"type":"integer","maximum":2147483647.0,"minimum":0.0,"title":"Slots Purchased"},"wholesale_price_cents":{"type":"integer","maximum":9.223372036854776e+18,"exclusiveMinimum":0.0,"title":"Wholesale Price Cents"}},"type":"object","required":["mcp_mapping_id","slots_purchased","wholesale_price_cents"],"title":"ContractTierAdd","description":"Add a tier to an existing contract (PRO-2569 / PRO-2675).\n\n``slots_purchased`` may be 0 — a 0-slot tier is a valid transfer-only\nupgrade/downgrade target that only ever fills via transfers from other\ntiers. A price is required either way (PRO-2768): this is the path for\noffering a catalog tier introduced after the contract was created. The\ntier's name + daily MCP token cap come from the referenced catalog entry;\nonly slots + price are per-contract."},"ContractTierCreate":{"properties":{"mcp_mapping_id":{"type":"string","format":"uuid4","title":"Mcp Mapping Id"},"slots_purchased":{"type":"integer","maximum":2147483647.0,"minimum":0.0,"title":"Slots Purchased"},"wholesale_price_cents":{"type":"integer","maximum":9.223372036854776e+18,"exclusiveMinimum":0.0,"title":"Wholesale Price Cents"}},"type":"object","required":["mcp_mapping_id","slots_purchased","wholesale_price_cents"],"title":"ContractTierCreate"},"ContractUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"signup_plan_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Signup Plan Id"}},"type":"object","title":"ContractUpdateRequest","description":"Fields editable on a contract after creation (PRO-2305 / PRO-2675).\n\nThe operator-facing name and the contract-level provisioning template are\neditable; terms, TOU, and tiers have their own dedicated edit paths.\nEither field may be omitted independently — omit name so a template-only\nsave works on legacy contracts with ``name: null``."},"CreateInvoiceRequest":{"properties":{"token_id":{"type":"string","title":"Token Id","description":"ID of the token to purchase"},"token_amount":{"type":"number","exclusiveMinimum":0.0,"title":"Token Amount","description":"Amount of tokens to purchase"},"amount_cents":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Cents","description":"Invoice amount in cents"},"description":{"type":"string","title":"Description","description":"Invoice description","default":"Token Purchase"},"send_email":{"type":"boolean","title":"Send Email","description":"Whether to email the hosted invoice URL to the customer's billing email","default":false}},"type":"object","required":["token_id","token_amount","amount_cents"],"title":"CreateInvoiceRequest"},"CreateSignupProvisioningFixtureRequest":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Optional. If omitted, a unique ltprov+<12hex>@carbonarc.co address is allocated (grep ltprov+ to find fixtures)."},"selected_plan_id":{"type":"string","title":"Selected Plan Id","default":"professional"},"subscription_period":{"type":"string","title":"Subscription Period","description":"`monthly` or `annual` (must match signup_plan_config).","default":"monthly"},"synthesize_events":{"type":"boolean","title":"Synthesize Events","description":"Insert pending_signup_events that mirror verification + payment (recommended).","default":true},"enqueue_provisioning":{"type":"boolean","title":"Enqueue Provisioning","description":"If true, enqueue `task_signup_provisioning` for this session_id.","default":false},"queue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Queue","description":"Celery queue when enqueue_provisioning is true."}},"type":"object","title":"CreateSignupProvisioningFixtureRequest","description":"Seed a PAID pending signup + Stripe-shaped JSON for ``task_signup_provisioning``."},"CreateSignupProvisioningFixtureResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"email":{"type":"string","title":"Email"},"signup_id":{"type":"string","title":"Signup Id"},"selected_plan_id":{"type":"string","title":"Selected Plan Id"},"subscription_period":{"type":"string","title":"Subscription Period"},"celery_task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Celery Task Id"}},"type":"object","required":["session_id","email","signup_id","selected_plan_id","subscription_period"],"title":"CreateSignupProvisioningFixtureResponse"},"CreditEventResponse":{"properties":{"name":{"type":"string","title":"Name"},"amount":{"type":"number","title":"Amount"},"status":{"type":"string","title":"Status"},"method":{"type":"string","title":"Method"},"balance_before":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance Before"},"balance_after":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance After"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"}},"type":"object","required":["name","amount","status","method","balance_before","balance_after","created_at","updated_at"],"title":"CreditEventResponse","description":"Simplified event response for credit events"},"CsvImportResult":{"properties":{"inserted":{"type":"integer","title":"Inserted"},"unmatched_rows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Unmatched Rows"}},"type":"object","required":["inserted","unmatched_rows"],"title":"CsvImportResult"},"CustomerPortalResponse":{"properties":{"client_id":{"type":"string","title":"Client Id","description":"Client ID used for the request"},"stripe_customer_id":{"type":"string","title":"Stripe Customer Id","description":"Stripe customer ID found for the client"},"session_id":{"type":"string","title":"Session Id","description":"Stripe customer portal session ID"},"url":{"type":"string","title":"Url","description":"Customer portal URL"},"return_url":{"type":"string","title":"Return Url","description":"Return URL for after the session"},"customer_id":{"type":"string","title":"Customer Id","description":"Stripe customer ID"},"created":{"type":"integer","title":"Created","description":"Timestamp when the session was created"}},"type":"object","required":["client_id","stripe_customer_id","session_id","url","return_url","customer_id","created"],"title":"CustomerPortalResponse","description":"Response schema for customer portal session"},"DataCollectionConsentResponse":{"properties":{"data_collection_consent":{"type":"string","enum":["granted","not-granted"],"title":"Data Collection Consent"}},"type":"object","required":["data_collection_consent"],"title":"DataCollectionConsentResponse"},"DataSourcesHealth":{"properties":{"platform":{"type":"string","title":"Platform","default":"ok"},"s3":{"type":"string","title":"S3","default":"ok"},"polaris":{"type":"string","title":"Polaris","default":"ok"}},"type":"object","title":"DataSourcesHealth"},"DatasetAuditEntry":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"field":{"type":"string","title":"Field"},"old_value":{"anyOf":[{},{"type":"null"}],"title":"Old Value"},"new_value":{"anyOf":[{},{"type":"null"}],"title":"New Value"},"actor_id":{"type":"string","title":"Actor Id"},"actor_name":{"type":"string","title":"Actor Name"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"batch_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Batch Id"}},"type":"object","required":["id","dataset_id","field","actor_id","actor_name","timestamp"],"title":"DatasetAuditEntry"},"DatasetAuditResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DatasetAuditEntry"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DatasetAuditResponse"},"DatasetRow":{"properties":{"dataset":{"type":"string","title":"Dataset"},"traces":{"type":"integer","title":"Traces","default":0},"errors":{"type":"integer","title":"Errors","default":0},"error_rate_pct":{"type":"number","title":"Error Rate Pct","default":0.0}},"type":"object","required":["dataset"],"title":"DatasetRow"},"DateBounds":{"properties":{"min_date":{"type":"string","title":"Min Date"},"max_date":{"type":"string","title":"Max Date"}},"type":"object","required":["min_date","max_date"],"title":"DateBounds"},"DeductTokensRequest":{"properties":{"required_token_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Token Type"},"user_email":{"type":"string","title":"User Email"},"amount":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Amount"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["user_email","amount"],"title":"DeductTokensRequest"},"DeltaClientConfigCreate":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"share_names":{"items":{"type":"string"},"type":"array","title":"Share Names"},"share_config":{"additionalProperties":true,"type":"object","title":"Share Config"}},"type":"object","required":["client_id","share_names","share_config"],"title":"DeltaClientConfigCreate"},"DeltaSchemaCreate":{"properties":{"share_id":{"type":"string","format":"uuid4","title":"Share Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["share_id","name"],"title":"DeltaSchemaCreate"},"DeltaSchemaRead":{"properties":{"share_id":{"type":"string","format":"uuid4","title":"Share Id"},"name":{"type":"string","title":"Name"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["share_id","name","id"],"title":"DeltaSchemaRead"},"DeltaSchemaUpdate":{"properties":{"share_id":{"type":"string","format":"uuid4","title":"Share Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["share_id","name"],"title":"DeltaSchemaUpdate"},"DeltaSharesCreate":{"properties":{"name":{"type":"string","title":"Name"},"share_type":{"type":"string","title":"Share Type"}},"type":"object","required":["name","share_type"],"title":"DeltaSharesCreate"},"DeltaSharesRead":{"properties":{"name":{"type":"string","title":"Name"},"share_type":{"type":"string","title":"Share Type"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["name","share_type","id"],"title":"DeltaSharesRead"},"DeltaSharesUpdate":{"properties":{"name":{"type":"string","title":"Name"},"share_type":{"type":"string","title":"Share Type"}},"type":"object","required":["name","share_type"],"title":"DeltaSharesUpdate"},"DeltaTableCreate":{"properties":{"schema_id":{"type":"string","format":"uuid4","title":"Schema Id"},"name":{"type":"string","title":"Name"},"location":{"type":"string","title":"Location"}},"type":"object","required":["schema_id","name","location"],"title":"DeltaTableCreate"},"DeltaTableRead":{"properties":{"schema_id":{"type":"string","format":"uuid4","title":"Schema Id"},"name":{"type":"string","title":"Name"},"location":{"type":"string","title":"Location"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["schema_id","name","location","id"],"title":"DeltaTableRead"},"DeltaTableUpdate":{"properties":{"schema_id":{"type":"string","format":"uuid4","title":"Schema Id"},"name":{"type":"string","title":"Name"},"location":{"type":"string","title":"Location"}},"type":"object","required":["schema_id","name","location"],"title":"DeltaTableUpdate"},"DiscountDetail":{"properties":{"discount_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Id"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"promotion_code_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promotion Code Id"},"coupon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Id"},"coupon_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Name"},"percent_off":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent Off"},"amount_off":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Off"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"duration_in_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration In Months"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start"},"end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End"},"first_seen_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen At"}},"type":"object","title":"DiscountDetail","description":"A single discount entry from discount_history."},"DistributorAccessCandidate":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["id","first_name","last_name","email"],"title":"DistributorAccessCandidate","description":"An existing user of the LP who does not hold a distributor role yet —\na grant target for the access pickers."},"DistributorAccessCandidateListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorAccessCandidate"},"type":"array","title":"Items","default":[]}},"type":"object","title":"DistributorAccessCandidateListResponse"},"DistributorAccessGrantRequest":{"properties":{"user_id":{"type":"string","format":"uuid4","title":"User Id"},"distributor_role":{"$ref":"#/components/schemas/DistributorRoleName","default":"Distributor Admin"},"prompt_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Prompt Access"}},"type":"object","required":["user_id"],"title":"DistributorAccessGrantRequest","description":"Grant distributor access to one existing user of the LP."},"DistributorAccountRow":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"company":{"type":"string","title":"Company"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"},"admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Name"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"users":{"type":"integer","title":"Users"},"tokens_today":{"type":"number","title":"Tokens Today"},"token_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Cap"},"is_active":{"type":"boolean","title":"Is Active"},"signed_up":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Signed Up"}},"type":"object","required":["client_id","company","users","tokens_today","is_active"],"title":"DistributorAccountRow"},"DistributorAccountsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorAccountRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["items","total","page","page_size"],"title":"DistributorAccountsResponse"},"DistributorAdmin":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status","default":"active"}},"type":"object","required":["id","first_name","last_name","email","role"],"title":"DistributorAdmin","description":"An LP user holding a distributor role. The role is also assignable on\nthe user's profile in user management (like ``block_role``); the\naccess endpoints below write the same column."},"DistributorContractDetail":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"type":"string","title":"Status"},"contract_starts_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Contract Starts At"},"contract_term_months":{"type":"integer","title":"Contract Term Months"},"term_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Term End"},"account_manager":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Manager"},"signup_plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Plan Id"},"template":{"anyOf":[{"$ref":"#/components/schemas/DistributorTierTemplate"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"active_accounts":{"type":"integer","title":"Active Accounts"},"total_accounts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Accounts"},"tou":{"anyOf":[{"$ref":"#/components/schemas/DistributorTouRead"},{"type":"null"}]},"tou_versions":{"items":{"$ref":"#/components/schemas/DistributorTouRead"},"type":"array","title":"Tou Versions","default":[]},"tiers":{"items":{"$ref":"#/components/schemas/DistributorTierDetail"},"type":"array","title":"Tiers","default":[]}},"type":"object","required":["id","status","contract_term_months","created_at","updated_at","active_accounts"],"title":"DistributorContractDetail"},"DistributorDetailResponse":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"distributor_admins":{"items":{"$ref":"#/components/schemas/DistributorAdmin"},"type":"array","title":"Distributor Admins","default":[]},"contracts":{"items":{"$ref":"#/components/schemas/DistributorContractDetail"},"type":"array","title":"Contracts","default":[]}},"type":"object","required":["client_id","name","is_active"],"title":"DistributorDetailResponse"},"DistributorListItem":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"name":{"type":"string","title":"Name"},"contract_count":{"type":"integer","title":"Contract Count"},"active_accounts":{"type":"integer","title":"Active Accounts"},"total_slots":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Slots"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"}},"type":"object","required":["client_id","name","contract_count","active_accounts"],"title":"DistributorListItem","description":"One row per LP (distributor) client on the CAMS Wholesale Distribution\nlanding table, aggregated across all of the client's contracts."},"DistributorListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DistributorListResponse"},"DistributorPromptListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorPromptRow"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"retention_days":{"type":"integer","title":"Retention Days"},"window_start":{"type":"string","format":"date","title":"Window Start"},"window_end":{"type":"string","format":"date","title":"Window End"}},"type":"object","required":["items","total","page","page_size","retention_days","window_start","window_end"],"title":"DistributorPromptListResponse"},"DistributorPromptRow":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"session_id":{"type":"string","title":"Session Id"},"tool":{"type":"string","title":"Tool"},"created_at":{"type":"string","title":"Created At"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consumption"},"user_email":{"type":"string","title":"User Email"},"user_name":{"type":"string","title":"User Name","default":""},"client_name":{"type":"string","title":"Client Name","default":""},"client_id":{"type":"string","title":"Client Id","default":""},"error":{"type":"string","title":"Error","default":""},"input_text":{"type":"string","title":"Input Text","default":""},"output":{"type":"string","title":"Output","default":""}},"type":"object","required":["trace_id","session_id","tool","created_at","user_email"],"title":"DistributorPromptRow","description":"One MCP trace as the distributor sees it.\n\nDeliberately narrower than the admin trace-detail row: no latency (operator\ndetail) and no \"animal name\" — the latter is not a warehouse column at all,\njust a relabelling of ``tool_call_aggregated_sources``."},"DistributorPromptSettingsRead":{"properties":{"retention_days":{"$ref":"#/components/schemas/SettingField_int_"}},"type":"object","required":["retention_days"],"title":"DistributorPromptSettingsRead","description":"How much MCP prompt history the Platform Distributor View surfaces to a\ndistributor. A visibility cap only — nothing is deleted from the warehouse,\nand CAMS' own observability views are unaffected."},"DistributorPromptSettingsUpdate":{"properties":{"retention_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Retention Days"},"rationale":{"type":"string","maxLength":500,"title":"Rationale","description":"Required. Why this change is being made (min 3 characters, trimmed)."}},"type":"object","required":["retention_days","rationale"],"title":"DistributorPromptSettingsUpdate","description":"Payload to update the distributor prompt window. ``rationale`` is always\nrequired."},"DistributorRoleName":{"type":"string","enum":["Distributor Admin","Distributor User"],"title":"DistributorRoleName","description":"Additive distributor role stored directly on ``users.distributor_role``\n(``distributor_role_enum`` Postgres enum), the same pattern as\n``block_role``. ``DISTRIBUTOR_ADMIN`` grants access to the platform's\ndistributor features, scoped by the user's client's distributor\ncontract(s); ``DISTRIBUTOR_USER`` marks a non-administrative distributor\nuser and grants no distributor-view access on its own."},"DistributorTemplateProvider":{"properties":{"code_name":{"type":"string","title":"Code Name"},"api_access_denied":{"type":"boolean","title":"Api Access Denied"},"mcp_access_denied":{"type":"boolean","title":"Mcp Access Denied"}},"type":"object","required":["code_name","api_access_denied","mcp_access_denied"],"title":"DistributorTemplateProvider"},"DistributorTierDetail":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"slots_purchased":{"type":"integer","title":"Slots Purchased"},"slots_occupied":{"type":"integer","title":"Slots Occupied"},"slots_available":{"type":"integer","title":"Slots Available"},"wholesale_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wholesale Price Cents"},"mcp_mapping_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Mcp Mapping Id"},"mcp_daily_token_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Daily Token Cap"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","slots_purchased","slots_occupied","slots_available","status"],"title":"DistributorTierDetail"},"DistributorTierTemplate":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"features":{"items":{"type":"string"},"type":"array","title":"Features","default":[]},"feature_flags":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Feature Flags","default":[]},"seat_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Limit"},"assignable_role_ids":{"items":{"type":"string"},"type":"array","title":"Assignable Role Ids","default":[]},"default_role":{"type":"string","title":"Default Role"},"providers":{"items":{"$ref":"#/components/schemas/DistributorTemplateProvider"},"type":"array","title":"Providers","default":[]}},"type":"object","required":["plan_id","default_role"],"title":"DistributorTierTemplate","description":"Read-only snapshot of the tier's provisioning template, composed from\nthe tier's signup plan config (features/flags/team management actions)\nand the plan's provider channel restrictions."},"DistributorTouCreateRequest":{"properties":{"name":{"type":"string","maxLength":256,"minLength":1,"title":"Name"},"body":{"type":"string","minLength":1,"title":"Body"}},"type":"object","required":["name","body"],"title":"DistributorTouCreateRequest"},"DistributorTouNewVersionRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":256,"minLength":1},{"type":"null"}],"title":"Name"},"body":{"type":"string","minLength":1,"title":"Body"},"change_type":{"type":"string","enum":["correction","substantive"],"title":"Change Type"}},"type":"object","required":["body","change_type"],"title":"DistributorTouNewVersionRequest"},"DistributorTouRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"family_id":{"type":"string","format":"uuid4","title":"Family Id"},"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version"},"body":{"type":"string","title":"Body"},"document_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Url"},"requires_reaccept":{"type":"boolean","title":"Requires Reaccept","default":false},"status":{"type":"string","title":"Status"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","family_id","name","version","body","status"],"title":"DistributorTouRead"},"DistributorTouSwitchRequest":{"properties":{"tou_id":{"type":"string","format":"uuid4","title":"Tou Id"},"rationale":{"type":"string","minLength":1,"title":"Rationale"}},"type":"object","required":["tou_id","rationale"],"title":"DistributorTouSwitchRequest"},"DistributorViewActivityEntry":{"properties":{"kind":{"type":"string","title":"Kind"},"subject":{"type":"string","title":"Subject"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"signup_link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Signup Link Id"},"signup_link_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Link Name"}},"type":"object","required":["kind","subject","occurred_at"],"title":"DistributorViewActivityEntry"},"DistributorViewActivityResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewActivityEntry"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DistributorViewActivityResponse"},"DistributorViewBulkSignupLinkResult":{"properties":{"created":{"items":{"$ref":"#/components/schemas/DistributorViewSignupLink"},"type":"array","title":"Created"},"skipped":{"items":{"$ref":"#/components/schemas/DistributorViewSkippedEmail"},"type":"array","title":"Skipped"}},"type":"object","required":["created","skipped"],"title":"DistributorViewBulkSignupLinkResult"},"DistributorViewClientUser":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"is_active":{"type":"boolean","title":"Is Active"},"role":{"type":"string","title":"Role"},"added_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Added At"}},"type":"object","required":["id","email","first_name","last_name","is_active","role"],"title":"DistributorViewClientUser"},"DistributorViewClientUsersResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewClientUser"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DistributorViewClientUsersResponse"},"DistributorViewContractListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewContractResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DistributorViewContractListResponse"},"DistributorViewContractResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"label":{"type":"string","title":"Label"},"distributor_name":{"type":"string","title":"Distributor Name"},"distributor_code":{"type":"string","title":"Distributor Code"},"primary_contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"account_manager":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Manager"},"contract_starts_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Contract Starts At"},"contract_ends_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Contract Ends At"},"contract_term_months":{"type":"integer","title":"Contract Term Months"},"slots_purchased":{"type":"integer","title":"Slots Purchased"},"slots_occupied":{"type":"integer","title":"Slots Occupied"},"active_accounts":{"type":"integer","title":"Active Accounts"},"mcp_daily_token_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Daily Token Cap"},"wholesale_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wholesale Price Cents"},"tou_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Version"},"status":{"type":"string","title":"Status"},"tiers":{"items":{"$ref":"#/components/schemas/DistributorViewTier"},"type":"array","title":"Tiers","default":[]}},"type":"object","required":["id","label","distributor_name","distributor_code","contract_term_months","slots_purchased","slots_occupied","active_accounts","status"],"title":"DistributorViewContractResponse","description":"One contract's summary, scoped to that contract: term and tiers are the\ncontract's own; the distributor profile fields (name, code, primary\ncontact) are common across the LP's contracts. The flat slot/cap/price\nfields are the contract-level rollup (summed slots, headline cap/price);\n``tiers`` carries the per-lot breakdown the UI renders."},"DistributorViewPromptAccessRequest":{"properties":{"prompt_access":{"type":"boolean","title":"Prompt Access"}},"type":"object","required":["prompt_access"],"title":"DistributorViewPromptAccessRequest","description":"The value a Distributor Admin is setting a teammate's prompt access to.\nA bare bool rather than separate grant/revoke routes — the grant is one, and\nthe roster drives it from a toggle."},"DistributorViewSignupLink":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"type":"string","title":"Label"},"token":{"type":"string","title":"Token"},"recipient_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Email"},"status":{"type":"string","title":"Status"},"expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"contract_id":{"type":"string","format":"uuid","title":"Contract Id"},"tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tier Id"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"},"redemption":{"anyOf":[{"$ref":"#/components/schemas/DistributorViewSignupLinkRedemption"},{"type":"null"}]}},"type":"object","required":["id","label","token","status","created_at","contract_id"],"title":"DistributorViewSignupLink"},"DistributorViewSignupLinkConflict":{"properties":{"email":{"type":"string","title":"Email"},"domain":{"type":"string","title":"Domain"},"kind":{"type":"string","enum":["registered","active","pending"],"title":"Kind"},"match":{"type":"string","enum":["email","domain"],"title":"Match"}},"type":"object","required":["email","domain","kind","match"],"title":"DistributorViewSignupLinkConflict"},"DistributorViewSignupLinkConflictRequest":{"properties":{"emails":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Emails"}},"type":"object","required":["emails"],"title":"DistributorViewSignupLinkConflictRequest"},"DistributorViewSignupLinkConflictResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewSignupLinkConflict"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DistributorViewSignupLinkConflictResponse"},"DistributorViewSignupLinkCreate":{"properties":{"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expires At"},"contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Contract Id"},"tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tier Id"},"recipient_emails":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Recipient Emails"}},"type":"object","required":["label","recipient_emails"],"title":"DistributorViewSignupLinkCreate"},"DistributorViewSignupLinkListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewSignupLink"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DistributorViewSignupLinkListResponse"},"DistributorViewSignupLinkRedemption":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"redeemed_at":{"type":"string","format":"date-time","title":"Redeemed At"}},"type":"object","required":["redeemed_at"],"title":"DistributorViewSignupLinkRedemption"},"DistributorViewSignupLinkUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Label"},"expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"DistributorViewSignupLinkUpdate","description":"Editable fields on an existing link. Contract, tier, and recipient stay\nfixed at creation; only the label and expiration can move.\n\nPATCH semantics: omitted fields are left untouched (the service applies\nonly ``model_fields_set``). ``None`` for expiry (when sent) = never expires,\nso \"provided\" is tracked, not inferred from the value."},"DistributorViewSkippedEmail":{"properties":{"email":{"type":"string","title":"Email"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["email","reason"],"title":"DistributorViewSkippedEmail"},"DistributorViewTeamMember":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"distributor_role":{"type":"string","title":"Distributor Role"},"status":{"type":"string","title":"Status","default":"active"},"prompt_access":{"type":"boolean","title":"Prompt Access","default":false}},"type":"object","required":["id","first_name","last_name","email","distributor_role"],"title":"DistributorViewTeamMember"},"DistributorViewTeamResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewTeamMember"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DistributorViewTeamResponse"},"DistributorViewTeamUserBulkCreate":{"properties":{"users":{"items":{"$ref":"#/components/schemas/DistributorViewTeamUserCreate"},"type":"array","minItems":1,"title":"Users"}},"type":"object","required":["users"],"title":"DistributorViewTeamUserBulkCreate","description":"A batch of new users for the distributor client.\n\nDuplicate addresses inside one batch are rejected rather than collapsed —\ntwo rows sharing an address means the caller mistyped one of them, and\nquietly dropping a row would seat fewer people than the form showed."},"DistributorViewTeamUserBulkResult":{"properties":{"created":{"items":{"$ref":"#/components/schemas/DistributorViewTeamMember"},"type":"array","title":"Created"},"skipped":{"items":{"$ref":"#/components/schemas/DistributorViewSkippedEmail"},"type":"array","title":"Skipped","default":[]}},"type":"object","required":["created"],"title":"DistributorViewTeamUserBulkResult","description":"Outcome of a batch. ``created`` holds the seated users; ``skipped``\nnames any address the batch could not seat, with the reason."},"DistributorViewTeamUserCreate":{"properties":{"first_name":{"type":"string","maxLength":256,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":256,"minLength":1,"title":"Last Name"},"email":{"type":"string","maxLength":512,"minLength":1,"title":"Email"},"distributor_role":{"type":"string","title":"Distributor Role"},"prompt_access":{"type":"boolean","title":"Prompt Access","default":false}},"type":"object","required":["first_name","last_name","email","distributor_role"],"title":"DistributorViewTeamUserCreate","description":"One new user to put on the distributor's own client.\n\nCarries only what it takes to seat somebody with a distributor role: the\nplatform role and group are defaulted server-side, and the optional user\nfields (transaction limit, allocated amount, consent) are not offered on\nthis surface at all."},"DistributorViewTier":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slots_purchased":{"type":"integer","title":"Slots Purchased"},"slots_occupied":{"type":"integer","title":"Slots Occupied"},"slots_available":{"type":"integer","title":"Slots Available"},"mcp_daily_token_cap":{"type":"integer","title":"Mcp Daily Token Cap"},"wholesale_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wholesale Price Cents"}},"type":"object","required":["id","name","slots_purchased","slots_occupied","slots_available","mcp_daily_token_cap"],"title":"DistributorViewTier","description":"One purchased lot within a contract: its own slot pool, daily token\ncap, and wholesale price. A wholesale client (and a signup link) is bound\nto a specific tier, and its usage renders against that tier's cap."},"DistributorViewWholesaleClient":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"company_name":{"type":"string","title":"Company Name"},"admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Name"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"joined_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Joined At"},"status":{"type":"string","title":"Status"},"user_count":{"type":"integer","title":"User Count"},"tokens_used_today":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tokens Used Today"},"mcp_daily_token_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Daily Token Cap"},"license_expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"License Expires At"},"contract_id":{"type":"string","format":"uuid","title":"Contract Id"},"tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tier Id"},"tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Name"}},"type":"object","required":["id","company_name","status","user_count","contract_id"],"title":"DistributorViewWholesaleClient"},"DistributorViewWholesaleClientListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DistributorViewWholesaleClient"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DistributorViewWholesaleClientListResponse"},"EffectiveMemberRead":{"properties":{"email":{"type":"string","title":"Email"},"source":{"type":"string","enum":["manual","cams"],"title":"Source"},"member_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Member Id"},"added_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added At"},"added_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Added By"},"admin_group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Admin Group Id"},"cams_group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cams Group Name"},"allowed":{"type":"boolean","title":"Allowed","default":true}},"type":"object","required":["email","source"],"title":"EffectiveMemberRead","description":"A resolved recipient — either a manually-added member or a user from a linked CAMS group."},"EmailNotificationCreate":{"properties":{"subject":{"type":"string","maxLength":300,"minLength":1,"title":"Subject"},"preview_text":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Preview Text"},"body":{"type":"string","maxLength":524288,"minLength":1,"title":"Body"},"audience":{"$ref":"#/components/schemas/AudienceFilter"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"}},"type":"object","required":["subject","body","audience"],"title":"EmailNotificationCreate","description":"Payload for ``POST /email-notifications`` (saves a draft)."},"EmailNotificationRecipientResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"status":{"type":"string","enum":["pending","sent","failed"],"title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"}},"type":"object","required":["id","email","first_name","last_name","client_id","status","error_message","sent_at"],"title":"EmailNotificationRecipientResponse"},"EmailNotificationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"subject":{"type":"string","title":"Subject"},"preview_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Text"},"body":{"type":"string","title":"Body"},"from_name":{"type":"string","title":"From Name"},"from_address":{"type":"string","title":"From Address"},"status":{"type":"string","enum":["draft","sending","sent","failed"],"title":"Status"},"audience":{"$ref":"#/components/schemas/AudienceFilter"},"recipient_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recipient Count"},"sent_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sent Count"},"failed_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failed Count"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","subject","preview_text","body","from_name","from_address","status","audience","recipient_count","sent_count","failed_count","scheduled_for","sent_at","created_by","created_at","updated_at"],"title":"EmailNotificationResponse","description":"Wire-format for a notification record. Mirrors the TS\n``EmailNotification`` interface. ``from_name`` / ``from_address`` are\nreturned on every response so the detail page can show recipients what\nsender was used — but they're always the configured operational sender."},"EmailNotificationUpdate":{"properties":{"subject":{"anyOf":[{"type":"string","maxLength":300,"minLength":1},{"type":"null"}],"title":"Subject"},"preview_text":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Preview Text"},"body":{"anyOf":[{"type":"string","maxLength":524288,"minLength":1},{"type":"null"}],"title":"Body"},"audience":{"anyOf":[{"$ref":"#/components/schemas/AudienceFilter"},{"type":"null"}]},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"}},"type":"object","title":"EmailNotificationUpdate","description":"Payload for ``PUT /email-notifications/{id}`` (draft edits only)."},"EmailRecipientGroupCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"EmailRecipientGroupCreate"},"EmailRecipientGroupMemberCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"EmailRecipientGroupMemberCreate"},"EmailRecipientGroupMemberRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"group_id":{"type":"string","format":"uuid","title":"Group Id"},"email":{"type":"string","title":"Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","group_id","email","created_at","created_by"],"title":"EmailRecipientGroupMemberRead"},"EmailRecipientGroupRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"member_count":{"type":"integer","title":"Member Count"},"linked_groups_count":{"type":"integer","title":"Linked Groups Count"},"total_recipient_count":{"type":"integer","title":"Total Recipient Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","name","description","member_count","linked_groups_count","total_recipient_count","created_at","updated_at","created_by"],"title":"EmailRecipientGroupRead"},"EmailRecipientGroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"EmailRecipientGroupUpdate"},"EmailTriggerCreate":{"properties":{"key":{"type":"string","maxLength":200,"minLength":1,"title":"Key"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["key","name"],"title":"EmailTriggerCreate"},"EmailTriggerEmailsResponse":{"properties":{"emails":{"items":{"type":"string"},"type":"array","title":"Emails"}},"type":"object","required":["emails"],"title":"EmailTriggerEmailsResponse"},"EmailTriggerRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"group_count":{"type":"integer","title":"Group Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","key","name","description","group_count","created_at","updated_at","created_by"],"title":"EmailTriggerRead"},"EmailTriggerUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"EmailTriggerUpdate"},"EmailVerificationResendResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["session_id","status"],"title":"EmailVerificationResendResponse"},"EmailVerificationVerifyRequest":{"properties":{"code":{"type":"string","maxLength":32,"minLength":1,"title":"Code","description":"Verification code from the email (digits only; spaces or separators between digits are ignored)."}},"type":"object","required":["code"],"title":"EmailVerificationVerifyRequest"},"EmailVerificationVerifyResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["session_id","status"],"title":"EmailVerificationVerifyResponse"},"EnqueueRequest":{"properties":{"task_name":{"type":"string","title":"Task Name"},"kwargs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Kwargs"},"queue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Queue"}},"type":"object","required":["task_name"],"title":"EnqueueRequest"},"EnqueueResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"task_name":{"type":"string","title":"Task Name"},"queue":{"type":"string","title":"Queue"}},"type":"object","required":["task_id","task_name","queue"],"title":"EnqueueResponse"},"EnsureSufficientRequest":{"properties":{"required_token_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Token Type"},"user_email":{"type":"string","title":"User Email"},"required_tokens":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Required Tokens"},"usage_scope":{"type":"string","title":"Usage Scope","default":"platform"}},"type":"object","required":["user_email","required_tokens"],"title":"EnsureSufficientRequest"},"EnterpriseChannelRule":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"api_access_denied":{"type":"boolean","title":"Api Access Denied","default":false},"mcp_access_denied":{"type":"boolean","title":"Mcp Access Denied","default":false}},"type":"object","required":["client_id"],"title":"EnterpriseChannelRule"},"EnterpriseClientOption":{"properties":{"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"name":{"type":"string","title":"Name"},"contract_count":{"type":"integer","title":"Contract Count"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"admin_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Name"}},"type":"object","required":["client_id","name","contract_count"],"title":"EnterpriseClientOption","description":"Combobox option for the create-contract client picker, carrying what\nthe form's conditional behavior needs: existing-contract count and the\ninherited distributor admin identity."},"EnterpriseFields":{"properties":{"mcp_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Amount","description":"MCP subscription item unit amount (dollars) from stripe_subscription_items"},"mcp_billing_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Billing Cycle","description":"MCP subscription item recurring interval (e.g. month/year) from stripe_subscription_items"}},"type":"object","title":"EnterpriseFields"},"EnterpriseSubscriptionCreate":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id","description":"CAMS client UUID — used to look up Stripe customer and auto-populate metadata"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id","description":"CAMS product UUID for metadata. If omitted, defaults to the platform (Insights Platform) product."},"items":{"items":{"$ref":"#/components/schemas/EnterpriseSubscriptionLineItem"},"type":"array","minItems":1,"title":"Items","description":"One or more line items (price + quantity)"},"subscription_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Start Date","description":"When the subscription period begins (Duration in Stripe)"},"billing_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Billing Start Date","description":"When billing starts (used as trial_end — supports dates beyond 30 days)"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At","description":"Scheduled cancellation date"},"trial_period_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Trial Period Days"},"collection_method":{"anyOf":[{"type":"string","enum":["charge_automatically","send_invoice"]},{"type":"null"}],"title":"Collection Method"},"days_until_due":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Days Until Due","description":"Days until invoice due (defaults to 30 for send_invoice)"},"payment_behavior":{"anyOf":[{"type":"string","enum":["default_incomplete","allow_incomplete","error_if_incomplete"]},{"type":"null"}],"title":"Payment Behavior"}},"type":"object","required":["client_id","items"],"title":"EnterpriseSubscriptionCreate","description":"Schema for creating an enterprise Stripe subscription with multiple products."},"EnterpriseSubscriptionLineItem":{"properties":{"price":{"type":"string","title":"Price","description":"Stripe price ID"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1}},"type":"object","required":["price"],"title":"EnterpriseSubscriptionLineItem"},"EnterpriseSubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"customer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"current_period_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Period End"},"cancel_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cancel At"},"trial_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial End"},"collection_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Method"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"livemode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Livemode"}},"type":"object","required":["id"],"title":"EnterpriseSubscriptionResponse"},"EntityCreateOrUpdate":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"EntityCreateOrUpdate"},"EntityRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"EntityRead"},"ErrorCodeHeatmapCell":{"properties":{"tool":{"type":"string","title":"Tool"},"error_code":{"type":"string","title":"Error Code"},"count":{"type":"integer","title":"Count","default":0}},"type":"object","required":["tool","error_code"],"title":"ErrorCodeHeatmapCell"},"ErrorCodeRow":{"properties":{"error_code":{"type":"string","title":"Error Code"},"count":{"type":"integer","title":"Count","default":0},"pct_of_errors":{"type":"number","title":"Pct Of Errors","default":0.0},"median_latency":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Latency"}},"type":"object","required":["error_code"],"title":"ErrorCodeRow"},"ErrorTypeOption":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label","default":""}},"type":"object","required":["value"],"title":"ErrorTypeOption"},"EvalConfig":{"properties":{"profiles":{"items":{"type":"string"},"type":"array","title":"Profiles"},"datasets":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Datasets"},"personas":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Personas"}},"type":"object","required":["profiles","datasets","personas"],"title":"EvalConfig"},"EvalJob":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"output_lines":{"items":{"type":"string"},"type":"array","title":"Output Lines"},"started_at":{"type":"string","title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"args":{"additionalProperties":true,"type":"object","title":"Args"},"git_branch":{"type":"string","title":"Git Branch","default":""},"git_hash":{"type":"string","title":"Git Hash","default":""},"git_url":{"type":"string","title":"Git Url","default":""},"created_by":{"type":"string","title":"Created By","default":""}},"type":"object","required":["job_id","status","output_lines","started_at","args"],"title":"EvalJob"},"EvalRunRequest":{"properties":{"endpoints":{"items":{"type":"string"},"type":"array","title":"Endpoints"},"dataset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset"},"no_dataset":{"type":"boolean","title":"No Dataset","default":false},"persona_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Id"},"limit":{"type":"integer","title":"Limit","default":3},"max_turns":{"type":"integer","title":"Max Turns","default":3},"max_tool_calls":{"type":"integer","title":"Max Tool Calls","default":10},"runs":{"type":"integer","title":"Runs","default":1},"experiment":{"type":"string","title":"Experiment","default":"mcp-conversation-eval"},"simulate":{"type":"boolean","title":"Simulate","default":false},"host":{"type":"string","title":"Host","default":"http://localhost:8080"}},"type":"object","required":["endpoints"],"title":"EvalRunRequest"},"FeatureCreate":{"properties":{"name":{"type":"string","title":"Name"},"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","product_id"],"title":"FeatureCreate"},"FeatureDataSourceLinkCreate":{"properties":{"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"data_source_id":{"type":"string","format":"uuid4","title":"Data Source Id"}},"type":"object","required":["feature_id","data_source_id"],"title":"FeatureDataSourceLinkCreate"},"FeatureDataSourceLinkRead":{"properties":{"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"data_source_id":{"type":"string","format":"uuid4","title":"Data Source Id"},"name":{"type":"string","title":"Name"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["feature_id","data_source_id","name","id"],"title":"FeatureDataSourceLinkRead"},"FeatureElementDataSourceCreate":{"properties":{"name":{"type":"string","title":"Name"},"data_source":{"type":"string","title":"Data Source"}},"type":"object","required":["name","data_source"],"title":"FeatureElementDataSourceCreate"},"FeatureElementDataSourceRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"data_source":{"type":"string"},"data":{"items":{},"type":"array","title":"Data"}},"type":"object","required":["id","name","data_source","data"],"title":"FeatureElementDataSourceRead"},"FeatureElementRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"data_source_id":{"type":"string","format":"uuid4","title":"Data Source Id"},"element_id":{"type":"string","title":"Element Id"},"element_label":{"type":"string","title":"Element Label"},"element_info":{"additionalProperties":true,"type":"object","title":"Element Info"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","feature_id","data_source_id","element_id","element_label","element_info","active"],"title":"FeatureElementRead"},"FeatureFilterOption":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"FeatureFilterOption","description":"Minimal feature row for Clients-table filter dropdowns.\n\nServed from ``GET /clients/feature-options`` so operators with ``clients``\n(but not product-management ``features``) can populate the filter."},"FeatureFlagCreate":{"properties":{"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_global":{"type":"boolean","title":"Is Global","default":false},"value_type":{"anyOf":[{"$ref":"#/components/schemas/FeatureFlagValueType"},{"type":"null"}]},"product_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Product Ids"}},"type":"object","required":["name","value","product_ids"],"title":"FeatureFlagCreate"},"FeatureFlagRead":{"properties":{"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_global":{"type":"boolean","title":"Is Global","default":false},"value_type":{"anyOf":[{"$ref":"#/components/schemas/FeatureFlagValueType"},{"type":"null"}]},"id":{"type":"string","format":"uuid4","title":"Id"},"product_ids":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Product Ids","default":[]},"is_boolean":{"type":"boolean","title":"Is Boolean","default":false}},"type":"object","required":["name","value","id"],"title":"FeatureFlagRead"},"FeatureFlagUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"product_ids":{"anyOf":[{"items":{"type":"string","format":"uuid4"},"type":"array"},{"type":"null"}],"title":"Product Ids"},"value_type":{"anyOf":[{"$ref":"#/components/schemas/FeatureFlagValueType"},{"type":"null"}]}},"type":"object","title":"FeatureFlagUpdate"},"FeatureFlagValueType":{"type":"string","enum":["any","boolean","integer","string","json"],"title":"FeatureFlagValueType"},"FeatureRead":{"properties":{"name":{"type":"string","title":"Name"},"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"id":{"type":"string","format":"uuid4","title":"Id"},"key":{"type":"string","title":"Key"}},"type":"object","required":["name","product_id","id","key"],"title":"FeatureRead"},"FeatureUpdate":{"properties":{"product_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Product Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"key":{"type":"string","title":"Key"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["key"],"title":"FeatureUpdate"},"FeaturedEntityRead":{"properties":{"entity_id":{"type":"integer","title":"Entity Id"},"entity_name":{"type":"string","title":"Entity Name"},"representation":{"type":"string","title":"Representation"}},"type":"object","required":["entity_id","entity_name","representation"],"title":"FeaturedEntityRead"},"FeaturedInsightRead":{"properties":{"insight_id":{"type":"integer","title":"Insight Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"subject":{"type":"string","title":"Subject"},"topic":{"type":"string","title":"Topic"},"insight_label":{"type":"string","title":"Insight Label"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["insight_id","dataset_id","subject","topic","insight_label","id"],"title":"FeaturedInsightRead"},"FeaturedItemsResponse":{"properties":{"entities":{"items":{"$ref":"#/components/schemas/FeaturedEntityRead"},"type":"array","title":"Entities"},"insights":{"items":{"$ref":"#/components/schemas/FeaturedInsightRead"},"type":"array","title":"Insights"}},"type":"object","required":["entities","insights"],"title":"FeaturedItemsResponse"},"FeeType":{"type":"string","enum":["one_time","annual"],"title":"FeeType"},"FiltersResponse":{"properties":{"clients":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Clients"},"plan_tiers":{"items":{"type":"string"},"type":"array","title":"Plan Tiers"},"data_sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data Sources"},"metrics":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Metrics"}},"type":"object","required":["clients","plan_tiers","data_sources","metrics"],"title":"FiltersResponse"},"FormulaSpec":{"properties":{"formula":{"type":"string","title":"Formula"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["formula"],"title":"FormulaSpec"},"GroupBySortSpec":{"properties":{"aggregation":{"type":"string","title":"Aggregation","default":"count"},"order":{"type":"string","enum":["asc","desc"],"title":"Order","default":"desc"}},"type":"object","title":"GroupBySortSpec"},"GroupBySpec":{"properties":{"facet":{"type":"string","title":"Facet"},"limit":{"type":"integer","title":"Limit","default":10},"sort":{"anyOf":[{"$ref":"#/components/schemas/GroupBySortSpec"},{"type":"null"}]}},"type":"object","required":["facet"],"title":"GroupBySpec"},"GroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocated Amount"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":false},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","default":{}},"user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"User Ids","default":[]},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"mcp_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Period Limit"},"mcp_access_revoked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked","default":false}},"type":"object","required":["name","client_id"],"title":"GroupCreate"},"GroupRead":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocated Amount"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":false},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","default":{}},"user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"User Ids","default":[]},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"mcp_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Period Limit"},"mcp_period_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Period Consumption"},"mcp_period_reset_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Reset Date"},"mcp_period_next_reset_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Next Reset Date"},"mcp_period_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Start Date"},"mcp_access_revoked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked"},"mcp_access_revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Access Revoked At"}},"type":"object","required":["name","client_id","id","key"],"title":"GroupRead"},"GroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocated Amount"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"User Ids","default":[]},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]}},"type":"object","title":"GroupUpdate"},"GroupsPageRead":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Allocated Amount"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","default":false},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","default":{}},"user_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"User Ids","default":[]},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"mcp_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Period Limit"},"mcp_period_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Period Consumption"},"mcp_period_reset_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Reset Date"},"mcp_period_next_reset_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Next Reset Date"},"mcp_period_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Period Start Date"},"mcp_access_revoked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked"},"mcp_access_revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Access Revoked At"},"client_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Client Limit"}},"type":"object","required":["name","client_id","id","key"],"title":"GroupsPageRead"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HierarchyNode":{"properties":{"name":{"type":"string","title":"Name"},"value":{"type":"integer","title":"Value","default":0},"children":{"items":{"$ref":"#/components/schemas/HierarchyNode"},"type":"array","title":"Children","default":[]}},"type":"object","required":["name"],"title":"HierarchyNode"},"InProgressOutreachSettingsRead":{"properties":{"outreach_enabled":{"$ref":"#/components/schemas/SettingField_bool_"},"threshold_minutes":{"$ref":"#/components/schemas/SettingField_int_"},"watcher_interval_minutes":{"type":"integer","title":"Watcher Interval Minutes"}},"type":"object","required":["outreach_enabled","threshold_minutes","watcher_interval_minutes"],"title":"InProgressOutreachSettingsRead","description":"Current customer outreach tuning for in-progress signups (PRO-825)."},"InProgressOutreachSettingsUpdate":{"properties":{"outreach_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Outreach Enabled"},"threshold_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":1.0},{"type":"null"}],"title":"Threshold Minutes"},"rationale":{"type":"string","maxLength":500,"title":"Rationale","description":"Required. Why this change is being made (min 3 characters, trimmed)."}},"type":"object","required":["rationale"],"title":"InProgressOutreachSettingsUpdate","description":"Payload to update in-progress outreach tuning. Omitted value fields are\nleft untouched. ``rationale`` is always required on PATCH."},"IndustryCreateOrUpdate":{"properties":{"sector_code":{"type":"string","title":"Sector Code"},"sector":{"type":"string","title":"Sector"},"industry_group_code":{"type":"string","title":"Industry Group Code"},"industry_group":{"type":"string","title":"Industry Group"},"industry_code":{"type":"string","title":"Industry Code"},"industry":{"type":"string","title":"Industry"}},"type":"object","required":["sector_code","sector","industry_group_code","industry_group","industry_code","industry"],"title":"IndustryCreateOrUpdate"},"IndustryRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"sector_code":{"type":"string","title":"Sector Code"},"sector":{"type":"string","title":"Sector"},"industry_group_code":{"type":"string","title":"Industry Group Code"},"industry_group":{"type":"string","title":"Industry Group"},"industry_code":{"type":"string","title":"Industry Code"},"industry":{"type":"string","title":"Industry"}},"type":"object","required":["id","sector_code","sector","industry_group_code","industry_group","industry_code","industry"],"title":"IndustryRead"},"InsightErrorRow":{"properties":{"insight":{"type":"string","title":"Insight"},"total_traces":{"type":"integer","title":"Total Traces","default":0},"error_traces":{"type":"integer","title":"Error Traces","default":0},"error_rate":{"type":"number","title":"Error Rate","default":0.0}},"type":"object","required":["insight"],"title":"InsightErrorRow"},"InterestsUpdate":{"properties":{"add":{"items":{"$ref":"#/components/schemas/UserInterestCreate"},"type":"array","title":"Add","default":[]},"remove":{"items":{"type":"string","format":"uuid4"},"type":"array","title":"Remove","default":[]}},"type":"object","title":"InterestsUpdate"},"InternalQueueStep":{"type":"string","enum":["accounts","legal","engineering","complete"],"title":"InternalQueueStep"},"InvoiceResponse":{"properties":{"invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Id"},"stripe_invoice_id":{"type":"string","title":"Stripe Invoice Id"},"payment_id":{"type":"string","title":"Payment Id"},"hosted_invoice_url":{"type":"string","title":"Hosted Invoice Url"},"status":{"type":"string","title":"Status"},"token_amount":{"type":"number","title":"Token Amount"},"amount_cents":{"type":"integer","title":"Amount Cents"},"collection_method":{"type":"string","title":"Collection Method"},"email_sent":{"type":"boolean","title":"Email Sent","default":false},"email_status":{"type":"string","title":"Email Status"},"email_error":{"type":"string","title":"Email Error"}},"type":"object","required":["stripe_invoice_id","payment_id","hosted_invoice_url","status","token_amount","amount_cents","collection_method"],"title":"InvoiceResponse"},"InvoicesResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/StripeInvoiceItem"},"type":"array","title":"Items"}},"type":"object","required":["total","items"],"title":"InvoicesResponse"},"IssuePromotionalGrantsRequest":{"properties":{"amount":{"anyOf":[{"type":"number","maximum":100000.0},{"type":"string"}],"title":"Amount","description":"Maximum 100,000 tokens allowed per allocation"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["amount","effective_at","expires_at"],"title":"IssuePromotionalGrantsRequest"},"IssueTokensOneTimeRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"client_id":{"type":"string","title":"Client Id"},"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"string"}],"title":"Amount"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"reason":{"type":"string","title":"Reason"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["token_id","client_id","amount","reason"],"title":"IssueTokensOneTimeRequest"},"IssueTokensRecurringRequest":{"properties":{"token_id":{"type":"string","title":"Token Id"},"client_id":{"type":"string","title":"Client Id"},"amount_per_occurrence":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"string"}],"title":"Amount Per Occurrence"},"start_at":{"type":"string","format":"date-time","title":"Start At"},"recurrence_unit":{"$ref":"#/components/schemas/ScheduledLedgerRecurrenceUnit"},"interval":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Interval","default":1},"max_occurrences":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Max Occurrences"},"token_expires_days":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Token Expires Days"},"reason":{"type":"string","title":"Reason"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["token_id","client_id","amount_per_occurrence","start_at","recurrence_unit","max_occurrences","reason"],"title":"IssueTokensRecurringRequest"},"KPIClientEntry":{"properties":{"short_name":{"type":"string","title":"Short Name"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"plan_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tier"}},"type":"object","required":["short_name"],"title":"KPIClientEntry"},"KPIConsumptionEntry":{"properties":{"short_name":{"type":"string","title":"Short Name"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"plan_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Tier"},"value":{"type":"number","title":"Value","default":0.0}},"type":"object","required":["short_name"],"title":"KPIConsumptionEntry"},"KPIMetricDiff":{"properties":{"tier":{"type":"string","title":"Tier"},"metric":{"type":"string","title":"Metric"},"ours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ours"},"coles":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coles"},"diff":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Diff"},"match":{"type":"boolean","title":"Match","default":false}},"type":"object","required":["tier","metric"],"title":"KPIMetricDiff"},"KPITierDrilldown":{"properties":{"roster":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Roster","default":[]},"signups":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Signups","default":[]},"runoff":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Runoff","default":[]},"c_churn":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"C Churn","default":[]},"e_churn":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"E Churn","default":[]},"eng_90d":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Eng 90D","default":[]},"engaged_7d":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Engaged 7D","default":[]},"engaged_30d":{"items":{"$ref":"#/components/schemas/KPIClientEntry"},"type":"array","title":"Engaged 30D","default":[]},"api_calls_7d":{"items":{"$ref":"#/components/schemas/KPIConsumptionEntry"},"type":"array","title":"Api Calls 7D","default":[]},"s3_calls_7d":{"items":{"$ref":"#/components/schemas/KPIConsumptionEntry"},"type":"array","title":"S3 Calls 7D","default":[]},"s3_mb_7d":{"items":{"$ref":"#/components/schemas/KPIConsumptionEntry"},"type":"array","title":"S3 Mb 7D","default":[]},"platform_tok_7d":{"items":{"$ref":"#/components/schemas/KPIConsumptionEntry"},"type":"array","title":"Platform Tok 7D","default":[]},"mcp_tok_7d":{"items":{"$ref":"#/components/schemas/KPIConsumptionEntry"},"type":"array","title":"Mcp Tok 7D","default":[]}},"type":"object","title":"KPITierDrilldown"},"KPITierMetrics":{"properties":{"roster":{"type":"integer","title":"Roster","default":0},"signups":{"type":"integer","title":"Signups","default":0},"runoff":{"type":"integer","title":"Runoff","default":0},"c_churn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"C Churn"},"e_churn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"E Churn"},"eng_90d":{"type":"integer","title":"Eng 90D","default":0},"engaged_7d":{"type":"integer","title":"Engaged 7D","default":0},"engaged_30d":{"type":"integer","title":"Engaged 30D","default":0},"api_calls_7d":{"type":"number","title":"Api Calls 7D","default":0},"s3_calls_7d":{"type":"number","title":"S3 Calls 7D","default":0},"s3_mb_7d":{"type":"number","title":"S3 Mb 7D","default":0},"platform_tok_7d":{"type":"number","title":"Platform Tok 7D","default":0},"mcp_tok_7d":{"type":"number","title":"Mcp Tok 7D","default":0}},"type":"object","title":"KPITierMetrics"},"KPIWeeklyBackfillResponse":{"properties":{"weeks_processed":{"type":"integer","title":"Weeks Processed"},"weeks":{"items":{"$ref":"#/components/schemas/KPIWeeklyBackfillWeek"},"type":"array","title":"Weeks"}},"type":"object","required":["weeks_processed","weeks"],"title":"KPIWeeklyBackfillResponse"},"KPIWeeklyBackfillWeek":{"properties":{"week_ending":{"type":"string","format":"date","title":"Week Ending"},"saved":{"type":"boolean","title":"Saved"},"comparison":{"anyOf":[{"items":{"$ref":"#/components/schemas/KPIMetricDiff"},"type":"array"},{"type":"null"}],"title":"Comparison"}},"type":"object","required":["week_ending","saved"],"title":"KPIWeeklyBackfillWeek"},"KPIWeeklyCounts":{"properties":{"enterprise":{"$ref":"#/components/schemas/KPITierMetrics"},"business":{"$ref":"#/components/schemas/KPITierMetrics"},"professional":{"$ref":"#/components/schemas/KPITierMetrics"},"wholesale_client":{"$ref":"#/components/schemas/KPITierMetrics"},"distributor":{"$ref":"#/components/schemas/KPITierMetrics"},"all_tiers":{"$ref":"#/components/schemas/KPITierMetrics"}},"type":"object","required":["enterprise","business","professional","wholesale_client","distributor","all_tiers"],"title":"KPIWeeklyCounts"},"KPIWeeklyDrilldownResponse":{"properties":{"week_ending":{"type":"string","format":"date","title":"Week Ending"},"validation":{"$ref":"#/components/schemas/KPIWeeklyCounts"},"enterprise":{"$ref":"#/components/schemas/KPITierDrilldown"},"business":{"$ref":"#/components/schemas/KPITierDrilldown"},"professional":{"$ref":"#/components/schemas/KPITierDrilldown"},"wholesale_client":{"$ref":"#/components/schemas/KPITierDrilldown"},"distributor":{"$ref":"#/components/schemas/KPITierDrilldown"},"all_tiers":{"$ref":"#/components/schemas/KPITierDrilldown"}},"type":"object","required":["week_ending","validation","enterprise","business","professional","wholesale_client","distributor","all_tiers"],"title":"KPIWeeklyDrilldownResponse"},"KPIWeeklyHistoryResponse":{"properties":{"weeks":{"items":{"$ref":"#/components/schemas/KPIWeeklyResponse"},"type":"array","title":"Weeks"}},"type":"object","required":["weeks"],"title":"KPIWeeklyHistoryResponse"},"KPIWeeklyResponse":{"properties":{"week_ending":{"type":"string","format":"date","title":"Week Ending"},"enterprise":{"$ref":"#/components/schemas/KPITierMetrics"},"business":{"$ref":"#/components/schemas/KPITierMetrics"},"professional":{"$ref":"#/components/schemas/KPITierMetrics"},"wholesale_client":{"$ref":"#/components/schemas/KPITierMetrics"},"distributor":{"$ref":"#/components/schemas/KPITierMetrics"},"all_tiers":{"$ref":"#/components/schemas/KPITierMetrics"}},"type":"object","required":["week_ending","enterprise","business","professional","wholesale_client","distributor","all_tiers"],"title":"KPIWeeklyResponse"},"KpiSummary":{"properties":{"total_traces":{"type":"integer","title":"Total Traces","default":0},"errors":{"type":"integer","title":"Errors","default":0},"error_rate":{"type":"number","title":"Error Rate","default":0.0},"unique_users":{"type":"integer","title":"Unique Users","default":0},"unique_sessions":{"type":"integer","title":"Unique Sessions","default":0},"median_latency":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Latency"},"p95_latency":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95 Latency"}},"type":"object","title":"KpiSummary"},"LatencyByErrorCode":{"properties":{"error_code":{"type":"string","title":"Error Code"},"label":{"type":"string","title":"Label"},"median_latency":{"type":"number","title":"Median Latency","default":0.0},"count":{"type":"integer","title":"Count","default":0}},"type":"object","required":["error_code","label"],"title":"LatencyByErrorCode"},"LatencyByTool":{"properties":{"tool":{"type":"string","title":"Tool"},"median_latency":{"type":"number","title":"Median Latency","default":0.0}},"type":"object","required":["tool"],"title":"LatencyByTool"},"LatencyTimePoint":{"properties":{"period":{"type":"string","title":"Period"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"},"median_latency":{"type":"number","title":"Median Latency","default":0.0}},"type":"object","required":["period"],"title":"LatencyTimePoint"},"LatestPrivacyPolicyVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"}},"type":"object","required":["id","content","effective_at"],"title":"LatestPrivacyPolicyVersionResponse"},"LatestSignupTOUVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"}},"type":"object","required":["id","content","effective_at"],"title":"LatestSignupTOUVersionResponse"},"LedgerClientAccountItem":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"type":"string","title":"Token Name"},"token_type":{"type":"string","title":"Token Type"},"usage_scope":{"type":"string","title":"Usage Scope"},"balance":{"type":"string","title":"Balance"},"total_credited":{"type":"string","title":"Total Credited"},"total_debited":{"type":"string","title":"Total Debited"},"today_credited":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Today Credited"},"today_debited":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Today Debited"},"expires_days_policy":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires Days Policy"},"never_expires":{"type":"boolean","title":"Never Expires","default":false},"earliest_expiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Earliest Expiry"},"latest_expiry":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Expiry"},"expiring":{"items":{"$ref":"#/components/schemas/LedgerExpiringAmountItem"},"type":"array","title":"Expiring"},"upcoming_issuance":{"items":{"$ref":"#/components/schemas/LedgerUpcomingIssuanceItem"},"type":"array","title":"Upcoming Issuance"}},"type":"object","required":["account_id","client_id","token_id","token_name","token_type","usage_scope","balance","total_credited","total_debited"],"title":"LedgerClientAccountItem"},"LedgerClientAccountsResponse":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"accounts":{"items":{"$ref":"#/components/schemas/LedgerClientAccountItem"},"type":"array","title":"Accounts"}},"type":"object","required":["client_id","accounts"],"title":"LedgerClientAccountsResponse"},"LedgerEntryDirection":{"type":"string","enum":["debit","credit"],"title":"LedgerEntryDirection"},"LedgerExpiringAmountItem":{"properties":{"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"amount":{"type":"string","title":"Amount"}},"type":"object","required":["expires_at","amount"],"title":"LedgerExpiringAmountItem"},"LedgerTransactionDetailResponse":{"properties":{"transaction":{"$ref":"#/components/schemas/LedgerTransactionListItem"},"entries":{"items":{"$ref":"#/components/schemas/LedgerTransactionEntryItem"},"type":"array","title":"Entries"},"remaining_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remaining Amount"}},"type":"object","required":["transaction"],"title":"LedgerTransactionDetailResponse"},"LedgerTransactionEntryItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Name"},"direction":{"$ref":"#/components/schemas/LedgerEntryDirection"},"amount":{"type":"string","title":"Amount"},"entry_order":{"type":"integer","title":"Entry Order"},"source_entry_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Entry Id"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["id","account_id","token_id","direction","amount","entry_order"],"title":"LedgerTransactionEntryItem","description":"A single entry that hit a client account for the transaction."},"LedgerTransactionListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"usage_scope":{"type":"string","title":"Usage Scope"},"transaction_type":{"$ref":"#/components/schemas/LedgerTransactionType"},"direction":{"type":"string","enum":["credit","debit"],"title":"Direction"},"amount":{"type":"string","title":"Amount"},"balance_before":{"type":"string","title":"Balance Before"},"balance_after":{"type":"string","title":"Balance After"},"token_count":{"type":"integer","title":"Token Count","default":0},"token_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Token Id"},"token_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Name"},"token_names":{"items":{"type":"string"},"type":"array","title":"Token Names"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"issuer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["id","client_id","usage_scope","transaction_type","direction","amount","balance_before","balance_after","created_at"],"title":"LedgerTransactionListItem","description":"Ledger transaction list item for admin UI (new schema)."},"LedgerTransactionListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/LedgerTransactionListItem"},"type":"array","title":"Items"}},"type":"object","required":["total","items"],"title":"LedgerTransactionListResponse"},"LedgerTransactionType":{"type":"string","enum":["purchase","consume","promotion","expiration","adjustment","marketplace"],"title":"LedgerTransactionType"},"LedgerTransactionsCountResponse":{"properties":{"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"since":{"type":"string","format":"date-time","title":"Since"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["since","count"],"title":"LedgerTransactionsCountResponse","description":"Simple count response for dashboard KPI cards."},"LedgerUpcomingIssuanceItem":{"properties":{"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"amount":{"type":"string","title":"Amount"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["effective_at","amount"],"title":"LedgerUpcomingIssuanceItem"},"LedgerUpcomingIssueListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Name"},"usage_scope":{"type":"string","title":"Usage Scope"},"action_type":{"type":"string","title":"Action Type"},"status":{"type":"string","title":"Status"},"direction":{"type":"string","enum":["credit","debit"],"title":"Direction","default":"credit"},"transaction_type":{"anyOf":[{"$ref":"#/components/schemas/LedgerTransactionType"},{"type":"null"}]},"amount":{"type":"string","title":"Amount"},"scheduled_at":{"type":"string","format":"date-time","title":"Scheduled At"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"token_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Expires Days"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"target_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Transaction Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["id","client_id","token_id","usage_scope","action_type","status","amount","scheduled_at","effective_at","created_at"],"title":"LedgerUpcomingIssueListItem","description":"Upcoming scheduled ledger work: one-time issues, recurring next run, expirations."},"LedgerUpcomingIssueListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/LedgerUpcomingIssueListItem"},"type":"array","title":"Items"}},"type":"object","required":["total","items"],"title":"LedgerUpcomingIssueListResponse"},"LedgerWalletBalanceItem":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"type":"string","title":"Token Name"},"token_key":{"type":"string","title":"Token Key"},"wallet_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wallet Type"},"balance":{"type":"number","title":"Balance"},"min_balance":{"type":"number","minimum":0.0,"title":"Min Balance"},"max_balance":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Balance"},"earliest_expiry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Earliest Expiry At"},"latest_expiry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Expiry At"}},"type":"object","required":["account_id","token_id","token_name","token_key","balance","min_balance"],"title":"LedgerWalletBalanceItem","description":"Ledger-native wallet row grouped by client account/token."},"LedgerWalletExpiryScheduleItem":{"properties":{"amount":{"type":"string","title":"Amount"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"wallet_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wallet Type"},"token_key":{"type":"string","title":"Token Key"}},"type":"object","required":["amount","expires_at","token_key"],"title":"LedgerWalletExpiryScheduleItem"},"LedgerWalletSummaryResponse":{"properties":{"scope_balances":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"Scope Balances"},"wallets":{"items":{"$ref":"#/components/schemas/LedgerWalletBalanceItem"},"type":"array","title":"Wallets"},"expiry_schedule":{"items":{"$ref":"#/components/schemas/LedgerWalletExpiryScheduleItem"},"type":"array","title":"Expiry Schedule"}},"type":"object","required":["scope_balances","wallets","expiry_schedule"],"title":"LedgerWalletSummaryResponse","description":"Client wallet summary tailored for ledger-based UI consumption."},"LensesArtifactEventCreate":{"properties":{"event_type":{"type":"string","maxLength":10,"pattern":"^(pin|unpin)$","title":"Event Type","description":"Type of artifact event: 'pin' or 'unpin'"},"artifact_id":{"type":"string","maxLength":100,"title":"Artifact Id","description":"UUID of the artifact"},"artifact_type":{"type":"string","maxLength":30,"title":"Artifact Type","description":"Type of artifact: markdown, chart, executive-summary, follow-up"},"session_id":{"type":"string","maxLength":100,"title":"Session Id","description":"Lenses chat session ID the artifact belongs to"},"user_email":{"type":"string","format":"email","title":"User Email","description":"Email of the user who performed the action"},"client_name":{"type":"string","maxLength":255,"title":"Client Name","description":"Name of the client/organization the user belongs to"},"title":{"type":"string","maxLength":500,"title":"Title","description":"Display title of the artifact"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Timestamp of the event (defaults to now if not provided)"}},"type":"object","required":["event_type","artifact_id","artifact_type","session_id","user_email","client_name","title"],"title":"LensesArtifactEventCreate","description":"Schema for creating a Lenses artifact analytics event.","example":{"artifact_id":"7abf23dd-2eb7-424a-a9e5-b764cae0e88e","artifact_type":"chart","client_name":"carbonarc","created_at":"2026-04-10T15:00:00Z","event_type":"pin","session_id":"lenses-7abf23dd-2eb7-424a-a9e5-b764cae0e88e","title":"Walmart vs Target card spend","user_email":"karl.deek@carbonarc.co"}},"LensesArtifactEventResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"message":{"type":"string","title":"Message","default":"Event recorded successfully"}},"type":"object","required":["id"],"title":"LensesArtifactEventResponse","description":"Response schema for artifact event creation.","example":{"id":"7abf23dd-2eb7-424a-a9e5-b764cae0e88e","message":"Event recorded successfully"}},"LensesJudgeVerdictCreate":{"properties":{"trace_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Trace Id"},"session_id":{"type":"string","maxLength":100,"title":"Session Id"},"judge_model":{"type":"string","maxLength":100,"title":"Judge Model"},"question":{"type":"string","title":"Question","description":"The user question (exact_wording)."},"answered":{"type":"boolean","title":"Answered"},"reason":{"type":"string","maxLength":1000,"title":"Reason","default":""},"response_excerpt":{"type":"string","title":"Response Excerpt","description":"Relevant excerpt from the assistant response.","default":""},"user_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"User Email"},"trace_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trace Timestamp","description":"Turn timestamp; defaults to now if omitted."}},"type":"object","required":["session_id","judge_model","question","answered"],"title":"LensesJudgeVerdictCreate","description":"Inbound runtime answer-judge verdict from power-api.\n\nOne verdict per judged lenses turn. CAMS assembles the ``user_questions``\narray and upserts a row into Pancake ``tracking.llm_judge_results`` keyed by\n``trace_id`` — the same table the historical replay reads as the prod baseline.","example":{"answered":true,"judge_model":"claude-haiku-4-5-20251001","question":"What was Walmart's card spend in Q1?","reason":"States a specific figure for the requested metric.","response_excerpt":"Walmart card spend was $1.2B in Q1 2026.","session_id":"lenses-7abf23dd-2eb7-424a-a9e5-b764cae0e88e","trace_id":"11045182356319810459","trace_timestamp":"2026-06-29T15:00:00Z","user_email":"karl.deek@carbonarc.co"}},"LensesJudgeVerdictResponse":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"message":{"type":"string","title":"Message","default":"Verdict recorded successfully"}},"type":"object","required":["trace_id"],"title":"LensesJudgeVerdictResponse","example":{"trace_id":"11045182356319810459"}},"LinkedCamsGroupRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"admin_group_id":{"type":"string","format":"uuid","title":"Admin Group Id"},"group_name":{"type":"string","title":"Group Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"member_count":{"type":"integer","title":"Member Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","admin_group_id","group_name","description","member_count","created_at","created_by"],"title":"LinkedCamsGroupRead"},"LoadTestSignupProvisioningStatusResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"email":{"type":"string","title":"Email"},"signup_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Id"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"timeline":{"$ref":"#/components/schemas/LoadTestSignupProvisioningTimeline"},"provisioning_steps":{"items":{"$ref":"#/components/schemas/SignupProvisioningStepResponse"},"type":"array","title":"Provisioning Steps"},"events":{"anyOf":[{"items":{"$ref":"#/components/schemas/SignupEventResponse"},"type":"array"},{"type":"null"}],"title":"Events"}},"type":"object","required":["session_id","email","status","timeline","provisioning_steps"],"title":"LoadTestSignupProvisioningStatusResponse"},"LoadTestSignupProvisioningTimeline":{"properties":{"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"provisioning_started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provisioning Started At"},"provisioning_last_started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provisioning Last Started At"},"last_provisioning_failed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Provisioning Failed At"},"provisioning_failed_event_count":{"type":"integer","title":"Provisioning Failed Event Count","default":0},"admin_retry_started_count":{"type":"integer","title":"Admin Retry Started Count","default":0}},"type":"object","title":"LoadTestSignupProvisioningTimeline"},"MCPM2MAccessCreate":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id","description":"Client ID"}},"type":"object","required":["client_id"],"title":"MCPM2MAccessCreate","description":"Schema for creating MCP M2M access"},"MCPM2MAccessRead":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id","description":"Client ID"},"okta_application_id":{"type":"string","title":"Okta Application Id","description":"Okta Application ID"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["client_id","okta_application_id","id"],"title":"MCPM2MAccessRead","description":"Schema for reading MCP M2M access"},"MCPTokenLimitMappingCreate":{"properties":{"mcp_plan_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Plan Product Id","description":"Stripe Product ID from Product Catalog"},"mcp_plan_product_name":{"type":"string","title":"Mcp Plan Product Name","description":"Human-readable name of the MCP plan"},"token_limit":{"type":"integer","exclusiveMinimum":0.0,"title":"Token Limit","description":"Daily token reset limit for this plan"},"is_stripe_product":{"type":"boolean","title":"Is Stripe Product","description":"Whether this maps to a Stripe product","default":true},"available_for_wholesale":{"type":"boolean","title":"Available For Wholesale","description":"Whether this non-Stripe tier is offered for wholesale contracts","default":false},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","description":"Additional plan configuration and metadata"}},"type":"object","required":["mcp_plan_product_name","token_limit"],"title":"MCPTokenLimitMappingCreate","description":"Schema for creating MCP token limit mapping"},"MCPTokenLimitMappingRead":{"properties":{"mcp_plan_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Plan Product Id","description":"Stripe Product ID from Product Catalog"},"mcp_plan_product_name":{"type":"string","title":"Mcp Plan Product Name","description":"Human-readable name of the MCP plan"},"token_limit":{"type":"integer","exclusiveMinimum":0.0,"title":"Token Limit","description":"Daily token reset limit for this plan"},"is_stripe_product":{"type":"boolean","title":"Is Stripe Product","description":"Whether this maps to a Stripe product","default":true},"available_for_wholesale":{"type":"boolean","title":"Available For Wholesale","description":"Whether this non-Stripe tier is offered for wholesale contracts","default":false},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","description":"Additional plan configuration and metadata"},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"in_use_count":{"type":"integer","title":"In Use Count","description":"Active plans / contract tiers referencing this entry","default":0}},"type":"object","required":["mcp_plan_product_name","token_limit","id","created_at","updated_at"],"title":"MCPTokenLimitMappingRead","description":"Schema for reading MCP token limit mapping"},"MCPTokenLimitReferenceRead":{"properties":{"name":{"type":"string","title":"Name","description":"Client or contract name"},"subtitle":{"type":"string","title":"Subtitle","description":"Contextual detail (contract / status)"}},"type":"object","required":["name","subtitle"],"title":"MCPTokenLimitReferenceRead","description":"One entity that references a catalog entry (a plan or a contract tier)."},"MarketingPreferencesRead":{"properties":{"preferences":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Preferences"}},"type":"object","title":"MarketingPreferencesRead","description":"A simple map of preference code -> opted_in.\n\nToday we only use `marketing_all`, but this format supports adding more\npreference codes in the future."},"MarketingPreferencesUpdate":{"properties":{"preferences":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Preferences"}},"type":"object","required":["preferences"],"title":"MarketingPreferencesUpdate"},"MarketplaceOrderRequest":{"properties":{"required_token_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required Token Type"},"buyer_user_email":{"type":"string","title":"Buyer User Email"},"seller_client_id":{"type":"string","title":"Seller Client Id"},"total_price":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"}],"title":"Total Price"},"seller_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Seller Amount"},"platform_fee":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Platform Fee"},"framework_cost":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Framework Cost"},"idempotency_key":{"type":"string","title":"Idempotency Key"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["buyer_user_email","seller_client_id","total_price","seller_amount","platform_fee","framework_cost","idempotency_key"],"title":"MarketplaceOrderRequest"},"McpAdminLimitsResponse":{"properties":{"user_daily_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"User Daily Limit"},"user_blocked":{"type":"boolean","title":"User Blocked"},"group_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Group Period Limit"},"group_period_consumption":{"type":"number","title":"Group Period Consumption"},"group_blocked":{"type":"boolean","title":"Group Blocked"},"group_reset_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Reset Date"}},"type":"object","required":["user_daily_limit","user_blocked","group_period_limit","group_period_consumption","group_blocked","group_reset_date"],"title":"McpAdminLimitsResponse"},"McpDailyWindowResponse":{"properties":{"client_id":{"type":"string","title":"Client Id"},"daily_issuance_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Issuance Limit","description":"Daily MCP token cap when an active MCP subscription / plan mapping applies."},"mcp_balance":{"type":"number","title":"Mcp Balance","description":"Current MCP usage_scope token balance (ledger)."},"consumption_today":{"type":"number","title":"Consumption Today","description":"Consume debits posted today in the MCP timezone window (numerator for daily usage UI)."},"credits_posted_today":{"type":"number","title":"Credits Posted Today","description":"Credits posted today in the MCP timezone window (issuance, resets, etc.)."},"next_reset_at":{"type":"string","format":"date-time","title":"Next Reset At","description":"End of the current MCP calendar day in the configured timezone (from settings)."}},"type":"object","required":["client_id","mcp_balance","consumption_today","credits_posted_today","next_reset_at"],"title":"McpDailyWindowResponse","description":"MCP daily allocation window for a client (ledger-backed).\n\nSubscription cap, current MCP-scope balance, today's debits/credits in the MCP timezone\nwindow, and end-of-day boundary. Manual-reset eligibility and subwallet flags are not\npart of this resource; use dedicated admin flows if needed."},"McpMetrics":{"properties":{"tokens_spent":{"$ref":"#/components/schemas/SupplierMatrixResponse"},"mcp_tool_calls":{"$ref":"#/components/schemas/SupplierMatrixResponse"}},"type":"object","required":["tokens_spent","mcp_tool_calls"],"title":"McpMetrics"},"McpTokenUsageRead":{"properties":{"org_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Org Limit"},"org_used":{"type":"number","title":"Org Used"},"org_next_reset_at":{"type":"string","format":"date-time","title":"Org Next Reset At"},"group":{"$ref":"#/components/schemas/TokenTierRead"},"user":{"$ref":"#/components/schemas/TokenTierRead"}},"type":"object","required":["org_used","org_next_reset_at","group","user"],"title":"McpTokenUsageRead"},"MetricsQuerySpec":{"properties":{"data_source":{"type":"string","const":"metrics","title":"Data Source","default":"metrics"},"name":{"type":"string","title":"Name"},"query":{"type":"string","title":"Query"},"aggregator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aggregator"}},"type":"object","required":["name","query"],"title":"MetricsQuerySpec"},"MigrationRequest":{"properties":{"script_identifier":{"type":"string","title":"Script Identifier"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters","default":{}}},"type":"object","required":["script_identifier"],"title":"MigrationRequest"},"MigrationResponse":{"properties":{"message":{"type":"string","title":"Message"},"script_identifier":{"type":"string","title":"Script Identifier"},"status":{"type":"string","title":"Status"}},"type":"object","required":["message","script_identifier","status"],"title":"MigrationResponse"},"NotificationList":{"properties":{"notifications":{"items":{"$ref":"#/components/schemas/NotificationRead"},"type":"array","title":"Notifications"},"total":{"type":"integer","title":"Total"},"unread_count":{"type":"integer","title":"Unread Count"}},"type":"object","required":["notifications","total","unread_count"],"title":"NotificationList","description":"Schema for listing notifications."},"NotificationRead":{"properties":{"type":{"$ref":"#/components/schemas/NotificationType"},"title":{"type":"string","maxLength":255,"title":"Title"},"body":{"type":"string","title":"Body"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"status":{"$ref":"#/components/schemas/NotificationStatus"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","default":"system"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"}},"type":"object","required":["type","title","body","id","user_id","status","created_at","updated_at"],"title":"NotificationRead","description":"Schema for reading a notification."},"NotificationStatus":{"type":"string","enum":["unread","read","archived"],"title":"NotificationStatus","description":"Status of a notification."},"NotificationType":{"type":"string","enum":["mcp_nearing_limit","mcp_reached_limit"],"title":"NotificationType","description":"Types of notifications."},"NotificationUpdate":{"properties":{"status":{"$ref":"#/components/schemas/NotificationStatus","description":"New status for the notification"}},"type":"object","required":["status"],"title":"NotificationUpdate","description":"Schema for updating a notification."},"OktaEvent":{"properties":{"eventType":{"type":"string","title":"Eventtype"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"eventId":{"type":"string","title":"Eventid"}},"type":"object","required":["eventType","data","eventId"],"title":"OktaEvent"},"OktaSSOEventRead":{"properties":{"event_id":{"type":"string","title":"Event Id"},"event_type":{"type":"string","title":"Event Type"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},"type":"object","required":["event_id","event_type","published_at","created_at","user_email","user_name","app_name","ip_address","city","country"],"title":"OktaSSOEventRead"},"OnboardingStepRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"step_number":{"type":"integer","title":"Step Number"},"step_name":{"type":"string","title":"Step Name"},"status":{"$ref":"#/components/schemas/OnboardingStepStatus"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","client_id","step_number","step_name","status","created_at","updated_at"],"title":"OnboardingStepRead"},"OnboardingStepStatus":{"type":"string","enum":["pending","awaiting_client","awaiting_subscription","complete"],"title":"OnboardingStepStatus"},"OpenBBEntityCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Entity name"},"entity_type_uuid":{"type":"string","title":"Entity Type Uuid","description":"UUID of the entity type"},"email":{"type":"string","format":"email","title":"Email","description":"Entity contact email"},"admin_email":{"type":"string","format":"email","title":"Admin Email","description":"Primary admin email"},"company_type":{"type":"string","title":"Company Type","description":"Company type (e.g., 'Investment Firm')"},"organization_size":{"type":"string","title":"Organization Size","description":"Organization size (e.g., '10-50')","default":"10-50"},"aum":{"type":"integer","minimum":0.0,"title":"Aum","description":"Assets Under Management","default":0},"country":{"type":"string","title":"Country","description":"Country code or name","default":"USA"},"seats":{"type":"integer","minimum":1.0,"title":"Seats","description":"Number of licensed seats","default":1000},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date","description":"Expiration date in ISO 8601 format"}},"type":"object","required":["name","entity_type_uuid","email","admin_email","company_type"],"title":"OpenBBEntityCreate","description":"Schema for creating a new OpenBB entity (organization).","example":{"admin_email":"admin@acme.com","aum":10000000,"company_type":"Investment Firm","country":"USA","email":"billing@acme.com","entity_type_uuid":"123e4567-e89b-12d3-a456-426614174000","expiration_date":"2026-12-31T00:00:00Z","name":"Acme Corp","organization_size":"10-50","seats":50}},"OpenBBEntityCreateResponse":{"properties":{"entity_uuid":{"type":"string","title":"Entity Uuid"},"message":{"type":"string","title":"Message","default":"Entity created successfully"}},"type":"object","required":["entity_uuid"],"title":"OpenBBEntityCreateResponse","description":"Schema for entity creation response."},"OpenBBEntityListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OpenBBEntityRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","size","pages"],"title":"OpenBBEntityListResponse","description":"Schema for paginated entity list response."},"OpenBBEntityRead":{"properties":{"uuid":{"type":"string","title":"Uuid"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"organization_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Size"},"aum":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Aum"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"seats":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"entity_type":{"anyOf":[{"$ref":"#/components/schemas/OpenBBEntityTypeRead"},{"type":"null"}]}},"type":"object","required":["uuid","name"],"title":"OpenBBEntityRead","description":"Schema for reading an OpenBB entity."},"OpenBBEntityTypeCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Display name for the entity type"},"code":{"type":"string","title":"Code","description":"Internal code identifier"}},"type":"object","required":["name","code"],"title":"OpenBBEntityTypeCreate","description":"Schema for creating a new entity type."},"OpenBBEntityTypeListResponse":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","size","pages"],"title":"OpenBBEntityTypeListResponse","description":"Schema for paginated entity type list response."},"OpenBBEntityTypeRead":{"properties":{"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},"type":"object","title":"OpenBBEntityTypeRead","description":"Schema for entity type information."},"OpenBBEntityUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Entity name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email","description":"Entity contact email"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type","description":"Company type"},"organization_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Size","description":"Organization size"},"aum":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Aum","description":"Assets Under Management"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"Country code or name"},"seats":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Seats","description":"Number of licensed seats"},"expiration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiration Date","description":"Expiration date"},"entity_type_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type Uuid","description":"UUID of the entity type"}},"type":"object","title":"OpenBBEntityUpdate","description":"Schema for updating an OpenBB entity."},"OpenBBPermissionMapRead":{"properties":{"uuid":{"type":"string","title":"Uuid","description":"Permission map UUID"},"name":{"type":"string","title":"Name","description":"Role name (e.g., 'Admin' or 'User')"},"entity_uuid":{"type":"string","title":"Entity Uuid","description":"Entity UUID this permission map belongs to"}},"type":"object","required":["uuid","name","entity_uuid"],"title":"OpenBBPermissionMapRead","description":"Schema for reading a permission map."},"OpenBBProvisionRequest":{"properties":{"entity":{"$ref":"#/components/schemas/OpenBBEntityCreate"},"admins":{"items":{"$ref":"#/components/schemas/OpenBBProvisionUserInfo"},"type":"array","title":"Admins","description":"List of admin users to create"},"users":{"items":{"$ref":"#/components/schemas/OpenBBProvisionUserInfo"},"type":"array","title":"Users","description":"List of regular users to create"}},"type":"object","required":["entity"],"title":"OpenBBProvisionRequest","description":"Schema for bulk provisioning an entity with users.","example":{"admins":[{"email":"admin@acme.com","first_name":"Admin","last_name":"User"}],"entity":{"admin_email":"admin@acme.com","aum":10000000,"company_type":"Investment Firm","country":"USA","email":"billing@acme.com","entity_type_uuid":"123e4567-e89b-12d3-a456-426614174000","expiration_date":"2026-12-31T00:00:00Z","name":"Acme Corp","organization_size":"10-50","seats":50},"users":[{"email":"analyst@acme.com","first_name":"Analyst","last_name":"One"}]}},"OpenBBProvisionResponse":{"properties":{"entity":{"additionalProperties":true,"type":"object","title":"Entity"},"admins":{"items":{"$ref":"#/components/schemas/OpenBBProvisionedUser"},"type":"array","title":"Admins"},"users":{"items":{"$ref":"#/components/schemas/OpenBBProvisionedUser"},"type":"array","title":"Users"},"message":{"type":"string","title":"Message","default":"Provisioning completed successfully"}},"type":"object","required":["entity","admins","users"],"title":"OpenBBProvisionResponse","description":"Schema for provisioning response."},"OpenBBProvisionUserInfo":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"}},"type":"object","required":["email","first_name","last_name"],"title":"OpenBBProvisionUserInfo","description":"Schema for user information in provisioning request."},"OpenBBProvisionedUser":{"properties":{"email":{"type":"string","title":"Email"},"user_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Uuid"},"temporary_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Password"}},"type":"object","required":["email"],"title":"OpenBBProvisionedUser","description":"Schema for a provisioned user in the response."},"OpenBBUserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User's email address"},"first_name":{"type":"string","title":"First Name","description":"User's first name"},"last_name":{"type":"string","title":"Last Name","description":"User's last name"},"role":{"type":"string","pattern":"^(admin|user)$","title":"Role","description":"Role assignment ('admin' or 'user')","default":"user"}},"type":"object","required":["email","first_name","last_name"],"title":"OpenBBUserCreate","description":"Schema for creating a new OpenBB user.","example":{"email":"john.doe@acme.com","first_name":"John","last_name":"Doe","role":"user"}},"OpenBBUserCreateResponse":{"properties":{"user_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Uuid"},"email":{"type":"string","title":"Email"},"temporary_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Password"},"message":{"type":"string","title":"Message","default":"User created successfully"}},"type":"object","required":["email"],"title":"OpenBBUserCreateResponse","description":"Schema for user creation response."},"OpenBBUserListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OpenBBUserRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","size","pages"],"title":"OpenBBUserListResponse","description":"Schema for paginated user list response."},"OpenBBUserMoveRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User's email address"},"target_entity_uuid":{"type":"string","title":"Target Entity Uuid","description":"UUID of the target entity"},"role":{"type":"string","pattern":"^(admin|user)$","title":"Role","description":"Role in new entity ('admin' or 'user')","default":"user"}},"type":"object","required":["email","target_entity_uuid"],"title":"OpenBBUserMoveRequest","description":"Schema for moving a user to another entity."},"OpenBBUserPermissions":{"properties":{"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"entity":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Entity"}},"type":"object","title":"OpenBBUserPermissions","description":"Schema for user permissions."},"OpenBBUserRead":{"properties":{"uuid":{"type":"string","title":"Uuid"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"permissions":{"anyOf":[{"$ref":"#/components/schemas/OpenBBUserPermissions"},{"type":"null"}]}},"type":"object","required":["uuid","email"],"title":"OpenBBUserRead","description":"Schema for reading an OpenBB user."},"OpenBBUserUpdateEntityRequest":{"properties":{"target_entity_uuid":{"type":"string","title":"Target Entity Uuid","description":"UUID of the target entity"},"role":{"type":"string","pattern":"^(admin|user)$","title":"Role","description":"Role in new entity ('admin' or 'user')","default":"user"}},"type":"object","required":["target_entity_uuid"],"title":"OpenBBUserUpdateEntityRequest","description":"Schema for updating a user's entity assignment."},"OpenBBUserUpdateEntityResponse":{"properties":{"user_uuid":{"type":"string","title":"User Uuid"},"target_entity_uuid":{"type":"string","title":"Target Entity Uuid"},"message":{"type":"string","title":"Message","default":"User entity updated successfully"}},"type":"object","required":["user_uuid","target_entity_uuid"],"title":"OpenBBUserUpdateEntityResponse","description":"Schema for user entity update response."},"PaginatedClientProviderAccess":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/ClientProviderAccessInfo"},"type":"array","title":"Items"},"pages":{"type":"integer","title":"Pages"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["total","items","pages","page","size"],"title":"PaginatedClientProviderAccess"},"PaginatedCreditEventsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/CreditEventResponse"},"type":"array","title":"Items"},"pages":{"type":"integer","title":"Pages"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["total","items","pages","page","size"],"title":"PaginatedCreditEventsResponse","description":"Paginated response for credit events"},"PaginatedGroupsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/GroupsPageRead"},"type":"array","title":"Items"},"pages":{"type":"integer","title":"Pages"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["total","items","pages","page","size"],"title":"PaginatedGroupsResponse"},"PaginatedResponse":{"properties":{"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"},"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/OktaSSOEventRead"},"type":"array","title":"Items"}},"type":"object","required":["page","size","total","items"],"title":"PaginatedResponse"},"PaginatedUsersRoleOnlyResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/UserInfoRoleOnly"},"type":"array","title":"Items"},"pages":{"type":"integer","title":"Pages"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["total","items","pages","page","size"],"title":"PaginatedUsersRoleOnlyResponse"},"ParseResponse":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/ParsedRow"},"type":"array","title":"Rows"},"total_rows":{"type":"integer","title":"Total Rows"},"valid_rows":{"type":"integer","title":"Valid Rows"},"invalid_rows":{"type":"integer","title":"Invalid Rows"}},"type":"object","required":["rows","total_rows","valid_rows","invalid_rows"],"title":"ParseResponse"},"ParsedRow":{"properties":{"row_number":{"type":"integer","title":"Row Number"},"company_name":{"type":"string","title":"Company Name"},"company_category_hierarchy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Category Hierarchy Id"},"brand_website":{"type":"string","title":"Brand Website"},"brand_type":{"type":"string","title":"Brand Type"},"brand_name":{"type":"string","title":"Brand Name"},"brand_category_hierarchy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Brand Category Hierarchy Id"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["row_number","company_name","company_category_hierarchy_id","brand_website","brand_type","brand_name","brand_category_hierarchy_id","errors"],"title":"ParsedRow"},"PaymentMethodSummary":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Payment method type (card, bank, etc.)"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand","description":"Card or bank brand (visa, mastercard, etc.)"},"exp_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Month","description":"Expiration month"},"exp_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Exp Year","description":"Expiration year"},"last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last4","description":"Last 4 digits"}},"type":"object","title":"PaymentMethodSummary"},"PermissionExportItem":{"properties":{"name":{"type":"string","title":"Name"},"resource":{"type":"string","title":"Resource"},"action":{"items":{"type":"string"},"type":"array","title":"Action"}},"type":"object","required":["name","resource","action"],"title":"PermissionExportItem"},"PermissionExportResponse":{"properties":{"exported_at":{"type":"string","title":"Exported At"},"count":{"type":"integer","title":"Count"},"permissions":{"items":{"$ref":"#/components/schemas/PermissionExportItem"},"type":"array","title":"Permissions"}},"type":"object","required":["exported_at","count","permissions"],"title":"PermissionExportResponse"},"PlanConfigAuditRead":{"properties":{"id":{"type":"string","title":"Id"},"plan_id":{"type":"string","title":"Plan Id"},"action":{"type":"string","title":"Action"},"old_value":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Old Value"},"new_value":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"New Value"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"}},"type":"object","required":["id","plan_id","action","created_at"],"title":"PlanConfigAuditRead","description":"One audit log entry."},"PlanConfigOverview":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"display_name":{"type":"string","title":"Display Name"},"active_users_count":{"type":"integer","title":"Active Users Count","default":0},"enabled_features_count":{"type":"integer","title":"Enabled Features Count","default":0},"total_features_count":{"type":"integer","title":"Total Features Count","default":0},"last_modified":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Modified"},"last_modified_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Modified By"}},"type":"object","required":["plan_id","display_name"],"title":"PlanConfigOverview","description":"Overview stats for a plan (active users, enabled features, etc.)."},"PlanConfigVersionRead":{"properties":{"id":{"type":"string","title":"Id"},"plan_id":{"type":"string","title":"Plan Id"},"version_number":{"type":"integer","title":"Version Number"},"display_name":{"type":"string","title":"Display Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"}},"type":"object","required":["id","plan_id","version_number","display_name","created_at"],"title":"PlanConfigVersionRead","description":"One version record."},"PlanCreate":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"product_id":{"type":"string","format":"uuid","title":"Product Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"amount":{"type":"number","minimum":0.0,"title":"Amount"},"billing_cycle":{"type":"string","title":"Billing Cycle","default":"month"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["name","product_id","client_id","amount"],"title":"PlanCreate","description":"Plan creation schema - status is automatically set based on starts_at."},"PlanFullResponse":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"amount":{"type":"number","minimum":0.0,"title":"Amount"},"billing_cycle":{"type":"string","title":"Billing Cycle","default":"month"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string"}],"title":"Id"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id","description":"Stripe customer id (cus_...) for this plan/client"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"billing_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Billing Email"},"daily_token_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Token Limit","description":"Configured daily token limit from plan"},"enterprise_fields":{"anyOf":[{"$ref":"#/components/schemas/EnterpriseFields"},{"type":"null"}],"description":"Additional enterprise-only MCP-related fields"},"grace_period_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Period Started At"},"failed_payment_retry_count":{"type":"integer","title":"Failed Payment Retry Count","default":0},"is_suspended":{"type":"boolean","title":"Is Suspended","default":false},"suspended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspended At"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Where the plan record came from: 'database' or 'stripe'","default":"database"},"stripe_cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stripe Cancel At","description":"Scheduled cancellation date from linked Stripe subscription"},"stripe_canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stripe Canceled At","description":"Actual cancellation date from linked Stripe subscription"},"stripe_subscription":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stripe Subscription","description":"Full Stripe subscription details if the plan is linked to a Stripe subscription"},"stripe_customer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Name","description":"Stripe customer name for the client"},"payment_method":{"$ref":"#/components/schemas/PaymentMethodSummary","description":"Default payment method details for the plan"},"invoice_payment":{"type":"boolean","title":"Invoice Payment","description":"True when the client is configured for invoice billing. Derived from client.payment_method == 'invoice'.","default":false}},"type":"object","required":["name","client_id","amount","id","created_at","updated_at"],"title":"PlanFullResponse","description":"Full plan response schema with all plan fields and optional Stripe subscription details"},"PlanRead":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"amount":{"type":"number","minimum":0.0,"title":"Amount"},"billing_cycle":{"type":"string","title":"Billing Cycle","default":"month"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"string"}],"title":"Id"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id","description":"Stripe customer id (cus_...) for this plan/client"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"billing_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Billing Email"},"daily_token_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Token Limit","description":"Configured daily token limit from plan"},"enterprise_fields":{"anyOf":[{"$ref":"#/components/schemas/EnterpriseFields"},{"type":"null"}],"description":"Additional enterprise-only MCP-related fields"},"grace_period_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Period Started At"},"failed_payment_retry_count":{"type":"integer","title":"Failed Payment Retry Count","default":0},"is_suspended":{"type":"boolean","title":"Is Suspended","default":false},"suspended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspended At"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Where the plan record came from: 'database' or 'stripe'","default":"database"},"stripe_cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stripe Cancel At","description":"Scheduled cancellation date from linked Stripe subscription"},"stripe_canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stripe Canceled At","description":"Actual cancellation date from linked Stripe subscription"}},"type":"object","required":["name","client_id","amount","id","created_at","updated_at"],"title":"PlanRead"},"PlanUpdate":{"properties":{"name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"PlanUpdate"},"PlatformMaintenanceModeRead":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"}},"type":"object","required":["enabled"],"title":"PlatformMaintenanceModeRead","description":"Current platform maintenance mode status returned by both public and admin endpoints."},"PlatformMaintenanceModeUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"PlatformMaintenanceModeUpdate","description":"Payload to enable or disable platform maintenance mode. Super admin only."},"PlatformMetrics":{"properties":{"tokens":{"$ref":"#/components/schemas/SupplierMatrixResponse"},"mb_metric":{"$ref":"#/components/schemas/SupplierMatrixResponse"},"records":{"$ref":"#/components/schemas/SupplierMatrixResponse"}},"type":"object","required":["tokens","mb_metric","records"],"title":"PlatformMetrics"},"PlatformTokenUsageRead":{"properties":{"wallet_balance":{"type":"number","title":"Wallet Balance"},"group":{"$ref":"#/components/schemas/TokenTierRead"},"user":{"$ref":"#/components/schemas/TokenTierRead"}},"type":"object","required":["wallet_balance","group","user"],"title":"PlatformTokenUsageRead"},"PolarisMetrics":{"properties":{"mb_metric":{"$ref":"#/components/schemas/SupplierMatrixResponse"},"request_count":{"$ref":"#/components/schemas/SupplierMatrixResponse"}},"type":"object","required":["mb_metric","request_count"],"title":"PolarisMetrics"},"PolicyElementCreateOrUpdate":{"properties":{"type":{"type":"string","title":"Type"},"name":{"type":"string","title":"Name"}},"type":"object","required":["type","name"],"title":"PolicyElementCreateOrUpdate"},"PolicyElementRead":{"properties":{"type":{"type":"string","title":"Type"},"name":{"type":"string","title":"Name"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["type","name","id"],"title":"PolicyElementRead"},"PolicyRule":{"properties":{"resource_id":{"type":"string","format":"uuid4","title":"Resource Id"},"action_id":{"type":"string","format":"uuid4","title":"Action Id"},"scope_id":{"type":"string","format":"uuid4","title":"Scope Id"}},"type":"object","required":["resource_id","action_id","scope_id"],"title":"PolicyRule"},"PortalActivationLinkResponse":{"properties":{"activation_url":{"type":"string","title":"Activation Url"}},"type":"object","required":["activation_url"],"title":"PortalActivationLinkResponse","description":"Response from the regenerate-activation-link endpoint."},"PortalEntityRef":{"properties":{"id":{"type":"string","maxLength":256,"minLength":1,"title":"Id"},"label":{"type":"string","maxLength":512,"minLength":1,"title":"Label"}},"type":"object","required":["id","label"],"title":"PortalEntityRef","description":"Ontology entity tag — id + display label."},"PortalRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"okta_group":{"type":"string","title":"Okta Group"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","key","name","okta_group","is_active"],"title":"PortalRead","description":"Admin read response for a portal."},"PortalTranscriptDetailResponse":{"properties":{"transcript_id":{"type":"string","format":"uuid","title":"Transcript Id"},"external_id":{"type":"string","title":"External Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"entities":{"items":{"$ref":"#/components/schemas/PortalEntityRef"},"type":"array","title":"Entities"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"expert_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expert Id"},"status":{"type":"string","title":"Status"},"submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted At"}},"type":"object","required":["transcript_id","external_id","title","status"],"title":"PortalTranscriptDetailResponse","description":"Full detail for the edit view — extends the list item with the\neditable metadata fields."},"PortalTranscriptListItem":{"properties":{"transcript_id":{"type":"string","format":"uuid","title":"Transcript Id"},"external_id":{"type":"string","title":"External Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted At"}},"type":"object","required":["transcript_id","external_id","title","status"],"title":"PortalTranscriptListItem","description":"One row in the 'My Submissions' list."},"PortalTranscriptMetadataUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Description"},"entities":{"anyOf":[{"items":{"$ref":"#/components/schemas/PortalEntityRef"},"type":"array","minItems":1},{"type":"null"}],"title":"Entities"},"region":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Region"},"expert_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expert Id","description":"Optional identifier for the interviewed expert. 5-10 alphanumeric characters, no symbols or spaces."}},"type":"object","title":"PortalTranscriptMetadataUpdate","description":"Uploader self-service correction of their own submission's descriptive\nfields — ownership (``submitted_by`` == caller email) is enforced in the\nroute, not here. ``actor`` is never accepted from the client."},"PortalTranscriptResponse":{"properties":{"transcript_id":{"type":"string","format":"uuid","title":"Transcript Id"},"status":{"type":"string","title":"Status"},"title":{"type":"string","title":"Title"}},"type":"object","required":["transcript_id","status","title"],"title":"PortalTranscriptResponse","description":"Minimal response returned to the portal after a successful upload."},"PortalTranscriptUploadRequest":{"properties":{"external_id":{"type":"string","title":"External Id","description":"Partner's own reference ID"},"title":{"type":"string","maxLength":512,"minLength":1,"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Description"},"interview_date":{"type":"string","format":"date","title":"Interview Date"},"duration_minutes":{"type":"integer","maximum":2147483647.0,"exclusiveMinimum":0.0,"title":"Duration Minutes"},"expert_anonymized":{"type":"boolean","title":"Expert Anonymized"},"entities":{"items":{"$ref":"#/components/schemas/PortalEntityRef"},"type":"array","minItems":1,"title":"Entities"},"region":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Region"},"language":{"type":"string","maxLength":10,"title":"Language","default":"en"},"transcript_type":{"type":"string","maxLength":64,"title":"Transcript Type","default":"expert_interview"},"provider":{"type":"string","maxLength":256,"minLength":1,"title":"Provider","description":"Name of the company that produced the transcript (e.g. Tegus, Quartr)"},"expert_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expert Id","description":"Optional identifier for the interviewed expert. 5-10 alphanumeric characters, no symbols or spaces."},"txt_b64":{"type":"string","minLength":1,"title":"Txt B64"}},"type":"object","required":["external_id","title","interview_date","duration_minutes","expert_anonymized","entities","provider","txt_b64"],"title":"PortalTranscriptUploadRequest","description":"Validated upload payload sent by the portal frontend.\n\n``txt_b64`` carries the base64-encoded .txt file content.  The backend\ndecodes and validates it before forwarding to power-api.\n\n``source_type`` is NOT accepted from the client — it is injected server-\nside from PortalUserContext.meta_data[\"source_type\"]."},"PortalUserCreate":{"properties":{"first_name":{"type":"string","maxLength":256,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":256,"minLength":1,"title":"Last Name"},"email":{"type":"string","maxLength":512,"minLength":1,"title":"Email"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"portals":{"items":{"$ref":"#/components/schemas/PortalUserPortalAssignment"},"type":"array","minItems":1,"title":"Portals"}},"type":"object","required":["first_name","last_name","email","portals"],"title":"PortalUserCreate","description":"Admin request to provision a new portal user.\n\nOkta provisioning happens server-side — callers supply a name and email;\nthe backend creates the Okta user and stores the returned okta_user_id.\nAt least one portal assignment is required."},"PortalUserCreateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"okta_user_id":{"type":"string","title":"Okta User Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"is_active":{"type":"boolean","title":"Is Active"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"portals":{"items":{"$ref":"#/components/schemas/PortalUserPortalRead"},"type":"array","title":"Portals"},"okta_status":{"type":"string","title":"Okta Status","default":""},"activation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activation Url"},"okta_user_already_existed":{"type":"boolean","title":"Okta User Already Existed","default":false}},"type":"object","required":["id","okta_user_id","first_name","last_name","email","is_active","notes"],"title":"PortalUserCreateResponse","description":"Response returned only on portal user creation.\n\nIncludes the one-time activation URL. Not returned by list/get endpoints\n— the token must not be re-exposed after the initial create response."},"PortalUserPortalAssignment":{"properties":{"portal_key":{"type":"string","maxLength":128,"minLength":1,"title":"Portal Key"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["portal_key"],"title":"PortalUserPortalAssignment","description":"One portal assignment included in create/edit requests."},"PortalUserPortalRead":{"properties":{"portal_id":{"type":"string","format":"uuid","title":"Portal Id"},"portal_key":{"type":"string","title":"Portal Key"},"portal_name":{"type":"string","title":"Portal Name"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["portal_id","portal_key","portal_name","meta_data"],"title":"PortalUserPortalRead","description":"One portal assignment in a read response."},"PortalUserRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"okta_user_id":{"type":"string","title":"Okta User Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"is_active":{"type":"boolean","title":"Is Active"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"portals":{"items":{"$ref":"#/components/schemas/PortalUserPortalRead"},"type":"array","title":"Portals"},"okta_status":{"type":"string","title":"Okta Status","default":""}},"type":"object","required":["id","okta_user_id","first_name","last_name","email","is_active","notes"],"title":"PortalUserRead","description":"Admin read response for a portal user."},"PortalUserUpdate":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"portals":{"anyOf":[{"items":{"$ref":"#/components/schemas/PortalUserPortalAssignment"},"type":"array","minItems":1},{"type":"null"}],"title":"Portals"}},"type":"object","title":"PortalUserUpdate","description":"Admin request to update a portal user's active status or notes."},"PrecomputeActivateRequest":{"properties":{"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"versions":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Versions"}},"type":"object","title":"PrecomputeActivateRequest","description":"What to make live: a build's output, or an explicit version per artifact.\n\nBuilds publish themselves, so what is left for this is the rollback path —\nthe previous payload is still in Redis under its own version for the rest\nof its TTL, so reverting is the same pointer flip pointed backwards."},"PrecomputeBuildRequest":{"properties":{"artifacts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Artifacts"},"force":{"type":"boolean","title":"Force","default":false},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"resume":{"type":"boolean","title":"Resume","default":false}},"type":"object","title":"PrecomputeBuildRequest","description":"Which payloads to build, and how.\n\n``force`` and ``resume`` are not two settings of one dial. ``force`` decides\nwhether a payload already published at this version is scanned again;\n``resume`` decides whether one an earlier build staged and never published is\ntaken live as it stands, which is the several minutes of Neo4j a build that\ndied partway through does not need to spend twice."},"PrecomputeStopRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"PrecomputeStopRequest","description":"Why a build was stopped, recorded against the job.\n\nOptional, because a stop with no reason given is still a stop. When it is\nabsent the route substitutes who asked for it, which is the thing anyone\nreading the history afterwards actually wants."},"PrismCategoryCreateRequest":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"PrismCategoryCreateRequest"},"PrismCategoryRenameRequest":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"PrismCategoryRenameRequest"},"PrismCategoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"prism_count":{"type":"integer","title":"Prism Count","default":0}},"type":"object","required":["id","name","created_at","updated_at"],"title":"PrismCategoryResponse"},"PrismComputeRecomputeRequest":{"properties":{"compute_date":{"type":"string","format":"date","title":"Compute Date","description":"Must be today (ET); past days are rejected"}},"type":"object","required":["compute_date"],"title":"PrismComputeRecomputeRequest","description":"Re-run today's compute. Appends a new audit row and updates the live\npublic page. Past-day repairs are not allowed."},"PrismComputeSnapshotDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"prism_id":{"type":"string","format":"uuid","title":"Prism Id"},"compute_date":{"type":"string","format":"date","title":"Compute Date"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"platform_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Platform Published At"},"trigger":{"type":"string","title":"Trigger"},"published":{"type":"boolean","title":"Published"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"framework_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework Id"},"total_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price"},"data_through":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Through"},"window_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window End"},"snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Snapshot"}},"type":"object","required":["id","prism_id","compute_date","computed_at","trigger","published"],"title":"PrismComputeSnapshotDetailResponse","description":"Full audit row including the snapshot the chart renders."},"PrismComputeSnapshotResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"prism_id":{"type":"string","format":"uuid","title":"Prism Id"},"compute_date":{"type":"string","format":"date","title":"Compute Date"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"platform_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Platform Published At"},"trigger":{"type":"string","title":"Trigger"},"published":{"type":"boolean","title":"Published"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"framework_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework Id"},"total_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price"},"data_through":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Through"},"window_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window Start"},"window_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Window End"}},"type":"object","required":["id","prism_id","compute_date","computed_at","trigger","published"],"title":"PrismComputeSnapshotResponse","description":"One audit-trail row (timeline list shape — no snapshot JSONB)."},"PrismDefinitionCreate":{"properties":{"title":{"type":"string","minLength":1,"title":"Title","description":"Prism name"},"category_id":{"type":"string","format":"uuid","title":"Category Id","description":"First-class category (prism_categories.id)"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question","description":"Question this prism answers in the growth (index) view"},"question_share":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Share","description":"Question this prism answers in the share view"},"note":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Note","description":"Short caveat shown as a warning bar at the top of this prism's drawer on the public page. Null/blank = no bar."},"insight_id":{"type":"integer","title":"Insight Id","description":"Metric insight id"},"insight_label":{"type":"string","minLength":1,"title":"Insight Label"},"location_resolution":{"type":"string","minLength":1,"title":"Location Resolution","description":"Location grain the framework computes at, as advertised by /prisms/location-resolutions for this insight + entity set","default":"us"},"entities":{"items":{"$ref":"#/components/schemas/PrismEntity"},"type":"array","title":"Entities","description":"Entities the prism computes over; at least one"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Dimension filters from the framework's advertised set, as {filter_key: value}. Blank selections are dropped, not sent as empty lists. Grain / window / aggregate are prism-owned and rejected here."},"publish_state":{"$ref":"#/components/schemas/PublishState","default":"draft"}},"type":"object","required":["title","category_id","insight_id","insight_label","entities"],"title":"PrismDefinitionCreate"},"PrismDefinitionResponse":{"properties":{"title":{"type":"string","minLength":1,"title":"Title","description":"Prism name"},"category_id":{"type":"string","format":"uuid","title":"Category Id","description":"First-class category (prism_categories.id)"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question","description":"Question this prism answers in the growth (index) view"},"question_share":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Share","description":"Question this prism answers in the share view"},"note":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Note","description":"Short caveat shown as a warning bar at the top of this prism's drawer on the public page. Null/blank = no bar."},"insight_id":{"type":"integer","title":"Insight Id","description":"Metric insight id"},"insight_label":{"type":"string","minLength":1,"title":"Insight Label"},"location_resolution":{"type":"string","minLength":1,"title":"Location Resolution","description":"Location grain the framework computes at, as advertised by /prisms/location-resolutions for this insight + entity set","default":"us"},"entities":{"items":{"$ref":"#/components/schemas/PrismEntity"},"type":"array","title":"Entities","description":"Entities the prism computes over; at least one"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Dimension filters from the framework's advertised set, as {filter_key: value}. Blank selections are dropped, not sent as empty lists. Grain / window / aggregate are prism-owned and rejected here."},"publish_state":{"$ref":"#/components/schemas/PublishState","default":"draft"},"id":{"type":"string","format":"uuid","title":"Id"},"category":{"type":"string","title":"Category"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"last_refreshed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Refreshed At"},"last_order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Order Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"date_window_start":{"type":"string","format":"date","title":"Date Window Start","readOnly":true},"date_window_end":{"type":"string","format":"date","title":"Date Window End","readOnly":true}},"type":"object","required":["title","category_id","insight_id","insight_label","entities","id","category","created_at","updated_at","date_window_start","date_window_end"],"title":"PrismDefinitionResponse"},"PrismDefinitionUpdate":{"properties":{"title":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Title"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"question_share":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Share"},"note":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Note"},"insight_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Insight Id"},"insight_label":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Insight Label"},"location_resolution":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Location Resolution"},"entities":{"anyOf":[{"items":{"$ref":"#/components/schemas/PrismEntity"},"type":"array"},{"type":"null"}],"title":"Entities"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters"},"publish_state":{"anyOf":[{"$ref":"#/components/schemas/PublishState"},{"type":"null"}]}},"type":"object","title":"PrismDefinitionUpdate"},"PrismEntity":{"properties":{"entity_id":{"type":"integer","title":"Entity Id","description":"Carc entity id (representation-scoped)"},"entity_representation":{"type":"string","minLength":1,"title":"Entity Representation","description":"Graph representation the id belongs to (e.g. artist, actor). Required — the same real-world entity has a different id per representation."},"entity_name":{"type":"string","minLength":1,"title":"Entity Name","description":"Resolved entity name"}},"type":"object","required":["entity_id","entity_representation","entity_name"],"title":"PrismEntity"},"PrismPreviewRequest":{"properties":{"title":{"type":"string","minLength":1,"title":"Title","description":"Prism name"},"category_id":{"type":"string","format":"uuid","title":"Category Id","description":"First-class category (prism_categories.id)"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question","description":"Question this prism answers in the growth (index) view"},"question_share":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question Share","description":"Question this prism answers in the share view"},"note":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Note","description":"Short caveat shown as a warning bar at the top of this prism's drawer on the public page. Null/blank = no bar."},"insight_id":{"type":"integer","title":"Insight Id","description":"Metric insight id"},"insight_label":{"type":"string","minLength":1,"title":"Insight Label"},"location_resolution":{"type":"string","minLength":1,"title":"Location Resolution","description":"Location grain the framework computes at, as advertised by /prisms/location-resolutions for this insight + entity set","default":"us"},"entities":{"items":{"$ref":"#/components/schemas/PrismEntity"},"type":"array","title":"Entities","description":"Entities the prism computes over; at least one"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Dimension filters from the framework's advertised set, as {filter_key: value}. Blank selections are dropped, not sent as empty lists. Grain / window / aggregate are prism-owned and rejected here."},"publish_state":{"$ref":"#/components/schemas/PublishState","default":"draft"},"prism_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prism Id"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["title","category_id","insight_id","insight_label","entities"],"title":"PrismPreviewRequest","description":"Compute a prism's data without publishing. Accepts a full definition so\nan unsaved form can be previewed; ``prism_id`` is set when previewing a\nsaved draft. ``force`` bypasses the preview cache and re-purchases."},"PrismPreviewResponse":{"properties":{"cached":{"type":"boolean","title":"Cached"},"prism":{"additionalProperties":true,"type":"object","title":"Prism"}},"type":"object","required":["cached","prism"],"title":"PrismPreviewResponse","description":"``prism`` is the public-page-shaped snapshot entry the platform would\nrender; ``cached`` is True when the derived series was reused."},"PrismRecomputeAttemptListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/PrismRecomputeAttemptResponse"},"type":"array","title":"Items"},"check_interval_seconds":{"type":"integer","title":"Check Interval Seconds"}},"type":"object","required":["total","items","check_interval_seconds"],"title":"PrismRecomputeAttemptListResponse"},"PrismRecomputeAttemptResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"prism_id":{"type":"string","format":"uuid","title":"Prism Id"},"attempted_at":{"type":"string","format":"date-time","title":"Attempted At"},"trigger":{"type":"string","title":"Trigger"},"status":{"type":"string","title":"Status"},"reason_code":{"type":"string","title":"Reason Code"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"sources":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sources"},"data_edge":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Data Edge"},"watermark":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Watermark"},"compute_snapshot_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Compute Snapshot Id"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"total_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price"}},"type":"object","required":["id","prism_id","attempted_at","trigger","status","reason_code"],"title":"PrismRecomputeAttemptResponse","description":"One recompute-attempt row: what happened at this tick and why."},"PrismRefreshAllResponse":{"properties":{"queued":{"type":"integer","title":"Queued"}},"type":"object","required":["queued"],"title":"PrismRefreshAllResponse","description":"Live prisms queued for a forced recompute. The work runs on Celery, so\nthis is an enqueue count, not an outcome — outcomes land in the attempts\nlog."},"PrismRestrictionImpactItem":{"properties":{"prism_id":{"type":"string","format":"uuid","title":"Prism Id"},"title":{"type":"string","title":"Title"},"insight_id":{"type":"integer","title":"Insight Id"},"insight_label":{"type":"string","title":"Insight Label"},"required_sources":{"items":{"type":"string"},"type":"array","title":"Required Sources"},"newly_blocked":{"items":{"type":"string"},"type":"array","title":"Newly Blocked"}},"type":"object","required":["prism_id","title","insight_id","insight_label","required_sources","newly_blocked"],"title":"PrismRestrictionImpactItem","description":"A live prism that a pending provider restriction would unpublish."},"PrismRestrictionImpactResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PrismRestrictionImpactItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PrismRestrictionImpactResponse"},"PrismsTouCreateRequest":{"properties":{"content":{"type":"string","title":"Content"},"change_reason":{"type":"string","minLength":1,"title":"Change Reason","description":"Required rationale for the update"},"effective_at":{"type":"string","format":"date-time","title":"Effective At","description":"When this Prisms TOU version becomes effective"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id","description":"Optimistic concurrency check. The Prisms TOU version id the user based their edit on. If the latest published version has a different id, the update is rejected and the user should reload."}},"type":"object","required":["content","change_reason","effective_at"],"title":"PrismsTouCreateRequest"},"PrismsTouVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"checksum":{"type":"string","title":"Checksum"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"version_num":{"type":"integer","title":"Version Num"},"published_at":{"type":"string","format":"date-time","title":"Published At"},"change_reason":{"type":"string","title":"Change Reason"},"created_by":{"type":"string","title":"Created By"}},"type":"object","required":["id","content","effective_at","checksum","created_at","version_num","published_at","change_reason","created_by"],"title":"PrismsTouVersionResponse"},"PrivacyPolicyCreateRequest":{"properties":{"content":{"type":"string","title":"Content"},"change_reason":{"type":"string","minLength":1,"title":"Change Reason","description":"Required rationale for the update"},"effective_at":{"type":"string","format":"date-time","title":"Effective At","description":"When this privacy policy version becomes effective"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id","description":"Optimistic concurrency check. The privacy policy version id the user based their edit on. If the latest published version has a different id, the update will be rejected and the user should reload."}},"type":"object","required":["content","change_reason","effective_at"],"title":"PrivacyPolicyCreateRequest"},"PrivacyPolicyVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"checksum":{"type":"string","title":"Checksum"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"version_num":{"type":"integer","title":"Version Num"},"published_at":{"type":"string","format":"date-time","title":"Published At"},"change_reason":{"type":"string","title":"Change Reason"},"created_by":{"type":"string","title":"Created By"}},"type":"object","required":["id","content","effective_at","checksum","created_at","version_num","published_at","change_reason","created_by"],"title":"PrivacyPolicyVersionResponse"},"ProductCreate":{"properties":{"name":{"type":"string","title":"Name"},"okta_application_id":{"type":"string","title":"Okta Application Id"},"okta_group_id":{"type":"string","title":"Okta Group Id"}},"type":"object","required":["name","okta_application_id","okta_group_id"],"title":"ProductCreate"},"ProductUpdate":{"properties":{"name":{"type":"string","title":"Name"},"okta_application_id":{"type":"string","title":"Okta Application Id"},"okta_group_id":{"type":"string","title":"Okta Group Id"}},"type":"object","required":["name","okta_application_id","okta_group_id"],"title":"ProductUpdate"},"PromoCodesExportRequest":{"properties":{"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"has_promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Has Promo Code","default":"all"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"type":"object","title":"PromoCodesExportRequest"},"PromoCodesReportPreviewResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PromoCodesReportRow"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["data","total","page","per_page"],"title":"PromoCodesReportPreviewResponse"},"PromoCodesReportRow":{"properties":{"id":{"type":"string","title":"Id"},"client_id":{"type":"string","title":"Client Id"},"client_name":{"type":"string","title":"Client Name"},"plan_id":{"type":"string","title":"Plan Id"},"plan_name":{"type":"string","title":"Plan Name"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"subscription_start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Start Date"},"subscription_end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription End Date"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"promotion_code_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promotion Code Id"},"coupon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coupon Id"},"discounts":{"items":{"$ref":"#/components/schemas/DiscountDetail"},"type":"array","title":"Discounts","default":[]}},"type":"object","required":["id","client_id","client_name","plan_id","plan_name"],"title":"PromoCodesReportRow","description":"Single row in the promo codes report."},"ProviderBase":{"properties":{"data_vendor":{"type":"string","title":"Data Vendor"},"code_name":{"type":"string","title":"Code Name"},"description":{"type":"string","title":"Description"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"},"provider_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Id"},"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index","default":0},"type":{"type":"string","title":"Type"},"history":{"type":"string","title":"History"},"total_inventory":{"type":"string","title":"Total Inventory"},"size":{"type":"string","title":"Size"},"sourcing_method_description":{"type":"string","title":"Sourcing Method Description"},"ca_contractual_usage":{"type":"string","title":"Ca Contractual Usage"},"provider_contractual_usage":{"type":"string","title":"Provider Contractual Usage"},"data_type":{"type":"string","title":"Data Type"},"account_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Restriction Comments"},"signup_plan_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Plan Restriction Comments"},"deployment_fee":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Deployment Fee","default":false},"auto_provision_new_enterprises":{"type":"boolean","title":"Auto Provision New Enterprises","default":false},"use_of_name":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Of Name","default":false},"use_of_name_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Of Name Comments"}},"type":"object","required":["data_vendor","code_name","description","type","history","total_inventory","size","sourcing_method_description","ca_contractual_usage","provider_contractual_usage","data_type"],"title":"ProviderBase"},"ProviderBaseUpdate":{"properties":{"data_vendor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Vendor"},"code_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"},"provider_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Id"},"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index","default":0},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"History"},"total_inventory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Inventory"},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size"},"sourcing_method_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sourcing Method Description"},"ca_contractual_usage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ca Contractual Usage"},"provider_contractual_usage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Contractual Usage"},"data_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Type"},"account_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Restriction Comments"},"signup_plan_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Plan Restriction Comments"},"deployment_fee":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Deployment Fee","default":false},"auto_provision_new_enterprises":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Provision New Enterprises"},"use_of_name":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Of Name","default":false},"use_of_name_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Of Name Comments"}},"type":"object","title":"ProviderBaseUpdate"},"ProviderChannelRestrictionCreate":{"properties":{"restriction_kind":{"type":"string","enum":["enterprise","signup_plan"],"title":"Restriction Kind"},"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Id"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"api_access_denied":{"type":"boolean","title":"Api Access Denied","default":true},"mcp_access_denied":{"type":"boolean","title":"Mcp Access Denied","default":true}},"type":"object","required":["restriction_kind","provider_id"],"title":"ProviderChannelRestrictionCreate"},"ProviderChannelRestrictionItemRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"restriction_kind":{"type":"string","enum":["enterprise","signup_plan"],"title":"Restriction Kind"},"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Id"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"api_access_denied":{"type":"boolean","title":"Api Access Denied"},"mcp_access_denied":{"type":"boolean","title":"Mcp Access Denied"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","restriction_kind","provider_id","api_access_denied","mcp_access_denied","updated_by","updated_at"],"title":"ProviderChannelRestrictionItemRead"},"ProviderCreate":{"properties":{"provider":{"$ref":"#/components/schemas/ProviderBase"},"restriction":{"$ref":"#/components/schemas/Restriction"}},"type":"object","required":["provider"],"title":"ProviderCreate"},"ProviderLogCreate":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"stage":{"type":"string","title":"Stage"}},"type":"object","required":["provider_id","stage"],"title":"ProviderLogCreate"},"ProviderLogRead":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"stage":{"type":"string","title":"Stage"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["provider_id","stage","id"],"title":"ProviderLogRead"},"ProviderLogUpdate":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"stage":{"type":"string","title":"Stage"}},"type":"object","required":["provider_id","stage"],"title":"ProviderLogUpdate"},"ProviderRead":{"properties":{"data_vendor":{"type":"string","title":"Data Vendor"},"code_name":{"type":"string","title":"Code Name"},"description":{"type":"string","title":"Description"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"},"provider_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Id"},"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index","default":0},"type":{"type":"string","title":"Type"},"history":{"type":"string","title":"History"},"total_inventory":{"type":"string","title":"Total Inventory"},"size":{"type":"string","title":"Size"},"sourcing_method_description":{"type":"string","title":"Sourcing Method Description"},"ca_contractual_usage":{"type":"string","title":"Ca Contractual Usage"},"provider_contractual_usage":{"type":"string","title":"Provider Contractual Usage"},"data_type":{"type":"string","title":"Data Type"},"account_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Restriction Comments"},"signup_plan_restriction_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Plan Restriction Comments"},"deployment_fee":{"type":"boolean","title":"Deployment Fee","default":false},"auto_provision_new_enterprises":{"type":"boolean","title":"Auto Provision New Enterprises","default":false},"use_of_name":{"type":"boolean","title":"Use Of Name","default":false},"use_of_name_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Of Name Comments"},"id":{"type":"string","format":"uuid4","title":"Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"},"created_by":{"type":"string","title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"enterprise_channel_rules":{"items":{"$ref":"#/components/schemas/EnterpriseChannelRule"},"type":"array","title":"Enterprise Channel Rules"},"signup_plan_channel_rules":{"items":{"$ref":"#/components/schemas/SignupPlanChannelRule"},"type":"array","title":"Signup Plan Channel Rules"},"enterprise_api_access_denied_all":{"type":"boolean","title":"Enterprise Api Access Denied All","default":false},"enterprise_mcp_access_denied_all":{"type":"boolean","title":"Enterprise Mcp Access Denied All","default":false},"order_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Id"}},"type":"object","required":["data_vendor","code_name","description","type","history","total_inventory","size","sourcing_method_description","ca_contractual_usage","provider_contractual_usage","data_type","id","created_at","updated_at","created_by"],"title":"ProviderRead"},"ProviderServiceCreate":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"service":{"type":"string","title":"Service"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"coverage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage"},"update_frequency":{"type":"string","title":"Update Frequency"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"granularity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granularity"},"geo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo"},"delivery_type":{"type":"string","title":"Delivery Type"},"s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Path"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"}},"type":"object","required":["provider_id","service","update_frequency","delivery_type"],"title":"ProviderServiceCreate"},"ProviderServiceRead":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"service":{"type":"string","title":"Service"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"coverage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage"},"update_frequency":{"type":"string","title":"Update Frequency"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"granularity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granularity"},"geo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo"},"delivery_type":{"type":"string","title":"Delivery Type"},"s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Path"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"},"id":{"type":"string","format":"uuid4","title":"Id"}},"type":"object","required":["provider_id","service","update_frequency","delivery_type","id"],"title":"ProviderServiceRead"},"ProviderServiceUpdate":{"properties":{"provider_id":{"type":"string","format":"uuid4","title":"Provider Id"},"service":{"type":"string","title":"Service"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"coverage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage"},"update_frequency":{"type":"string","title":"Update Frequency"},"lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lag"},"granularity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granularity"},"geo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo"},"delivery_type":{"type":"string","title":"Delivery Type"},"s3_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Path"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"}},"type":"object","required":["provider_id","service","update_frequency","delivery_type"],"title":"ProviderServiceUpdate"},"ProviderUpdate":{"properties":{"provider":{"$ref":"#/components/schemas/ProviderBaseUpdate"},"restriction":{"anyOf":[{"$ref":"#/components/schemas/Restriction"},{"type":"null"}]}},"type":"object","required":["provider"],"title":"ProviderUpdate"},"ProvidersAccess":{"properties":{"unmetered":{"items":{"type":"string"},"type":"array","title":"Unmetered"},"api":{"$ref":"#/components/schemas/UserProviderAccessChannel"},"mcp":{"$ref":"#/components/schemas/UserProviderAccessChannel"}},"type":"object","required":["unmetered","api","mcp"],"title":"ProvidersAccess","description":"Legacy ``enabled`` / ``blocked`` mirror API channel; ``api`` / ``mcp`` add full detail."},"ProvisionedClientListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProvisionedClientRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"ProvisionedClientListResponse"},"ProvisionedClientRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"name":{"type":"string","title":"Name"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","client_id","name","sector","is_active"],"title":"ProvisionedClientRead","description":"A client with the Block Data feature provisioned via\n``ClientProduct.features`` / ``feature_client_product_association``,\nannotated with whether it also has an active Block contract/request\n(see ``BlockRequestRepository._PROVISIONED_ACTIVE_STATUSES``)."},"PublicTickerResponse":{"properties":{"id":{"type":"string","title":"Id"},"message":{"type":"string","title":"Message"},"priority":{"type":"integer","title":"Priority"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"type":"object","required":["id","message","priority","starts_at","ends_at"],"title":"PublicTickerResponse","description":"Public ticker response without sensitive information"},"PublishState":{"type":"string","enum":["draft","live"],"title":"PublishState"},"RawExportDataframe":{"type":"string","enum":["general_consumption","platform_api_calls","mcp_tracking","s3_downloads","polaris_s3_usage","platform_spans_raw","client_mapping"],"title":"RawExportDataframe","description":"Datasets `GET /raw-export` can serve.\n\nAn allowlist rather than a bare string so an unrecognized `dataframe`\nfails at validation with a 422. Shannon INJ-VULN-07 flagged this route\nas CWE-89 because injection payloads in `dataframe` returned 200 with a\n\"No data available\" CSV, which reads to a scanner as an accepted payload.\nThe value only ever picks a branch; it never reaches SQL."},"ReactivateSubscriptionRequest":{"properties":{"plan_id":{"type":"string","title":"Plan Id","description":"Plan tier key, e.g. 'professional'"},"billing_period":{"type":"string","enum":["monthly","annual"],"title":"Billing Period","description":"Billing cadence"}},"type":"object","required":["plan_id","billing_period"],"title":"ReactivateSubscriptionRequest","description":"Request body for the subscription reactivation checkout."},"ReactivationCheckoutResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Stripe hosted checkout URL to redirect the user"},"checkout_session_id":{"type":"string","title":"Checkout Session Id","description":"Stripe checkout session ID"}},"type":"object","required":["url","checkout_session_id"],"title":"ReactivationCheckoutResponse","description":"Response containing the Stripe hosted checkout URL."},"RecurringGrantScheduleResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"type":"string","title":"Token Name"},"usage_scope":{"type":"string","title":"Usage Scope","default":"default"},"amount":{"type":"string","title":"Amount"},"max_occurrences":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Occurrences"},"recurrence_unit":{"type":"string","title":"Recurrence Unit"},"interval":{"type":"integer","title":"Interval"},"start_at":{"type":"string","format":"date-time","title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"},"token_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Expires Days"},"status":{"type":"string","title":"Status"},"last_issued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Issued At"},"next_due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Due At"},"issued_count":{"type":"integer","title":"Issued Count"},"remaining_occurrences":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Occurrences"},"issued_by_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issued By User Email"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data","default":{}},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","token_id","token_name","amount","recurrence_unit","interval","start_at","status","issued_count","created_at"],"title":"RecurringGrantScheduleResponse","description":"Response for a client's recurring token grant schedule (ledger client account + token)."},"RegisterAgentRequest":{"properties":{"external_agent_id":{"type":"string","maxLength":255,"minLength":1,"title":"External Agent Id"},"source":{"type":"string","title":"Source","default":"x402"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"}},"type":"object","required":["external_agent_id"],"title":"RegisterAgentRequest"},"RejectionSource":{"type":"string","enum":["client_block_admin","client_compliance","carbonarc_accounts","carbonarc_legal","carbonarc_engineering"],"title":"RejectionSource"},"ReleaseTimerRead":{"properties":{"running":{"type":"boolean","title":"Running"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"started_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started By"}},"type":"object","required":["running"],"title":"ReleaseTimerRead","description":"Current release timer state — the single open timing, if any."},"ReleaseTimerUpdate":{"properties":{"running":{"type":"boolean","title":"Running"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"}},"type":"object","required":["running"],"title":"ReleaseTimerUpdate","description":"Start (``running=true``) or stop (``running=false``) the release timer.\n\n``label`` is an optional free-text tag applied when starting; ignored on stop."},"ReleaseTimingRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"started_by":{"type":"string","title":"Started By"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"ended_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ended By"}},"type":"object","required":["id","started_at","started_by"],"title":"ReleaseTimingRead","description":"A single historical release timing row (for the logs list endpoint)."},"ReplayConfig":{"properties":{"profiles":{"items":{"type":"string"},"type":"array","title":"Profiles"},"default_start":{"type":"string","title":"Default Start"},"default_end":{"type":"string","title":"Default End"},"default_judge_model":{"type":"string","title":"Default Judge Model"}},"type":"object","required":["profiles","default_start","default_end","default_judge_model"],"title":"ReplayConfig"},"ReplayRunRequest":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"sample":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Sample","default":100},"mode":{"type":"string","title":"Mode","default":"first-per-session"},"start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"},"seed":{"type":"integer","title":"Seed","default":42},"judge_model":{"type":"string","title":"Judge Model","default":"claude-haiku-4-5-20251001"},"experiment":{"type":"string","title":"Experiment","default":"historical-judge-replay"},"host":{"type":"string","title":"Host","default":"https://mcp.dev.carbonarc.co"}},"type":"object","required":["endpoint"],"title":"ReplayRunRequest"},"ReportingHealthStatus":{"properties":{"status":{"type":"string","enum":["healthy","degraded","unknown"],"title":"Status"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"overridden":{"type":"boolean","title":"Overridden","default":false}},"type":"object","required":["status","checked_at"],"title":"ReportingHealthStatus"},"Restriction":{"properties":{"enterprise_rules":{"items":{"$ref":"#/components/schemas/EnterpriseChannelRule"},"type":"array","title":"Enterprise Rules"},"signup_plan_rules":{"items":{"$ref":"#/components/schemas/SignupPlanChannelRule"},"type":"array","title":"Signup Plan Rules"},"enterprise_api_access_denied_all":{"type":"boolean","title":"Enterprise Api Access Denied All","default":false},"enterprise_mcp_access_denied_all":{"type":"boolean","title":"Enterprise Mcp Access Denied All","default":false}},"type":"object","title":"Restriction","description":"Provider restriction payload for create/update (admin)."},"RoleCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["name"],"title":"RoleCreate"},"RolePreview":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","name"],"title":"RolePreview"},"RoleRead":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Parent Id"},"id":{"type":"string","format":"uuid4","title":"Id"},"policy_rules":{"items":{"$ref":"#/components/schemas/PolicyRule"},"type":"array","title":"Policy Rules"}},"type":"object","required":["name","id","policy_rules"],"title":"RoleRead"},"RoleUpdate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Parent Id"},"policy_rules":{"items":{"$ref":"#/components/schemas/PolicyRule"},"type":"array","title":"Policy Rules"}},"type":"object","required":["name","policy_rules"],"title":"RoleUpdate"},"RowLimitResponse":{"properties":{"row_limit":{"type":"integer","title":"Row Limit"}},"type":"object","required":["row_limit"],"title":"RowLimitResponse"},"S3ActivityEvent":{"properties":{"period":{"type":"string","title":"Period"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"event_type":{"type":"string","enum":["accrued","consumed","adjusted"],"title":"Event Type"},"amount":{"type":"string","title":"Amount"},"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"grant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Grant Id"},"order_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Id"},"lines":{"items":{"$ref":"#/components/schemas/S3ActivityEventLine"},"type":"array","title":"Lines","default":[]}},"type":"object","required":["period","occurred_at","event_type","amount","transaction_id"],"title":"S3ActivityEvent","description":"One Activity History row: a monthly accrual or a consumption."},"S3ActivityEventLine":{"properties":{"block_contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Contract Id"},"period_seq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Seq"},"amount":{"type":"string","title":"Amount"}},"type":"object","required":["amount"],"title":"S3ActivityEventLine","description":"An invoice a consumption event was applied to — the expandable detail row.\n\nIdentified by ``(block_contract_id, period_seq)``, never by Stripe id. This shape is\nserved to clients by ``GET /ledger/transactions/s3``, and no client-facing response may\ncarry a Stripe identifier; the CAMS-side invoice views get the Stripe link from\n``block_invoice_drafts`` instead."},"S3ActivityFeedResponse":{"properties":{"total_accrued":{"type":"string","title":"Total Accrued"},"total_consumed":{"type":"string","title":"Total Consumed"},"events":{"items":{"$ref":"#/components/schemas/S3ActivityEvent"},"type":"array","title":"Events"}},"type":"object","required":["total_accrued","total_consumed","events"],"title":"S3ActivityFeedResponse"},"S3AdminAutoApplySettingRequest":{"properties":{"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"recurring_tokens":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Recurring Tokens"},"clear_recurring_tokens":{"type":"boolean","title":"Clear Recurring Tokens","default":false},"client_id":{"type":"string","title":"Client Id"},"reason":{"type":"string","minLength":1,"title":"Reason"}},"type":"object","required":["block_contract_id","client_id","reason"],"title":"S3AdminAutoApplySettingRequest","description":"The CAMS form of the same change.\n\n``client_id`` because an operator acts on someone else's contract, and ``reason`` because\nchanging a figure a client chose has to be explainable afterwards — the same rule the\noverride endpoint follows."},"S3AdminClientInvoices":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"available":{"type":"string","title":"Available"},"reserved":{"type":"string","title":"Reserved"},"remaining":{"type":"string","title":"Remaining"},"invoices":{"items":{"$ref":"#/components/schemas/S3AdminInvoiceRow"},"type":"array","title":"Invoices"}},"type":"object","required":["client_id","available","reserved","remaining","invoices"],"title":"S3AdminClientInvoices","description":"One client's card on the Upcoming Invoices tab."},"S3AdminGrantRow":{"properties":{"grant_id":{"type":"string","format":"uuid","title":"Grant Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"order_id":{"type":"string","title":"Order Id"},"award_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Award Date"},"status":{"type":"string","title":"Status"},"vesting_kind":{"type":"string","title":"Vesting Kind"},"block_contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Contract Id"},"block_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Request Id"},"auto_apply":{"type":"boolean","title":"Auto Apply","default":true},"allocated":{"type":"string","title":"Allocated"},"accrued":{"type":"string","title":"Accrued"},"consumed":{"type":"string","title":"Consumed"},"adjusted":{"type":"string","title":"Adjusted","default":"0"},"available":{"type":"string","title":"Available"},"periods_total":{"type":"integer","title":"Periods Total"},"periods_issued":{"type":"integer","title":"Periods Issued"},"progress_pct":{"type":"integer","title":"Progress Pct"},"next_vest_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Vest At"},"next_vest_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Vest Amount"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"}},"type":"object","required":["grant_id","order_id","status","vesting_kind","allocated","accrued","consumed","available","periods_total","periods_issued","progress_pct"],"title":"S3AdminGrantRow","description":"One grant on Cole's oversight tab: the client's own row plus who it belongs to."},"S3AdminGrantsResponse":{"properties":{"grants":{"items":{"$ref":"#/components/schemas/S3AdminGrantRow"},"type":"array","title":"Grants"},"total_grants":{"type":"integer","title":"Total Grants"},"has_more":{"type":"boolean","title":"Has More","default":false}},"type":"object","required":["grants","total_grants"],"title":"S3AdminGrantsResponse"},"S3AdminInvoiceRow":{"properties":{"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"block_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Request Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"fee_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Type"},"period_seq":{"type":"integer","title":"Period Seq"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"send_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Send Date"},"edit_window_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Edit Window Days"},"invoice_amount":{"type":"string","title":"Invoice Amount"},"max_applicable_tokens":{"type":"string","title":"Max Applicable Tokens"},"applied_tokens":{"type":"string","title":"Applied Tokens"},"net_due":{"type":"string","title":"Net Due"},"declined":{"type":"boolean","title":"Declined","default":false},"reservation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reservation Id"},"applied_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied Source"},"applied_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied By"},"editable":{"type":"boolean","title":"Editable","default":true},"auto_apply_enabled":{"type":"boolean","title":"Auto Apply Enabled","default":true},"recurring_override_tokens":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurring Override Tokens"},"auto_default_tokens":{"type":"string","title":"Auto Default Tokens","default":"0"},"block_invoice_draft_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Invoice Draft Id"},"review_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review State"},"approval_overdue_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approval Overdue At"}},"type":"object","required":["block_contract_id","dataset_id","period_seq","invoice_amount","max_applicable_tokens","applied_tokens","net_due"],"title":"S3AdminInvoiceRow","description":"One upcoming Block invoice on Cole's control surface.\n\nWider than the client's row: it keeps Historic (``one_time``) contracts, which the client\nsurface omits, and it names the applying party so an override is visible as an override."},"S3AdminUpcomingInvoicesResponse":{"properties":{"clients":{"items":{"$ref":"#/components/schemas/S3AdminClientInvoices"},"type":"array","title":"Clients"},"total_clients":{"type":"integer","title":"Total Clients"}},"type":"object","required":["clients","total_clients"],"title":"S3AdminUpcomingInvoicesResponse"},"S3ApplyRequest":{"properties":{"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"period_seq":{"type":"integer","minimum":1.0,"title":"Period Seq"},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["block_contract_id","period_seq","amount"],"title":"S3ApplyRequest"},"S3ApplyResponse":{"properties":{"reservation_id":{"type":"string","format":"uuid","title":"Reservation Id"},"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"period_seq":{"type":"integer","title":"Period Seq"},"applied_tokens":{"type":"string","title":"Applied Tokens"},"invoice_amount":{"type":"string","title":"Invoice Amount"},"net_due":{"type":"string","title":"Net Due"},"available":{"type":"string","title":"Available"},"reserved":{"type":"string","title":"Reserved"},"remaining":{"type":"string","title":"Remaining"}},"type":"object","required":["reservation_id","block_contract_id","period_seq","applied_tokens","invoice_amount","net_due","available","reserved","remaining"],"title":"S3ApplyResponse","description":"The applied row plus refreshed header figures, so the UI needs no second request."},"S3AutoApplySettingRequest":{"properties":{"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"recurring_tokens":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Recurring Tokens"},"clear_recurring_tokens":{"type":"boolean","title":"Clear Recurring Tokens","default":false}},"type":"object","required":["block_contract_id"],"title":"S3AutoApplySettingRequest","description":"Change a contract's automatic-application settings.\n\nEvery field optional, and at least one required — a request that changes nothing is a bug\nin the caller, not a no-op worth accepting.\n\n``clear_recurring_tokens`` exists because a nullable ``recurring_tokens`` cannot express\n\"go back to the computed default\" and \"leave the amount alone\" with one field. Collapsing\nthem would make toggling the switch off and on again silently wipe the amount the client\nchose."},"S3BalanceSummaryResponse":{"properties":{"allocated":{"type":"string","title":"Allocated"},"accrued":{"type":"string","title":"Accrued"},"consumed":{"type":"string","title":"Consumed"},"available":{"type":"string","title":"Available"},"reserved":{"type":"string","title":"Reserved"},"remaining":{"type":"string","title":"Remaining"},"grants":{"items":{"$ref":"#/components/schemas/S3GrantBalanceRow"},"type":"array","title":"Grants"}},"type":"object","required":["allocated","accrued","consumed","available","reserved","remaining","grants"],"title":"S3BalanceSummaryResponse","description":"Client-level S3 rollup plus its per-grant rows.\n\n``available`` is the ledger balance (accrued − consumed) — the four wallet tiles.\n``reserved`` and ``remaining`` are the apply header's extra two: tokens already applied\nto upcoming invoices, and what is left to apply after them.\n\n``allocated`` sums the per-grant rows, each already net of its cancelled slices, so it is\nnot the total ever awarded to this client."},"S3GrantBalanceRow":{"properties":{"grant_id":{"type":"string","format":"uuid","title":"Grant Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"order_id":{"type":"string","title":"Order Id"},"award_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Award Date"},"status":{"type":"string","title":"Status"},"vesting_kind":{"type":"string","title":"Vesting Kind"},"block_contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Contract Id"},"block_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Request Id"},"auto_apply":{"type":"boolean","title":"Auto Apply","default":true},"allocated":{"type":"string","title":"Allocated"},"accrued":{"type":"string","title":"Accrued"},"consumed":{"type":"string","title":"Consumed"},"adjusted":{"type":"string","title":"Adjusted","default":"0"},"available":{"type":"string","title":"Available"},"periods_total":{"type":"integer","title":"Periods Total"},"periods_issued":{"type":"integer","title":"Periods Issued"},"progress_pct":{"type":"integer","title":"Progress Pct"},"next_vest_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Vest At"},"next_vest_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Vest Amount"}},"type":"object","required":["grant_id","order_id","status","vesting_kind","allocated","accrued","consumed","available","periods_total","periods_issued","progress_pct"],"title":"S3GrantBalanceRow","description":"One grant's row in the Vesting Schedule view.\n\nMirrors the approved wireframe: award date, status, allocated, vesting progress,\naccrued, consumed, available, next vest."},"S3GrantCreateRequest":{"properties":{"client_id":{"type":"string","title":"Client Id"},"order_id":{"type":"string","minLength":1,"title":"Order Id"},"reason":{"type":"string","minLength":1,"title":"Reason"},"amount":{"anyOf":[{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0},{"type":"string"}],"title":"Amount"},"vesting_kind":{"$ref":"#/components/schemas/S3VestingKind","default":"monthly_12"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"block_contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Contract Id"},"block_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Request Id"},"auto_apply":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Apply"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["client_id","order_id","reason","amount"],"title":"S3GrantCreateRequest","description":"Cole's S3 token award.\n\n``order_id`` and ``vesting_kind`` are typed columns rather than ``metadata`` entries:\nFinance searches awards by order reference, and the vesting kind decides how many rows\nget written. Neither survives being buried in an untyped JSON blob."},"S3GrantCreateResponse":{"properties":{"grant_id":{"type":"string","format":"uuid","title":"Grant Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"order_id":{"type":"string","title":"Order Id"},"status":{"type":"string","title":"Status"},"vesting_kind":{"type":"string","title":"Vesting Kind"},"allocated":{"type":"string","title":"Allocated"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"block_contract_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Contract Id"},"block_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Request Id"},"auto_apply":{"type":"boolean","title":"Auto Apply","default":true},"vesting_count":{"type":"integer","title":"Vesting Count"},"vestings":{"items":{"$ref":"#/components/schemas/S3GrantVestingRow"},"type":"array","title":"Vestings"},"already_existed":{"type":"boolean","title":"Already Existed"}},"type":"object","required":["grant_id","client_id","order_id","status","vesting_kind","allocated","vesting_count","vestings","already_existed"],"title":"S3GrantCreateResponse","description":"The created award. Always carries ``grant_id`` so the UI can link to what it made."},"S3GrantVestingRow":{"properties":{"period_seq":{"type":"integer","title":"Period Seq"},"vest_at":{"type":"string","format":"date-time","title":"Vest At"},"amount":{"type":"string","title":"Amount"},"status":{"type":"string","title":"Status"}},"type":"object","required":["period_seq","vest_at","amount","status"],"title":"S3GrantVestingRow","description":"One slice of the created schedule, returned so the caller can show it immediately."},"S3OverrideRequest":{"properties":{"client_id":{"type":"string","title":"Client Id"},"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"period_seq":{"type":"integer","minimum":1.0,"title":"Period Seq"},"amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Amount"},"reason":{"type":"string","minLength":1,"title":"Reason"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["client_id","block_contract_id","period_seq","amount","reason"],"title":"S3OverrideRequest","description":"Cole overriding what a client applied to one upcoming invoice.\n\nUnlike the client's own apply, this may target any period the contract will bill — an\noverride exists precisely to reach an invoice the client's surface does not offer."},"S3UpcomingInvoiceRow":{"properties":{"block_contract_id":{"type":"string","format":"uuid","title":"Block Contract Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Label"},"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"period_seq":{"type":"integer","title":"Period Seq"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"send_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Send Date"},"days_until_send":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Until Send"},"invoice_amount":{"type":"string","title":"Invoice Amount"},"max_applicable_tokens":{"type":"string","title":"Max Applicable Tokens"},"applied_tokens":{"type":"string","title":"Applied Tokens"},"net_due":{"type":"string","title":"Net Due"},"reservation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reservation Id"},"editable":{"type":"boolean","title":"Editable","default":true},"auto_apply_enabled":{"type":"boolean","title":"Auto Apply Enabled","default":true},"auto_default_tokens":{"type":"string","title":"Auto Default Tokens","default":"0"},"recurring_override_tokens":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurring Override Tokens"},"applied_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied Source"}},"type":"object","required":["block_contract_id","dataset_id","period_seq","invoice_amount","max_applicable_tokens","applied_tokens","net_due"],"title":"S3UpcomingInvoiceRow","description":"One row of the client's Next Billing surface.\n\nDeliberately Stripe-free: the upcoming invoice a client applies to usually does not\nexist in Stripe yet, and even once it does its id is never sent to a client. Everything\nhere comes from the contract and the reservation."},"S3UpcomingInvoicesResponse":{"properties":{"available":{"type":"string","title":"Available"},"reserved":{"type":"string","title":"Reserved"},"remaining":{"type":"string","title":"Remaining"},"invoices":{"items":{"$ref":"#/components/schemas/S3UpcomingInvoiceRow"},"type":"array","title":"Invoices"}},"type":"object","required":["available","reserved","remaining","invoices"],"title":"S3UpcomingInvoicesResponse","description":"The apply surface's header plus its rows.\n\nThe three header figures come straight from ``S3BalanceSummaryResponse`` and keep its\nnames, so the apply header can never disagree with the wallet tiles. ``reserved`` is\nwhat the wireframe labels \"Applied to upcoming invoices\" — the UI supplies that wording;\nthe field stays ``reserved`` because no consumption has happened yet."},"S3VestingKind":{"type":"string","enum":["immediate","monthly_12"],"title":"S3VestingKind","description":"How a grant releases its tokens."},"SampleArnRegisterBody":{"properties":{"arns":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Arns"}},"type":"object","required":["arns"],"title":"SampleArnRegisterBody","description":"``POST /block/arns/sample`` — register sample-scoped ARN(s)."},"SampleCatalogDisclaimerResponse":{"properties":{"sample_catalog_disclaimer_accepted_at":{"type":"string","format":"date-time","title":"Sample Catalog Disclaimer Accepted At"}},"type":"object","required":["sample_catalog_disclaimer_accepted_at"],"title":"SampleCatalogDisclaimerResponse"},"SampleClientStatus":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"type":"string","title":"Client Name"},"entitled":{"type":"boolean","title":"Entitled"},"s3":{"type":"string","enum":["live","partial","not_live","no_arn","unknown","not_entitled"],"title":"S3","description":"'live' = every active sample ARN present on the policy; 'partial' = some but not all; 'no_arn' = nothing registered to grant; 'unknown' = the live read failed. 'unknown' is NOT 'not_live'. 'not_entitled' = the client is on this list for its LIVE access and has no sample entitlement here, so there is no sample verdict to give — distinct from 'no_arn', which is an entitled client with nothing registered."},"s3_arns_total":{"type":"integer","title":"S3 Arns Total"},"s3_arns_live":{"type":"integer","title":"S3 Arns Live"},"s3_arns_present":{"items":{"type":"string"},"type":"array","title":"S3 Arns Present","description":"The client's sample ARNs this request's read found on the bucket policy. Empty when the read failed, alongside s3_arns_missing: an unread policy places no ARN on either side."},"s3_arns_missing":{"items":{"type":"string"},"type":"array","title":"S3 Arns Missing","description":"Registered sample ARNs the read did NOT find on the policy. Empty when the read failed, which is not the same as nothing missing."},"ledger_active_grants":{"type":"integer","title":"Ledger Active Grants","description":"CAMS's RECORDED grants. Never render this as live access."},"sample_leftover_s3":{"type":"boolean","title":"Sample Leftover S3","description":"The client has NO sample entitlement here and is still on the sample bucket policy: a grant that outlived its entitlement, or one made by ARN registration rather than the toggle. Distinct from the 's3' verdict, which stays scoped to entitlement, so 'not_entitled' keeps meaning 'nothing was ever meant to be here' and this says something is.","default":false},"sample_leftover_polaris":{"type":"boolean","title":"Sample Leftover Polaris","description":"As sample_leftover_s3, for the Polaris role. Separate because a client can hold one surface and not the other, and the panel makes a per-surface claim.","default":false},"polaris":{"type":"string","enum":["live","not_live","no_principal","unknown","not_entitled"],"title":"Polaris","description":"Live Polaris role attachment, read back per request. 'no_principal' = nothing to grant, distinct from 'not_live'; 'unknown' = the read failed, NOT 'not_live'; 'not_entitled' = no sample entitlement here, so there is no verdict to give."},"failure":{"anyOf":[{"$ref":"#/components/schemas/SampleFailure"},{"type":"null"}]},"polaris_principal_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Principal Role","description":"The Polaris principal role this client's access hangs off, so the UI can name it. None when the client has no Polaris principal at all."},"bulk_served_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bulk Served Lag","description":"The lag this client is served on the bulk catalog for this cut, from block_client_data_access. None when the client has no granted live access, which is bulk_s3/bulk_polaris = 'not_entitled'."},"bulk_s3":{"type":"string","enum":["live","partial","not_live","no_arn","unknown","not_entitled"],"title":"Bulk S3","description":"Same vocabulary as `s3`, against the bulk bucket for this client's served lag, plus one state sample cannot be in: 'not_entitled' = the client has no granted live access to this (dataset, cut) at all. That is a deliberate absence, not a failed grant, so it must not render as an X the way 'not_live' does.","default":"not_entitled"},"bulk_s3_arns_total":{"type":"integer","title":"Bulk S3 Arns Total","default":0},"bulk_s3_arns_live":{"type":"integer","title":"Bulk S3 Arns Live","default":0},"bulk_s3_arns_present":{"items":{"type":"string"},"type":"array","title":"Bulk S3 Arns Present"},"bulk_s3_arns_missing":{"items":{"type":"string"},"type":"array","title":"Bulk S3 Arns Missing"},"bulk_polaris":{"type":"string","enum":["live","not_live","no_principal","unknown","not_entitled"],"title":"Bulk Polaris","description":"Same vocabulary as `polaris`, against the bulk catalog role.","default":"not_entitled"},"bulk_polaris_catalog_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bulk Polaris Catalog Role","description":"The bulk catalog role this client's live access hangs off, read back from the verify so the UI names the role actually checked. Per client rather than per cut, because the role encodes the lag and two clients on one cut can be served different lags."}},"type":"object","required":["client_id","client_name","entitled","s3","s3_arns_total","s3_arns_live","ledger_active_grants","polaris"],"title":"SampleClientStatus"},"SampleCutPreflight":{"properties":{"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"sample_enabled":{"type":"boolean","title":"Sample Enabled","description":"Current kill-switch value (absent row ⇒ enabled)."},"in_sample_catalog":{"type":"boolean","title":"In Sample Catalog","description":"The cut resolves to a sample SKU. Sourced from the same graph read the fan-out uses, NOT the drawer's `sample_exists` flag — a cut whose lags don't resolve is in the graph but has no SKU, so the toggle would look live and grant nothing."},"sample_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Lag"},"dataset_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Status"},"would_apply":{"type":"boolean","title":"Would Apply","description":"Turning ON would actually grant to someone: in the catalog, dataset Ready, and at least one entitled client with an identity."},"no_op_reasons":{"items":{"type":"string"},"type":"array","title":"No Op Reasons"},"entitled_clients":{"items":{"$ref":"#/components/schemas/SampleTargetClient"},"type":"array","title":"Entitled Clients","description":"Clients that would RECEIVE access on ON — post both default-deny filters. Never 'every Block-enabled client': turning the switch on does not grant to clients who aren't individually entitled."},"clients_without_sample_arn":{"items":{"$ref":"#/components/schemas/SampleTargetClient"},"type":"array","title":"Clients Without Sample Arn","description":"Subset of entitled_clients with no sample ARN registered."},"clients_losing_access":{"items":{"$ref":"#/components/schemas/SampleTargetClient"},"type":"array","title":"Clients Losing Access","description":"Clients that would actually LOSE access on OFF: those holding a ledger grant for this (dataset, cut), plus those entitled to it. Deliberately NOT the worker's revoke sweep — that is dataset-agnostic (any client with any sample ARN, any enterprise client with a principal) because a clawback should reach anything stale, which as a confirmation list over-names clients who never had access here. Can still include a client holding a stale grant without a current entitlement, so describe these as 'will lose access', never as 'entitled'."}},"type":"object","required":["cut","sample_enabled","in_sample_catalog","sample_lag","dataset_status","would_apply"],"title":"SampleCutPreflight"},"SampleCutRef":{"properties":{"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"}},"type":"object","title":"SampleCutRef"},"SampleCutStatus":{"properties":{"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"sample_enabled":{"type":"boolean","title":"Sample Enabled"},"in_sample_catalog":{"type":"boolean","title":"In Sample Catalog"},"sample_lag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Lag"},"verify":{"type":"string","enum":["ok","unavailable","disabled","no_bucket","not_applicable"],"title":"Verify"},"verify_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verify Reason"},"entitled_client_count":{"type":"integer","title":"Entitled Client Count","description":"M — clients individually entitled on this cut. NOT every Block-enabled client (which would show '3 of 40' where 37 were never meant to have access) and NOT just clients with ARNs (which would flatter the fraction)."},"live_client_count":{"type":"integer","title":"Live Client Count","description":"N — entitled AND fully live."},"no_arn_client_count":{"type":"integer","title":"No Arn Client Count","description":"Entitled clients with no sample ARN, so 'not live' isn't blamed on a fan-out failure when nothing was ever registered to grant."},"polaris_verify":{"type":"string","enum":["ok","unavailable","disabled","not_applicable"],"title":"Polaris Verify","description":"Whether the live Polaris read succeeded. Tracked separately from `verify` because S3 and Polaris can fail independently.","default":"ok"},"polaris_verify_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Verify Reason"},"polaris_client_count":{"type":"integer","title":"Polaris Client Count","description":"Entitled clients that have a Polaris principal, the denominator for Polaris. Not every entitled client has one, so this can differ from entitled_client_count.","default":0},"polaris_live_count":{"type":"integer","title":"Polaris Live Count","description":"Entitled clients whose Polaris role is attached right now.","default":0},"polaris_live_not_entitled_count":{"type":"integer","title":"Polaris Live Not Entitled Count","description":"UNENTITLED clients still holding the Polaris role. Needed because polaris_live_count covers entitled clients only, so it is 0 by construction while the kill switch is off, which cannot be read as 'nobody holds the role'.","default":0},"live_not_entitled":{"items":{"type":"string"},"type":"array","title":"Live Not Entitled","description":"Client names live on EITHER surface while NOT entitled on this cut. Reported separately, never folded into N/M. Expected to be non-empty in practice: ARN registration grants by a different path than the toggle's target set."},"unrecognized_principal_count":{"type":"integer","title":"Unrecognized Principal Count","description":"Live principals that map to no known client (ARN not echoed).","default":0},"catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog","description":"Polaris catalog this cut's sample table lives in."},"polaris_catalog_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polaris Catalog Role","description":"The catalog role that grants this cut. Read back from the live verify rather than derived here, so it is the role actually checked. None when that read did not happen or did not succeed."},"bulk_verify":{"type":"string","enum":["ok","unavailable","disabled","no_bucket","not_applicable"],"title":"Bulk Verify","description":"Whether the live BULK bucket-policy read succeeded, tracked apart from `verify` so a healthy sample read is never borrowed to vouch for the live side. 'not_applicable' ⇒ nobody on this cut has granted live access, so there was no bucket to read.","default":"not_applicable"},"bulk_verify_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bulk Verify Reason"},"bulk_polaris_verify":{"type":"string","enum":["ok","unavailable","disabled","not_applicable"],"title":"Bulk Polaris Verify","default":"not_applicable"},"bulk_polaris_verify_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bulk Polaris Verify Reason"},"bulk_entitled_client_count":{"type":"integer","title":"Bulk Entitled Client Count","description":"Clients with granted live access to this (dataset, cut) — the denominator for the live column, and a different set from entitled_client_count, which is the sample one.","default":0},"bulk_live_client_count":{"type":"integer","title":"Bulk Live Client Count","description":"Of those, the ones fully present on the bulk bucket policy.","default":0},"bulk_polaris_client_count":{"type":"integer","title":"Bulk Polaris Client Count","description":"Live-entitled clients that HAVE a Polaris principal — the denominator for the live Polaris column. Mirrors polaris_client_count on the sample side, and exists for the same reason: a headline built from S3 alone goes green while the Polaris column is all absences.","default":0},"bulk_polaris_live_count":{"type":"integer","title":"Bulk Polaris Live Count","description":"Of those, the ones whose bulk catalog role is attached.","default":0},"clients":{"items":{"$ref":"#/components/schemas/SampleClientStatus"},"type":"array","title":"Clients"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"}},"type":"object","required":["cut","sample_enabled","in_sample_catalog","sample_lag","verify","entitled_client_count","live_client_count","no_arn_client_count","checked_at"],"title":"SampleCutStatus"},"SampleFailure":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"system":{"type":"string","title":"System"},"action":{"type":"string","title":"Action"},"severity":{"type":"string","title":"Severity"},"error":{"type":"string","title":"Error"},"retries":{"type":"integer","title":"Retries"},"failed_at":{"type":"string","format":"date-time","title":"Failed At"}},"type":"object","required":["id","system","action","severity","error","retries","failed_at"],"title":"SampleFailure","description":"An unresolved access failure from the DLQ, scoped to this dataset/cut."},"SamplePreflightResponse":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"catalog_status":{"type":"string","enum":["ok","unavailable"],"title":"Catalog Status","description":"'unavailable' ⇒ the catalog graph could not be read, so the client lists are empty because we could not enumerate — not because nobody is affected. Render as 'couldn't check', and never block an OFF on it."},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"cuts":{"items":{"$ref":"#/components/schemas/SampleCutPreflight"},"type":"array","title":"Cuts"}},"type":"object","required":["dataset_id","catalog_status","checked_at"],"title":"SamplePreflightResponse"},"SampleReapplyBody":{"properties":{"cuts":{"anyOf":[{"items":{"$ref":"#/components/schemas/SampleCutRef"},"type":"array"},{"type":"null"}],"title":"Cuts","description":"Omit for every sample-enabled cut in the catalog."}},"type":"object","title":"SampleReapplyBody"},"SampleReapplyCutResult":{"properties":{"cut":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cut"},"dispatched":{"type":"boolean","title":"Dispatched"},"systems":{"items":{"type":"string"},"type":"array","title":"Systems"},"entitled_client_count":{"type":"integer","title":"Entitled Client Count"}},"type":"object","required":["cut","dispatched","entitled_client_count"],"title":"SampleReapplyCutResult"},"SampleReapplyResponse":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"cuts":{"items":{"$ref":"#/components/schemas/SampleReapplyCutResult"},"type":"array","title":"Cuts"}},"type":"object","required":["dataset_id","requested_at"],"title":"SampleReapplyResponse"},"SampleStatusResponse":{"properties":{"catalog_available":{"type":"boolean","title":"Catalog Available","default":true},"dataset_id":{"type":"string","title":"Dataset Id"},"verify_available":{"type":"boolean","title":"Verify Available"},"checked_at":{"type":"string","format":"date-time","title":"Checked At"},"cuts":{"items":{"$ref":"#/components/schemas/SampleCutStatus"},"type":"array","title":"Cuts"}},"type":"object","required":["dataset_id","verify_available","checked_at"],"title":"SampleStatusResponse"},"SampleTargetClient":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"type":"string","title":"Client Name"},"client_key":{"type":"string","title":"Client Key"},"sample_arn_count":{"type":"integer","title":"Sample Arn Count"},"has_polaris_principal":{"type":"boolean","title":"Has Polaris Principal"}},"type":"object","required":["client_id","client_name","client_key","sample_arn_count","has_polaris_principal"],"title":"SampleTargetClient"},"ScalabilityQueryRequest":{"properties":{"response_format":{"type":"string","enum":["timeseries","scalar"],"title":"Response Format"},"queries":{"items":{"oneOf":[{"$ref":"#/components/schemas/MetricsQuerySpec"},{"$ref":"#/components/schemas/SpansQuerySpec"}],"discriminator":{"propertyName":"data_source","mapping":{"metrics":"#/components/schemas/MetricsQuerySpec","spans":"#/components/schemas/SpansQuerySpec"}}},"type":"array","title":"Queries"},"formulas":{"items":{"$ref":"#/components/schemas/FormulaSpec"},"type":"array","title":"Formulas"},"env":{"type":"string","enum":["dev","stage","prod"],"title":"Env","default":"prod"},"from":{"type":"string","title":"From","default":"now-1d"},"to":{"type":"string","title":"To","default":"now"},"granularity":{"anyOf":[{"type":"string","enum":["hour","day","week","month"]},{"type":"null"}],"title":"Granularity"}},"type":"object","required":["response_format","queries"],"title":"ScalabilityQueryRequest"},"ScalabilityQueryResponse":{"properties":{"status":{"type":"string","enum":["ok","not_configured","error"],"title":"Status"},"response_format":{"type":"string","enum":["timeseries","scalar"],"title":"Response Format"},"series":{"anyOf":[{"items":{"$ref":"#/components/schemas/TimeseriesSeriesResult"},"type":"array"},{"type":"null"}],"title":"Series"},"rows":{"anyOf":[{"items":{"$ref":"#/components/schemas/ScalarRowResult"},"type":"array"},{"type":"null"}],"title":"Rows"},"error_category":{"anyOf":[{"type":"string","enum":["auth","rate_limit","timeout","upstream","bad_request"]},{"type":"null"}],"title":"Error Category"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["status","response_format"],"title":"ScalabilityQueryResponse"},"ScalabilityStatusResponse":{"properties":{"configured":{"type":"boolean","title":"Configured"}},"type":"object","required":["configured"],"title":"ScalabilityStatusResponse"},"ScalarRowResult":{"properties":{"group":{"additionalProperties":{"type":"string"},"type":"object","title":"Group"},"values":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object","title":"Values"}},"type":"object","required":["values"],"title":"ScalarRowResult"},"SchedulePriceChangeBody":{"properties":{"dataset_id":{"type":"string","pattern":"^CA\\d+[A-Z]*$","title":"Dataset Id"},"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"effective_date":{"type":"string","format":"date","title":"Effective Date"},"price":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Price"},"revenue_share_pct":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Revenue Share Pct"},"deployment_fee":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Deployment Fee"},"monthly_fee":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Monthly Fee"},"expected_row_version":{"type":"integer","minimum":0.0,"title":"Expected Row Version","default":0},"rationale":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Rationale"}},"type":"object","required":["dataset_id","access_type","effective_date"],"title":"SchedulePriceChangeBody","description":"Insert a new effective-date row.\n\n``expected_row_version`` is the row_version the UI saw when it loaded\nthe form. If a concurrent save bumped it on the same\n``(dataset_id, cut, access_type)`` since then, the service raises\n``StaleStateError`` and the UI prompts a reload.\n\nFor *new* SKUs that don't have any prior row, pass\n``expected_row_version=0`` so the service can distinguish first insert\nfrom a stale concurrent overwrite."},"ScheduledLedgerRecurrenceUnit":{"type":"string","enum":["day","week","month","year"],"title":"ScheduledLedgerRecurrenceUnit"},"ScheduledLedgerRecurringActionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"transaction_type":{"anyOf":[{"$ref":"#/components/schemas/LedgerTransactionType"},{"type":"null"}]},"amount_per_occurrence":{"type":"string","title":"Amount Per Occurrence"},"recurrence_unit":{"$ref":"#/components/schemas/ScheduledLedgerRecurrenceUnit"},"interval":{"type":"integer","title":"Interval"},"start_at":{"type":"string","format":"date-time","title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"},"max_occurrences":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Occurrences"},"issued_count":{"type":"integer","title":"Issued Count","default":0},"last_issued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Issued At"},"next_occurrence_due":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Occurrence Due"},"token_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Expires Days"},"status":{"$ref":"#/components/schemas/ScheduledLedgerRecurringStatus"},"plan_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Plan Id"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"}},"type":"object","required":["id","client_id","token_id","amount_per_occurrence","recurrence_unit","interval","start_at","status","created_at"],"title":"ScheduledLedgerRecurringActionResponse"},"ScheduledLedgerRecurringStatus":{"type":"string","enum":["active","paused","completed","cancelled"],"title":"ScheduledLedgerRecurringStatus"},"ScheduledTransactionResponse":{"properties":{"schedule_type":{"type":"string","enum":["recurring","one_time"],"title":"Schedule Type"},"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"},"token_id":{"type":"string","format":"uuid","title":"Token Id"},"token_name":{"type":"string","title":"Token Name"},"usage_scope":{"type":"string","title":"Usage Scope","default":"default"},"amount":{"type":"string","title":"Amount"},"status":{"type":"string","title":"Status"},"issued_by_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issued By User Email"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data","default":{}},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"recurrence_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurrence Unit"},"interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval"},"start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"},"max_occurrences":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Occurrences"},"token_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Token Expires Days"},"last_issued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Issued At"},"next_due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Due At"},"issued_count":{"type":"integer","title":"Issued Count","default":0},"remaining_occurrences":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Occurrences"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At"}},"type":"object","required":["schedule_type","id","token_id","token_name","amount","status","created_at"],"title":"ScheduledTransactionResponse","description":"Unified response for scheduled transactions (client self-service and admin-style listings).\n\nRecurring rows mirror ``RecurringGrantScheduleResponse`` field names. One-time scheduled\ngrants use ``scheduled_at`` and omit recurrence fields (null)."},"SendNotificationResponse":{"properties":{"notification_id":{"type":"string","format":"uuid","title":"Notification Id"},"recipient_count":{"type":"integer","title":"Recipient Count"},"status":{"type":"string","enum":["draft","sending","sent","failed"],"title":"Status"}},"type":"object","required":["notification_id","recipient_count","status"],"title":"SendNotificationResponse","description":"Response from ``POST /email-notifications/{id}/send`` and /resend-failed."},"SetClientPolarisCredentialsRequest":{"properties":{"polaris_client_id":{"type":"string","minLength":1,"title":"Polaris Client Id","description":"Existing Polaris client_id for this client's principal — obtained out-of-band (customer's vault, original onboarding ticket, etc.)."},"polaris_client_secret":{"type":"string","minLength":1,"title":"Polaris Client Secret","description":"Existing Polaris client_secret matching ``polaris_client_id``. Polaris does not expose existing secrets, so this is the only path for CAMS to hold creds for a principal it didn't mint."},"polaris_principal_name":{"type":"string","maxLength":128,"minLength":1,"pattern":"^[a-zA-Z0-9_-]+$","title":"Polaris Principal Name","description":"Polaris principal name the pair belongs to. Required: CAMS will not derive or carry forward a stored value — the operator must name the principal explicitly so the three columns are always written together from a single source."}},"type":"object","required":["polaris_client_id","polaris_client_secret","polaris_principal_name"],"title":"SetClientPolarisCredentialsRequest"},"SettingField_bool_":{"properties":{"value":{"type":"boolean","title":"Value"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"last_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Rationale"}},"type":"object","required":["value"],"title":"SettingField[bool]"},"SettingField_int_":{"properties":{"value":{"type":"integer","title":"Value"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"last_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Rationale"}},"type":"object","required":["value"],"title":"SettingField[int]"},"SettingField_str_":{"properties":{"value":{"type":"string","title":"Value"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"last_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Rationale"}},"type":"object","required":["value"],"title":"SettingField[str]"},"SignupAlertSettingsRead":{"properties":{"alerts_enabled":{"$ref":"#/components/schemas/SettingField_bool_"},"stuck_threshold_minutes":{"$ref":"#/components/schemas/SettingField_int_"},"recipient_email":{"$ref":"#/components/schemas/SettingField_str_"},"watcher_interval_minutes":{"type":"integer","title":"Watcher Interval Minutes"}},"type":"object","required":["alerts_enabled","stuck_threshold_minutes","recipient_email","watcher_interval_minutes"],"title":"SignupAlertSettingsRead","description":"Current internal signup alert tuning. Each tunable field carries its\nown ``updated_at`` / ``updated_by`` / ``last_rationale`` so the UI can\nshow per-setting history."},"SignupAlertSettingsUpdate":{"properties":{"alerts_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alerts Enabled"},"stuck_threshold_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":1.0},{"type":"null"}],"title":"Stuck Threshold Minutes"},"recipient_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Recipient Email"},"rationale":{"type":"string","maxLength":500,"title":"Rationale","description":"Required. Why this change is being made (min 3 characters, trimmed)."}},"type":"object","required":["rationale"],"title":"SignupAlertSettingsUpdate","description":"Payload to update alert tuning. Omitted value fields are left\nuntouched. ``rationale`` is always required on PATCH and must be at least\nthree non-whitespace characters (aligned with ``set_setting``)."},"SignupBillingPortalRequest":{"properties":{"return_url":{"type":"string","title":"Return Url","description":"URL to return to after the portal (should include signup session_id for status polling)"}},"type":"object","required":["return_url"],"title":"SignupBillingPortalRequest","description":"Request for creating a billing portal session during signup (e.g. to fix payment method)."},"SignupBillingPortalResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Stripe Customer Portal URL"},"session_id":{"type":"string","title":"Session Id","description":"Signup session_id (for frontend consistency)"}},"type":"object","required":["url","session_id"],"title":"SignupBillingPortalResponse","description":"Response with Stripe Billing Portal URL for signup payment retry."},"SignupCheckoutCreateResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"checkout_session_id":{"type":"string","title":"Checkout Session Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"status":{"type":"string","title":"Status"},"capi_event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capi Event Id"},"purchase_capi_event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchase Capi Event Id"}},"type":"object","required":["session_id","checkout_session_id","status"],"title":"SignupCheckoutCreateResponse"},"SignupCompleteResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"is_complete":{"type":"boolean","title":"Is Complete"},"message":{"type":"string","title":"Message"}},"type":"object","required":["session_id","is_complete","message"],"title":"SignupCompleteResponse"},"SignupEventResponse":{"properties":{"id":{"type":"string","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"source":{"type":"string","title":"Source"},"from_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Status"},"to_status":{"type":"string","title":"To Status"},"created_at":{"type":"string","title":"Created At"},"snapshot":{"additionalProperties":true,"type":"object","title":"Snapshot"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"}},"type":"object","required":["id","event_type","source","to_status","created_at","snapshot"],"title":"SignupEventResponse"},"SignupInitiateRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"first_name":{"type":"string","minLength":1,"title":"First Name","description":"User's first/given name"},"last_name":{"type":"string","minLength":1,"title":"Last Name","description":"User's last/family name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Optional company name to be used as the client name"},"selected_plan_id":{"type":"string","title":"Selected Plan Id","description":"Plan ID: 'business' or 'professional'"},"subscription_period":{"type":"string","title":"Subscription Period","description":"Subscription billing period: 'monthly' or 'annual'"},"signup_tou_id":{"type":"string","title":"Signup Tou Id","description":"UUID of the Terms of Use version accepted by the user"},"marketing_opt_in":{"type":"boolean","title":"Marketing Opt In","default":false},"fbp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbp","description":"Meta _fbp browser cookie"},"fbc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fbc","description":"Meta _fbc click ID cookie"},"marketing_consent":{"type":"boolean","title":"Marketing Consent","description":"Visitor granted the CMP's marketing category. Defaults to False so a caller that omits it sends no Meta CAPI event (PRO-3255).","default":false}},"type":"object","required":["email","password","first_name","last_name","selected_plan_id","subscription_period","signup_tou_id"],"title":"SignupInitiateRequest"},"SignupInitiateResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"},"capi_event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capi Event Id"}},"type":"object","required":["session_id","email","status"],"title":"SignupInitiateResponse"},"SignupInternalNoteCreate":{"properties":{"body":{"type":"string","maxLength":1000,"title":"Body"}},"type":"object","required":["body"],"title":"SignupInternalNoteCreate"},"SignupInternalNoteListResponse":{"properties":{"notes":{"items":{"$ref":"#/components/schemas/SignupInternalNoteRead"},"type":"array","title":"Notes"}},"type":"object","required":["notes"],"title":"SignupInternalNoteListResponse"},"SignupInternalNoteRead":{"properties":{"id":{"type":"string","title":"Id"},"session_id":{"type":"string","title":"Session Id"},"body":{"type":"string","title":"Body"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","session_id","body","created_at"],"title":"SignupInternalNoteRead"},"SignupInternalTrackingAuditChange":{"properties":{"field":{"type":"string","title":"Field"},"before":{"type":"string","title":"Before"},"after":{"type":"string","title":"After"}},"type":"object","required":["field","before","after"],"title":"SignupInternalTrackingAuditChange"},"SignupInternalTrackingAuditEntryRead":{"properties":{"id":{"type":"string","title":"Id"},"session_id":{"type":"string","title":"Session Id"},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"changes":{"items":{"$ref":"#/components/schemas/SignupInternalTrackingAuditChange"},"type":"array","title":"Changes"}},"type":"object","required":["id","session_id","created_at","changes"],"title":"SignupInternalTrackingAuditEntryRead"},"SignupInternalTrackingAuditListResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/SignupInternalTrackingAuditEntryRead"},"type":"array","title":"Entries"}},"type":"object","required":["entries"],"title":"SignupInternalTrackingAuditListResponse"},"SignupInternalTrackingRead":{"properties":{"session_id":{"type":"string","title":"Session Id"},"importance":{"type":"string","title":"Importance"},"tracking_status":{"type":"string","title":"Tracking Status"},"assignee_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Email"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"assignee_notification_sent":{"type":"boolean","title":"Assignee Notification Sent","description":"True when an assignee notification email was sent successfully in this request.","default":false}},"type":"object","required":["session_id","importance","tracking_status"],"title":"SignupInternalTrackingRead"},"SignupInternalTrackingUpdate":{"properties":{"importance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Importance"},"tracking_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Status"},"assignee_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Assignee Email"}},"type":"object","title":"SignupInternalTrackingUpdate"},"SignupOpsAnalyticsResponse":{"properties":{"summary":{"$ref":"#/components/schemas/SignupOpsAnalyticsSummary"},"status_distribution":{"items":{"$ref":"#/components/schemas/SignupOpsStatusCount"},"type":"array","title":"Status Distribution"},"verification_failures_by_code":{"items":{"$ref":"#/components/schemas/SignupOpsVerificationFailureBucket"},"type":"array","title":"Verification Failures By Code","description":"Failure events (verification, payment, provisioning) in range, grouped by error code or by event type when meta has no error_code."},"verification_outcome_options":{"items":{"$ref":"#/components/schemas/SignupOpsVerificationFailureBucket"},"type":"array","title":"Verification Outcome Options","description":"Failure codes/types in range for filter UI (same date/status/plan/tracking as request, but not restricted by failure-code selections)."},"incomplete_by_status":{"items":{"$ref":"#/components/schemas/SignupOpsStatusCount"},"type":"array","title":"Incomplete By Status"},"time_series":{"items":{"$ref":"#/components/schemas/SignupOpsTimeSeriesPoint"},"type":"array","title":"Time Series"},"bucket":{"type":"string","title":"Bucket","default":"day"}},"type":"object","required":["summary","status_distribution","verification_failures_by_code","incomplete_by_status","time_series"],"title":"SignupOpsAnalyticsResponse"},"SignupOpsAnalyticsSummary":{"properties":{"total_in_range":{"type":"integer","title":"Total In Range"},"completed":{"type":"integer","title":"Completed"},"not_completed":{"type":"integer","title":"Not Completed"},"users_stuck":{"type":"integer","title":"Users Stuck","description":"Non-completed signups that are stuck: at least one email_verification_failed, payment_failed, or provisioning_failed event, or latest status provisioning_in_progress with the last event older than 10 minutes (current snapshot within filters)."},"users_opted_out":{"type":"integer","title":"Users Opted Out","description":"Non-completed signups that are not stuck: no failure events and not long-running provisioning_in_progress (abandoned / in-progress without failure or hung provisioning)."},"success_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Rate","description":"completed / (completed + users_stuck) when that sum > 0; opted-out users excluded"}},"type":"object","required":["total_in_range","completed","not_completed","users_stuck","users_opted_out"],"title":"SignupOpsAnalyticsSummary"},"SignupOpsMetaResponse":{"properties":{"postgres_schema":{"type":"string","title":"Postgres Schema"},"signup_verification_max_attempts_per_email":{"type":"integer","title":"Signup Verification Max Attempts Per Email","description":"Max paid verification attempts per email before signup is blocked (matches signup_verification_max_attempts_per_email)."},"internal_email_domains":{"items":{"type":"string"},"type":"array","title":"Internal Email Domains","description":"Lowercase email domains treated as internal (exclude_internal filters, aligned with reporting unmapped-email rollup)."},"internal_email_domain_substring":{"type":"string","title":"Internal Email Domain Substring","description":"When non-empty, the email domain (after @) is also treated as internal if it contains this substring (case-insensitive), in addition to internal_email_domains."}},"type":"object","required":["postgres_schema","signup_verification_max_attempts_per_email","internal_email_domains","internal_email_domain_substring"],"title":"SignupOpsMetaResponse"},"SignupOpsPendingRow":{"properties":{"session_id":{"type":"string","title":"Session Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"status":{"type":"string","title":"Status"},"signup_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signup Type"},"selected_plan_id":{"type":"string","title":"Selected Plan Id"},"subscription_period":{"type":"string","title":"Subscription Period"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"tracking":{"anyOf":[{"$ref":"#/components/schemas/SignupInternalTrackingRead"},{"type":"null"}]},"verification_error_codes":{"items":{"type":"string"},"type":"array","title":"Verification Error Codes","description":"Distinct error_code values from all email_verification_failed events for this session, newest-first."},"verification_error_meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Verification Error Meta","description":"Full meta_data from the latest email_verification_failed event."},"stripe_verification_session_dashboard_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Verification Session Dashboard Url","description":"Stripe Dashboard URL for the Identity verification session when stripe_session_id (or stripe_verification_data.id) is present in verification_error_meta."},"verification_attempts_used":{"type":"integer","title":"Verification Attempts Used","description":"Current email verification code attempt count on the pending signup row (pending_signups.verification_code_attempts).","default":0},"verification_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verification Reset At","description":"When an admin last reset the code attempt counter (pending_signups.verification_code_attempts_reset_at)."},"verification_reset_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Reset By","description":"Admin who last reset the code attempt counter (pending_signups.verification_code_attempts_reset_by)."}},"type":"object","required":["session_id","email","first_name","last_name","status","selected_plan_id","subscription_period"],"title":"SignupOpsPendingRow"},"SignupOpsStatusCount":{"properties":{"status":{"type":"string","title":"Status"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["status","count"],"title":"SignupOpsStatusCount"},"SignupOpsTimeSeriesPoint":{"properties":{"bucket_date":{"type":"string","format":"date","title":"Bucket Date"},"signups_created":{"type":"integer","title":"Signups Created","default":0},"signups_completed":{"type":"integer","title":"Signups Completed","default":0},"verification_failures":{"type":"integer","title":"Verification Failures","description":"Count of email_verification_failed, payment_failed, and provisioning_failed events in this bucket.","default":0},"users_stuck":{"type":"integer","title":"Users Stuck","description":"Non-completed signups created in this bucket that are stuck (failure events or provisioning_in_progress beyond 10 minutes on latest event; current snapshot).","default":0},"users_opted_out":{"type":"integer","title":"Users Opted Out","description":"Non-completed signups created in this bucket that are not stuck (see summary).","default":0}},"type":"object","required":["bucket_date"],"title":"SignupOpsTimeSeriesPoint"},"SignupOpsVerificationFailureBucket":{"properties":{"error_code":{"type":"string","title":"Error Code"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["error_code","count"],"title":"SignupOpsVerificationFailureBucket"},"SignupPlanActionSchema":{"properties":{"type":{"type":"string","title":"Type"},"params":{"additionalProperties":true,"type":"object","title":"Params"}},"type":"object","required":["type"],"title":"SignupPlanActionSchema"},"SignupPlanChannelRule":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"api_access_denied":{"type":"boolean","title":"Api Access Denied","default":false},"mcp_access_denied":{"type":"boolean","title":"Mcp Access Denied","default":false}},"type":"object","required":["plan_id"],"title":"SignupPlanChannelRule"},"SignupPlanConfigRead":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"plan_tier":{"type":"string","title":"Plan Tier"},"display_name":{"type":"string","title":"Display Name"},"stripe_price_id_monthly":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Price Id Monthly"},"stripe_price_id_annual":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Price Id Annual"},"stripe_kyc_flow":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stripe Kyc Flow"},"actions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Actions"},"version":{"type":"string","title":"Version","default":"1.0"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"}},"type":"object","required":["plan_id","plan_tier","display_name"],"title":"SignupPlanConfigRead","description":"One plan config for API response."},"SignupPlanConfigUpdate":{"properties":{"display_name":{"type":"string","minLength":1,"title":"Display Name"},"stripe_price_id_monthly":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Price Id Monthly"},"stripe_price_id_annual":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Price Id Annual"},"stripe_kyc_flow":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Stripe Kyc Flow"},"actions":{"items":{"$ref":"#/components/schemas/SignupPlanActionSchema"},"type":"array","title":"Actions"},"rationale":{"type":"string","minLength":1,"title":"Rationale"}},"type":"object","required":["display_name","rationale"],"title":"SignupPlanConfigUpdate","description":"Payload to create or update a plan config."},"SignupProvisioningStepResponse":{"properties":{"id":{"type":"string","title":"Id"},"step_name":{"type":"string","title":"Step Name"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"failed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failed At"}},"type":"object","required":["id","step_name","status"],"title":"SignupProvisioningStepResponse"},"SignupStatusResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"status":{"type":"string","title":"Status"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"user_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Message"}},"type":"object","required":["session_id","status"],"title":"SignupStatusResponse"},"SignupTOUAcceptanceRequest":{"properties":{"signup_tou_id":{"type":"string","format":"uuid","title":"Signup Tou Id","description":"The ID of the signup TOU version being accepted"}},"type":"object","required":["signup_tou_id"],"title":"SignupTOUAcceptanceRequest"},"SignupTOUAcceptanceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"last_accepted_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Accepted Version"},"last_accepted_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Last Accepted Version Id"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["id","name","email"],"title":"SignupTOUAcceptanceResponse"},"SignupTOUUpdateRequest":{"properties":{"content":{"type":"string","title":"Content"},"change_type":{"type":"string","enum":["substantive","typo_formatting"],"title":"Change Type"},"change_reason":{"type":"string","minLength":1,"title":"Change Reason","description":"Required reason for change"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At","description":"Effective date/time for this ToU version. Defaults to published_at if not provided."},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id","description":"Optimistic concurrency check. The TOU version id the user based their edit on. If the latest published TOU has a different id, the update will be rejected and the user should reload."}},"type":"object","required":["content","change_type","change_reason"],"title":"SignupTOUUpdateRequest"},"SignupTOUVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"},"checksum":{"type":"string","title":"Checksum"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"version_num":{"type":"integer","title":"Version Num"},"published_at":{"type":"string","format":"date-time","title":"Published At"},"requires_reacceptance":{"type":"boolean","title":"Requires Reacceptance"},"change_reason":{"type":"string","title":"Change Reason"},"created_by":{"type":"string","title":"Created By"}},"type":"object","required":["id","content","effective_at","checksum","created_at","version_num","published_at","requires_reacceptance","change_reason","created_by"],"title":"SignupTOUVersionResponse"},"SignupTroubleshootResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"session_id":{"type":"string","title":"Session Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"status":{"type":"string","title":"Status"},"selected_plan_id":{"type":"string","title":"Selected Plan Id"},"subscription_period":{"type":"string","title":"Subscription Period"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"stripe_subscription_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stripe Subscription Data"},"verification_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Type"},"events":{"items":{"$ref":"#/components/schemas/SignupEventResponse"},"type":"array","title":"Events"},"provisioning_steps":{"items":{"$ref":"#/components/schemas/SignupProvisioningStepResponse"},"type":"array","title":"Provisioning Steps"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},"type":"object","required":["session_id","email","status","selected_plan_id","subscription_period","events","provisioning_steps"],"title":"SignupTroubleshootResponse"},"SpansQuerySpec":{"properties":{"data_source":{"type":"string","const":"spans","title":"Data Source","default":"spans"},"name":{"type":"string","title":"Name"},"search_query":{"type":"string","title":"Search Query"},"aggregation":{"type":"string","title":"Aggregation"},"metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"},"group_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupBySpec"},"type":"array"},{"type":"null"}],"title":"Group By"}},"type":"object","required":["name","search_query","aggregation"],"title":"SpansQuerySpec"},"StatusUpdate":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StatusUpdate","description":"Generic status override. Service validates against VALID_STATUSES."},"StripeCancellationRead":{"properties":{"subscription_id":{"type":"string","title":"Subscription Id"},"customer_id":{"type":"string","title":"Customer Id"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"customer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Name"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"cancellation_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Reason"},"cancellation_reason_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Reason Text"},"cancellation_details_feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Feedback"},"cancellation_details_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Comment"},"cancellation_details_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Reason"},"status":{"type":"string","title":"Status"}},"type":"object","required":["subscription_id","customer_id","status"],"title":"StripeCancellationRead","description":"Schema for the Stripe cancellations report — matches the Stripe custom report CSV columns."},"StripeCustomerInvoice":{"properties":{"id":{"type":"string","title":"Id"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"amount_due":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Due"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created"},"due_date":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Due Date"},"period_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period End"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"},"customer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Name"},"is_block":{"type":"boolean","title":"Is Block","default":false},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"}},"type":"object","required":["id"],"title":"StripeCustomerInvoice"},"StripeCustomerInvoiceListResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/StripeCustomerInvoice"},"type":"array","title":"Invoices"},"has_more":{"type":"boolean","title":"Has More"},"first_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Id"},"last_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Id"}},"type":"object","required":["invoices","has_more"],"title":"StripeCustomerInvoiceListResponse"},"StripeInvoiceItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"stripe_invoice_id":{"type":"string","title":"Stripe Invoice Id"},"stripe_customer_id":{"type":"string","title":"Stripe Customer Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"token_amount":{"type":"number","title":"Token Amount"},"token_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Token Id"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"},"invoice_pdf":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Pdf"},"payment_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Intent Id"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"voided_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Voided At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","stripe_invoice_id","stripe_customer_id","amount_cents","currency","status","token_amount","token_id","hosted_invoice_url","invoice_pdf","payment_intent_id","due_date","paid_at","voided_at","created_at","updated_at"],"title":"StripeInvoiceItem"},"StripePriceRead":{"properties":{"id":{"type":"string","title":"Id"},"nickname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nickname"},"unit_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"recurring_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurring Interval"},"recurring_interval_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurring Interval Count"}},"type":"object","required":["id"],"title":"StripePriceRead"},"StripeProductRead":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_price":{"anyOf":[{"$ref":"#/components/schemas/StripePriceRead"},{"type":"null"}]}},"type":"object","required":["id","name"],"title":"StripeProductRead"},"StripeProductVisibilityBulkUpdate":{"properties":{"products":{"items":{"$ref":"#/components/schemas/StripeProductVisibilitySetting"},"type":"array","title":"Products"}},"type":"object","required":["products"],"title":"StripeProductVisibilityBulkUpdate"},"StripeProductVisibilitySetting":{"properties":{"stripe_product_id":{"type":"string","title":"Stripe Product Id"},"is_enabled":{"type":"boolean","title":"Is Enabled"}},"type":"object","required":["stripe_product_id","is_enabled"],"title":"StripeProductVisibilitySetting"},"StripeProductWithVisibility":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_price":{"anyOf":[{"$ref":"#/components/schemas/StripePriceRead"},{"type":"null"}]},"prices":{"items":{"$ref":"#/components/schemas/StripePriceRead"},"type":"array","title":"Prices","default":[]},"is_enabled":{"type":"boolean","title":"Is Enabled","default":true}},"type":"object","required":["id","name"],"title":"StripeProductWithVisibility","description":"StripeProductRead extended with all prices and visibility toggle state."},"StripeSubscriptionItemRead":{"properties":{"id":{"type":"string","title":"Id"},"subscription_id":{"type":"string","title":"Subscription Id"},"price_id":{"type":"string","title":"Price Id"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quantity"},"unit_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Unit Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"recurring_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurring Interval"},"recurring_interval_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Recurring Interval Count"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"},"raw":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Raw"}},"type":"object","required":["id","subscription_id","price_id"],"title":"StripeSubscriptionItemRead","description":"Schema for Stripe subscription items"},"StripeSubscriptionRead":{"properties":{"customer_id":{"type":"string","title":"Customer Id"},"status":{"type":"string","title":"Status"},"collection_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Method"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"},"id":{"type":"string","title":"Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"default_payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Payment Method Id"},"latest_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Invoice Id"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"livemode":{"type":"boolean","title":"Livemode","default":false},"version_last_event_created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Last Event Created"},"raw":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Raw"},"billing_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Billing Amount"},"billing_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Cycle"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"stripe_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Id"},"subscription_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Name"},"cancellation_details_feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Feedback"},"cancellation_details_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Comment"},"cancellation_details_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Reason"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["customer_id","status","id"],"title":"StripeSubscriptionRead","description":"Schema for reading Stripe subscription data"},"StripeSubscriptionWithItems":{"properties":{"customer_id":{"type":"string","title":"Customer Id"},"status":{"type":"string","title":"Status"},"collection_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Method"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"},"id":{"type":"string","title":"Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"default_payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Payment Method Id"},"latest_invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Invoice Id"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"},"livemode":{"type":"boolean","title":"Livemode","default":false},"version_last_event_created":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Last Event Created"},"raw":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Raw"},"billing_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Billing Amount"},"billing_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Cycle"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"stripe_product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Product Id"},"subscription_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Name"},"cancellation_details_feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Feedback"},"cancellation_details_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Comment"},"cancellation_details_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancellation Details Reason"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"items":{"items":{"$ref":"#/components/schemas/StripeSubscriptionItemRead"},"type":"array","title":"Items","default":[]}},"type":"object","required":["customer_id","status","id"],"title":"StripeSubscriptionWithItems","description":"Schema for Stripe subscription with items"},"SupplierCombinedResponse":{"properties":{"top_datasets_by_tokens":{"items":{"$ref":"#/components/schemas/TopDatasetRow"},"type":"array","title":"Top Datasets By Tokens"},"platform":{"$ref":"#/components/schemas/PlatformMetrics"},"block":{"$ref":"#/components/schemas/SupplierMatrixResponse"},"polaris_s3":{"$ref":"#/components/schemas/PolarisMetrics"},"mcp_server":{"$ref":"#/components/schemas/McpMetrics"}},"type":"object","required":["top_datasets_by_tokens","platform","block","polaris_s3","mcp_server"],"title":"SupplierCombinedResponse"},"SupplierMatrixResponse":{"properties":{"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"rows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rows"}},"type":"object","required":["sources","rows"],"title":"SupplierMatrixResponse"},"SuspensionStatusResponse":{"properties":{"is_suspended":{"type":"boolean","title":"Is Suspended","description":"True if the current user's client has any suspended plan."}},"type":"object","required":["is_suspended"],"title":"SuspensionStatusResponse","description":"Response for suspension status check (e.g. on app first load)."},"TagCreateOrUpdate":{"properties":{"label":{"type":"string","title":"Label"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},"type":"object","required":["label"],"title":"TagCreateOrUpdate"},"TagList":{"properties":{"tags":{"items":{"$ref":"#/components/schemas/TagRead"},"type":"array","title":"Tags"}},"type":"object","required":["tags"],"title":"TagList"},"TagRead":{"properties":{"label":{"type":"string","title":"Label"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"id":{"type":"string","format":"uuid4","title":"Id"},"key":{"type":"string","title":"Key"}},"type":"object","required":["label","id","key"],"title":"TagRead"},"TaskStatusResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"state":{"type":"string","title":"State"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["task_id","state"],"title":"TaskStatusResponse"},"TickerCreate":{"properties":{"message":{"type":"string","title":"Message","description":"Message content in Markdown format"},"priority":{"type":"integer","minimum":0.0,"title":"Priority","description":"Priority level (higher numbers = higher priority)","default":0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the ticker should be shown (active/inactive)","default":true},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At","description":"Start time (ISO-8601), null = immediate"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At","description":"End time (ISO-8601), null = indefinite"},"clients":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Clients","description":"Optional list of client IDs to target","default":[]}},"type":"object","required":["message"],"title":"TickerCreate"},"TickerResponse":{"properties":{"message":{"type":"string","title":"Message","description":"Message content in Markdown format"},"priority":{"type":"integer","minimum":0.0,"title":"Priority","description":"Priority level (higher numbers = higher priority)","default":0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the ticker should be shown (active/inactive)","default":true},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At","description":"Start time (ISO-8601), null = immediate"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At","description":"End time (ISO-8601), null = indefinite"},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"clients":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Clients","description":"List of client IDs this ticker is assigned to","default":[]}},"type":"object","required":["message","id","created_at","updated_at","created_by"],"title":"TickerResponse"},"TickerUpdate":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Message content in Markdown format"},"priority":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Priority","description":"Priority level (higher numbers = higher priority)"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether the ticker should be shown (active/inactive)"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At","description":"Start time (ISO-8601), null = immediate"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At","description":"End time (ISO-8601), null = indefinite"},"clients":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Clients","description":"Optional list of client IDs to target"}},"type":"object","title":"TickerUpdate"},"TierCapacityUpdateRequest":{"properties":{"new_capacity":{"type":"integer","maximum":2147483647.0,"exclusiveMinimum":0.0,"title":"New Capacity"},"reason":{"anyOf":[{"type":"string","maxLength":280},{"type":"null"}],"title":"Reason"}},"type":"object","required":["new_capacity"],"title":"TierCapacityUpdateRequest","description":"Change a tier's number of accounts (PRO-2569).\n\n``new_capacity`` is the desired displayed capacity (purchased +\nnet_transfers), matching ``slots_purchased`` on tier detail. Increase-only:\na value at or below the tier's current displayed capacity is rejected\n(reductions are not representable in the model)."},"TierChangeApplyRequest":{"properties":{"target_tier_id":{"type":"string","format":"uuid","title":"Target Tier Id"}},"type":"object","required":["target_tier_id"],"title":"TierChangeApplyRequest"},"TierChangeOption":{"properties":{"target_tier_id":{"type":"string","format":"uuid","title":"Target Tier Id"},"tier_name":{"type":"string","title":"Tier Name"},"mcp_daily_token_cap":{"type":"integer","title":"Mcp Daily Token Cap"},"wholesale_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wholesale Price Cents"},"direction":{"type":"string","enum":["upgrade","downgrade"],"title":"Direction"},"monthly_delta_cents":{"type":"integer","title":"Monthly Delta Cents"},"prorated_total_cents":{"type":"integer","title":"Prorated Total Cents"},"slots_total":{"type":"integer","title":"Slots Total"},"slots_available":{"type":"integer","title":"Slots Available"}},"type":"object","required":["target_tier_id","tier_name","mcp_daily_token_cap","direction","monthly_delta_cents","prorated_total_cents","slots_total","slots_available"],"title":"TierChangeOption","description":"One tier an LPC can move to from the Platform Distributor View. Prices\nare per-account monthly (``distributor_tiers.wholesale_price_cents`` is a\n$/account/month figure); deltas are negative for downgrades."},"TierChangeOptionsResponse":{"properties":{"current_tier_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Current Tier Id"},"current_tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Tier Name"},"current_daily_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Daily Cap"},"license_expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"License Expires At"},"upgrades":{"items":{"$ref":"#/components/schemas/TierChangeOption"},"type":"array","title":"Upgrades","default":[]},"downgrades":{"items":{"$ref":"#/components/schemas/TierChangeOption"},"type":"array","title":"Downgrades","default":[]}},"type":"object","title":"TierChangeOptionsResponse"},"TierChangeRecord":{"properties":{"client_id":{"type":"string","format":"uuid","title":"Client Id"},"company":{"type":"string","title":"Company"},"distributor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distributor Name"},"contract_id":{"type":"string","format":"uuid","title":"Contract Id"},"contract_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contract Name"},"from_tier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Tier Name"},"from_daily_cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From Daily Cap"},"to_tier_name":{"type":"string","title":"To Tier Name"},"to_daily_cap":{"type":"integer","title":"To Daily Cap"},"monthly_delta_cents":{"type":"integer","title":"Monthly Delta Cents"},"joined_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Joined At"},"changed_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Changed At"},"applied_at":{"type":"string","format":"date-time","title":"Applied At"},"license_expires_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"License Expires At"},"requested_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By"}},"type":"object","required":["client_id","company","contract_id","to_tier_name","to_daily_cap","monthly_delta_cents","applied_at"],"title":"TierChangeRecord","description":"One applied tier change, for the CAMS record (no approval step —\nchanges apply immediately, so every row is an already-applied change)."},"TierChangeRecordListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TierChangeRecord"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"TierChangeRecordListResponse"},"TierUpdate":{"properties":{"tier":{"anyOf":[{"type":"integer","maximum":3.0,"minimum":1.0},{"type":"null"}],"title":"Tier"}},"type":"object","title":"TierUpdate"},"TimeseriesPoint":{"properties":{"t":{"type":"integer","title":"T"},"v":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"V"}},"type":"object","required":["t"],"title":"TimeseriesPoint"},"TimeseriesSeriesResult":{"properties":{"name":{"type":"string","title":"Name"},"group":{"additionalProperties":{"type":"string"},"type":"object","title":"Group"},"points":{"items":{"$ref":"#/components/schemas/TimeseriesPoint"},"type":"array","title":"Points"}},"type":"object","required":["name","points"],"title":"TimeseriesSeriesResult"},"TokenExpiryScheduleItem":{"properties":{"amount":{"type":"string","title":"Amount"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["amount","expires_at","token_type"],"title":"TokenExpiryScheduleItem","description":"Individual token expiry schedule entry"},"TokenExpiryScheduleWithBalanceResponse":{"properties":{"total_balance":{"type":"number","title":"Total Balance"},"promotional_balance":{"type":"number","title":"Promotional Balance"},"purchased_balance":{"type":"number","title":"Purchased Balance"},"expiry_schedule":{"items":{"$ref":"#/components/schemas/TokenExpiryScheduleItem"},"type":"array","title":"Expiry Schedule"}},"type":"object","required":["total_balance","promotional_balance","purchased_balance","expiry_schedule"],"title":"TokenExpiryScheduleWithBalanceResponse","description":"Response containing expiry schedule (excluding MCP) with balance summary"},"TokenResponse":{"properties":{"name":{"type":"string","title":"Name"},"is_promotional":{"type":"boolean","title":"Is Promotional"},"provider_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Provider Id"},"default_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Expires Days"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data","default":{}},"is_integration":{"type":"boolean","title":"Is Integration","description":"True for integration tokens, False for primary tokens","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"is_active":{"type":"boolean","title":"Is Active"},"usage_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Scope"},"can_be_cashed_out":{"type":"boolean","title":"Can Be Cashed Out"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","is_promotional","default_expires_days","id","is_active","can_be_cashed_out","created_at","updated_at"],"title":"TokenResponse"},"TokenTierRead":{"properties":{"present":{"type":"boolean","title":"Present"},"used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Used"},"cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cap"},"next_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Reset At"}},"type":"object","required":["present"],"title":"TokenTierRead","description":"One group/user consumption-limit tier for PRO-1894's token usage popover.\n\n``present=False`` means the scope doesn't apply to this user (e.g. no\nGroup, or the limit was never set) — the frontend hides the row rather\nthan treating a missing cap as zero."},"TokenUpdate":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Name"},"is_promotional":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Promotional","description":"True for promotional tokens, False for primary tokens"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"default_expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Expires Days","description":"Days until token expires from grant date, used if no specific expiry provided during grant"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"}},"type":"object","title":"TokenUpdate"},"TokenUsageSummaryResponse":{"properties":{"platform":{"$ref":"#/components/schemas/PlatformTokenUsageRead"},"mcp":{"$ref":"#/components/schemas/McpTokenUsageRead"}},"type":"object","required":["platform","mcp"],"title":"TokenUsageSummaryResponse","description":"PRO-1894: aggregates every tier the top-bar usage popover needs (org\nwallet/limit, Group limit, User limit) for both Platform and MCP tokens\nin one self-service call, reusing the same data already surfaced\nindividually via wallet-summary / mcp/daily-window / the admin Group and\nUser consumption-limit fields."},"ToolMetric":{"properties":{"tool":{"type":"string","title":"Tool"},"total":{"type":"integer","title":"Total","default":0},"errors":{"type":"integer","title":"Errors","default":0},"error_rate_pct":{"type":"number","title":"Error Rate Pct","default":0.0}},"type":"object","required":["tool"],"title":"ToolMetric"},"TopDatasetRow":{"properties":{"supplier":{"type":"string","title":"Supplier"},"tokens":{"type":"number","title":"Tokens"},"clients":{"type":"integer","title":"Clients"}},"type":"object","required":["supplier","tokens","clients"],"title":"TopDatasetRow"},"TraceDetailRow":{"properties":{"trace_id":{"type":"string","title":"Trace Id","default":""},"session_id":{"type":"string","title":"Session Id","default":""},"trace_created_at":{"type":"string","title":"Trace Created At","default":""},"tool":{"type":"string","title":"Tool","default":""},"latency_s":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latency S"},"consumption":{"type":"string","title":"Consumption","default":""},"price":{"type":"string","title":"Price","default":""},"client_name":{"type":"string","title":"Client Name","default":""},"user_email":{"type":"string","title":"User Email","default":""},"environment":{"type":"string","title":"Environment","default":""},"session_type":{"type":"string","title":"Session Type","default":""},"input_text":{"type":"string","title":"Input Text","default":""},"user_prompt":{"type":"string","title":"User Prompt","default":""},"prompt_span_id":{"type":"string","title":"Prompt Span Id","default":""},"entities":{"type":"string","title":"Entities","default":""},"insights":{"type":"string","title":"Insights","default":""},"entity_ids":{"type":"string","title":"Entity Ids","default":""},"insight_ids":{"type":"string","title":"Insight Ids","default":""},"animal_name":{"type":"string","title":"Animal Name","default":""},"output_metadata_error":{"type":"string","title":"Output Metadata Error","default":""},"is_error":{"type":"string","title":"Is Error","default":""},"error_code":{"type":"string","title":"Error Code","default":""},"error_message":{"type":"string","title":"Error Message","default":""},"output":{"type":"string","title":"Output","default":""}},"type":"object","title":"TraceDetailRow"},"TraceDetailsResponse":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/TraceDetailRow"},"type":"array","title":"Rows"},"total":{"type":"integer","title":"Total","default":0},"clients":{"items":{"type":"string"},"type":"array","title":"Clients","default":[]},"error_types":{"items":{"$ref":"#/components/schemas/ErrorTypeOption"},"type":"array","title":"Error Types","default":[]}},"type":"object","required":["rows"],"title":"TraceDetailsResponse"},"TransactionExportRequest":{"properties":{"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"token_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Name"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},"type":"object","title":"TransactionExportRequest","description":"Request body for transaction export."},"TranscriptContentRead":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"TranscriptContentRead"},"TranscriptDefaultPriceRead":{"properties":{"default_price":{"type":"number","title":"Default Price"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"updated_by":{"type":"string","title":"Updated By"}},"type":"object","required":["default_price","updated_at","updated_by"],"title":"TranscriptDefaultPriceRead"},"TranscriptDefaultPriceUpdate":{"properties":{"price":{"type":"number","exclusiveMinimum":0.0,"title":"Price"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["price","rationale"],"title":"TranscriptDefaultPriceUpdate"},"TranscriptDownloadListRead":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TranscriptDownloadRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["items","total","page","size"],"title":"TranscriptDownloadListRead"},"TranscriptDownloadRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"format":{"type":"string","title":"Format"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"downloaded_at":{"type":"string","format":"date-time","title":"Downloaded At"}},"type":"object","required":["id","client_id","user_id","user_email","format","downloaded_at"],"title":"TranscriptDownloadRead"},"TranscriptDownloadUrlRead":{"properties":{"url":{"type":"string","title":"Url"},"expires_in":{"type":"integer","title":"Expires In"},"format":{"type":"string","title":"Format"}},"type":"object","required":["url","expires_in","format"],"title":"TranscriptDownloadUrlRead"},"TranscriptEntityRef":{"properties":{"id":{"type":"string","maxLength":256,"minLength":1,"title":"Id"},"label":{"type":"string","maxLength":512,"minLength":1,"title":"Label"}},"type":"object","required":["id","label"],"title":"TranscriptEntityRef","description":"Ontology entity tag — id + display label."},"TranscriptMetadataUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Description"},"entities":{"anyOf":[{"items":{"$ref":"#/components/schemas/TranscriptEntityRef"},"type":"array"},{"type":"null"}],"title":"Entities"},"region":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Region"},"expert_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expert Id","description":"Optional identifier for the interviewed expert. 5-10 alphanumeric characters, no symbols or spaces."}},"type":"object","title":"TranscriptMetadataUpdate","description":"Ops correction of a published transcript's descriptive fields —\n``actor`` is never accepted from the client, routes derive it from the\ncaller's own Okta token and forward it to power-api."},"TranscriptPriceChangeLogRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"transcript_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcript Id"},"client_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Client Id"},"old_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Old Price"},"new_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Price"},"rationale":{"type":"string","title":"Rationale"},"changed_by":{"type":"string","title":"Changed By"},"changed_at":{"type":"string","format":"date-time","title":"Changed At"}},"type":"object","required":["id","rationale","changed_by","changed_at"],"title":"TranscriptPriceChangeLogRead"},"TranscriptPriceHistoryRead":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TranscriptPriceChangeLogRead"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TranscriptPriceHistoryRead"},"TranscriptPriceOverrideClear":{"properties":{"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["rationale"],"title":"TranscriptPriceOverrideClear"},"TranscriptPriceOverrideRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"transcript_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Transcript Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"custom_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Custom Price"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","client_id","updated_at"],"title":"TranscriptPriceOverrideRead","description":"A single override row. ``transcript_id`` is None for a client-wide override."},"TranscriptPriceOverrideUpsert":{"properties":{"price":{"type":"number","minimum":0.0,"title":"Price"},"rationale":{"type":"string","maxLength":2000,"minLength":1,"title":"Rationale"}},"type":"object","required":["price","rationale"],"title":"TranscriptPriceOverrideUpsert"},"TranscriptPurchaseListRead":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TranscriptPurchaseRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["items","total","page","size"],"title":"TranscriptPurchaseListRead"},"TranscriptPurchaseRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"price":{"type":"number","title":"Price"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","client_id","user_id","user_email","price","status","created_at"],"title":"TranscriptPurchaseRead"},"TranscriptRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"external_id":{"type":"string","title":"External Id"},"catalog_source_id":{"type":"string","format":"uuid","title":"Catalog Source Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"language":{"type":"string","title":"Language"},"transcript_type":{"type":"string","title":"Transcript Type"},"interview_date":{"type":"string","format":"date","title":"Interview Date"},"duration_minutes":{"type":"integer","title":"Duration Minutes"},"expert_anonymized":{"type":"boolean","title":"Expert Anonymized"},"meta_data":{"additionalProperties":true,"type":"object","title":"Meta Data"},"expert_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expert Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"entities":{"items":{"$ref":"#/components/schemas/TranscriptEntityRef"},"type":"array","title":"Entities"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"has_pdf":{"type":"boolean","title":"Has Pdf","default":false}},"type":"object","required":["id","external_id","catalog_source_id","title","status","language","transcript_type","interview_date","duration_minutes","expert_anonymized","meta_data","created_at","updated_at"],"title":"TranscriptRead"},"TranscriptStatusUpdate":{"properties":{"status":{"type":"string","enum":["published","hidden","removed"],"title":"Status"},"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["status"],"title":"TranscriptStatusUpdate"},"TrialStartTrigger":{"type":"string","enum":["first_ingestion","auto_start"],"title":"TrialStartTrigger"},"UpdateDataCollectionConsent":{"properties":{"data_collection_consent":{"type":"string","enum":["granted","not-granted"],"title":"Data Collection Consent"}},"type":"object","required":["data_collection_consent"],"title":"UpdateDataCollectionConsent"},"UpdateUserInfo":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"}},"type":"object","required":["first_name","last_name"],"title":"UpdateUserInfo"},"UserAccessRow":{"properties":{"short_name":{"type":"string","title":"Short Name"},"client_id":{"type":"string","title":"Client Id","default":""},"business_name":{"type":"string","title":"Business Name"},"sector":{"type":"string","title":"Sector"},"num_server_requests":{"type":"integer","title":"Num Server Requests","default":0},"num_unique_emails":{"type":"integer","title":"Num Unique Emails","default":0},"unique_emails_list":{"items":{"type":"string"},"type":"array","title":"Unique Emails List","default":[]}},"type":"object","required":["short_name","business_name","sector"],"title":"UserAccessRow"},"UserActionLogCreate":{"properties":{"user_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"User Id"},"product_id":{"type":"string","format":"uuid4","title":"Product Id"},"action_type":{"type":"string","title":"Action Type"},"action_details":{"additionalProperties":true,"type":"object","title":"Action Details"}},"type":"object","required":["product_id","action_type","action_details"],"title":"UserActionLogCreate"},"UserActiveUpdate":{"properties":{"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["is_active"],"title":"UserActiveUpdate"},"UserBlockRoleUpdate":{"properties":{"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]}},"type":"object","title":"UserBlockRoleUpdate","description":"Null clears the block role (user has no additive Block capability)."},"UserBuilderFiltersFavoritesCreate":{"properties":{"flow":{"type":"string","title":"Flow","description":"Flow type (e.g., 'entity', 'insight')"},"name":{"type":"string","maxLength":255,"title":"Name","description":"User-defined name for the favorite"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Filter configuration as JSON"}},"type":"object","required":["flow","name"],"title":"UserBuilderFiltersFavoritesCreate","description":"Schema for creating a new builder favorite"},"UserBuilderFiltersFavoritesRead":{"properties":{"flow":{"type":"string","title":"Flow","description":"Flow type (e.g., 'entity', 'insight')"},"name":{"type":"string","maxLength":255,"title":"Name","description":"User-defined name for the favorite"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Filter configuration as JSON"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["flow","name","id"],"title":"UserBuilderFiltersFavoritesRead","description":"Schema for reading a builder favorite"},"UserBuilderFiltersFavoritesReadList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserBuilderFiltersFavoritesRead"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"UserBuilderFiltersFavoritesReadList"},"UserBuilderFiltersFavoritesUpdate":{"properties":{"flow":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flow","description":"Flow type (e.g., 'entity', 'insight')"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"User-defined name for the favorite"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Filter configuration as JSON"}},"type":"object","title":"UserBuilderFiltersFavoritesUpdate","description":"Schema for updating an existing builder favorite"},"UserClientResolution":{"properties":{"email":{"type":"string","title":"Email"},"client_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Client Id"}},"type":"object","required":["email"],"title":"UserClientResolution"},"UserClientResolutionRequest":{"properties":{"emails":{"items":{"type":"string"},"type":"array","title":"Emails"}},"type":"object","required":["emails"],"title":"UserClientResolutionRequest"},"UserClientResolutionResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/UserClientResolution"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"UserClientResolutionResponse"},"UserConsumptionRow":{"properties":{"rank":{"type":"integer","title":"Rank"},"email":{"type":"string","title":"Email"},"short_name":{"type":"string","title":"Short Name"},"client_id":{"type":"string","title":"Client Id","default":""},"business_name":{"type":"string","title":"Business Name"},"plan_tier":{"type":"string","title":"Plan Tier","default":"Unassigned"},"is_distributor":{"type":"boolean","title":"Is Distributor","default":false},"tokens":{"type":"number","title":"Tokens","default":0},"mbs":{"type":"number","title":"Mbs","default":0},"records":{"type":"integer","title":"Records","default":0},"total_consumption":{"type":"number","title":"Total Consumption","default":0},"num_server_requests":{"type":"integer","title":"Num Server Requests","default":0},"mcp_tokens":{"type":"number","title":"Mcp Tokens","default":0},"mcp_tool_calls":{"type":"integer","title":"Mcp Tool Calls","default":0}},"type":"object","required":["rank","email","short_name","business_name"],"title":"UserConsumptionRow"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"role_id":{"type":"string","format":"uuid4","title":"Role Id"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"prompt_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Prompt Access","default":false},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"extra_profile_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Profile Data"},"mcp_daily_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Mcp Daily Limit"},"group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Group Id"},"data_collection_consent":{"anyOf":[{"type":"string","enum":["granted","not-granted"]},{"type":"null"}],"title":"Data Collection Consent"}},"type":"object","required":["email","first_name","last_name","client_id"],"title":"UserCreate"},"UserDataCollectionConsentHistoryRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"change_type":{"type":"string","title":"Change Type"},"updated_by":{"type":"string","title":"Updated By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","client_id","change_type","updated_by","created_at","updated_at"],"title":"UserDataCollectionConsentHistoryRead"},"UserDetailRead":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"id":{"type":"string","format":"uuid4","title":"Id"},"okta_user_id":{"type":"string","title":"Okta User Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"extra_profile_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Profile Data"},"is_active":{"type":"boolean","title":"Is Active"},"billing_owner":{"type":"boolean","title":"Billing Owner"},"plan_tier":{"type":"string","title":"Plan Tier","default":""},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"mcp_daily_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Mcp Daily Limit"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"role_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Name"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"prompt_access":{"type":"boolean","title":"Prompt Access","default":false},"group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Group Id"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name"},"group_mcp_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Group Mcp Period Limit"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"data_collection_consent":{"anyOf":[{"type":"string","enum":["granted","not-granted"]},{"type":"null"}],"title":"Data Collection Consent"},"terms":{"anyOf":[{"$ref":"#/components/schemas/UserLegalTabSignupTOUResponse"},{"type":"null"}]},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deletion_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deletion Reason"},"mcp_daily_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Daily Consumption"},"mcp_access_revoked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked"},"mcp_access_revoked_individually":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked Individually"},"mcp_access_revoked_via_group":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mcp Access Revoked Via Group"},"mcp_access_revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Mcp Access Revoked At"}},"type":"object","required":["email","first_name","last_name","id","okta_user_id","client_id","is_active","billing_owner"],"title":"UserDetailRead","description":"Single-user detail response.\n\nAdds ``mcp_daily_consumption`` — a computed model property that runs a\nledger aggregate query — which must stay off the base ``UserRead`` used\nby paginated list endpoints to avoid an N+1 query per row."},"UserFeatureAccessCreate":{"properties":{"extra_info":{"additionalProperties":true,"type":"object","title":"Extra Info","default":{}},"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"}},"type":"object","required":["feature_id","user_id"],"title":"UserFeatureAccessCreate"},"UserFeatureAccessRead":{"properties":{"extra_info":{"additionalProperties":true,"type":"object","title":"Extra Info","default":{}},"feature_id":{"type":"string","format":"uuid4","title":"Feature Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["feature_id","user_id","id"],"title":"UserFeatureAccessRead"},"UserFeatureAccessUpdate":{"properties":{"extra_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Info"}},"type":"object","title":"UserFeatureAccessUpdate"},"UserFeatureFlagCreate":{"properties":{"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active"},"feature_flag_id":{"type":"string","format":"uuid4","title":"Feature Flag Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"}},"type":"object","required":["value","is_active","feature_flag_id","user_id"],"title":"UserFeatureFlagCreate"},"UserFeatureFlagRead":{"properties":{"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active"},"feature_flag_id":{"type":"string","format":"uuid4","title":"Feature Flag Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"id":{"type":"string","title":"Id","readOnly":true}},"type":"object","required":["value","is_active","feature_flag_id","user_id","id"],"title":"UserFeatureFlagRead"},"UserFeatureFlagUpdate":{"properties":{"feature_flag_id":{"type":"string","format":"uuid4","title":"Feature Flag Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"value":{"type":"string","title":"Value"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["feature_flag_id","user_id"],"title":"UserFeatureFlagUpdate"},"UserInfo":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"}},"type":"object","required":["id","email","first_name","last_name","role_id"],"title":"UserInfo"},"UserInfoResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"client_id":{"type":"string","format":"uuid","title":"Client Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"feature_flags":{"additionalProperties":true,"type":"object","title":"Feature Flags"},"providers_access":{"$ref":"#/components/schemas/ProvidersAccess"},"unmetered_providers":{"items":{"type":"string"},"type":"array","title":"Unmetered Providers"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"has_distributor_contract":{"type":"boolean","title":"Has Distributor Contract","default":false},"prompt_access":{"type":"boolean","title":"Prompt Access","default":false},"is_active":{"type":"boolean","title":"Is Active","default":false},"plan_tier":{"anyOf":[{"$ref":"#/components/schemas/ClientPlanTier"},{"type":"null"}]},"is_zero_dollar_account":{"type":"boolean","title":"Is Zero Dollar Account","default":false},"permissions":{"additionalProperties":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"type":"object","title":"Permissions"},"features":{"items":{"type":"string"},"type":"array","title":"Features"}},"type":"object","required":["id","email","first_name","last_name","client_id","feature_flags","providers_access","unmetered_providers","role","permissions","features"],"title":"UserInfoResponse"},"UserInfoRoleOnly":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"role":{"$ref":"#/components/schemas/RolePreview"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","email","first_name","last_name","role","is_active"],"title":"UserInfoRoleOnly","description":"Slim user projection used by the id-token endpoint.\n\nDeliberately omits ``client`` and ``group`` so Pydantic never touches those\nrelationships, preventing the N+1 lazy-load queries that would otherwise\nfire for every row when only ``role`` is eagerly loaded."},"UserInfoWithRoleStatus":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"role":{"$ref":"#/components/schemas/RolePreview"},"is_active":{"type":"boolean","title":"Is Active"},"client":{"anyOf":[{"$ref":"#/components/schemas/ClientInfo"},{"type":"null"}]},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"mcp_daily_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Mcp Daily Limit"},"mcp_daily_consumption":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Mcp Daily Consumption","default":0},"current_consumption":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Current Consumption","default":0},"group":{"anyOf":[{"$ref":"#/components/schemas/GroupRead"},{"type":"null"}]},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","email","first_name","last_name","role","is_active","status"],"title":"UserInfoWithRoleStatus"},"UserInterestCreate":{"properties":{"type":{"type":"string","title":"Type"},"label":{"type":"string","title":"Label"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["type","label","data"],"title":"UserInterestCreate"},"UserInterestRead":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"user_id":{"type":"string","format":"uuid4","title":"User Id"},"type":{"type":"string","title":"Type"},"label":{"type":"string","title":"Label"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["id","user_id","type","label","data"],"title":"UserInterestRead"},"UserLegalTabSignupTOUResponse":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"version_num":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version Num"},"has_accepted_current":{"type":"boolean","title":"Has Accepted Current"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"first_revision_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Revision Published At"},"current_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Current Version Id"},"current_version_num":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Version Num"},"current_version_first_revision_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Version First Revision Published At"}},"type":"object","required":["has_accepted_current"],"title":"UserLegalTabSignupTOUResponse","description":"Schema for displaying TOU acceptance info in the admin portal user legal tab."},"UserProfile":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"client":{"$ref":"#/components/schemas/ClientInfo"},"api_tokens":{"items":{"$ref":"#/components/schemas/APITokenRead"},"type":"array","title":"Api Tokens","default":[]},"api_keys":{"items":{"$ref":"#/components/schemas/ApiKeyRead"},"type":"array","title":"Api Keys","default":[]},"transaction_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Transaction Limit"},"consumption_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consumption Limit"},"mcp_daily_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Daily Limit"},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"group":{"anyOf":[{"$ref":"#/components/schemas/GroupRead"},{"type":"null"}]},"data_collection_consent":{"anyOf":[{"type":"string","enum":["granted","not-granted"]},{"type":"null"}],"title":"Data Collection Consent"},"data_collection_consent_restricted":{"type":"boolean","title":"Data Collection Consent Restricted","default":false},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"data_interests":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Interests"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"onboarding_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Started At"},"onboarding_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Completed At"},"sample_catalog_disclaimer_accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sample Catalog Disclaimer Accepted At"},"terms":{"anyOf":[{"$ref":"#/components/schemas/UserProfileSignupTOUVersionResponse"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"billing_owner":{"type":"boolean","title":"Billing Owner","default":false}},"type":"object","required":["email","first_name","last_name","client","created_at"],"title":"UserProfile"},"UserProfileCurrentTerms":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content":{"type":"string","title":"Content"},"effective_at":{"type":"string","format":"date-time","title":"Effective At"}},"type":"object","required":["id","content","effective_at"],"title":"UserProfileCurrentTerms"},"UserProfileSignupTOUVersionResponse":{"properties":{"has_accepted_current":{"type":"boolean","title":"Has Accepted Current"},"current_terms":{"anyOf":[{"$ref":"#/components/schemas/UserProfileCurrentTerms"},{"type":"null"}]}},"type":"object","required":["has_accepted_current"],"title":"UserProfileSignupTOUVersionResponse"},"UserProfileUpdate":{"properties":{"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"data_interests":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Interests"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},"type":"object","title":"UserProfileUpdate"},"UserProviderAccessChannel":{"properties":{"enabled":{"items":{"type":"string"},"type":"array","title":"Enabled"},"blocked":{"items":{"type":"string"},"type":"array","title":"Blocked"}},"type":"object","required":["enabled","blocked"],"title":"UserProviderAccessChannel"},"UserRead":{"properties":{"email":{"type":"string","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"id":{"type":"string","format":"uuid4","title":"Id"},"okta_user_id":{"type":"string","title":"Okta User Id"},"client_id":{"type":"string","format":"uuid4","title":"Client Id"},"extra_profile_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Profile Data"},"is_active":{"type":"boolean","title":"Is Active"},"billing_owner":{"type":"boolean","title":"Billing Owner"},"plan_tier":{"type":"string","title":"Plan Tier","default":""},"current_consumption":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Consumption"},"mcp_daily_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Mcp Daily Limit"},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"role_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Name"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"prompt_access":{"type":"boolean","title":"Prompt Access","default":false},"group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Group Id"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name"},"group_mcp_period_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Group Mcp Period Limit"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"data_collection_consent":{"anyOf":[{"type":"string","enum":["granted","not-granted"]},{"type":"null"}],"title":"Data Collection Consent"},"terms":{"anyOf":[{"$ref":"#/components/schemas/UserLegalTabSignupTOUResponse"},{"type":"null"}]},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deletion_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deletion Reason"}},"type":"object","required":["email","first_name","last_name","id","okta_user_id","client_id","is_active","billing_owner"],"title":"UserRead"},"UserRoleUpdate":{"properties":{"role_id":{"type":"string","format":"uuid4","title":"Role Id"}},"type":"object","required":["role_id"],"title":"UserRoleUpdate"},"UserRumMetricsRow":{"properties":{"avg_session_length_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Session Length Min"},"avg_frustration_count":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Frustration Count"},"avg_load_time_sec":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Load Time Sec"},"pct_sessions_with_errors":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct Sessions With Errors"},"email":{"type":"string","title":"Email"},"short_name":{"type":"string","title":"Short Name"},"business_name":{"type":"string","title":"Business Name"}},"type":"object","required":["email","short_name","business_name"],"title":"UserRumMetricsRow"},"UserSuggestionRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["id","email","first_name","last_name"],"title":"UserSuggestionRead","description":"Internal user record for the add-recipient typeahead."},"UserUpdate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"transaction_limit":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Transaction Limit"},"allocated_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Allocated Amount"},"extra_profile_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Profile Data"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"billing_owner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Billing Owner","default":false},"role_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Role Id"},"block_role":{"anyOf":[{"$ref":"#/components/schemas/BlockRoleName"},{"type":"null"}]},"distributor_role":{"anyOf":[{"$ref":"#/components/schemas/DistributorRoleName"},{"type":"null"}]},"prompt_access":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Prompt Access"},"group_id":{"anyOf":[{"type":"string","format":"uuid4"},{"type":"null"}],"title":"Group Id"},"data_collection_consent":{"anyOf":[{"type":"string","enum":["granted","not-granted"]},{"type":"null"}],"title":"Data Collection Consent"}},"type":"object","required":["email","first_name","last_name"],"title":"UserUpdate"},"UsernameAvailabilityResponse":{"properties":{"username":{"type":"string","title":"Username"},"available":{"type":"boolean","title":"Available"},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion"}},"type":"object","required":["username","available"],"title":"UsernameAvailabilityResponse"},"UsernameLookupItem":{"properties":{"email":{"type":"string","title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},"type":"object","required":["email"],"title":"UsernameLookupItem"},"UsernameLookupResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UsernameLookupItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"UsernameLookupResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VisibilityUpdate":{"properties":{"visibility":{"type":"string","title":"Visibility"}},"type":"object","required":["visibility"],"title":"VisibilityUpdate"},"VolumePoint":{"properties":{"period":{"type":"string","title":"Period"},"traces":{"type":"integer","title":"Traces","default":0},"errors":{"type":"integer","title":"Errors","default":0},"error_rate_pct":{"type":"number","title":"Error Rate Pct","default":0.0}},"type":"object","required":["period"],"title":"VolumePoint"},"WalletMetadata":{"properties":{"name":{"type":"string","title":"Name"},"minimum_balance":{"type":"number","title":"Minimum Balance"},"maximum_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maximum Balance"},"meta_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Data"}},"type":"object","required":["name","minimum_balance","maximum_balance","meta_data"],"title":"WalletMetadata"},"WholesaleSignupInitiateRequest":{"properties":{"token":{"type":"string","minLength":1,"title":"Token","description":"Distributor signup link token"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"first_name":{"type":"string","minLength":1,"title":"First Name","description":"User's first/given name"},"last_name":{"type":"string","minLength":1,"title":"Last Name","description":"User's last/family name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name used as the wholesale client name"},"accept_terms":{"type":"boolean","title":"Accept Terms","description":"Must be true - the signer accepted the distributor's TOU"},"tou_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Id","description":"UUID of the distributor TOU version displayed to and accepted by the signer (from the landing GET)"},"marketing_opt_in":{"type":"boolean","title":"Marketing Opt In","default":false}},"type":"object","required":["token","email","password","first_name","last_name","accept_terms"],"title":"WholesaleSignupInitiateRequest","description":"Start a wholesale (distributor) signup by redeeming a signup link.\n\nNo plan/subscription-period selection and no payment: the tier and terms\ncome from the link's contract. ``accept_terms`` records the signer's\nacceptance of the distributor's click-through TOU."},"WholesaleSignupLinkPublic":{"properties":{"distributor_name":{"type":"string","title":"Distributor Name"},"white_label":{"type":"boolean","title":"White Label"},"contract_term_months":{"type":"integer","title":"Contract Term Months"},"recipient_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Email"},"tou_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Id"},"tou_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Name"},"tou_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Version"},"tou_document_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Document Url"},"tou_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tou Body"}},"type":"object","required":["distributor_name","white_label","contract_term_months"],"title":"WholesaleSignupLinkPublic","description":"The subset of a resolved signup link returned by the public GET endpoint\n(no internal ids beyond the displayed TOU's)."},"WholesaleTemplateCreateRequest":{"properties":{"display_name":{"type":"string","maxLength":256,"minLength":1,"title":"Display Name"},"clone_from_plan_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Clone From Plan Id"}},"type":"object","required":["display_name"],"title":"WholesaleTemplateCreateRequest","description":"Mint a new wholesale provisioning template (PRO-2309): a\nsignup_plan_config row with plan_tier = wholesale_client, seeded from the\nbase wholesale template (or ``clone_from_plan_id``) and then customized in\nthe Signup Provisioning editor."},"_AskAiLogCreate":{"properties":{"conversation_id":{"type":"string","maxLength":100,"title":"Conversation Id"},"user_email":{"type":"string","format":"email","title":"User Email"},"client_name":{"type":"string","maxLength":255,"title":"Client Name"},"total_cost":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"}],"title":"Total Cost"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["conversation_id","user_email","client_name","total_cost"],"title":"_AskAiLogCreate","description":"Deprecated inbound schema kept only for backward-compatible request parsing."},"_AskAiLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"message":{"type":"string","title":"Message","default":"Log created successfully"}},"type":"object","required":["id"],"title":"_AskAiLogResponse","example":{"id":"7abf23dd-2eb7-424a-a9e5-b764cae0e88e"}},"_DatasetFeesUpdateBody":{"properties":{"revenue_share_pct":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Revenue Share Pct"},"deployment_fee":{"type":"boolean","title":"Deployment Fee","default":false},"monthly_fee":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Monthly Fee"},"update_revenue_share":{"type":"boolean","title":"Update Revenue Share","default":false},"update_deployment_fee":{"type":"boolean","title":"Update Deployment Fee","default":false},"update_monthly_fee":{"type":"boolean","title":"Update Monthly Fee","default":false}},"type":"object","title":"_DatasetFeesUpdateBody","description":"Partial update of dataset-level fees. Each field is gated by an\nexplicit ``update_*`` flag so the client can distinguish \"leave\nalone\" (flag false) from \"clear\" (flag true, value null)."},"_DatasetSampleUpdateBody":{"properties":{"cuts":{"items":{"$ref":"#/components/schemas/_SampleCutUpdate"},"type":"array","minItems":1,"title":"Cuts"}},"type":"object","required":["cuts"],"title":"_DatasetSampleUpdateBody","description":"Dataset-wide sample kill switch, one entry per changed cut."},"_DatasetSettingUpdateBody":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/BlockDatasetStatus"},{"type":"null"}]},"trial_duration_months":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":0.0},{"type":"null"}],"title":"Trial Duration Months"},"clear_trial_duration":{"type":"boolean","title":"Clear Trial Duration","default":false},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"update_notes":{"type":"boolean","title":"Update Notes","default":false}},"type":"object","title":"_DatasetSettingUpdateBody"},"_SampleCutUpdate":{"properties":{"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"_SampleCutUpdate"},"_ShiftTrialWindowBody":{"properties":{"seconds_until_end":{"type":"integer","maximum":31622400.0,"minimum":0.0,"title":"Seconds Until End"}},"type":"object","required":["seconds_until_end"],"title":"_ShiftTrialWindowBody","description":"Time-warp the trial window so it ends ``seconds_until_end`` from\nnow; start is derived from ``trial_duration_months`` so the row stays\ninternally consistent. Seconds is the wire unit so the caller can\npick any granularity (days/hours/minutes/seconds). Must be ``>= 0``:\nnegative values would land the end in the past and skip the\nauto-expire transition path. Cap is 366 days (31_622_400s) — the UI\npresents a max of 366 in the chosen unit, so 366 days is the largest\npossible wire value."},"_SkuCreateBody":{"properties":{"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"}},"type":"object","required":["access_type"],"title":"_SkuCreateBody"},"_SkuLinkBody":{"properties":{"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"stripe_product_id":{"type":"string","maxLength":255,"minLength":1,"title":"Stripe Product Id"},"acknowledge_name_mismatch":{"type":"boolean","title":"Acknowledge Name Mismatch","default":false}},"type":"object","required":["access_type","stripe_product_id"],"title":"_SkuLinkBody"},"_SkuMetadataBody":{"properties":{"cut":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cut"},"access_type":{"$ref":"#/components/schemas/BlockPricingAccessTypeOut"},"history_range":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"History Range"},"custom_label":{"anyOf":[{"type":"string","maxLength":48},{"type":"null"}],"title":"Custom Label"}},"type":"object","required":["access_type"],"title":"_SkuMetadataBody"},"app__api__v1__routers__admin_routers__account__users__BulkMcpDailyLimitRequest":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","title":"User Ids"},"mcp_daily_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Daily Limit"}},"type":"object","required":["user_ids"],"title":"BulkMcpDailyLimitRequest"},"app__api__v1__routers__user_routers__users__BulkMcpDailyLimitRequest":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"User Ids"},"mcp_daily_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mcp Daily Limit"}},"type":"object","required":["user_ids"],"title":"BulkMcpDailyLimitRequest"}},"securitySchemes":{"OAuth2AuthorizationCodeBearer":{"type":"oauth2","flows":{"authorizationCode":{"scopes":{},"authorizationUrl":"authorize","tokenUrl":"token"}}},"API Key":{"type":"apiKey","in":"header","name":"x-api-key"},"Client Id":{"type":"apiKey","in":"header","name":"x-client-id"},"Token":{"type":"apiKey","in":"header","name":"Token"}}}}