openapi: 3.0.1
info:
  title: api
  version: 0.1.4
paths:
  /auth/v1/tokens:
    get:
      operationId: Authentication.listTokens
      tags:
        - Authentication
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthauthenticationList'
      security: &ref_0
        - BearerAuth: []
  /auth/v1/tokens/{id}:
    get:
      operationId: Authentication.getToken
      tags:
        - Authentication
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Authauthentication'
      security: *ref_0
    delete:
      operationId: Authentication.deleteToken
      tags:
        - Authentication
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
  /auth/v1/self:
    get:
      operationId: Authentication.getSelf
      tags:
        - Authentication
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Authauthentication'
      security: *ref_0
  /auth/v1/method/token:
    post:
      operationId: Authentication.createToken
      tags:
        - Authentication
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthauthenticationToken'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AuthauthenticationTokenCreateRequest'
  /api/v1/segments/{segmentKey}/constraints:
    post:
      operationId: Constraints.create
      tags:
        - Constraints
      parameters:
        - name: segmentKey
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Constraintsconstraint'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstraintsconstraintCreateRequest'
  /api/v1/segments/{segmentKey}/constraints/{id}:
    delete:
      operationId: Constraints.delete
      tags:
        - Constraints
      parameters:
        - name: segmentKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Constraints.update
      tags:
        - Constraints
      parameters:
        - name: segmentKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstraintsconstraintUpdateRequest'
  /api/v1/flags/{flagKey}/rules/{ruleId}/distributions:
    post:
      operationId: Distributions.create
      tags:
        - Distributions
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: ruleId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Distributionsdistribution'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DistributionsdistributionCreateRequest'
  /api/v1/flags/{flagKey}/rules/{ruleId}/distributions/{id}:
    delete:
      operationId: Distributions.delete
      tags:
        - Distributions
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: ruleId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: variantId
          in: query
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Distributions.update
      tags:
        - Distributions
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: ruleId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Distributionsdistribution'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DistributionsdistributionUpdateRequest'
  /api/v1/evaluate:
    post:
      operationId: Evaluation.evaluate
      tags:
        - Evaluation
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluateevaluationResponse'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvaluateevaluationRequest'
  /api/v1/batch-evaluate:
    post:
      operationId: Evaluation.batchEvaluate
      tags:
        - Evaluation
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluatebatchEvaluationResponse'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EvaluatebatchEvaluationRequest'
  /api/v1/flags:
    get:
      operationId: Flags.list
      tags:
        - Flags
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
        - name: pageToken
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlagsflagList'
      security: *ref_0
    post:
      operationId: Flags.create
      tags:
        - Flags
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Flagsflag'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagsflagCreateRequest'
  /api/v1/flags/{key}:
    get:
      operationId: Flags.get
      tags:
        - Flags
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Flagsflag'
      security: *ref_0
    delete:
      operationId: Flags.delete
      tags:
        - Flags
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Flags.update
      tags:
        - Flags
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Flagsflag'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FlagsflagUpdateRequest'
  /api/v1/flags/{flagKey}/rules:
    get:
      operationId: Rules.list
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
        - name: pageToken
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RulesruleList'
      security: *ref_0
    post:
      operationId: Rules.create
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rulesrule'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RulesruleCreateRequest'
  /api/v1/flags/{flagKey}/rules/order:
    put:
      operationId: Rules.order
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RulesruleOrder'
  /api/v1/flags/{flagKey}/rules/{id}:
    get:
      operationId: Rules.get
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Rulesrule'
      security: *ref_0
    delete:
      operationId: Rules.delete
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Rules.update
      tags:
        - Rules
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RulesruleUpdateRequest'
  /api/v1/segments:
    get:
      operationId: Segments.list
      tags:
        - Segments
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
        - name: offset
          in: query
          required: false
          schema:
            type: integer
        - name: pageToken
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SegmentssegmentList'
      security: *ref_0
    post:
      operationId: Segments.create
      tags:
        - Segments
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Segmentssegment'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegmentssegmentCreateRequest'
  /api/v1/segments/{key}:
    get:
      operationId: Segments.get
      tags:
        - Segments
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Segmentssegment'
      security: *ref_0
    delete:
      operationId: Segments.delete
      tags:
        - Segments
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Segments.update
      tags:
        - Segments
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Segmentssegment'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegmentssegmentUpdateRequest'
  /api/v1/flags/{flagKey}/variants:
    post:
      operationId: Variants.create
      tags:
        - Variants
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Variantsvariant'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VariantsvariantCreateRequest'
  /api/v1/flags/{flagKey}/variants/{id}:
    delete:
      operationId: Variants.delete
      tags:
        - Variants
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '204':
          description: ''
      security: *ref_0
    put:
      operationId: Variants.update
      tags:
        - Variants
      parameters:
        - name: flagKey
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Variantsvariant'
      security: *ref_0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VariantsvariantUpdateRequest'
components:
  schemas:
    AuthauthenticationMethod:
      type: string
      enum:
        - METHOD_NONE
        - METHOD_TOKEN
      description: The default is METHOD_NONE
    Authauthentication:
      type: object
      properties:
        id:
          type: string
        method:
          $ref: '#/components/schemas/AuthauthenticationMethod'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
        metadata:
          type: object
          additionalProperties:
            type: string
      required:
        - id
        - method
        - createdAt
        - updatedAt
        - metadata
    AuthauthenticationList:
      type: object
      properties:
        authentications:
          type: array
          items:
            $ref: '#/components/schemas/Authauthentication'
        nextPageToken:
          type: string
      required:
        - authentications
        - nextPageToken
    AuthauthenticationTokenCreateRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        expiresAt:
          type: string
          format: date-time
      required:
        - name
        - description
    AuthauthenticationToken:
      type: object
      properties:
        clientToken:
          type: string
        authentication:
          $ref: '#/components/schemas/Authauthentication'
      required:
        - clientToken
        - authentication
    CommonsPageable:
      type: object
      properties:
        nextPageToken:
          type: string
        totalCount:
          type: integer
    ConstraintsconstraintComparisonType:
      type: string
      enum:
        - UNKNOWN_COMPARISON_TYPE
        - STRING_COMPARISON_TYPE
        - NUMBER_COMPARISON_TYPE
        - BOOLEAN_COMPARISON_TYPE
      description: The default is UNKNOWN_COMPARISON_TYPE
    ConstraintsconstraintCreateRequest:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ConstraintsconstraintComparisonType'
        property:
          type: string
        operator:
          type: string
        value:
          type: string
      required:
        - type
        - property
        - operator
    Constraintsconstraint:
      type: object
      properties:
        id:
          type: string
        segmentKey:
          type: string
        type:
          $ref: '#/components/schemas/ConstraintsconstraintComparisonType'
        property:
          type: string
        operator:
          type: string
        value:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - segmentKey
        - type
        - property
        - operator
        - value
        - createdAt
        - updatedAt
    ConstraintsconstraintUpdateRequest:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ConstraintsconstraintComparisonType'
        property:
          type: string
        operator:
          type: string
        value:
          type: string
      required:
        - type
        - property
        - operator
    Distributionsdistribution:
      type: object
      properties:
        id:
          type: string
        ruleId:
          type: string
        variantId:
          type: string
        rollout:
          type: number
          format: double
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - ruleId
        - variantId
        - rollout
        - createdAt
        - updatedAt
    DistributionsdistributionCreateRequest:
      type: object
      properties:
        variantId:
          type: string
        rollout:
          type: number
          format: double
      required:
        - variantId
        - rollout
    DistributionsdistributionUpdateRequest:
      type: object
      properties:
        variantId:
          type: string
        rollout:
          type: number
          format: double
      required:
        - variantId
        - rollout
    EvaluateevaluationRequest:
      type: object
      properties:
        requestId:
          type: string
        flagKey:
          type: string
        entityId:
          type: string
        context:
          type: string
      required:
        - flagKey
        - entityId
        - context
    EvaluateevaluationResponse:
      type: object
      properties:
        requestId:
          type: string
        entityId:
          type: string
        requestContext:
          type: string
        match:
          type: boolean
        flagKey:
          type: string
        segmentKey:
          type: string
        timestamp:
          type: string
          format: date-time
        value:
          type: string
        requestDurationMillis:
          type: number
          format: double
        attachment:
          type: string
        reasons:
          $ref: '#/components/schemas/EvaluateevaluationReason'
      required:
        - requestId
        - entityId
        - requestContext
        - match
        - flagKey
        - segmentKey
        - timestamp
        - value
        - requestDurationMillis
        - attachment
        - reasons
    EvaluateevaluationReason:
      type: string
      enum:
        - UNKNOWN_EVALUATION_REASON
        - FLAG_DISABLED_EVALUATION_REASON
        - FLAG_NOT_FOUND_EVALUATION_REASON
        - MATCH_EVALUATION_REASON
        - ERROR_EVALUATION_REASON
    EvaluatebatchEvaluationRequest:
      type: object
      properties:
        requestId:
          type: string
        requests:
          type: array
          items:
            $ref: '#/components/schemas/EvaluateevaluationRequest'
        excludeNotFound:
          type: boolean
      required:
        - requests
    EvaluatebatchEvaluationResponse:
      type: object
      properties:
        requestId:
          type: string
        response:
          type: array
          items:
            $ref: '#/components/schemas/EvaluateevaluationResponse'
        requestDurationMillis:
          type: number
          format: double
      required:
        - requestId
        - response
        - requestDurationMillis
    FlagsflagList:
      type: object
      properties:
        flags:
          type: array
          items:
            $ref: '#/components/schemas/Flagsflag'
        nextPageToken:
          type: string
        totalCount:
          type: integer
      required:
        - flags
        - nextPageToken
        - totalCount
    Flagsflag:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        enabled:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        variants:
          type: array
          items:
            $ref: '#/components/schemas/Variantsvariant'
      required:
        - key
        - name
        - description
        - enabled
        - createdAt
        - updatedAt
        - variants
    FlagsflagCreateRequest:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        enabled:
          type: boolean
      required:
        - key
        - name
    FlagsflagUpdateRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        enabled:
          type: boolean
      required:
        - name
    RulesruleList:
      type: object
      properties:
        rules:
          type: array
          items:
            $ref: '#/components/schemas/Rulesrule'
        nextPageToken:
          type: string
        totalCount:
          type: integer
      required:
        - rules
        - nextPageToken
        - totalCount
    Rulesrule:
      type: object
      properties:
        id:
          type: string
        flagKey:
          type: string
        segmentKey:
          type: string
        distributions:
          type: array
          items:
            $ref: '#/components/schemas/Distributionsdistribution'
        rank:
          type: integer
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - flagKey
        - segmentKey
        - distributions
        - rank
        - createdAt
        - updatedAt
    RulesruleCreateRequest:
      type: object
      properties:
        segmentKey:
          type: string
        rank:
          type: integer
      required:
        - segmentKey
        - rank
    RulesruleOrder:
      type: object
      properties:
        ruleIds:
          type: array
          items:
            type: string
      required:
        - ruleIds
    RulesruleUpdateRequest:
      type: object
      properties:
        segmentKey:
          type: string
      required:
        - segmentKey
    SegmentssegmentList:
      type: object
      properties:
        segments:
          type: array
          items:
            $ref: '#/components/schemas/Segmentssegment'
        nextPageToken:
          type: string
        totalCount:
          type: integer
      required:
        - segments
        - nextPageToken
        - totalCount
    Segmentssegment:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        constraints:
          type: array
          items:
            $ref: '#/components/schemas/Constraintsconstraint'
        matchType:
          $ref: '#/components/schemas/SegmentssegmentMatchType'
      required:
        - key
        - name
        - description
        - createdAt
        - updatedAt
        - constraints
        - matchType
    SegmentssegmentMatchType:
      type: string
      enum:
        - ALL_MATCH_TYPE
        - ANY_MATCH_TYPE
    SegmentssegmentCreateRequest:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        matchType:
          $ref: '#/components/schemas/SegmentssegmentMatchType'
      required:
        - key
        - name
        - description
        - matchType
    SegmentssegmentUpdateRequest:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        matchType:
          $ref: '#/components/schemas/SegmentssegmentMatchType'
      required:
        - name
        - description
        - matchType
    Variantsvariant:
      type: object
      properties:
        id:
          type: string
        flagKey:
          type: string
        key:
          type: string
        name:
          type: string
        description:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        attachment:
          type: string
      required:
        - id
        - flagKey
        - key
        - name
        - description
        - createdAt
        - updatedAt
        - attachment
    VariantsvariantCreateRequest:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        attachment:
          type: string
      required:
        - key
    VariantsvariantUpdateRequest:
      type: object
      properties:
        key:
          type: string
        name:
          type: string
        description:
          type: string
        attachment:
          type: string
      required:
        - key
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
servers:
  - url: https://try.flipt.io
