Togai Price Plans API

Price Plan level calls

OpenAPI Specification

togai-price-plans-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  version: '1.0'
  title: Togai Apis Accounts Price Plans API
  contact:
    email: engg@togai.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  description: APIs for Togai App
servers:
- description: Api endpoint
  url: https://api.togai.com/
- description: Sandbox api endpoint
  url: https://sandbox-api.togai.com/
security:
- bearerAuth: []
tags:
- name: Price Plans
  description: Price Plan level calls
paths:
  /price_plans:
    post:
      tags:
      - Price Plans
      summary: Create a Price Plan
      description: 'This API let''s you create and price plan

        Learn more about [Price Plans](https://docs.togai.com/docs/priceplan)

        '
      operationId: createPricePlan
      parameters:
      - $ref: '#/components/parameters/dry_run'
      requestBody:
        $ref: '#/components/requestBodies/CreatePricePlanRequest'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    get:
      tags:
      - Price Plans
      summary: List Price Plans
      description: Get a list of price plans
      operationId: getPricePlans
      parameters:
      - $ref: '#/components/parameters/next_token'
      - $ref: '#/components/parameters/page_size'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanPaginatedResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /price_plans/{price_plan_id}:
    patch:
      tags:
      - Price Plans
      summary: Update a Price Plan
      description: 'Update an existing price plan

        Price Plans with status as DRAFT alone can be updated . Learn more about [Price plans](https://docs.togai.com/docs/priceplan) from our Guides

        '
      operationId: updatePricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      requestBody:
        $ref: '#/components/requestBodies/UpdatePricePlanRequest'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    get:
      tags:
      - Price Plans
      summary: Get a Price Plan
      description: Get a price plan details using price plan id
      operationId: getPricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      - $ref: '#/components/parameters/version_query'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
    delete:
      tags:
      - Price Plans
      summary: Archive a Price Plan
      description: Archive a price plan
      operationId: archivePricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      responses:
        '200':
          $ref: '#/components/responses/BaseSuccessResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /price_plans/{price_plan_id}/activate:
    post:
      tags:
      - Price Plans
      summary: Activate a Price Plan
      description: Activate a price plan details using price plan id
      operationId: activatePricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      requestBody:
        $ref: '#/components/requestBodies/ActivatePricePlanRequest'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /price_plans/{price_plan_id}/currencies:
    post:
      tags:
      - Price Plans
      summary: Add Currencies to a Price Plan
      description: Add currencies to a price plan
      operationId: addCurrencyToPricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      requestBody:
        $ref: '#/components/requestBodies/AddCurrencyToPricePlanRequest'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /price_plans/{price_plan_id}/currencies/{currency_id}:
    delete:
      tags:
      - Price Plans
      summary: Remove a Draft Currency From a Price Plan
      description: Remove a draft currency from a price plan
      operationId: removeCurrencyFromPricePlan
      parameters:
      - $ref: '#/components/parameters/price_plan_id'
      - $ref: '#/components/parameters/currency_id'
      responses:
        '200':
          $ref: '#/components/responses/PricePlanResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
  /price_plans/migration:
    post:
      tags:
      - Price Plans
      summary: Create a Price Plan Migration
      description: "Migrates accounts across price plans. This is an asynchronous process functioning on top of Togai's Jobs \nframework. Status of the created migrations can be obtained using the [Jobs APIs](https://docs.togai.com/api-reference/jobs/get-the-status-of-a-job)\n"
      operationId: pricePlanMigration
      requestBody:
        $ref: '#/components/requestBodies/CreatePricePlanMigrationRequest'
      responses:
        '201':
          $ref: '#/components/responses/BaseSuccessResponse'
        '400':
          $ref: '#/components/responses/ErrorResponse'
        '401':
          $ref: '#/components/responses/ErrorResponse'
        '403':
          $ref: '#/components/responses/ErrorResponse'
        '404':
          $ref: '#/components/responses/ErrorResponse'
        '429':
          $ref: '#/components/responses/ErrorResponse'
        default:
          $ref: '#/components/responses/ErrorResponse'
components:
  responses:
    BaseSuccessResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BaseSuccessResponse'
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            ErrorResponse:
              summary: Error Message
              value:
                message: <Reason message>
    PricePlanPaginatedResponse:
      description: Response for list price plans request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PricePlanPaginatedResponse'
          examples:
            PricePlanPaginatedResponse:
              $ref: '#/components/examples/PricePlanPaginatedResponse'
    PricePlanResponse:
      description: Response for Create and Get price plan requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PricePlan'
          examples:
            PricePlanResponse:
              $ref: '#/components/examples/PricePlan'
  schemas:
    LicenseRateCardConfig:
      title: LicenseRateCardConfig
      type: object
      properties:
        maxQuantity:
          description: Max allowed quantity for a particular license in a price plan
          type: integer
          format: int64
          example: 100
        maxQuantityBreachAction:
          $ref: '#/components/schemas/MaxQuantityBreachAction'
    FixedFeeRateCard:
      title: FixedFeeRateCard
      type: object
      required:
      - id
      - rateValues
      - enableProration
      properties:
        id:
          description: Unique Identifier of the attached AddOn
          type: string
          maxLength: 50
        displayName:
          type: string
          description: Name of the attached AddOn
        tag:
          type: string
          description: A tag string to group fixedFeeRateCards
        invoiceTiming:
          $ref: '#/components/schemas/InvoiceTiming'
        type:
          $ref: '#/components/schemas/FixedFeeType'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/CurrencyRateValue'
        enableProration:
          type: boolean
          example: false
        recurrenceConfig:
          $ref: '#/components/schemas/RecurrenceConfig'
    CreatePricingRule:
      type: object
      additionalProperties: false
      required:
      - order
      - name
      - computation
      - action
      properties:
        name:
          description: Name of the pricing rule
          type: string
        order:
          description: Order of the pricing rule
          type: integer
          format: int32
        invoiceTiming:
          $ref: '#/components/schemas/PricingRuleTiming'
        condition:
          description: JSON logic condition deciding whether to compute this pricing rule or not
          type: string
        computation:
          description: JSON logic to be computed
          type: string
        action:
          description: JSON logic to be computed
          title: action
          $ref: '#/components/schemas/PricingRuleAction'
    FixedFeeType:
      type: string
      enum:
      - ONE_TIME
      - RECURRING
      description: Fixed fee applies either for a one-time occurrence or for each cycle.
    pricePlanMigrationConfig:
      description: Migrate all account associations of a price plan to another price plan
      type: object
      additionalProperties: false
      required:
      - sourceId
      - sourceVersion
      - migrationMode
      properties:
        sourceId:
          description: Id of source price plan
          type: string
          maxLength: 255
        sourceVersion:
          description: Version of the source price plan
          type: integer
          format: int32
        targetId:
          description: Id of target price plan
          type: string
          maxLength: 255
        targetVersion:
          description: Version of the target price plan
          type: integer
          format: int32
        migrationMode:
          type: string
          enum:
          - IMMEDIATE
          - IMMEDIATE_IGNORE_OVERRIDE
          - NEXT_CYCLE
          - NEXT_CYCLE_IGNORE_OVERRIDE
        retainStartOffsets:
          type: boolean
          description: "If this flag is true, current pricing cycle of the account on the date of association will continue rather \nthan the configurations of the newly associated price plan. Pricing cycle overrides specified  using \n`pricePlanDetailsOverride` will take precedence over the pricing cycle configurations of \nthe new price plan that the account needs to migrate to. PricingCycleInterval of the existing plan and \nthe new plan must be same for this to work. We'll return a `400 BadRequest` otherwise.\nExamples:\n  - Ongoing plan (1st Oct to 30th Oct) - {dayOffset: 1, monthOffset: NIL}\n    New association (15th Oct to 15th Nov) of different price plan with retainStartOffsets option true \n    will use the same pricing cycle configuration {dayOffset: 1, monthOffset: NIL} rather than using the\n    pricing cycle configuration of the new price plan that the account needs to migrate to.\n  - Ongoing plan (1st Oct to 30th Oct) - {dayOffset: 1, monthOffset: NIL}\n    New association (1st Nov to 30th Nov) of different price plan with retainStartOffsets option true will\n    throw a `400 BadRequest` as no existing price plan configuration found on date of association\n"
    BillingConfig:
      type: object
      properties:
        interval:
          description: Represents the number of pricing cycles after which the rate card will be billed
          type: integer
          format: int64
          example: 3
        startOffset:
          description: Represents the offset for pricing cycles after which the rate card will be billed
          type: integer
          format: int64
          example: 5
    SlabDetail:
      type: object
      description: The details of a slab
      additionalProperties: false
      required:
      - startAfter
      - priceType
      - rate
      properties:
        startAfter:
          type: number
        priceType:
          $ref: '#/components/schemas/PriceType'
        slabConfig:
          type: object
          additionalProperties:
            type: string
        rate:
          type: number
        slabRateConfig:
          type: object
          additionalProperties:
            type: string
    ActivatePricePlanRequest:
      description: Request to activate currencies of a price plan
      type: object
      additionalProperties: false
      required:
      - currencies
      properties:
        currencies:
          description: List of currencies to activate
          type: array
          uniqueItems: true
          items:
            type: string
            minLength: 1
    CreatePricePlanDetails:
      type: object
      additionalProperties: false
      required:
      - supportedCurrencies
      properties:
        pricingCycleConfig:
          description: Configuration for pricing cycle
          $ref: '#/components/schemas/PricingCycleConfig'
        supportedCurrencies:
          description: List of currencies supported by the price plan
          type: array
          uniqueItems: true
          items:
            type: string
        usageRateCards:
          description: List of usage rate cards
          type: array
          items:
            $ref: '#/components/schemas/UsageRateCard'
        fixedFeeRateCards:
          type: array
          items:
            $ref: '#/components/schemas/FixedFeeRateCard'
        licenseRateCards:
          type: array
          items:
            $ref: '#/components/schemas/LicenseRateCard'
        billingEntitlementRateCards:
          type: array
          items:
            $ref: '#/components/schemas/BillingEntitlementRateCard'
        minimumCommitment:
          $ref: '#/components/schemas/MinimumCommitment'
        creditGrantRateCards:
          type: array
          items:
            $ref: '#/components/schemas/CreditGrantRateCard'
        entitlementOverageRateCards:
          type: array
          items:
            $ref: '#/components/schemas/EntitlementOverageRateCard'
        deferredRevenue:
          description: "This option can be enabled while creating a price plan to opt for deferred revenue finalization.\ni.e, Togai will assume that the price plan may change any time during the pricing cycle and \nthereby does not compute the revenue in near-real time. \nThis gives the flexibility of editing rate cards in price plan from beginning of the pricing cycle.\nEnabling this mode comes with the following limitations.\n1. Following rate cards are not supported under a `deferredRevenue` plan\n    * creditGrantRateCards,\n    * billingEntitlementRateCards,\n    * entitlementOverageRateCards,\n    * IN_ADVANCE fixedFeeRateCards,\n    * IN_ADVANCE licenseRateCards\n2. Metrics API return revenue metrics only after the grace period of the account's pricing cycle \n(i.e, only once the invoice becomes DUE)\n"
          type: boolean
    MaxQuantityBreachAction:
      type: string
      enum:
      - DO_NOTHING
      description: "Action to be taken when the license maxQuantity is breached: \n- `DO_NOTHING`: Refrain from granting any new licenses.\n"
    PricePlanListData:
      description: Data of price plan list
      type: object
      additionalProperties: false
      required:
      - id
      - name
      - version
      - pricePlanDetails
      - status
      - usageMeters
      - createdAt
      - updatedAt
      - type
      properties:
        id:
          description: Identifier of price plan
          type: string
          maxLength: 50
        name:
          type: string
          description: Name of the price plan
          maxLength: 50
        version:
          type: integer
          format: int32
          description: Version of the price plan
        description:
          description: Description of price plan
          type: string
          maxLength: 255
        status:
          description: Status of Price plan
          type: string
          enum:
          - DRAFT
          - ACTIVE
          - ARCHIVED
        usageMeters:
          type: array
          description: Usage meters id linked to the price plan
          items:
            type: string
        pricePlanDetails:
          $ref: '#/components/schemas/PricePlanDetails'
        pricingRules:
          type: array
          items:
            $ref: '#/components/schemas/PricingRule'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        type:
          $ref: '#/components/schemas/PricePlanType'
    PaginationOptions:
      type: object
      additionalProperties: false
      properties:
        pageSize:
          type: integer
        sortOrder:
          type: string
          enum:
          - ASC
          - DESC
    CreatePricePlanDetailsOverride:
      type: object
      properties:
        pricingCycleConfig:
          $ref: '#/components/schemas/PricingCycleConfig'
        supportedCurrencies:
          type: array
          uniqueItems: true
          minItems: 1
          items:
            type: string
        usageRateCards:
          type: array
          items:
            $ref: '#/components/schemas/UsageRateCard'
        billingEntitlementRateCards:
          type: array
          items:
            $ref: '#/components/schemas/BillingEntitlementRateCard'
        entitlementOverageRateCards:
          type: array
          items:
            $ref: '#/components/schemas/EntitlementOverageRateCard'
        fixedFeeRateCards:
          type: array
          items:
            $ref: '#/components/schemas/FixedFeeRateCard'
        licenseRateCards:
          type: array
          items:
            $ref: '#/components/schemas/LicenseRateCard'
        minimumCommitment:
          $ref: '#/components/schemas/MinimumCommitment'
        creditGrantRateCards:
          type: array
          items:
            $ref: '#/components/schemas/CreditGrantRateCard'
    PricingSchedule:
      type: object
      description: Represents effectiveness period and config of a price plan. i.e, price plan bound by time.
      additionalProperties: false
      required:
      - id
      - startDate
      - endDate
      - version
      - isOverriden
      properties:
        id:
          type: string
        pricePlanDetails:
          $ref: '#/components/schemas/PricePlanDetails'
        startDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        version:
          type: integer
          format: int32
          minimum: 1
        pricingRules:
          type: array
          items:
            $ref: '#/components/schemas/PricingRule'
        isOverriden:
          type: boolean
    CreatePricePlanRequest:
      description: Request to create a price plan
      type: object
      additionalProperties: false
      required:
      - name
      - pricePlanDetails
      properties:
        name:
          type: string
          description: Name of the price plan
          maxLength: 50
        description:
          description: Description of price plan
          type: string
          maxLength: 255
        type:
          $ref: '#/components/schemas/PricePlanType'
        pricePlanDetails:
          $ref: '#/components/schemas/CreatePricePlanDetails'
        pricingRules:
          type: array
          items:
            $ref: '#/components/schemas/CreatePricingRule'
    LicenseRateCard:
      title: LicenseRateCard
      type: object
      required:
      - id
      - rateValues
      - ratePlan
      - enableProration
      properties:
        id:
          description: Unique Identifier of the attached AddOn
          type: string
          maxLength: 50
        type:
          $ref: '#/components/schemas/AddOnType'
        displayName:
          type: string
          description: Name of the attached AddOn
        tag:
          type: string
          description: A tag string to group licenseRateCards
        invoiceTiming:
          $ref: '#/components/schemas/InvoiceTiming'
        usageCycle:
          $ref: '#/components/schemas/UsageCycleInterval'
        enableProration:
          type: boolean
          example: false
        config:
          $ref: '#/components/schemas/LicenseRateCardConfig'
        ratePlan:
          $ref: '#/components/schemas/RatePlan'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/RateValue'
        proratedRefundMode:
          $ref: '#/components/schemas/ProratedRefundMode'
    PricingRuleAction:
      type: object
      additionalProperties: false
      required:
      - type
      properties:
        type:
          type: string
          enum:
          - ADD
          - UPDATE
        target:
          type: string
        id:
          type: string
        description:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
    FeatureConfig:
      description: Feature configuration object
      type: object
      additionalProperties: false
      required:
      - effectiveUntil
      - featureCreditLimit
      properties:
        effectiveFrom:
          type: string
          format: duration
        effectiveUntil:
          type: string
          format: duration
        featureCreditLimit:
          type: number
          minimum: 0
    PricingCycleInterval:
      type: string
      description: Interval field allow you to define the billing interval you would like to set
      enum:
      - WEEKLY
      - MONTHLY
      - QUARTERLY
      - HALF_YEARLY
      - ANNUALLY
    PricePlanPaginatedResponse:
      type: object
      required:
      - data
      additionalProperties: false
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PricePlanListData'
        nextToken:
          type: string
        context:
          $ref: '#/components/schemas/PaginationOptions'
    PricePlanDetails:
      type: object
      required:
      - supportedCurrencies
      - activeCurrencies
      properties:
        supportedCurrencies:
          type: array
          uniqueItems: true
          items:
            type: string
        activeCurrencies:
          type: array
          uniqueItems: true
          readOnly: true
          items:
            type: string
        pricingCycleConfig:
          $ref: '#/components/schemas/PricingCycleConfig'
        usageRateCards:
          type: array
          items:
            $ref: '#/components/schemas/UsageRateCard'
        fixedFeeRateCards:
          type: array
          items:
            $ref: '#/components/schemas/FixedFeeRateCard'
        licenseRateCards:
          type: array
          items:
            $ref: '#/components/schemas/LicenseRateCard'
        billingEntitlementRateCards:
          type: array
          items:
            $ref: '#/components/schemas/BillingEntitlementRateCard'
        entitlementOverageRateCards:
          type: array
          items:
            $ref: '#/components/schemas/EntitlementOverageRateCard'
        minimumCommitment:
          $ref: '#/components/schemas/MinimumCommitment'
        creditGrantRateCards:
          type: array
          items:
            $ref: '#/components/schemas/CreditGrantRateCard'
        type:
          $ref: '#/components/schemas/PricePlanType'
        deferredRevenue:
          type: boolean
    BillingEntitlementRateCard:
      description: Billing Entitlement rate card
      type: object
      additionalProperties: false
      required:
      - featureId
      - featureConfigs
      - ratePlan
      - rateValues
      - invoiceTiming
      properties:
        featureId:
          type: string
        featureConfigs:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/FeatureConfig'
        tag:
          type: string
          description: A tag string to group rate cards
        invoiceTiming:
          $ref: '#/components/schemas/InvoiceTiming'
        displayName:
          type: string
          description: Name your rate card, this will be used in invoice
        ratePlan:
          $ref: '#/components/schemas/RatePlan'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/RateValue'
        recurrenceConfig:
          $ref: '#/components/schemas/RecurrenceConfig'
    PricingRuleTiming:
      type: string
      enum:
      - IN_ADVANCE
      - IN_ARREARS
      x-enum-varnames:
      - IN_ADVANCE
      - IN_ARREARS
      description: 'If IN_ADVANCE, the rule will be applied on rate cards with invoice timing IN_ADVANCE .

        If IN_ARREARS, the rule will be applied on rate cards with invoice timing IN_ARREARS .

        '
    CreatePricePlanMigrationRequest:
      description: Request to create price plan migration request
      allOf:
      - $ref: '#/components/schemas/pricePlanMigrationConfig'
      - type: object
        properties:
          requireConfirmation:
            description: 'This field specifies whether to process job or to wait till the job is confirmed. Default value: false

              '
            type: boolean
    UsageCycleInterval:
      type: string
      description: "UsageCycleInterval field allows you to treat the billing interval as many smaller windows. Revenue is calculated for\neach of the windows (usage cycles) and their sum is considered as the billing interval revenue.\nExample: 1 Named License being used across entire billing interval. Rate Value: $1/license\nCASE 1: Without usage cycle. $1 is charged for the entire billing cycle.\nCASE 2: Usage cycle is configure to be WEEKLY and the billing interval has 4 weeks. In this case $1 is charged \nfor each week totalling to $4 across for the billing interval\n"
      enum:
      - WEEKLY
      - MONTHLY
      - QUARTERLY
      - HALF_YEARLY
      - ANNUALLY
    AddOnType:
      type: string
      enum:
      - LICENSE
      - FIXED_FEE
      - CREDIT_GRANT
      - NAMED_LICENSE
      description: 'LICENSE: Addon can be used in license rate cards

        FIXED_FEE: Addon can be used in fixed fee rate cards

        CREDIT_GRANT: Addon can be used in credit grant rate cards

        NAMED_LICENSE: Addon can be used in license rate cards

        '
    CreditGrantType:
      type: string
      enum:
      - ONE_TIME
      - RECURRING
      description: Credit grant applies either for a one-time occurrence or for each cycle.
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
      - message
      properties:
        message:
          type: string
          description: error description
          maxLength: 500
    UpdatePricePlanRequest:
      description: Request to update a price plan
      type: object
      additionalProperties: false
      properties:
        description:
          description: Description of price plan
          type: string
          maxLength: 255
        pricePlanDetails:
          $ref: '#/components/schemas/CreatePricePlanDetailsOverride'
        migrationMode:
          type: string
          enum:
          - IMMEDIATE
          - IMMEDIATE_IGNORE_OVERRIDE
          - NEXT_CYCLE
          - NEXT_CYCLE_IGNORE_OVERRIDE
          - NONE
        versionsToMigrate:
          type: string
          enum:
          - LATEST_VERSION
          - ALL_VERSION
        pricingRules:
          type: array
          items:
            $ref: '#/components/schemas/CreatePricingRule'
    PricingRule:
      type: object
      description: Represents pricing rules of a price plan. i.e, price plan bound by time.
      additionalProperties: false
      required:
      - id
      - name
      - version
      - order
      - computation
      - action
      properties:
        id:
          type: string
        name:
          type: string
        version:
          type: integer
          format: int32
          minimum: 1
        invoiceTiming:
          $ref: '#/components/schemas/PricingRuleTiming'
        order:
          type: integer
          format: int32
          minimum: 1
        condition:
          description: JSON logic condition deciding whether to compute this pricing rule or not
          type: string
        computation:
          description: JSON logic to be computed
          type: string
        action:
          description: JSON logic to be computed
          title: action
          $ref: '#/components/schemas/PricingRuleAction'
    UsageRateCard:
      type: object
      required:
      - usageMeterId
      - ratePlan
      - rateValues
      properties:
        displayName:
          type: string
          description: Name your rate card, this will be displayed in the Togai App
        tag:
          type: string
          description: A tag string to group usageRateCards
        usageMeterId:
          type: string
          example: um.1zYnCiM9Bpg.1zYn
        ratePlan:
          $ref: '#/components/schemas/RatePlan'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/RateValue'
    PricingCycleConfig:
      type: object
      description: Represents configurations related to pricing cycle
      required:
      - interval
      - gracePeriod
      properties:
        interval:
          $ref: '#/components/schemas/PricingCycleInterval'
        startOffset:
          type: object
          description: "Represents the start of pricing cycle in terms of\n - dayOffset - number of days from beginning of week / month and\n - monthOffset - number of months from beginning of interval (quarter, half-year or year)\nNote: If a day with offset doesn't exist for a month, closest previous day is considered\nExamples:\nWEEKLY -\n  - {dayOffset: 1, monthO

# --- truncated at 32 KB (72 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/togai/refs/heads/main/openapi/togai-price-plans-api-openapi.yml