swagger: "2.0"
info:
  version: 0.3.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:
    type: apiKey
    in: header
    name: Cookie
    description: >
      Include a Cookie header containing kvSession=<JWT>. Example:
        Cookie: kvSession=eyJhbGciOiJFZERTQSJ9...
schemes:
  - "https"
basePath: "/vk/members/v1"
host: "gw.tnxs.net"
consumes:
  - "application/json"
produces:
  - "application/json"
parameters:
  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"
  WebhookClerkRequest:
    description: An array of new WebhookClerk records
    in: body
    name: webhookclerkRequest
    required: true
    schema:
      $ref: "#/definitions/WebhookClerkRequest"
  activeQuery:
    description: Retrieve active records only?
    in: query
    name: active
    required: false
    type: boolean
  auth0UserIdQuery:
    description: External Auth0 User ID
    in: query
    name: auth0UserId
    required: false
    type: string
  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
  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"
  WebhookClerkResponse:
    description: WebhookClerk Response Object
    schema:
      $ref: "#/definitions/WebhookClerkResponse"
paths:
  /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=<jwt>; HttpOnly; Secure; SameSite=None; Domain=.keenanvision.net; Path=/; Max-Age=5400
          schema:
            $ref: "#/responses/UserResponse"
        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
        401:
          $ref: "#/responses/Unauthorized"

  /sessions/current:
    delete:
      tags: [sessions]
      summary: Delete current session (log out)
      operationId: deleteSession
      security:
        - kvSessionCookie: []
      responses:
        204:
          description: Logged out; kvSession cookie cleared
        401:
          $ref: "#/responses/Unauthorized"

  /sessions/me:
    get:
      tags: [sessions]
      summary: Get current user
      operationId: getMe
      security:
        - kvSessionCookie: []
      responses:
        200:
          description: Current user profile
          schema:
            $ref: "#/responses/UserResponse"
        401:
          $ref: "#/responses/Unauthorized"

  /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/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/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: Async onboard new users
      tags:
        - Users
  /webhooks/clerk:
    post:
      description: Clerk webhook
      operationId: postWebhooksClerk
      parameters:
        - $ref: "#/parameters/WebhookClerkRequest"
      responses:
        "201":
          $ref: "#/responses/WebhookClerkResponse"
        "401":
          $ref: "#/responses/Unauthorized"
        "403":
          $ref: "#/responses/AccessForbidden"
        "404":
          $ref: "#/responses/NotFound"
        "422":
          $ref: "#/responses/UnprocessableEntity"
        "500":
          $ref: "#/responses/ServerError"
      summary: Clerk webhook
      tags:
        - Webhooks
  /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/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:
  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
  WebhookClerkRequest:
    description: Clerk webhook object
    properties:
      object:
        type: string
      type:
        description: Clerk Name
        type: string
      data:
        type: object
    type: object
  ClerkUser:
    description: Clerk user object
    type: object
    properties:
      external_id:
        type: string
        x-nullable: true
        description: |-
          The ID of the user as used in your external systems or your previous authentication solution.
          Must be unique across your instance.
      first_name:
        type: string
        x-nullable: true
        description: The first name to assign to the user
      last_name:
        type: string
        x-nullable: true
        description: The last name to assign to the user
      email_address:
        type: array
        items:
          type: string
        x-nullable: true
        description: |-
          Email addresses to add to the user.
          Must be unique across your instance.
          The first email address will be set as the user's primary email address.
      phone_number:
        type: array
        items:
          type: string
        x-nullable: true
        description: |-
          Phone numbers to add to the user.
          Must be unique across your instance.
          The first phone number will be set as the user's primary phone number.
      web3_wallet:
        type: array
        items:
          type: string
        x-nullable: true
        description: |-
          Web3 wallets to add to the user.
          Must be unique across your instance.
          The first wallet will be set as the user's primary wallet.
      username:
        type: string
        x-nullable: true
        description: |-
          The username to give to the user.
          It must be unique across your instance.
      password:
        type: string
        x-nullable: true
        description: |-
          The plaintext password to give the user.
          Must be at least 8 characters long, and can not be in any list of hacked passwords.
      password_digest:
        type: string
        x-nullable: true
        description: |-
          In case you already have the password digests and not the passwords, you can use them for the newly created user via this property.
          The digests should be generated with one of the supported algorithms.
          The hashing algorithm can be specified using the `password_hasher` property.
      password_hasher:
        type: string
        x-nullable: true
        description: |-
          The hashing algorithm that was used to generate the password digest.
          The algorithms we support at the moment are [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), md5, pbkdf2_sha256, [pbkdf2_sha256_django](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [scrypt_firebase](https://firebaseopensource.com/projects/firebase/scrypt/) and 2 [argon2](https://argon2.online/) variants, argon2i and argon2id.
          Each of the above expects the incoming digest to be of a particular format.

          More specifically:

          **bcrypt:** The digest should be of the following form:

          `$<algorithm version>$<cost>$<salt & hash>`

          **md5:** The digest should follow the regular form e.g.:

          `5f4dcc3b5aa765d61d8327deb882cf99`

          **pbkdf2_sha256:** This is the PBKDF2 algorithm using the SHA256 hashing function. The format should be as follows:

          `pbkdf2_sha256$<iterations>$<salt>$<hash>`

          Note: Both the salt and the hash are expected to be base64-encoded.

          **pbkdf2_sha256_django:** This is the Django-specific variant of PBKDF2 and the digest should have the following format (as exported from Django):

          `pbkdf2_sha256$<iterations>$<salt>$<hash>`

          Note: The salt is expected to be un-encoded, the hash is expected base64-encoded.

          **pbkdf2_sha1:** This is similar to pkbdf2_sha256_django, but with two differences:
          1. uses sha1 instead of sha256
          2. accepts the hash as a hex-encoded string

          The format is the following:

          `pbkdf2_sha1$<iterations>$<salt>$<hash-as-hex-string>`


          **scrypt_firebase:** The Firebase-specific variant of scrypt.
          The value is expected to have 6 segments separated by the $ character and include the following information:

          _hash:_ The actual Base64 hash. This can be retrieved when exporting the user from Firebase.
          _salt:_ The salt used to generate the above hash. Again, this is given when exporting the user.
          _signer key:_ The base64 encoded signer key.
          _salt separator:_ The base64 encoded salt separator.
          _rounds:_ The number of rounds the algorithm needs to run.
          _memory cost:_ The cost of the algorithm run

          The first 2 (hash and salt) are per user and can be retrieved when exporting the user from Firebase.
          The other 4 values (signer key, salt separator, rounds and memory cost) are project-wide settings and can be retrieved from the project's password hash parameters.

          Once you have all these, you can combine it in the following format and send this as the digest in order for Clerk to accept it:

          `<hash>$<salt>$<signer key>$<salt separator>$<rounds>$<memory cost>`

          **argon2i:** Algorithms in the argon2 family generate digests that encode the following information:

          _version (v):_ The argon version, version 19 is assumed
          _memory (m):_ The memory used by the algorithm (in kibibytes)
          _iterations (t):_ The number of iterations to perform
          _parallelism (p):_ The number of threads to use

          Parts are demarcated by the `$` character, with the first part identifying the algorithm variant.
          The middle part is a comma-separated list of the encoding options (memory, iterations, parallelism).
          The final part is the actual digest.

          `$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc`

          **argon2id:** See the previous algorithm for an explanation of the formatting.

          For the argon2id case, the value of the algorithm in the first part of the digest is `argon2id`:

          `$argon2id$v=19$m=64,t=4,p=8$Z2liZXJyaXNo$iGXEpMBTDYQ8G/71tF0qGjxRHEmR3gpGULcE93zUJVU`

          If you need support for any particular hashing algorithm, [please let us know](https://clerk.com/support).
        enum:
          - bcrypt
          - md5
          - pbkdf2_sha256
          - pbkdf2_sha256_django
          - pbkdf2_sha1
          - scrypt_firebase
          - argon2i
          - argon2id
      skip_password_checks:
        type: boolean
        description: |-
          When set to `true` all password checks are skipped.
          It is recommended to use this method only when migrating plaintext passwords to Clerk.
          Upon migration the user base should be prompted to pick stronger password.
      skip_password_requirement:
        type: boolean
        description: |-
          When set to `true`, `password` is not required anymore when creating the user and can be omitted.
          This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
          Please note that you cannot use this flag if password is the only way for a user to sign into your instance.
      totp_secret:
        type: string
        x-nullable: true
        description: |-
          In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
          Please note that currently the supported options are:
          * Period: 30 seconds
          * Code length: 6 digits
          * Algorithm: SHA1
      backup_codes:
        type: array
        items:
          type: string
        x-nullable: true
        description: |-
          If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
          You must provide the backup codes in plain format or the corresponding bcrypt digest.
      public_metadata:
        type: object
        description: Metadata saved on the user, that is visible to both
          your Frontend and Backend APIs
      private_metadata:
        type: object
        description: Metadata saved on the user, that is only visible to
          your Backend API
      unsafe_metadata:
        type: object
        description: |-
          Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
          Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
      created_at:
        type: string
        x-nullable: true
        description: A custom date/time denoting _when_ the user signed
          up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
  WebhookClerkResponse:
    description: Clerk webhook object
    properties:
      object:
        type: string
        x-nullable: true
      type:
        description: Clerk Name
        type: string
        x-nullable: true
      data:
        type: object
    type: object
