swagger: "2.0" info: version: 0.4.0 title: "members" description: "Membership Microservice" termsOfService: "https://salesforcedevops.net/terms/" contact: email: "vern@salesforcedevops.net" license: name: "Proprietary - Copyright (c) 2018-2024 by Vernon Keenan" securityDefinitions: ApiKeyAuth: type: "apiKey" in: "header" name: "X-API-Key" kvSessionCookie: name: Cookie in: header type: apiKey description: "JWT session cookie passed as 'Cookie: kvSession='. HttpOnly, Secure, SameSite=None, Domain=.keenanvision.net" schemes: - "https" basePath: "/vk/members/v1" host: "gw.tnxs.net" consumes: - "application/json" produces: - "application/json" parameters: id: name: id in: query type: string format: uuid brandId: name: brandId in: query type: string format: uuid serviceId: name: serviceId in: query type: string format: uuid planId: name: planId in: query type: string format: uuid tenantId: name: tenantId in: query type: string format: uuid description: Requested tenant; Members validates the session user membership. userId: name: userId in: query type: string format: uuid description: Optional user scope; must be the actor or authorized by tenant role. status: name: status in: query type: string effectiveAt: name: effectiveAt in: query type: string format: date-time description: UTC evaluation instant; defaults to the server's current instant. clientType: name: clientType in: query type: string enum: [mcp, api] scope: name: scope in: query type: string includeInactive: name: includeInactive in: query type: boolean default: false description: Includes revoked or expired metadata when authorized. membershipAccessLevel: name: accessLevel in: query type: string enum: [owner, manager, member, read_only] membershipTenantId: name: tenantId in: query type: string minLength: 1 maxLength: 36 description: Tenant identifier; legacy Members tenant IDs are not all UUID formatted. membershipStatus: name: status in: query type: string enum: [active, suspended, revoked] membershipEmail: name: email in: query type: string format: email description: Exact normalized email filter; result scope remains actor-derived. requestId: name: X-Request-ID in: header type: string maxLength: 120 description: Optional bounded correlation identifier stored with membership audit events. limit: name: limit in: query type: integer format: int64 minimum: 1 maximum: 1000 default: 100 offset: name: offset in: query type: integer format: int64 minimum: 0 default: 0 Auth0UserIdHeader: description: Auth0 User Id in: header name: X-Auth0-UserId required: false type: string AttendeeRequest: description: An array of new Attendee records in: body name: attendeeRequest required: true schema: $ref: "#/definitions/AttendeeRequest" CertificateRequest: description: An array of new Certificate records in: body name: certificateRequest required: true schema: $ref: "#/definitions/CertificateRequest" CourseLessonRequest: description: An array of new CourseLesson records in: body name: courselessonRequest required: true schema: $ref: "#/definitions/CourseLessonRequest" clusterIdQuery: description: Record Id of a Cluster in: query name: clusterId required: false type: string ClusterRequest: description: An array of Cluster records in: body name: ClusterRequest required: true schema: $ref: "#/definitions/ClusterRequest" CourseRequest: description: An array of new Course records in: body name: courseRequest required: true schema: $ref: "#/definitions/CourseRequest" CourseSectionRequest: description: An array of new CourseSection records in: body name: coursesectionRequest required: true schema: $ref: "#/definitions/CourseSectionRequest" OutgoingEmailMessageRequest: description: An array of new Outgoing Email Message records in: body name: OutgoingEmailMessageRequest required: true schema: $ref: "#/definitions/OutgoingEmailMessageRequest" EnrollmentRequest: description: An array of new Enrollment records in: body name: enrollmentRequest required: true schema: $ref: "#/definitions/EnrollmentRequest" EventRequest: description: An array of new Event records in: body name: eventRequest required: true schema: $ref: "#/definitions/EventRequest" EventCategoryRequest: description: An array of new Event records in: body name: eventCategoryRequest required: true schema: $ref: "#/definitions/EventCategoryRequest" FavoriteRequest: description: An array of new Favorite records in: body name: favoriteRequest required: true schema: $ref: "#/definitions/FavoriteRequest" InvoiceRequest: description: An array of new Invoice records in: body name: invoiceRequest required: true schema: $ref: "#/definitions/InvoiceRequest" IssuedCertificateRequest: description: An array of new IssuedCertificate records in: body name: issuedCertificateRequest required: true schema: $ref: "#/definitions/IssuedCertificateRequest" LessonProgressRequest: description: An array of new LessonProgress records in: body name: lessonprogressRequest required: true schema: $ref: "#/definitions/LessonProgressRequest" OrderRequest: description: An array of new Order records in: body name: orderRequest required: true schema: $ref: "#/definitions/OrderRequest" PaymentMethodRequest: description: An array of new PaymentMethod records in: body name: paymentMethodRequest required: true schema: $ref: "#/definitions/PaymentMethodRequest" PromptRequest: description: An array of new Prompt records in: body name: promptRequest required: true schema: $ref: "#/definitions/PromptRequest" PromptCategoryRequest: description: An array of PromptCategory objects name: promptCategoryRequest required: true in: body schema: $ref: "#/definitions/PromptCategoryRequest" PromptTagRequest: description: An array of PromptTag objects name: promptTagRequest required: true in: body schema: $ref: "#/definitions/PromptTagRequest" PromptAnswerRequest: description: An array of PromptAnswer objects name: promptAnswerRequest required: true in: body schema: $ref: "#/definitions/PromptAnswerRequest" ResearchProjectCompanyRequest: description: An array of new ResearchProjectCompany records in: body name: researchProjectCompanyRequest required: true schema: $ref: "#/definitions/ResearchProjectCompanyRequest" researchProjectProductRequest: description: An array of new ResearchProjectProduct records in: body name: researchProjectProductRequest required: true schema: $ref: "#/definitions/ResearchProjectProductRequest" ResearchProjectServiceRequest: description: An array of new ResearchProjectService records in: body name: researchProjectServiceRequest required: true schema: $ref: "#/definitions/ResearchProjectServiceRequest" ResearchProjectDocumentRequest: description: An array of new ResearchProjectDocument records in: body name: researchProjectDocumentRequest required: true schema: $ref: "#/definitions/ResearchProjectDocumentRequest" ResearchProjectRequest: description: An array of new ResearchProject records in: body name: researchProjectRequest required: true schema: $ref: "#/definitions/ResearchProjectRequest" ResearchProjectTopicRequest: description: An array of new ResearchProjectTopic records in: body name: researchProjectTopicRequest required: true schema: $ref: "#/definitions/ResearchProjectTopicRequest" templateIdQuery: description: Template ID in: query name: templateId type: string TemplateRequest: description: An array of Template records in: body name: TemplateRequest required: true schema: $ref: "#/definitions/TemplateRequest" EmailMessageRequest: description: An array of Email Message records in: body name: EmailMessageRequest required: true schema: $ref: "#/definitions/EmailMessageRequest" TenantRequest: description: An array of Tenant records in: body name: TenantRequest required: true schema: $ref: "#/definitions/TenantRequest" TicketRequest: description: An array of new Ticket records in: body name: ticketRequest required: true schema: $ref: "#/definitions/TicketRequest" TransactionRequest: description: An array of new Transaction records in: body name: transactionRequest required: true schema: $ref: "#/definitions/TransactionRequest" UserRequest: description: An array of User records in: body name: UserRequest required: true schema: $ref: "#/definitions/UserRequest" OnboardRequest: description: Self-service onboarding request (single user) in: body name: onboardRequest required: true schema: $ref: "#/definitions/OnboardRequest" activeQuery: description: Retrieve active records only? in: query name: active required: false type: boolean auth0UserIdQuery: description: Deprecated external identity subject lookup. Password-verifier-shaped values are always rejected. in: query name: auth0UserId required: false type: string identityProviderQuery: description: Normalized external identity provider used together with identitySubject. in: query name: identityProvider required: false type: string minLength: 1 maxLength: 64 recoveryClientIP: description: Original network client IP asserted by the authenticated KV ID server; used only to derive a keyed throttle bucket and never stored raw. in: header name: X-KV-Client-IP required: false type: string maxLength: 64 identitySubjectQuery: description: External provider subject used together with identityProvider. in: query name: identitySubject required: false type: string minLength: 1 maxLength: 255 userIdQuery: description: Internal User ID in: query name: userId required: false type: string userIdQueryRequired: description: Internal User ID in: query name: userId required: true type: string contactIdQuery: description: Internal Contact ID (links to Account) in: query name: contactId required: false type: string databaseIdQuery: description: Record Id of a Database in: query name: databaseId type: string required: true databaseRequest: description: An array of Database records in: body name: DatabaseRequest required: true schema: $ref: "#/definitions/DatabaseRequest" documentRequest: description: An array of Document records in: body name: DocumentRequest required: true schema: $ref: "#/definitions/DocumentRequest" emailMessageIdQuery: description: Email Message ID in: query name: emailMessageId type: string emailQuery: description: Email address in: query name: email required: false type: string idQuery: description: Unique Record ID in: query name: id required: false type: string nameQuery: description: Name of the object in: query name: name required: false type: string objectTypeQuery: description: Object Type Name in: query name: objectType type: string isMasterQuery: description: Is Master Template? in: query name: isMaster type: boolean limitQuery: description: How many objects to return at one time format: int64 in: query name: limit required: false type: integer offsetQuery: description: How many objects to skip? format: int64 in: query name: offset required: false type: integer responses: AccessForbidden: description: Access forbidden, account lacks access headers: Access-Control-Allow-Origin: type: string x-nullable: true schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" AttendeeResponse: description: Attendee Response Object schema: $ref: "#/definitions/AttendeeResponse" CertificateResponse: description: Certificate Response Object schema: $ref: "#/definitions/CertificateResponse" ClusterResponse: description: Response with Cluster objects schema: $ref: "#/definitions/ClusterResponse" CourseLessonResponse: description: CourseLesson Response Object schema: $ref: "#/definitions/CourseLessonResponse" CourseResponse: description: Course Response Object schema: $ref: "#/definitions/CourseResponse" CourseSectionResponse: description: CourseSection Response Object schema: $ref: "#/definitions/CourseSectionResponse" DatabaseResponse: description: Response with Database objects schema: $ref: "#/definitions/DatabaseResponse" DocumentResponse: description: Document Response Object schema: $ref: "#/definitions/DocumentResponse" EmailMessagesResponse: description: "Array of Email Messages" schema: $ref: "#/definitions/EmailMessagesResponse" OutgoingEmailMessagesResponse: description: "Array of Outgoing Email Messages" schema: $ref: "#/definitions/OutgoingEmailMessagesResponse" EnrollmentResponse: description: Enrollment Response Object schema: $ref: "#/definitions/EnrollmentResponse" EventResponse: description: Event Response Object schema: $ref: "#/definitions/EventResponse" EventCategoryResponse: description: Event Response Object schema: $ref: "#/definitions/EventCategoryResponse" FavoriteResponse: description: Favorite Response Object schema: $ref: "#/definitions/FavoriteResponse" InvoiceResponse: description: Invoice Response Object schema: $ref: "#/definitions/InvoiceResponse" IssuedCertificateResponse: description: IssuedCertificate Response Object schema: $ref: "#/definitions/IssuedCertificateResponse" LessonProgressResponse: description: LessonProgress Response Object schema: $ref: "#/definitions/LessonProgressResponse" NotFound: description: Resource was not found schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" OrderResponse: description: Order Response Object schema: $ref: "#/definitions/OrderResponse" PaymentMethodResponse: description: PaymentMethod Response Object schema: $ref: "#/definitions/PaymentMethodResponse" PromptResponse: description: Response with Prompt objects schema: $ref: "#/definitions/PromptResponse" PromptCategoryResponse: description: Response with PromptCategory objects schema: $ref: "#/definitions/PromptCategoryResponse" PromptAnswerResponse: description: Response with PromptAnswer objects schema: $ref: "#/definitions/PromptAnswerResponse" PromptTagResponse: description: Response with PromptTag objects schema: $ref: "#/definitions/PromptTagResponse" ResearchProjectCompanyResponse: description: ResearchProjectCompany Response Object schema: $ref: "#/definitions/ResearchProjectCompanyResponse" ResearchProjectDocumentResponse: description: ResearchProjectDocument Response Object schema: $ref: "#/definitions/ResearchProjectDocumentResponse" ResearchProjectProductResponse: description: ResearchProjectProduct Response Object schema: $ref: "#/definitions/ResearchProjectProductResponse" ResearchProjectServiceResponse: description: ResearchProjectService Response Object schema: $ref: "#/definitions/ResearchProjectServiceResponse" ResearchProjectResponse: description: ResearchProject Response Object schema: $ref: "#/definitions/ResearchProjectResponse" ResearchProjectTopicResponse: description: ResearchProjectTopic Response Object schema: $ref: "#/definitions/ResearchProjectTopicResponse" ServerError: description: Server Internal Error schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" TenantResponse: description: Response with Tenant objects schema: $ref: "#/definitions/TenantResponse" TemplateResponse: description: Response with Template objects schema: $ref: "#/definitions/TemplateResponse" TicketResponse: description: Ticket Response Object schema: $ref: "#/definitions/TicketResponse" TransactionResponse: description: Transaction Response Object schema: $ref: "#/definitions/TransactionResponse" Unauthorized: description: Access Unauthorized, invalid API-KEY was used schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" UnprocessableEntity: description: Unprocessable Entity, likely a bad parameter schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" UserResponse: description: Response with User objects schema: $ref: "#/definitions/UserResponse" paths: /brands: get: operationId: getBrands tags: [PortalCatalog] summary: List customer-facing brands parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/status" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Brand records, schema: {$ref: "#/definitions/BrandResponse"}} 400: {description: Invalid brand filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: &portalSecurity - ApiKeyAuth: [] kvSessionCookie: [] post: operationId: postBrands tags: [PortalCatalog] summary: Create brands parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandRequest"} responses: 200: {description: Created brands, schema: {$ref: "#/definitions/BrandResponse"}} 400: {description: Invalid lifecycle or catalog data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putBrands tags: [PortalCatalog] summary: Update brands without deleting history parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandRequest"} responses: 200: {description: Updated brands, schema: {$ref: "#/definitions/BrandResponse"}} 400: {description: Invalid lifecycle or catalog data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity /services: get: operationId: getServices tags: [PortalCatalog] summary: List commercial member-facing capabilities parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/status" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Service records, schema: {$ref: "#/definitions/ServiceResponse"}} 400: {description: Invalid service filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postServices tags: [PortalCatalog] summary: Create commercial services parameters: - in: body name: request required: true schema: {$ref: "#/definitions/ServiceRequest"} responses: 200: {description: Created services, schema: {$ref: "#/definitions/ServiceResponse"}} 400: {description: Invalid service data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putServices tags: [PortalCatalog] summary: Update commercial services without deleting history parameters: - in: body name: request required: true schema: {$ref: "#/definitions/ServiceRequest"} responses: 200: {description: Updated services, schema: {$ref: "#/definitions/ServiceResponse"}} 400: {description: Invalid service data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity /servicescopes: get: operationId: getServiceScopes tags: [PortalCatalog] summary: List controlled client scopes parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/serviceId" - $ref: "#/parameters/status" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Service scope records, schema: {$ref: "#/definitions/ServiceScopeResponse"}} 400: {description: Invalid service-scope filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postServiceScopes tags: [PortalCatalog] summary: Create controlled client scopes parameters: - in: body name: request required: true schema: {$ref: "#/definitions/ServiceScopeRequest"} responses: 200: {description: Created service scopes, schema: {$ref: "#/definitions/ServiceScopeResponse"}} 400: {description: Invalid service scope data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putServiceScopes tags: [PortalCatalog] summary: Update controlled client scopes parameters: - in: body name: request required: true schema: {$ref: "#/definitions/ServiceScopeRequest"} responses: 200: {description: Updated service scopes, schema: {$ref: "#/definitions/ServiceScopeResponse"}} 400: {description: Invalid service scope data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity /brandservices: get: operationId: getBrandServices tags: [PortalCatalog] summary: List brand catalog placements parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/brandId" - $ref: "#/parameters/serviceId" - $ref: "#/parameters/status" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Brand-service records, schema: {$ref: "#/definitions/BrandServiceResponse"}} 400: {description: Invalid brand-service filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postBrandServices tags: [PortalCatalog] summary: Create brand catalog placements parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandServiceRequest"} responses: 200: {description: Created brand-service records, schema: {$ref: "#/definitions/BrandServiceResponse"}} 400: {description: Invalid catalog placement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putBrandServices tags: [PortalCatalog] summary: Update brand catalog placements parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandServiceRequest"} responses: 200: {description: Updated brand-service records, schema: {$ref: "#/definitions/BrandServiceResponse"}} 400: {description: Invalid catalog placement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks catalog-management authority} 500: {description: Server error} security: *portalSecurity /plans: get: operationId: getPlans tags: [PortalPlans] summary: List immutable-version commercial plans parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/status" - $ref: "#/parameters/effectiveAt" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Plan records, schema: {$ref: "#/definitions/PlanResponse"}} 400: {description: Invalid plan filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postPlans tags: [PortalPlans] summary: Create plan versions parameters: - in: body name: request required: true schema: {$ref: "#/definitions/PlanRequest"} responses: 200: {description: Created plans, schema: {$ref: "#/definitions/PlanResponse"}} 400: {description: Invalid plan data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putPlans tags: [PortalPlans] summary: Update draft or lifecycle state; published versions are immutable parameters: - in: body name: request required: true schema: {$ref: "#/definitions/PlanRequest"} responses: 200: {description: Updated plans, schema: {$ref: "#/definitions/PlanResponse"}} 400: {description: Invalid or immutable plan update} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity /brandplans: get: operationId: getBrandPlans tags: [PortalPlans] summary: List brand plan placements parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/brandId" - $ref: "#/parameters/planId" - $ref: "#/parameters/status" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Brand-plan records, schema: {$ref: "#/definitions/BrandPlanResponse"}} 400: {description: Invalid brand-plan filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postBrandPlans tags: [PortalPlans] summary: Create brand plan placements parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandPlanRequest"} responses: 200: {description: Created brand-plan records, schema: {$ref: "#/definitions/BrandPlanResponse"}} 400: {description: Invalid plan placement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putBrandPlans tags: [PortalPlans] summary: Update brand plan placements parameters: - in: body name: request required: true schema: {$ref: "#/definitions/BrandPlanRequest"} responses: 200: {description: Updated brand-plan records, schema: {$ref: "#/definitions/BrandPlanResponse"}} 400: {description: Invalid plan placement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity /planservices: get: operationId: getPlanServices tags: [PortalPlans] summary: List plan service grants and descriptive limits parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/planId" - $ref: "#/parameters/serviceId" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Plan-service records, schema: {$ref: "#/definitions/PlanServiceResponse"}} 400: {description: Invalid plan-service filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the requested scope} 500: {description: Server error} security: *portalSecurity post: operationId: postPlanServices tags: [PortalPlans] summary: Add service grants and descriptive limits to plans parameters: - in: body name: request required: true schema: {$ref: "#/definitions/PlanServiceRequest"} responses: 200: {description: Created plan-service records, schema: {$ref: "#/definitions/PlanServiceResponse"}} 400: {description: Invalid typed limit or plan grant} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity put: operationId: putPlanServices tags: [PortalPlans] summary: Update draft plan service grants parameters: - in: body name: request required: true schema: {$ref: "#/definitions/PlanServiceRequest"} responses: 200: {description: Updated plan-service records, schema: {$ref: "#/definitions/PlanServiceResponse"}} 400: {description: Invalid typed limit or immutable plan grant} 401: {description: Missing or invalid server or session credential} 403: {description: Actor lacks plan-management authority} 500: {description: Server error} security: *portalSecurity /subscriptions: get: operationId: getSubscriptions tags: [PortalAccess] summary: List tenant-scoped subscriptions parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/tenantId" - $ref: "#/parameters/planId" - $ref: "#/parameters/status" - $ref: "#/parameters/effectiveAt" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Authorized subscription records, schema: {$ref: "#/definitions/SubscriptionResponse"}} 400: {description: Invalid subscription filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not a member of or cannot manage the requested tenant} 500: {description: Server error} security: *portalSecurity post: operationId: postSubscriptions tags: [PortalAccess] summary: Create tenant subscriptions parameters: - in: body name: request required: true schema: {$ref: "#/definitions/SubscriptionRequest"} responses: 200: {description: Created subscriptions, schema: {$ref: "#/definitions/SubscriptionResponse"}} 400: {description: Invalid subscription lifecycle data} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage the requested tenant} 500: {description: Server error} security: *portalSecurity put: operationId: putSubscriptions tags: [PortalAccess] summary: Update, pause, cancel, or expire subscriptions parameters: - in: body name: request required: true schema: {$ref: "#/definitions/SubscriptionRequest"} responses: 200: {description: Updated subscriptions, schema: {$ref: "#/definitions/SubscriptionResponse"}} 400: {description: Invalid subscription lifecycle transition} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage the requested tenant} 500: {description: Server error} security: *portalSecurity /entitlements: get: operationId: getEntitlements tags: [PortalAccess] summary: List tenant- or user-scoped explicit grants parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/tenantId" - $ref: "#/parameters/userId" - $ref: "#/parameters/serviceId" - $ref: "#/parameters/status" - $ref: "#/parameters/effectiveAt" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Authorized entitlement records, schema: {$ref: "#/definitions/EntitlementResponse"}} 400: {description: Invalid entitlement filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the tenant or user scope} 500: {description: Server error} security: *portalSecurity post: operationId: postEntitlements tags: [PortalAccess] summary: Create explicit tenant or user grants parameters: - in: body name: request required: true schema: {$ref: "#/definitions/EntitlementRequest"} responses: 200: {description: Created entitlements, schema: {$ref: "#/definitions/EntitlementResponse"}} 400: {description: Invalid or overlapping explicit grant} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage grants for the tenant} 500: {description: Server error} security: *portalSecurity put: operationId: putEntitlements tags: [PortalAccess] summary: Update, revoke, or expire explicit grants parameters: - in: body name: request required: true schema: {$ref: "#/definitions/EntitlementRequest"} responses: 200: {description: Updated entitlements, schema: {$ref: "#/definitions/EntitlementResponse"}} 400: {description: Invalid or overlapping explicit grant} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage grants for the tenant} 500: {description: Server error} security: *portalSecurity /effectiveentitlements: get: operationId: getEffectiveEntitlements tags: [PortalAccess] summary: Resolve effective commercial access at a UTC instant parameters: - $ref: "#/parameters/tenantId" - $ref: "#/parameters/userId" - $ref: "#/parameters/serviceId" - $ref: "#/parameters/effectiveAt" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Effective grants with typed limits and provenance, schema: {$ref: "#/definitions/EffectiveEntitlementResponse"}} 400: {description: Invalid or ambiguous effective-entitlement context} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the tenant or user scope} 500: {description: Server error} security: *portalSecurity /authorizedclients: get: operationId: getAuthorizedClients tags: [PortalClients] summary: List non-secret authorized-client connection metadata parameters: - $ref: "#/parameters/id" - $ref: "#/parameters/tenantId" - $ref: "#/parameters/userId" - $ref: "#/parameters/status" - $ref: "#/parameters/clientType" - $ref: "#/parameters/scope" - $ref: "#/parameters/includeInactive" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Authorized-client metadata without tokens or secrets, schema: {$ref: "#/definitions/AuthorizedClientResponse"}} 400: {description: Invalid authorized-client filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the tenant or user scope} 500: {description: Server error} security: *portalSecurity post: operationId: postAuthorizedClients tags: [PortalClients] summary: Register non-secret authorized-client metadata parameters: - in: body name: request required: true schema: {$ref: "#/definitions/AuthorizedClientRequest"} responses: 200: {description: Created client metadata, schema: {$ref: "#/definitions/AuthorizedClientResponse"}} 400: {description: Invalid client metadata or tenant/user scope} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage clients for the tenant} 500: {description: Server error} security: *portalSecurity put: operationId: putAuthorizedClients tags: [PortalClients] summary: Update or idempotently revoke client metadata parameters: - in: body name: request required: true schema: {$ref: "#/definitions/AuthorizedClientRequest"} responses: 200: {description: Updated client metadata, schema: {$ref: "#/definitions/AuthorizedClientResponse"}} 400: {description: Invalid client lifecycle transition} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage clients for the tenant} 500: {description: Server error} security: *portalSecurity /authorizedclientscopes: get: operationId: getAuthorizedClientScopes tags: [PortalClients] summary: List approved scopes backed by effective entitlements parameters: - $ref: "#/parameters/id" - name: authorizedClientId in: query type: string format: uuid - $ref: "#/parameters/serviceId" - $ref: "#/parameters/scope" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Authorized-client scopes, schema: {$ref: "#/definitions/AuthorizedClientScopeResponse"}} 400: {description: Invalid authorized-client-scope filter} 401: {description: Missing or invalid server or session credential} 403: {description: Actor is not authorized for the client tenant or user scope} 500: {description: Server error} security: *portalSecurity post: operationId: postAuthorizedClientScopes tags: [PortalClients] summary: Approve scopes only when backed by effective entitlements parameters: - in: body name: request required: true schema: {$ref: "#/definitions/AuthorizedClientScopeRequest"} responses: 200: {description: Created authorized-client scopes, schema: {$ref: "#/definitions/AuthorizedClientScopeResponse"}} 400: {description: Scope is not backed by an effective service entitlement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage scopes for the client} 500: {description: Server error} security: *portalSecurity put: operationId: putAuthorizedClientScopes tags: [PortalClients] summary: Update approved client scopes parameters: - in: body name: request required: true schema: {$ref: "#/definitions/AuthorizedClientScopeRequest"} responses: 200: {description: Updated authorized-client scopes, schema: {$ref: "#/definitions/AuthorizedClientScopeResponse"}} 400: {description: Scope is not backed by an effective service entitlement} 401: {description: Missing or invalid server or session credential} 403: {description: Actor cannot manage scopes for the client} 500: {description: Server error} security: *portalSecurity /manageabletenants: get: operationId: getManageableTenants tags: [PortalMemberships] summary: List tenant contexts the current actor may administer parameters: - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Actor-derived manageable tenant contexts, schema: {$ref: "#/definitions/ManageableTenantResponse"}} 400: {description: Invalid pagination} 401: {description: Missing or invalid server or session credential} 500: {description: Server error} security: *portalSecurity /tenantmemberships: get: operationId: getTenantMemberships tags: [PortalMemberships] summary: List actor-visible tenant memberships parameters: - $ref: "#/parameters/membershipTenantId" - $ref: "#/parameters/userId" - $ref: "#/parameters/membershipEmail" - $ref: "#/parameters/membershipAccessLevel" - $ref: "#/parameters/membershipStatus" - $ref: "#/parameters/limit" - $ref: "#/parameters/offset" responses: 200: {description: Actor-scoped tenant memberships, schema: {$ref: "#/definitions/TenantMembershipListResponse"}} 400: {description: Invalid membership filter} 401: {description: Missing or invalid server or session credential} 404: {description: Requested foreign or unavailable scope} 500: {description: Server error} security: *portalSecurity post: operationId: postTenantMembership tags: [PortalMemberships] summary: Create a tenant link or return an exact desired-state match parameters: - $ref: "#/parameters/requestId" - in: body name: request required: true schema: {$ref: "#/definitions/TenantMembershipCreateRequest"} responses: 200: {description: Newly created membership or exact existing desired-state match, schema: {$ref: "#/definitions/TenantMembershipResponse"}} 400: {description: Invalid identity selector or desired state} 401: {description: Missing or invalid server or session credential} 404: {description: "Target tenant, user, or authority is unavailable"} 409: {description: "Self-change, owner, or existing-state conflict; use GET plus optimistic PUT for state changes"} 500: {description: Server error} security: *portalSecurity /tenantmemberships/{membershipId}: parameters: - name: membershipId in: path required: true type: string format: uuid get: operationId: getTenantMembership tags: [PortalMemberships] summary: Get one actor-visible tenant membership responses: 200: {description: Tenant membership, schema: {$ref: "#/definitions/TenantMembershipResponse"}} 401: {description: Missing or invalid server or session credential} 404: {description: "Membership is absent, foreign, or unauthorized"} 500: {description: Server error} security: *portalSecurity put: operationId: putTenantMembership tags: [PortalMemberships] summary: Idempotently change membership access or lifecycle parameters: - $ref: "#/parameters/requestId" - in: body name: request required: true schema: {$ref: "#/definitions/TenantMembershipUpdateRequest"} responses: 200: {description: Current membership desired state, schema: {$ref: "#/definitions/TenantMembershipResponse"}} 400: {description: Invalid desired state} 401: {description: Missing or invalid server or session credential} 404: {description: "Membership is absent, foreign, or unauthorized"} 409: {description: "Optimistic, self-change, owner, or state conflict"} 500: {description: Server error} security: *portalSecurity delete: operationId: deleteTenantMembership tags: [PortalMemberships] summary: Idempotently soft-revoke one membership parameters: - $ref: "#/parameters/requestId" - name: lastModifiedDate in: query required: true type: string format: date-time description: Optimistic concurrency token from the latest representation. responses: 200: {description: Revoked membership, schema: {$ref: "#/definitions/TenantMembershipResponse"}} 401: {description: Missing or invalid server or session credential} 404: {description: "Membership is absent, foreign, or unauthorized"} 409: {description: "Optimistic, self-change, owner, or state conflict"} 500: {description: Server error} security: *portalSecurity /credentials/password/change: post: tags: [credentials] summary: Change the current user's password and revoke every session operationId: changePassword security: - ApiKeyAuth: [] kvSessionCookie: [] parameters: - $ref: "#/parameters/requestId" - name: passwordChangeRequest in: body required: true schema: {$ref: "#/definitions/PasswordChangeRequest"} responses: 204: description: Password changed; all sessions revoked and fresh login required. 401: {$ref: "#/responses/Unauthorized"} 422: {$ref: "#/responses/UnprocessableEntity"} 500: {$ref: "#/responses/ServerError"} /credentials/password/recovery-requests: post: tags: [credentials] summary: Request password recovery without disclosing account state operationId: requestPasswordRecovery security: - ApiKeyAuth: [] parameters: - $ref: "#/parameters/requestId" - $ref: "#/parameters/recoveryClientIP" - name: passwordRecoveryRequest in: body required: true schema: {$ref: "#/definitions/PasswordRecoveryRequest"} responses: 202: description: Uniform accepted response for every account state. schema: {$ref: "#/definitions/PasswordRecoveryAccepted"} 401: {$ref: "#/responses/Unauthorized"} 500: {$ref: "#/responses/ServerError"} /credentials/password/recovery-completions: post: tags: [credentials] summary: Consume a single-use recovery token and revoke every session operationId: completePasswordRecovery security: - ApiKeyAuth: [] parameters: - $ref: "#/parameters/requestId" - name: passwordRecoveryCompletion in: body required: true schema: {$ref: "#/definitions/PasswordRecoveryCompletion"} responses: 204: description: Password reset; all sessions revoked and fresh login required. 401: {$ref: "#/responses/Unauthorized"} 422: description: Invalid, expired, revoked, or consumed token, or invalid password. schema: {$ref: "../../lib/swagger/defs/error.yaml#/Error"} 500: {$ref: "#/responses/ServerError"} /sessions: post: tags: [sessions] summary: Create new session (sign-in) operationId: createSession parameters: - in: body name: credentials required: true schema: $ref: "../../lib/swagger/defs/credentials.yaml#/Credentials" responses: 200: description: Successful sign-in headers: Set-Cookie: type: string description: | kvSession=; HttpOnly; Secure; SameSite=None; Domain=.keenanvision.net; Path=/; Max-Age=5400 schema: $ref: "../../lib/swagger/defs/user.yaml#/User" 401: $ref: "#/responses/Unauthorized" 429: $ref: "#/responses/ServerError" /sessions/refresh: post: tags: [sessions] summary: Refresh session cookie operationId: refreshSession security: - kvSessionCookie: [] responses: 200: description: Token refreshed headers: Set-Cookie: type: string description: New kvSession cookie with updated expiry schema: $ref: "../../lib/swagger/defs/user.yaml#/User" 401: $ref: "#/responses/Unauthorized" /sessions/current: delete: responses: "204": description: Logged out; kvSession cookie cleared headers: Set-Cookie: type: string description: "kvSession=; HttpOnly; Secure; SameSite=None; Domain=.keenanvision.net; Path=/; Max-Age=0" "401": description: Access Unauthorized, invalid API-KEY was used schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" security: - kvSessionCookie: [] tags: - sessions summary: Delete current session (log out) operationId: deleteSession /sessions/me: get: tags: [sessions] summary: Get current user operationId: getMe security: - kvSessionCookie: [] responses: 200: description: Current user profile schema: $ref: "../../lib/swagger/defs/user.yaml#/User" 401: $ref: "#/responses/Unauthorized" /sessions/handoff/create: post: tags: [sessions] summary: Create handoff token for cross-domain authentication operationId: createHandoff security: - kvSessionCookie: [] - ApiKeyAuth: [] parameters: - name: handoffRequest in: body required: true schema: type: object required: - target_domain - state properties: target_domain: type: string description: Target domain for handoff example: "salesforcedevops.net" state: type: string description: CSRF state parameter example: "random-csrf-token-123" responses: 200: description: Handoff token created successfully schema: type: object properties: handoff_token: type: string description: One-time handoff token example: "hoff_1234567890abcdef" expires_at: type: string format: date-time description: Token expiration time 400: description: Invalid request parameters schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" 401: $ref: "#/responses/Unauthorized" 403: description: Domain not allowed schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" 500: $ref: "#/responses/ServerError" /sessions/handoff/validate: post: tags: [sessions] summary: Validate and consume handoff token operationId: validateHandoff security: - ApiKeyAuth: [] parameters: - name: handoffValidate in: body required: true schema: type: object required: - handoff_token - domain - state properties: handoff_token: type: string description: Handoff token to validate example: "hoff_1234567890abcdef" domain: type: string description: Requesting domain example: "salesforcedevops.net" state: type: string description: CSRF state parameter example: "random-csrf-token-123" client_ip: type: string description: Client IP address example: "192.168.1.100" responses: 200: description: Token validated successfully schema: type: object properties: user: $ref: "../../lib/swagger/defs/user.yaml#/User" session_ref: type: string description: Reference to central session example: "sess_abcdef1234567890" expires_at: type: string format: date-time description: Session expiration time 400: description: Invalid request parameters schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" 401: description: Invalid or expired token schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" 403: description: Domain not authorized schema: $ref: "../../lib/swagger/defs/error.yaml#/Error" 500: $ref: "#/responses/ServerError" /attendees: get: description: Return a list of Attendee records from the datastore operationId: getAttendees parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/AttendeeResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Attendees tags: - Attendees post: description: Create Attendees operationId: postAttendees parameters: - $ref: "#/parameters/AttendeeRequest" responses: "200": $ref: "#/responses/AttendeeResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Attendees tags: - Attendees put: description: Update Attendee operationId: putAttendees parameters: - $ref: "#/parameters/AttendeeRequest" responses: "200": $ref: "#/responses/AttendeeResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Attendee tags: - Attendees /certificates: get: description: Return a list of Certificate records from the datastore operationId: getCertificates parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/CertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Certificates tags: - Certificates post: description: Create Certificates operationId: postCertificates parameters: - $ref: "#/parameters/CertificateRequest" responses: "200": $ref: "#/responses/CertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Certificates tags: - Certificates put: description: Update Certificate operationId: putCertificates parameters: - $ref: "#/parameters/CertificateRequest" responses: "200": $ref: "#/responses/CertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Certificate tags: - Certificates /clusters: get: description: Return a list of Cluster records from the datastore operationId: getClusters parameters: - $ref: "#/parameters/clusterIdQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/ClusterResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Clusters tags: - Clusters post: description: Create Clusters operationId: postClusters parameters: - $ref: "#/parameters/ClusterRequest" responses: "200": $ref: "#/responses/ClusterResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Clusters tags: - Clusters put: description: Update Cluster operationId: putClusters parameters: - $ref: "#/parameters/ClusterRequest" responses: "200": $ref: "#/responses/ClusterResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Clustera tags: - Clusters /courselessons: get: operationId: getCourseLessons security: - ApiKeyAuth: [] parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/CourseLessonResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Get a list of CourseLessons tags: - Courses post: operationId: postCourseLessons security: - ApiKeyAuth: [] parameters: - $ref: "#/parameters/CourseLessonRequest" responses: "200": $ref: "#/responses/CourseLessonResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Create a new CourseLesson tags: - Courses put: security: - ApiKeyAuth: [] operationId: updateCourseLessons parameters: - $ref: "#/parameters/CourseLessonRequest" responses: "200": $ref: "#/responses/CourseLessonResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Update an existing CourseLesson tags: - Courses /courses: get: security: - ApiKeyAuth: [] operationId: getCourses parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/CourseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Get a list of Courses tags: - Courses post: security: - ApiKeyAuth: [] operationId: postCourses parameters: - $ref: "#/parameters/CourseRequest" responses: "200": $ref: "#/responses/CourseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Create a new Course tags: - Courses put: security: - ApiKeyAuth: [] operationId: updateCourses parameters: - $ref: "#/parameters/CourseRequest" responses: "200": $ref: "#/responses/CourseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Update an existing Course tags: - Courses /coursesections: get: security: - ApiKeyAuth: [] operationId: getCourseSections parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/CourseSectionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Get a list of CourseSections tags: - Courses post: security: - ApiKeyAuth: [] operationId: postCourseSections parameters: - $ref: "#/parameters/CourseSectionRequest" responses: "200": $ref: "#/responses/CourseSectionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Create a new CourseSection tags: - Courses put: security: - ApiKeyAuth: [] operationId: updateCourseSections parameters: - $ref: "#/parameters/CourseSectionRequest" responses: "200": $ref: "#/responses/CourseSectionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Update an existing CourseSection tags: - Courses /databases: get: description: Return a list of Database records from the datastore operationId: getDatabases parameters: - $ref: "#/parameters/databaseIdQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/DatabaseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Databases tags: - Databases post: description: Create Databases operationId: postDatabases parameters: - $ref: "#/parameters/databaseRequest" responses: "200": $ref: "#/responses/DatabaseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Databases tags: - Databases put: description: Update Database operationId: putDatabases parameters: - $ref: "#/parameters/databaseRequest" responses: "200": $ref: "#/responses/DatabaseResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Databases tags: - Databases /documents: get: description: Return a list of Document records from the datastore operationId: getDocuments parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/DocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Documents tags: - Documents post: description: Create Documents operationId: postDocuments parameters: - $ref: "#/parameters/documentRequest" responses: "200": $ref: "#/responses/DocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Documents tags: - Documents put: description: Update Document operationId: putDocuments parameters: - $ref: "#/parameters/documentRequest" responses: "200": $ref: "#/responses/DocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Documents tags: - Documents /emailmessages: get: security: - ApiKeyAuth: [] summary: "Get email messages from data store" operationId: getEmailMessages description: "Retrieves email messages from workflow storage" parameters: - $ref: "#/parameters/emailMessageIdQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" tags: - Emails responses: "200": $ref: "#/responses/EmailMessagesResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" post: security: - ApiKeyAuth: [] summary: Add new email messages to the outgoing queue operationId: postEmailMessages description: Insert new email messages into workflow storage parameters: - $ref: "#/parameters/EmailMessageRequest" responses: "200": $ref: "#/responses/EmailMessagesResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" tags: - Emails /outgoingemailmessages: get: security: - ApiKeyAuth: [] summary: "Get email messages from data store" operationId: getOutgoingEmailMessages description: "Retrieves email messages from workflow storage" parameters: - $ref: "#/parameters/emailMessageIdQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" tags: - Emails responses: "200": $ref: "#/responses/OutgoingEmailMessagesResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" post: security: - ApiKeyAuth: [] summary: Add new email messages to the outgoing queue operationId: postOutgoingEmailMessages description: Insert new email messages into workflow storage parameters: - $ref: "#/parameters/OutgoingEmailMessageRequest" responses: "200": $ref: "#/responses/OutgoingEmailMessagesResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" tags: - Emails /enrollments: get: description: Return a list of Enrollment records from the datastore operationId: getEnrollments parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/EnrollmentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Enrollments tags: - Enrollments post: description: Create Enrollments operationId: postEnrollments parameters: - $ref: "#/parameters/EnrollmentRequest" responses: "200": $ref: "#/responses/EnrollmentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Enrollments tags: - Enrollments put: description: Update Enrollment operationId: putEnrollments parameters: - $ref: "#/parameters/EnrollmentRequest" responses: "200": $ref: "#/responses/EnrollmentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Enrollment tags: - Enrollments /eventcategories: get: security: - ApiKeyAuth: [] operationId: getEventCategories parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/idQuery" responses: "200": $ref: "#/responses/EventCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Get a list of Eventcategories tags: - Events post: security: - ApiKeyAuth: [] operationId: postEventCategories parameters: - $ref: "#/parameters/EventCategoryRequest" responses: "200": $ref: "#/responses/EventCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Create a new EventCategory tags: - Events /events: get: security: - ApiKeyAuth: [] operationId: getEvents parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/idQuery" responses: "200": $ref: "#/responses/EventResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Get a list of Events tags: - Events post: security: - ApiKeyAuth: [] operationId: postEvents parameters: - $ref: "#/parameters/EventRequest" responses: "200": $ref: "#/responses/EventResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" summary: Create a new Event tags: - Events /favorites: get: description: Return a list of Favorite records from the datastore operationId: getFavorites parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/FavoriteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Favorites tags: - Favorites post: description: Create Favorites operationId: postFavorites parameters: - $ref: "#/parameters/FavoriteRequest" responses: "200": $ref: "#/responses/FavoriteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Favorites tags: - Favorites put: description: Update Favorite operationId: putFavorites parameters: - $ref: "#/parameters/FavoriteRequest" responses: "200": $ref: "#/responses/FavoriteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Favorite tags: - Favorites /invoices: get: description: Return a list of Invoice records from the datastore operationId: getInvoices parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/InvoiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Invoices tags: - Invoices post: description: Create Invoices operationId: postInvoices parameters: - $ref: "#/parameters/InvoiceRequest" responses: "200": $ref: "#/responses/InvoiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Invoices tags: - Invoices put: description: Update Invoice operationId: putInvoices parameters: - $ref: "#/parameters/InvoiceRequest" responses: "200": $ref: "#/responses/InvoiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Invoice tags: - Invoices /issuedcertificates: get: description: Return a list of IssuedCertificate records from the datastore operationId: getIssuedCertificates parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/IssuedCertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list IssuedCertificates tags: - IssuedCertificates post: description: Create IssuedCertificates operationId: postIssuedCertificates parameters: - $ref: "#/parameters/IssuedCertificateRequest" responses: "200": $ref: "#/responses/IssuedCertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new IssuedCertificates tags: - IssuedCertificates put: description: Update IssuedCertificate operationId: putIssuedCertificates parameters: - $ref: "#/parameters/IssuedCertificateRequest" responses: "200": $ref: "#/responses/IssuedCertificateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update IssuedCertificate tags: - IssuedCertificates /lessonprogress: get: description: Return a list of LessonProgress records from the datastore operationId: getLessonProgresses parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/LessonProgressResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list LessonProgresses tags: - LessonProgress post: description: Create LessonProgresses operationId: postLessonProgresses parameters: - $ref: "#/parameters/LessonProgressRequest" responses: "200": $ref: "#/responses/LessonProgressResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new LessonProgresses tags: - LessonProgress put: description: Update LessonProgress operationId: putLessonProgresses parameters: - $ref: "#/parameters/LessonProgressRequest" responses: "200": $ref: "#/responses/LessonProgressResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update LessonProgress tags: - LessonProgress /orders: get: description: Return a list of Order records from the datastore operationId: getOrders parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/OrderResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Orders tags: - Orders post: description: Create Orders operationId: postOrders parameters: - $ref: "#/parameters/OrderRequest" responses: "200": $ref: "#/responses/OrderResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Orders tags: - Orders put: description: Update Order operationId: putOrders parameters: - $ref: "#/parameters/OrderRequest" responses: "200": $ref: "#/responses/OrderResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Order tags: - Orders /paymentmethods: get: description: Return a list of PaymentMethod records from the datastore operationId: getPaymentMethods parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/PaymentMethodResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list PaymentMethods tags: - PaymentMethods post: description: Create PaymentMethods operationId: postPaymentMethods parameters: - $ref: "#/parameters/PaymentMethodRequest" responses: "200": $ref: "#/responses/PaymentMethodResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new PaymentMethods tags: - PaymentMethods put: description: Update PaymentMethod operationId: putPaymentMethods parameters: - $ref: "#/parameters/PaymentMethodRequest" responses: "200": $ref: "#/responses/PaymentMethodResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update PaymentMethod tags: - PaymentMethods /prompts: get: description: Return a list of Prompt records from the datastore operationId: getPrompts parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/PromptResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of Prompts tags: - Prompts post: description: Create Prompts operationId: postPrompts parameters: - $ref: "#/parameters/PromptRequest" responses: "200": $ref: "#/responses/PromptResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Prompts tags: - Prompts put: description: Update Prompt operationId: putPrompts parameters: - $ref: "#/parameters/PromptRequest" responses: "200": $ref: "#/responses/PromptResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Prompts tags: - Prompts /promptanswers: get: description: Return a list of PromptAnswers records from the datastore operationId: getPromptAnswers parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/PromptAnswerResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of PromptResponses tags: - Prompts post: description: Create PromptAnswers operationId: postPromptAnswers parameters: - $ref: "#/parameters/PromptAnswerRequest" responses: "200": $ref: "#/responses/PromptAnswerResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new PromptResponses tags: - Prompts put: description: Update PromptAnswers operationId: putPromptAnsweers parameters: - $ref: "#/parameters/PromptAnswerRequest" responses: "200": $ref: "#/responses/PromptAnswerResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update PromptResponse tags: - Prompts /promptcategories: get: description: Return a list of PromptCategory records from the datastore operationId: getPromptCategories parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/PromptCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of PromptCategories tags: - Prompts post: description: Create PromptCategories operationId: postPromptCategories parameters: - $ref: "#/parameters/PromptCategoryRequest" responses: "200": $ref: "#/responses/PromptCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new PromptCategories tags: - Prompts put: description: Update PromptCategory operationId: putPromptCategories parameters: - $ref: "#/parameters/PromptCategoryRequest" responses: "200": $ref: "#/responses/PromptCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update PromptCategories tags: - Prompts /prompttags: get: description: Return a list of PromptTag records from the datastore operationId: getPromptTags parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/PromptTagResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of PromptTags tags: - Prompts post: description: Create PromptTags in Taxnexus operationId: postPromptTags parameters: - $ref: "#/parameters/PromptTagRequest" responses: "200": $ref: "#/responses/PromptTagResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new PromptTags tags: - Prompts put: description: Update PromptTag in Taxnexus operationId: putPromptTags parameters: - $ref: "#/parameters/PromptTagRequest" responses: "200": $ref: "#/responses/PromptTagResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update PromptTags tags: - Prompts /researchprojectcompanies: get: description: Return a list of ResearchProjectCompany records from the datastore operationId: getResearchProjectCompanies parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectCompanyResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjectCompanies tags: - ResearchProjects post: description: Create ResearchProjectCompanies in the system operationId: postResearchProjectCompanies parameters: - $ref: "#/parameters/Auth0UserIdHeader" - $ref: "#/parameters/ResearchProjectCompanyRequest" responses: "200": $ref: "#/responses/ResearchProjectCompanyResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjectCompanies tags: - ResearchProjects put: description: Update ResearchProjectCompany in the system operationId: putResearchProjectCompanies parameters: - $ref: "#/parameters/Auth0UserIdHeader" - $ref: "#/parameters/ResearchProjectCompanyRequest" responses: "200": $ref: "#/responses/ResearchProjectCompanyResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjectCompanies tags: - ResearchProjects /researchprojectdocuments: get: description: Return a list of ResearchProjectDocument records from the datastore operationId: getResearchProjectDocuments parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectDocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjectDocuments tags: - ResearchProjects post: description: Create ResearchProjectDocuments in the system operationId: postResearchProjectDocuments parameters: - $ref: "#/parameters/ResearchProjectDocumentRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectDocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjectDocuments tags: - ResearchProjects put: description: Update ResearchProjectDocument in the system operationId: putResearchProjectDocuments parameters: - $ref: "#/parameters/ResearchProjectDocumentRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectDocumentResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjectDocuments tags: - ResearchProjects /researchprojectservices: get: description: Return a list of ResearchProjectService records from the datastore operationId: getResearchProjectServices parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjectServices tags: - ResearchProjects post: description: Create ResearchProjectServices in the system operationId: postResearchProjectServices parameters: - $ref: "#/parameters/ResearchProjectServiceRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectServiceResponse" "201": $ref: "#/responses/ResearchProjectServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjectServices tags: - ResearchProjects put: description: Update ResearchProjectService in the system operationId: putResearchProjectServices parameters: - $ref: "#/parameters/ResearchProjectServiceRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectServiceResponse" "201": $ref: "#/responses/ResearchProjectServiceResponse" "401": $ref: "#/responses/Unauthorized" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjectServices tags: - ResearchProjects /researchprojectproducts: get: description: Return a list of ResearchProjectProduct records from the datastore operationId: getResearchProjectProducts parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjectProducts tags: - ResearchProjects post: description: Create ResearchProjectProducts in the system operationId: postResearchProjectProducts parameters: - $ref: "#/parameters/researchProjectProductRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjectProducts tags: - ResearchProjects put: description: Update ResearchProjectProduct in the system operationId: putResearchProjectProducts parameters: - $ref: "#/parameters/researchProjectProductRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjectProducts tags: - ResearchProjects /researchprojects: get: description: Return a list of ResearchProject records from the datastore operationId: getResearchProjects parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjects tags: - ResearchProjects post: description: Create ResearchProjects in the system operationId: postResearchProjects parameters: - $ref: "#/parameters/ResearchProjectRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjects tags: - ResearchProjects put: description: Update ResearchProject in the system operationId: putResearchProjects parameters: - $ref: "#/parameters/ResearchProjectRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjects tags: - ResearchProjects /researchprojecttopics: get: description: Return a list of ResearchProjectTopic records from the datastore operationId: getResearchProjectTopics parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectTopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of ResearchProjectTopics tags: - ResearchProjects post: description: Create ResearchProjectTopics in the system operationId: postResearchProjectTopics parameters: - $ref: "#/parameters/ResearchProjectTopicRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectTopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new ResearchProjectTopics tags: - ResearchProjects put: description: Update ResearchProjectTopic in the system operationId: putResearchProjectTopics parameters: - $ref: "#/parameters/ResearchProjectTopicRequest" - $ref: "#/parameters/Auth0UserIdHeader" responses: "200": $ref: "#/responses/ResearchProjectTopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update ResearchProjectTopics tags: - ResearchProjects /tenants: get: description: Return a list of Tenant records from the datastore operationId: getTenants parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/nameQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/TenantResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Tenants tags: - Tenants post: description: Create Tenants operationId: postTenants parameters: - $ref: "#/parameters/TenantRequest" responses: "200": $ref: "#/responses/TenantResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Tenants tags: - Tenants put: description: Update Tenant operationId: putTenants parameters: - $ref: "#/parameters/TenantRequest" responses: "200": $ref: "#/responses/TenantResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Tenants tags: - Tenants /templates: get: description: Return a list of Templates from the datastore operationId: getTemplates parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/templateIdQuery" - $ref: "#/parameters/isMasterQuery" - $ref: "#/parameters/objectTypeQuery" responses: "200": $ref: "#/responses/TemplateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Templates tags: - Templates post: description: Create new Templates operationId: postTemplates parameters: - $ref: "#/parameters/TemplateRequest" responses: "200": $ref: "#/responses/TemplateResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Templates tags: - Templates /tickets: get: description: Return a list of Ticket records from the datastore operationId: getTickets parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/TicketResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Tickets tags: - Tickets post: description: Create Tickets operationId: postTickets parameters: - $ref: "#/parameters/TicketRequest" responses: "200": $ref: "#/responses/TicketResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Tickets tags: - Tickets put: description: Update Ticket operationId: putTickets parameters: - $ref: "#/parameters/TicketRequest" responses: "200": $ref: "#/responses/TicketResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Ticket tags: - Tickets /transactions: get: description: Return a list of Transaction records from the datastore operationId: getTransactions parameters: - $ref: "#/parameters/idQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/TransactionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of Transactions tags: - Transactions post: description: Create Transactions operationId: postTransactions parameters: - $ref: "#/parameters/TransactionRequest" responses: "200": $ref: "#/responses/TransactionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Transactions tags: - Transactions put: description: Update Transaction operationId: putTransactions parameters: - $ref: "#/parameters/TransactionRequest" responses: "200": $ref: "#/responses/TransactionResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update Transaction tags: - Transactions /users/onboard: post: description: Async onboard new users operationId: postUsersOnboard parameters: - $ref: "#/parameters/OnboardRequest" responses: "200": $ref: "#/responses/UserResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Async onboard new users tags: - Users /users: get: description: Return a list of User records from the datastore operationId: getUsers parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/emailQuery" - $ref: "#/parameters/auth0UserIdQuery" - $ref: "#/parameters/identityProviderQuery" - $ref: "#/parameters/identitySubjectQuery" - $ref: "#/parameters/userIdQuery" - $ref: "#/parameters/contactIdQuery" responses: "200": $ref: "#/responses/UserResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list Users tags: - Users post: description: Create new Users operationId: postUsers parameters: - $ref: "#/parameters/UserRequest" responses: "200": $ref: "#/responses/UserResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create new Users tags: - Users put: description: Update existing users operationId: putUsers parameters: - $ref: "#/parameters/UserRequest" responses: "200": $ref: "#/responses/UserResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update existing users tags: - Users definitions: AuditFields: type: object properties: id: {type: string, format: uuid, description: Server-generated on create; required in collection PUT bodies.} createdById: {type: string, format: uuid, x-nullable: true, readOnly: true} createdDate: {type: string, format: date-time, x-nullable: true, readOnly: true} lastModifiedById: {type: string, format: uuid, x-nullable: true, readOnly: true} lastModifiedDate: {type: string, format: date-time, x-nullable: true, readOnly: true} Brand: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [brandKey, name, domain, status] properties: brandKey: {type: string, minLength: 1, maxLength: 80} name: {type: string, minLength: 1, maxLength: 255} domain: {type: string, minLength: 1, maxLength: 255} status: {type: string, enum: [active, inactive, retired]} Service: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [serviceKey, name, ownerSystem, status] properties: serviceKey: {type: string, minLength: 1, maxLength: 80} name: {type: string, minLength: 1, maxLength: 255} description: {type: string, x-nullable: true} ownerSystem: {type: string, enum: [members, crm, research, plex, external]} contractRef: {type: string, maxLength: 255, x-nullable: true} status: {type: string, enum: [draft, active, retired]} BrandService: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [brandId, serviceId, status] properties: brandId: {type: string, format: uuid} serviceId: {type: string, format: uuid} status: {type: string, enum: [active, inactive]} ServiceScope: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [serviceId, scopeKey, status] properties: serviceId: {type: string, format: uuid} scopeKey: {type: string, minLength: 1, maxLength: 120} description: {type: string, x-nullable: true} status: {type: string, enum: [active, retired]} Plan: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [planKey, version, name, status, currency, unitAmount, billingPeriod] properties: planKey: {type: string, minLength: 1, maxLength: 80} version: {type: integer, format: int32, minimum: 1, maximum: 2147483647} name: {type: string, minLength: 1, maxLength: 255} description: {type: string, x-nullable: true} status: {type: string, enum: [draft, active, retired]} currency: {type: string, minLength: 3, maxLength: 3} unitAmount: {type: string, minLength: 1, maxLength: 13, pattern: '^(0|[1-9][0-9]{0,9})(\.[0-9]{1,2})?$', description: "Exact decimal string matching SQL DECIMAL(12,2)."} billingPeriod: {type: string, enum: [none, month, year, custom]} effectiveFrom: {type: string, format: date-time, x-nullable: true} effectiveUntil: {type: string, format: date-time, x-nullable: true} BrandPlan: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [brandId, planId, status] properties: brandId: {type: string, format: uuid} planId: {type: string, format: uuid} status: {type: string, enum: [active, inactive]} PlanService: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [planId, serviceId, grantMode, limitPeriod] properties: planId: {type: string, format: uuid} serviceId: {type: string, format: uuid} grantMode: {type: string, enum: [included, metered]} unit: {type: string, maxLength: 40, x-nullable: true} limitQuantity: {type: string, minLength: 1, maxLength: 21, pattern: '^(0|[1-9][0-9]{0,13})(\.[0-9]{1,6})?$', x-nullable: true, description: "Exact decimal string matching SQL DECIMAL(20,6); null means unlimited. This wave does not meter or decrement it."} limitPeriod: {type: string, enum: [none, day, month, billing_period, lifetime]} Subscription: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [tenantId, planId, status, startsAt] properties: tenantId: {type: string, format: uuid} planId: {type: string, format: uuid} status: {type: string, enum: [trialing, active, past_due, paused, canceled, expired]} startsAt: {type: string, format: date-time} currentPeriodStart: {type: string, format: date-time, x-nullable: true} currentPeriodEnd: {type: string, format: date-time, x-nullable: true} endsAt: {type: string, format: date-time, x-nullable: true} cancelAtPeriodEnd: {type: boolean, default: false} paymentMethodId: {type: string, format: uuid, x-nullable: true} provider: {type: string, minLength: 1, maxLength: 80, x-nullable: true, description: Non-secret provider name; blank values are normalized to null.} externalCustomerId: {type: string, minLength: 1, maxLength: 255, x-nullable: true, description: Non-secret provider reference; blank values are normalized to null.} externalSubscriptionId: {type: string, minLength: 1, maxLength: 255, x-nullable: true, description: Non-secret provider reference; blank values are normalized to null.} Entitlement: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [tenantId, serviceId, source, effect, status, effectiveFrom] properties: tenantId: {type: string, format: uuid} userId: {type: string, format: uuid, x-nullable: true, description: Null means tenant-level; non-null must belong to the tenant.} serviceId: {type: string, format: uuid} subscriptionId: {type: string, format: uuid, x-nullable: true} source: {type: string, enum: [subscription, manual, trial, promotion]} effect: {type: string, enum: [allow, deny]} status: {type: string, enum: [scheduled, active, revoked, expired]} effectiveFrom: {type: string, format: date-time} effectiveUntil: {type: string, format: date-time, x-nullable: true} unit: {type: string, maxLength: 40, x-nullable: true} limitQuantity: {type: string, minLength: 1, maxLength: 21, pattern: '^(0|[1-9][0-9]{0,13})(\.[0-9]{1,6})?$', x-nullable: true, description: "Exact decimal string matching SQL DECIMAL(20,6)."} limitPeriod: {type: string, enum: [none, day, month, billing_period, lifetime], x-nullable: true} revokedAt: {type: string, format: date-time, x-nullable: true, readOnly: true} revokedById: {type: string, format: uuid, x-nullable: true, readOnly: true} EffectiveEntitlement: type: object required: [tenantId, serviceId, effect, provenance, evaluatedAt, limit] properties: tenantId: {type: string, format: uuid} userId: {type: string, format: uuid, x-nullable: true} serviceId: {type: string, format: uuid} effect: {type: string, enum: [allow, deny]} effectiveFrom: {type: string, format: date-time, x-nullable: true} effectiveUntil: {type: string, format: date-time, x-nullable: true} evaluatedAt: {type: string, format: date-time} provenance: {type: string, enum: [user_entitlement, tenant_entitlement, subscription_plan]} limit: {$ref: "#/definitions/DescriptiveLimit"} DescriptiveLimit: type: object required: [unlimited, period] properties: unlimited: {type: boolean} unit: {type: string, maxLength: 40, x-nullable: true} quantity: {type: string, minLength: 1, maxLength: 21, pattern: '^(0|[1-9][0-9]{0,13})(\.[0-9]{1,6})?$', x-nullable: true, description: "Exact decimal string matching SQL DECIMAL(20,6)."} period: {type: string, enum: [none, day, month, billing_period, lifetime]} enforced: {type: boolean, default: false, description: Always false in this wave; usage accounting is deferred.} AuthorizedClient: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [tenantId, clientIdentifier, clientType, displayName, status] description: Non-secret connection metadata. Token, secret, API-key, and cookie properties are deliberately absent. properties: tenantId: {type: string, format: uuid} userId: {type: string, format: uuid, x-nullable: true, description: Null means tenant-level; non-null must belong to the tenant.} clientIdentifier: {type: string, minLength: 1, maxLength: 255} clientType: {type: string, enum: [mcp, api]} displayName: {type: string, minLength: 1, maxLength: 255} softwareId: {type: string, maxLength: 255, x-nullable: true} softwareVersion: {type: string, maxLength: 80, x-nullable: true} clientUri: {type: string, maxLength: 2048, x-nullable: true} externalConnectionId: {type: string, maxLength: 255, x-nullable: true, description: Non-secret external reference.} status: {type: string, enum: [pending, active, revoked, expired]} approvedAt: {type: string, format: date-time, x-nullable: true, readOnly: true} lastUsedAt: {type: string, format: date-time, x-nullable: true, readOnly: true} expiresAt: {type: string, format: date-time, x-nullable: true} revokedAt: {type: string, format: date-time, x-nullable: true, readOnly: true} revokedById: {type: string, format: uuid, x-nullable: true, readOnly: true} AuthorizedClientScope: allOf: - $ref: "#/definitions/AuditFields" - type: object required: [authorizedClientId, serviceScopeId] properties: authorizedClientId: {type: string, format: uuid} serviceScopeId: {type: string, format: uuid} TenantMembership: allOf: - $ref: "#/definitions/TenantMembershipAuditFields" - type: object required: [tenantId, userId, email, accessLevel, status] properties: tenantId: {type: string, minLength: 1, maxLength: 36} userId: {type: string, format: uuid} email: {type: string, format: email, readOnly: true} fullName: {type: string, x-nullable: true, readOnly: true} accessLevel: {type: string, enum: [owner, manager, member, read_only]} status: {type: string, enum: [active, suspended, revoked]} TenantMembershipAuditFields: type: object required: [id, createdDate, lastModifiedDate] properties: id: {type: string, format: uuid, description: Server-generated membership identifier.} createdById: {type: string, format: uuid, x-nullable: true, readOnly: true} createdDate: {type: string, format: date-time, description: Server-owned UTC creation timestamp.} lastModifiedById: {type: string, format: uuid, x-nullable: true, readOnly: true} lastModifiedDate: {type: string, format: date-time, description: Server-owned optimistic concurrency token.} TenantMembershipCreate: type: object required: [tenantId, accessLevel] description: Exactly one of userId or email is required; Members validates the exclusive selector transactionally. properties: tenantId: {type: string, minLength: 1, maxLength: 36} userId: {type: string, format: uuid, x-nullable: true} email: {type: string, format: email, x-nullable: true} accessLevel: {type: string, enum: [owner, manager, member, read_only]} status: {type: string, enum: [active, suspended, revoked], default: active} TenantMembershipUpdate: type: object required: [lastModifiedDate] properties: accessLevel: {type: string, enum: [owner, manager, member, read_only], x-nullable: true} status: {type: string, enum: [active, suspended, revoked], x-nullable: true} lastModifiedDate: {type: string, format: date-time, description: Optimistic concurrency token from the latest representation.} ManageableTenant: type: object required: [id, tenantName, actorAccessLevel] properties: id: {type: string, minLength: 1, maxLength: 36} tenantName: {type: string} tenantType: {type: string, x-nullable: true} status: {type: string, x-nullable: true} active: {type: boolean, x-nullable: true} actorAccessLevel: {type: string, enum: [estate_administrator, owner, manager]} PortalMeta: type: object properties: operationId: {type: string} serverTimestamp: {type: string, format: date-time} limit: {type: integer, format: int64} offset: {type: integer, format: int64} BrandRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/Brand"}}}} BrandResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/Brand"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} ServiceRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/Service"}}}} ServiceResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/Service"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} BrandServiceRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/BrandService"}}}} BrandServiceResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/BrandService"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} ServiceScopeRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/ServiceScope"}}}} ServiceScopeResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/ServiceScope"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} PlanRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/Plan"}}}} PlanResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/Plan"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} BrandPlanRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/BrandPlan"}}}} BrandPlanResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/BrandPlan"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} PlanServiceRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/PlanService"}}}} PlanServiceResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/PlanService"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} SubscriptionRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/Subscription"}}}} SubscriptionResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/Subscription"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} EntitlementRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/Entitlement"}}}} EntitlementResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/Entitlement"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} EffectiveEntitlementResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/EffectiveEntitlement"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} AuthorizedClientRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/AuthorizedClient"}}}} AuthorizedClientResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/AuthorizedClient"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} AuthorizedClientScopeRequest: {type: object, required: [Data], properties: {Data: {type: array, items: {$ref: "#/definitions/AuthorizedClientScope"}}}} AuthorizedClientScopeResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/AuthorizedClientScope"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} TenantMembershipCreateRequest: {type: object, required: [Data], properties: {Data: {$ref: "#/definitions/TenantMembershipCreate"}}} TenantMembershipUpdateRequest: {type: object, required: [Data], properties: {Data: {$ref: "#/definitions/TenantMembershipUpdate"}}} TenantMembershipResponse: {type: object, required: [Data, Meta], properties: {Data: {$ref: "#/definitions/TenantMembership"}, Meta: {$ref: "#/definitions/PortalMeta"}}} TenantMembershipListResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/TenantMembership"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} ManageableTenantResponse: {type: object, required: [Data, Meta], properties: {Data: {type: array, items: {$ref: "#/definitions/ManageableTenant"}}, Meta: {$ref: "#/definitions/PortalMeta"}}} OnboardRequest: description: Self-service onboarding request. The plaintext password is hashed server-side with the members pepper; it is never stored or logged in plaintext. type: object required: - email - password properties: email: description: Login email (stored lowercased) type: string format: email password: type: string format: password description: Plaintext password; Members enforces 12-64 valid UTF-8 bytes before hashing. firstName: description: First name type: string lastName: description: Last name type: string companyName: description: Company name type: string PasswordChangeRequest: description: Secret-bearing request. Values are never logged, stored raw, echoed, or generated into response models. type: object required: [currentPassword, newPassword] properties: currentPassword: type: string format: password description: Plaintext current password; verified only in memory and never logged. newPassword: type: string format: password description: Plaintext new password; Members enforces 12-64 valid UTF-8 bytes. PasswordRecoveryRequest: description: Recovery selector accepted uniformly regardless of account state. type: object required: [email] properties: email: type: string format: email maxLength: 320 PasswordRecoveryCompletion: description: Secret-bearing single-use recovery completion request. type: object required: [token, newPassword] properties: token: type: string minLength: 32 maxLength: 512 newPassword: type: string format: password description: Plaintext new password; Members enforces 12-64 valid UTF-8 bytes. PasswordRecoveryAccepted: type: object required: [status] properties: status: type: string enum: [accepted] AttendeeRequest: description: An array of Attendee objects properties: Data: items: $ref: "../../lib/swagger/defs/attendee.yaml#/Attendee" type: array type: object AttendeeResponse: description: An array of Attendee objects properties: Data: items: $ref: "../../lib/swagger/defs/attendee.yaml#/Attendee" type: array type: object CertificateRequest: description: An array of Certificate objects properties: Data: items: $ref: "../../lib/swagger/defs/certificate.yaml#/Certificate" type: array type: object CertificateResponse: description: An array of Certificate objects properties: Data: items: $ref: "../../lib/swagger/defs/certificate.yaml#/Certificate" type: array type: object ClusterRequest: properties: Data: items: $ref: "../../lib/swagger/defs/cluster.yaml#/Cluster" type: array type: object ClusterResponse: description: An array of cluster objects properties: Data: items: $ref: "../../lib/swagger/defs/cluster.yaml#/Cluster" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object CourseLessonRequest: description: An array of CourseLesson objects properties: Data: items: $ref: "../../lib/swagger/defs/course-lesson.yaml#/CourseLesson" type: array type: object CourseLessonResponse: description: An array of CourseLesson objects properties: Data: items: $ref: "../../lib/swagger/defs/course-lesson.yaml#/CourseLesson" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object CourseRequest: description: An array of Course objects properties: Data: items: $ref: "../../lib/swagger/defs/course.yaml#/Course" type: array type: object CourseResponse: description: An array of Course objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/course.yaml#/Course" type: array type: object CourseSectionRequest: description: An array of CourseSection objects properties: Data: items: $ref: "../../lib/swagger/defs/course-section.yaml#/CourseSection" type: array type: object CourseSectionResponse: description: An array of CourseSection objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/course-section.yaml#/CourseSection" type: array type: object DatabaseRequest: description: An array of Database objects properties: Data: items: $ref: "../../lib/swagger/defs/database.yaml#/Database" type: array type: object DatabaseResponse: description: An array of Database objects properties: Data: items: $ref: "../../lib/swagger/defs/database.yaml#/Database" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object DocumentRequest: description: An array of Document objects properties: Data: items: $ref: "../../lib/swagger/defs/document.yaml#/Document" type: array type: object DocumentResponse: description: An array of Document objects properties: Data: items: $ref: "../../lib/swagger/defs/document.yaml#/Document" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object EmailMessageRequest: description: An array Send Email Message objects properties: data: items: $ref: "../../lib/swagger/defs/email-message.yaml#/EmailMessage" type: array meta: $ref: "#/definitions/RequestMeta" type: object EmailMessagesResponse: description: An array user objects properties: data: items: $ref: "../../lib/swagger/defs/email-message.yaml#/EmailMessage" type: array meta: $ref: "#/definitions/ResponseMeta" type: object EnrollmentRequest: description: An array of Enrollment objects properties: Data: items: $ref: "../../lib/swagger/defs/enrollment.yaml#/Enrollment" type: array type: object EnrollmentResponse: description: An array of Enrollment objects properties: Data: items: $ref: "../../lib/swagger/defs/enrollment.yaml#/Enrollment" type: array type: object EventRequest: description: An array of Event objects properties: Data: items: $ref: "../../lib/swagger/defs/event.yaml#/Event" type: array type: object EventResponse: description: An array of Event objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/event.yaml#/Event" type: array type: object EventCategoryRequest: description: An array of EventCategory objects properties: Data: items: $ref: "../../lib/swagger/defs/event-category.yaml#/EventCategory" type: array type: object EventCategoryResponse: description: An array of EventCategory objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/event-category.yaml#/EventCategory" type: array type: object FavoriteRequest: description: An array of Favorite objects properties: Data: items: $ref: "../../lib/swagger/defs/favorite.yaml#/Favorite" type: array type: object FavoriteResponse: description: An array of Favorite objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/favorite.yaml#/Favorite" type: array type: object InvoiceRequest: description: An array of Invoice objects properties: Data: items: $ref: "../../lib/swagger/defs/invoice.yaml#/Invoice" type: array type: object InvoiceResponse: description: An array of Invoice objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/invoice.yaml#/Invoice" type: array type: object IssuedCertificateRequest: description: An array of IssuedCertificate objects properties: Data: items: $ref: "../../lib/swagger/defs/issued-certificate.yaml#/IssuedCertificate" type: array type: object IssuedCertificateResponse: description: An array of IssuedCertificate objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/issued-certificate.yaml#/IssuedCertificate" type: array type: object LessonProgressRequest: description: An array of LessonProgress objects properties: Data: items: $ref: "../../lib/swagger/defs/lesson-progress.yaml#/LessonProgress" type: array type: object LessonProgressResponse: description: An array of LessonProgress objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/lesson-progress.yaml#/LessonProgress" type: array type: object OutgoingEmailMessageRequest: description: An array New Email Message objects properties: data: items: $ref: "../../lib/swagger/defs/outgoing-email-message.yaml#/OutgoingEmailMessage" type: array type: object OutgoingEmailMessagesResponse: description: An array New Email Message objects properties: data: items: $ref: "../../lib/swagger/defs/outgoing-email-message.yaml#/OutgoingEmailMessage" type: array meta: $ref: "#/definitions/ResponseMeta" type: object OrderRequest: description: An array of Order objects properties: Data: items: $ref: "../../lib/swagger/defs/order.yaml#/Order" type: array type: object OrderResponse: description: An array of Order objects properties: Data: items: $ref: "../../lib/swagger/defs/order.yaml#/Order" type: array type: object Pagination: properties: Limit: format: int64 type: integer POffset: format: int64 type: integer PageSize: format: int64 type: integer SetSize: format: int64 type: integer type: object PaymentMethodRequest: description: An array of PaymentMethod objects properties: Data: items: $ref: "../../lib/swagger/defs/payment-method.yaml#/PaymentMethod" type: array type: object PaymentMethodResponse: description: An array of PaymentMethod objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/payment-method.yaml#/PaymentMethod" type: array type: object PromptAnswerRequest: description: An array of Prompt objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-answer.yaml#/PromptAnswer" type: array type: object PromptAnswerResponse: description: An array of PromptResponse objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-answer.yaml#/PromptAnswer" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object PromptRequest: description: An array of Prompt objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt.yaml#/Prompt" type: array type: object PromptResponse: description: An array of Prompt objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt.yaml#/Prompt" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object PromptCategoryRequest: description: An array of PromptCategory objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-category.yaml#/PromptCategory" type: array type: object PromptCategoryResponse: description: An array of PromptCategory objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-category.yaml#/PromptCategory" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object PromptTagRequest: description: An array of PromptTag objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-tag.yaml#/PromptTag" type: array type: object PromptTagResponse: description: An array of PromptTag objects properties: Data: items: $ref: "../../lib/swagger/defs/prompt-tag.yaml#/PromptTag" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object RequestMeta: properties: ExternalAccount: description: Account Number of the Reseller or OEM type: string x-nullable: true required: - ExternalAccount type: object ResearchProjectCompanyRequest: description: An array of ResearchProjectCompany objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project-company.yaml#/ResearchProjectCompany" type: array type: object ResearchProjectCompanyResponse: description: An array of ResearchProjectCompany objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project-company.yaml#/ResearchProjectCompany" type: array type: object ResearchProjectRequest: description: An array of ResearchProject objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project.yaml#/ResearchProject" type: array type: object ResearchProjectResponse: description: An array of ResearchProject objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project.yaml#/ResearchProject" type: array type: object ResearchProjectDocumentRequest: description: An array of ResearchProjectDocumentRequest objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project-document.yaml#/ResearchProjectDocument" type: array type: object ResearchProjectDocumentResponse: description: An array of ResearchProjectDocumentResponse objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project-document.yaml#/ResearchProjectDocument" type: array type: object ResearchProjectProductRequest: description: An array of ResearchProjectProduct objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project-product.yaml#/ResearchProjectProduct" type: array type: object ResearchProjectProductResponse: description: An array of ResearchProjectProduct objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project-product.yaml#/ResearchProjectProduct" type: array type: object ResearchProjectServiceResponse: description: An array of ResearchProjectService objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project-service.yaml#/ResearchProjectService" type: array type: object ResearchProjectServiceRequest: description: An array of ResearchProjectService objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project-service.yaml#/ResearchProjectService" type: array type: object ResearchProjectTopicRequest: description: An array of ResearchProjectTopic objects properties: Data: items: $ref: "../../lib/swagger/defs/research-project-topic.yaml#/ResearchProjectTopic" type: array type: object ResearchProjectTopicResponse: description: An array of ResearchProjectTopic objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/research-project-topic.yaml#/ResearchProjectTopic" type: array type: object ResponseMeta: properties: Contact: description: Microservice Contact Info type: string Copyright: description: Copyright Info type: string License: description: License Information and Restrictions type: string OperationID: description: Operation ID type: string Pagination: $ref: "#/definitions/Pagination" RequestIP: description: Request IP Address type: string RequestType: description: Request Type type: string RequestURL: description: Request URL type: string ServerInfo: description: Data Server Info type: string ServerResponseTime: description: Data Server Response Time (ms) type: string ServerTimestamp: description: Backend Server Timestamp type: string ExternalAccount: description: Account Number used for recording transactions type: string type: object RoleRequest: description: An array of Role objects properties: Date: items: $ref: "../../lib/swagger/defs/role.yaml#/Role" type: array type: object RoleResponse: description: An array of Role objects properties: Data: items: $ref: "../../lib/swagger/defs/role.yaml#/Role" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object TemplateRequest: description: An array of Templates properties: Data: items: $ref: "../../lib/swagger/defs/template.yaml#/Template" type: array type: object TemplateResponse: description: An array of Templates properties: Data: items: $ref: "../../lib/swagger/defs/template.yaml#/Template" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object TenantRequest: description: An array of Tenant objects properties: Data: items: $ref: "../../lib/swagger/defs/tenant.yaml#/Tenant" type: array type: object TenantResponse: description: An array of Tenant objects properties: Data: items: $ref: "../../lib/swagger/defs/tenant.yaml#/Tenant" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object TicketRequest: description: An array of Ticket objects properties: Data: items: $ref: "../../lib/swagger/defs/ticket.yaml#/Ticket" type: array type: object TicketResponse: description: An array of Ticket objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/ticket.yaml#/Ticket" type: array type: object TransactionRequest: description: An array of Transaction objects properties: Data: items: $ref: "../../lib/swagger/defs/transaction.yaml#/Transaction" type: array type: object TransactionResponse: description: An array of Transaction objects properties: Meta: $ref: "#/definitions/ResponseMeta" Data: items: $ref: "../../lib/swagger/defs/transaction.yaml#/Transaction" type: array type: object UserRequest: properties: Data: items: $ref: "../../lib/swagger/defs/user.yaml#/User" type: array type: object UserResponse: description: An array of Print-Ready ingest Objects properties: Data: items: $ref: "../../lib/swagger/defs/user.yaml#/User" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object