> ## Documentation Index
> Fetch the complete documentation index at: https://docs.togai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# (DEPRECATED) Update a price plan

> 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


<Warning>
  <b>Deprecated:</b> This API is deprecated and will be removed in a future release. Please use the [Update a price plan V2 API](../priceplanv2/update-a-price-plan) instead for updated functionality.
</Warning>


## OpenAPI

````yaml patch /price_plans/{price_plan_id}
openapi: 3.0.3
info:
  version: '1.0'
  title: Togai Apis
  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: Customers
    description: Customer level calls
  - name: Accounts
    description: Account level calls
  - name: Event Schemas
    description: Event Schema level calls
  - name: Usage Meters
    description: Usage Meter level calls
  - name: Price Plans
    description: (DEPRECATED) Price Plan level calls
  - name: PricePlanV2
    description: Price Plan V2 level calls
  - name: Schedules
    description: Account Schedule level calls
  - name: Pricing Rules
    description: Pricing Rules level calls
  - name: Settings
    description: Settings
  - name: Price Experimentation
    description: Price Experimentation apis
  - name: InvoiceGroups
    description: Invoice Group level calls
  - name: Organization
    description: Organization level calls
  - name: FileStorage
    description: File Storage level calls
  - name: Aliases
    description: Alias level calls
  - name: Reports
    description: Report level calls
  - name: ReportTemplates
    description: Report Template level calls
  - name: Customer Portal
    description: Portal level calls
  - name: Alerts
    description: Alert level calls
  - name: Event Management
    description: APIs for getting events ingested in Togai
    externalDocs:
      description: docs
      url: https://togai.com/docs/billing/events
  - name: Metrics
    description: APIs for getting Togai metrics
    externalDocs:
      description: docs
      url: https://togai.com/docs/metrics
  - name: Licenses
    description: APIs for getting or updating license records in Togai
  - name: Entitlements
    description: APIs related to entitlements
  - name: Invoices
    description: Invoices API
  - name: Credits
    description: Credits API
  - name: Wallet
    description: Wallet API
  - name: InvoiceTemplates
    description: InvoiceTemplates API
  - name: InvoiceSequence
    description: InvoiceSequence API
  - name: Payments
    description: Payments API
  - name: Authentication
    description: Authentication API
externalDocs:
  description: Find out more about Togai
  url: https://docs.togai.com/docs
paths:
  /price_plans/{price_plan_id}:
    patch:
      tags:
        - Price Plans
      summary: (DEPRECATED) 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'
components:
  parameters:
    price_plan_id:
      in: path
      name: price_plan_id
      required: true
      schema:
        type: string
        maxLength: 50
        example: pp.1zYnCiM9Bpg.lv25y
  requestBodies:
    UpdatePricePlanRequest:
      description: Payload to update price plan
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdatePricePlanRequest'
          examples:
            UpdatePricePlanRequest:
              $ref: '#/components/examples/UpdatePricePlanRequest'
  responses:
    PricePlanResponse:
      description: Response for Create and Get price plan requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PricePlan'
          examples:
            PricePlanResponse:
              $ref: '#/components/examples/PricePlan'
    ErrorResponse:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            ErrorResponse:
              summary: Error message
              value:
                message: <Reason message>
  schemas:
    UpdatePricePlanRequest:
      allOf:
        - $ref: '#/components/schemas/FinalizePricePlanRequest'
        - 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'
            pricingRules:
              type: array
              items:
                $ref: '#/components/schemas/CreatePricingRule'
    PricePlan:
      description: Price plan entity
      type: object
      additionalProperties: false
      required:
        - id
        - name
        - type
        - status
        - pricingSchedule
      properties:
        id:
          type: string
          description: Price plan id
        name:
          type: string
          description: Name of the price plan
          maxLength: 50
        type:
          $ref: '#/components/schemas/PricePlanType'
        description:
          description: Description of price plan
          type: string
          maxLength: 255
        status:
          description: Status of Price plan
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - ARCHIVED
        pricingSchedule:
          type: array
          items:
            $ref: '#/components/schemas/PricingSchedule'
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - message
      properties:
        message:
          type: string
          description: error description
          maxLength: 500
    FinalizePricePlanRequest:
      description: Request to finalize a price plan version
      type: object
      additionalProperties: false
      properties:
        migrationMode:
          $ref: '#/components/schemas/MigrationMode'
        versionsToMigrate:
          $ref: '#/components/schemas/VersionsToMigrate'
    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'
    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:
          $ref: '#/components/schemas/PricingRuleAction'
    PricePlanType:
      type: string
      description: Type of price plan
      enum:
        - BILLING
        - PURCHASE
    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
    MigrationMode:
      type: string
      enum:
        - IMMEDIATE
        - IMMEDIATE_IGNORE_OVERRIDE
        - NEXT_CYCLE
        - NEXT_CYCLE_IGNORE_OVERRIDE
        - NONE
        - START_OF_CURRENT_CYCLE
    VersionsToMigrate:
      type: string
      enum:
        - LATEST_VERSION
        - ALL_VERSION
    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
             - dayOffset - number of days from beginning of week / month and
             - monthOffset - number of months from beginning of interval (quarter, half-year or year)
            Note: If a day with offset doesn't exist for a month, closest
            previous day is considered

            Examples:

            WEEKLY -
              - {dayOffset: 1, monthOffset: NIL} - First day of every week (Monday)
              - {dayOffset: 3, monthOffset: NIL} - 3rd day of every week (Wednesday)
              - {dayOffset: LAST, monthOffset: NIL} - Last day of every week (Sunday)
            MONTHLY -
              - {dayOffset: 1, monthOffset: NIL} - First day of every month
              - {dayOffset: 12, monthOffset: NIL} - 12th of every month
              - {dayOffset: 28, monthOffset: NIL} - 28th of every month. i.e, 28th of Jan, 28th of Feb, ...
              - {dayOffset: 30, monthOffset: NIL} - 30th of every month. i.e, 28th of Jan, 28th of Feb, ...
              - {dayOffset: LAST, monthOffset: NIL} - Last day of every month. i.e, 31st of Jan, 28th of Feb, ...
            QUARTERLY
              - {dayOffset: 15, monthOffset: FIRST} - 15th Jan, 15th Apr, 15th Jul and 15th Oct
              - {dayOffset: 15, monthOffset: 2} - 15th Feb, 15th May, 15th Aug and 15th Nov
              - {dayOffset: 15, monthOffset: LAST} - 15th Mar, 15th Jun, 15th Sep and 15th Dec
              - {dayOffset: LAST, monthOffset: FIRST} - 31st Jan, 30th Apr, 30th Jul and 31th Oct
            HALF_YEARLY
              - {dayOffset: 15, monthOffset: FIRST} - 15th Jan and 15th Jul
              - {dayOffset: 15, monthOffset: 4} - 15th Apr and 15th Oct
              - {dayOffset: 15, monthOffset: LAST} - 15th Jun and 15th Dec
            ANNUALLY
              - {dayOffset: 15, monthOffset: FIRST} - 15th Jan
              - {dayOffset: 15, monthOffset: 1} - 15th Jan
              - {dayOffset: LAST, monthOffset: 2} - 29th Feb on Leap year, 28th otherwise 
              - {dayOffset: 15, monthOffset: 8} - 15th Aug
              - {dayOffset: 15, monthOffset: LAST} - 15th Dec
          required:
            - dayOffset
            - monthOffset
          properties:
            dayOffset:
              type: string
              description: >
                If interval is WEEKLY, min: "1" and max: "7" as strings. Spl.
                string allowed: LAST

                Otherwise, min: "1" and max: "31" as strings. Spl. string
                allowed: LAST
            monthOffset:
              type: string
              description: >
                min: "1" and max: "12". Spl. string allowed: FIRST / LAST.

                For QUARTERLY only 1 - 3 is allowed and for HALF_YEARLY 1 - 6.
                This being an optional field, shouldn't be passed for MONTHLY.
        gracePeriod:
          type: integer
          description: >
            Togai allows you to ingest past dated events that will be processed
            by a pricing cycle till the end grace period. 

            For example: Pricing cycle is Monthly from 1st to 30th and
            gracePeriod is 5 days which next month 1 to 5th date, you can ingest
            past dated events during this grace period.
          format: int32
          example: 3
        anniversaryCycle:
          type: boolean
          description: >
            Togai calculates the startOffsets based on the date of association
            instead of requiring from the user and 

            these offsets will be applied as an override if this flag is
            enabled.

            Examples:

            WEEKLY -
              - 23/10/2023 (Monday) - {dayOffset: 1, monthOffset: NIL} 
              - 25/10/2023 (Wednesday) - {dayOffset: 3, monthOffset: NIL} 
              - 29/10/2023 (Sunday) - {dayOffset: 7, monthOffset: NIL}
            MONTHLY -
              - 1st Oct - {dayOffset: 1, monthOffset: NIL}
              - 12th Oct - {dayOffset: 12, monthOffset: NIL}
              - 28th Oct - {dayOffset: 28, monthOffset: NIL}
              - 30th Oct - {dayOffset: 30, monthOffset: NIL}
              - 31th Oct - {dayOffset: LAST, monthOffset: NIL}
            QUARTERLY
              - 15th Jan, 15th Apr, 15th Jul and 15th Oct - {dayOffset: 15, monthOffset: 1}
              - 15th Feb, 15th May, 15th Aug and 15th Nov - {dayOffset: 15, monthOffset: 2} 
              - 15th Mar, 15th Jun, 15th Sep and 15th Dec - {dayOffset: 15, monthOffset: 3}
            HALF_YEARLY
              - 15th Jan and 15th Jul - {dayOffset: 15, monthOffset: 1} 
              - 15th Apr and 15th Oct - {dayOffset: 15, monthOffset: 4} 
              - 15th Jun and 15th Dec - {dayOffset: 15, monthOffset: 6}
            ANNUALLY
              - 15th Jan - {dayOffset: 15, monthOffset: 1}
              - 29th Feb on Leap year  - {dayOffset: LAST, monthOffset: 2}
              - 28th Feb  - {dayOffset: LAST, monthOffset: 2}
              - 15th Aug - {dayOffset: 15, monthOffset: 8}
              - 15th Dec - {dayOffset: 15, monthOffset: 12}
    UsageRateCard:
      type: object
      required:
        - usageMeterId
        - ratePlan
        - rateValues
      properties:
        displayName:
          type: string
          description: Name your rate card, this will be displayed in the Togai App
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        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'
    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
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        ratePlan:
          $ref: '#/components/schemas/RatePlan'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/RateValue'
        recurrenceConfig:
          $ref: '#/components/schemas/RecurrenceConfig'
    EntitlementOverageRateCard:
      type: object
      required:
        - ratePlan
        - rateValues
        - featureId
      properties:
        featureId:
          type: string
          description: Unique Identifier of the attached Feature
          maxLength: 50
        displayName:
          type: string
          description: Name to be displayed during invoice
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        tag:
          type: string
          description: A tag string to group rate cards
        maxQuantity:
          type: number
          description: >-
            Maximum quantity allowed for the feature, if not specified,
            unlimited quantity is allowed
        ratePlan:
          $ref: '#/components/schemas/RatePlan'
        rateValues:
          type: array
          items:
            $ref: '#/components/schemas/RateValue'
        billingConfig:
          $ref: '#/components/schemas/BillingConfig'
          description: >-
            Represents the billing config of the entitlement overage rate card.
            If not specified interval:1 and startOffset:0 is taken as default
            value
    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
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        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'
    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
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        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'
    MinimumCommitment:
      title: MinimumCommitment
      type: object
      required:
        - displayName
        - rateValues
      properties:
        displayName:
          type: string
        rateValues:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/CurrencyRateValue'
    CreditGrantRateCard:
      description: Credit grant rate card
      type: object
      additionalProperties: false
      required:
        - id
        - rateDetails
        - grantDetails
      properties:
        id:
          type: string
        displayName:
          type: string
        name:
          type: string
          description: >-
            Unique identifier for the rate card in a price plan. If left null it
            is auto-generated.
        tag:
          type: string
          description: A tag string to group creditGrantRateCard
        grantDetails:
          $ref: '#/components/schemas/GrantDetails'
        rateDetails:
          $ref: '#/components/schemas/CreditRateDetails'
        invoiceTiming:
          $ref: '#/components/schemas/InvoiceTiming'
        type:
          $ref: '#/components/schemas/CreditGrantType'
        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 .
    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
    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
        allow_ongoing_cycle_updates:
          description: |
            Allow changes to price plan from the beginning of the ongoing cycle.
            type: boolean
    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:
          $ref: '#/components/schemas/PricingRuleAction'
          description: JSON logic to be computed
          title: action
    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
    RatePlan:
      type: object
      description: Contains all rate related configurations
      required:
        - pricingModel
        - slabs
      properties:
        pricingModel:
          $ref: '#/components/schemas/PricingModel'
        slabs:
          description: Rate cards can have single or multiple slab up to 100.
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/Slab'
    RateValue:
      type: object
      description: Represents a rate
      required:
        - currency
        - slabRates
      properties:
        currency:
          type: string
        slabRates:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/SlabRate'
        rateConfig:
          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
    InvoiceTiming:
      type: string
      enum:
        - IN_ADVANCE
        - IN_ARREARS
        - PREPAID
      x-enum-varnames:
        - IN_ADVANCE
        - IN_ARREARS
        - PREPAID
      description: >
        If IN_ADVANCE, the rate card will be invoiced in the previous billing
        cycle.

        If IN_ARREARS, the rate card will be invoiced in the current billing
        cycle.

        If PREPAID, credits/entitlements will be granted only after invoice is
        paid
    RecurrenceConfig:
      type: object
      properties:
        interval:
          description: >-
            Represents the number of pricing cycles after which the rate card
            will be charged
          type: integer
          format: int64
          example: 3
        offset:
          description: >-
            Represents the offset for pricing cycles after which the rate card
            will be charged
          type: integer
          format: int64
          example: 5
    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
    FixedFeeType:
      type: string
      enum:
        - ONE_TIME
        - RECURRING
      description: Fixed fee applies either for a one-time occurrence or for each cycle.
    CurrencyRateValue:
      type: object
      required:
        - currency
        - rate
      properties:
        currency:
          type: string
        rate:
          type: number
    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
    UsageCycleInterval:
      type: string
      description: >
        UsageCycleInterval field allows you to treat the billing interval as
        many smaller windows. Revenue is calculated for

        each of the windows (usage cycles) and their sum is considered as the
        billing interval revenue.

        Example: 1 Named License being used across entire billing interval. Rate
        Value: $1/license

        CASE 1: Without usage cycle. $1 is charged for the entire billing cycle.

        CASE 2: Usage cycle is configure to be WEEKLY and the billing interval
        has 4 weeks. In this case $1 is charged 

        for each week totalling to $4 across for the billing interval
      enum:
        - WEEKLY
        - MONTHLY
        - QUARTERLY
        - HALF_YEARLY
        - ANNUALLY
    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'
    ProratedRefundMode:
      type: string
      enum:
        - NONE
        - CREDITS
        - PAYMENT
        - WALLET
    GrantDetails:
      description: Grant details of Credit Grant Rate Card
      type: object
      additionalProperties: false
      required:
        - priority
        - expiryType
      properties:
        priority:
          type: integer
          minimum: 0
        expiryType:
          $ref: '#/components/schemas/ExpiryType'
        expiryDuration:
          type: string
          format: duration
        applicableEntityIds:
          type: array
          items:
            type: string
    CreditRateDetails:
      type: object
      description: Amount to be credited
      additionalProperties: false
      required:
        - pricingModel
        - currencySlabRateDetails
      properties:
        pricingModel:
          $ref: '#/components/schemas/PricingModel'
        currencySlabRateDetails:
          type: array
          items:
            $ref: '#/components/schemas/CurrencySlabRateDetail'
    CreditGrantType:
      type: string
      enum:
        - ONE_TIME
        - RECURRING
      description: Credit grant applies either for a one-time occurrence or for each cycle.
    PricingModel:
      type: string
      description: >
        Togai supports two type of pricing model Tiered and Volume. Tiered
        pricing model applies respective slab and its rate to the usage value
        while volume pricing model applies the latest matching slab of the usage
        value and applies respective rate. 

        For more understanding read [Rate
        Cards](https://docs.togai.com/docs/priceplan#setting-up-multiple-rate-cards)
      enum:
        - TIERED
        - VOLUME
    Slab:
      type: object
      description: Represents a pricing priceType (rates + slabs) for usage price plan
      required:
        - order
        - startAfter
        - priceType
      properties:
        order:
          type: integer
          format: int32
          minimum: 1
          maximum: 10
        startAfter:
          type: number
        priceType:
          $ref: '#/components/schemas/PriceType'
        slabConfig:
          type: object
          additionalProperties:
            type: string
    SlabRate:
      type: object
      description: Represents a rate for a slab
      required:
        - order
        - rate
      properties:
        order:
          type: integer
          format: int32
        rate:
          type: number
        slabRateConfig:
          type: object
          additionalProperties:
            type: string
    MaxQuantityBreachAction:
      type: string
      enum:
        - DO_NOTHING
      description: |
        Action to be taken when the license maxQuantity is breached: 
        - `DO_NOTHING`: Refrain from granting any new licenses.
    ExpiryType:
      type: string
      description: Expiry type of grant
      enum:
        - PRICING_CYCLE
        - NO_EXPIRY
        - CUSTOM
    CurrencySlabRateDetail:
      type: object
      description: The association of a currency along with its slab detail
      additionalProperties: false
      required:
        - currency
        - creditAmount
        - slabDetails
      properties:
        currency:
          type: string
        creditAmount:
          type: number
          description: The amount of credit that needs to be credited
          minimum: 0
        slabDetails:
          type: array
          items:
            $ref: '#/components/schemas/SlabDetail'
        rateConfig:
          type: object
          additionalProperties:
            type: string
    PriceType:
      type: string
      enum:
        - FLAT
        - PER_UNIT
        - PACKAGE
    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
  examples:
    UpdatePricePlanRequest:
      value:
        description: updated description
        pricePlanDetails:
          pricingCycleConfig:
            interval: MONTHLY
            startOffset:
              dayOffset: '6'
              monthOffset: NIL
            gracePeriod: 3
            anniversaryCycle: true
        migrationMode: IMMEDIATE_IGNORE_OVERRIDE
    PricePlan:
      value:
        id: pp.20sieTc1u2i.fY8AT
        name: grantCheck
        type: BILLING
        status: ACTIVE
        pricingSchedule:
          - id: sch.20sieTcdnQ0.ZmseL
            startDate: '1970-01-01T00:00:00Z'
            endDate: '9999-01-01T00:00:00Z'
            version: 1
            isOverriden: false
            pricePlanDetails:
              supportedCurrencies:
                - USD
              activeCurrencies:
                - USD
              pricingCycleConfig:
                interval: MONTHLY
                startOffset:
                  dayOffset: '1'
                  monthOffset: NIL
                gracePeriod: 1
                anniversaryCycle: false
              usageRateCards:
                - displayName: rr1
                  usageMeterId: um.20Ms65CtgMy.nwFP0
                  ratePlan:
                    pricingModel: TIERED
                    slabs:
                      - order: 1
                        startAfter: 0
                        priceType: FLAT
                        slabConfig: {}
                  rateValues:
                    - currency: USD
                      slabRates:
                        - order: 1
                          rate: 10
                          slabRateConfig: {}
                  tag: '1'
              fixedFeeRateCards:
                - id: addon.20sidL2HJ7o.vvzDT
                  rateValues:
                    - currency: USD
                      rate: 50
                  enableProration: false
                  displayName: normal
                  tag: '1'
                  invoiceTiming: IN_ARREARS
                  type: RECURRING
                - id: addon.20sidQxYRjs.4oBSU
                  rateValues:
                    - currency: USD
                      rate: 10
                  enableProration: false
                  displayName: anotherNormal
                  tag: '2'
                  invoiceTiming: IN_ARREARS
                  type: RECURRING
                  recurrenceConfig:
                    interval: 2
                    offset: 1
                - id: addon.20sidzySWoa.Bzrcc
                  rateValues:
                    - currency: USD
                      rate: 40
                  enableProration: false
                  displayName: inadvance
                  tag: '1'
                  invoiceTiming: IN_ADVANCE
                  type: RECURRING
              licenseRateCards:
                - id: addon.20darMuJ6C8.bdgRj
                  enableProration: false
                  ratePlan:
                    pricingModel: TIERED
                    slabs:
                      - order: 1
                        startAfter: 0
                        priceType: FLAT
                        slabConfig: {}
                  rateValues:
                    - currency: USD
                      slabRates:
                        - order: 1
                          rate: 15
                          slabRateConfig: {}
                  displayName: license
                  tag: '2'
                  config:
                    maxQuantity: 100
              billingEntitlementRateCards:
                - featureId: feature.20jxa18BdUW.d4XQw
                  featureConfigs:
                    - featureCreditLimit: 100
                      effectiveUntil: P20D
                  invoiceTiming: IN_ADVANCE
                  ratePlan:
                    pricingModel: TIERED
                    slabs:
                      - order: 1
                        startAfter: 0
                        priceType: PER_UNIT
                        slabConfig: {}
                  rateValues:
                    - currency: USD
                      slabRates:
                        - order: 1
                          rate: 1
                  displayName: feature1
                - featureId: feature.20uE1xqEudk.MMVH8
                  featureConfigs:
                    - featureCreditLimit: 200
                      effectiveUntil: P20D
                  invoiceTiming: IN_ADVANCE
                  ratePlan:
                    pricingModel: TIERED
                    slabs:
                      - order: 1
                        startAfter: 0
                        priceType: PER_UNIT
                        slabConfig: {}
                  rateValues:
                    - currency: USD
                      slabRates:
                        - order: 1
                          rate: 2
                  displayName: feature2
              minimumCommitment:
                displayName: Minimum Commitment
                rateValues:
                  - currency: USD
                    rate: 0
              creditGrantRateCards:
                - id: addon.20ufMNoJoAC.TUzRi
                  type: RECURRING
                  displayName: Credit2
                  rateDetails:
                    pricingModel: TIERED
                    currencySlabRateDetails:
                      - currency: USD
                        creditAmount: 100
                        slabDetails:
                          - startAfter: 0
                            priceType: FLAT
                            rate: 10
                  grantDetails:
                    priority: 1
                    expiryType: PRICING_CYCLE
                    applicableEntityIds: []
                  invoiceTiming: IN_ARREARS
                  recurrenceConfig:
                    offset: 0
                    interval: 1
                - id: addon.20ufMNoJoAC.TUzRi
                  type: RECURRING
                  displayName: Credit2
                  rateDetails:
                    pricingModel: TIERED
                    currencySlabRateDetails:
                      - currency: USD
                        slabDetails:
                          - rate: 11
                            priceType: FLAT
                            startAfter: 0
                            slabConfig: {}
                            slabRateConfig: {}
                        creditAmount: 11
                      - currency: INR
                        slabDetails:
                          - rate: 11
                            priceType: FLAT
                            startAfter: 0
                            slabConfig: {}
                            slabRateConfig: {}
                        creditAmount: 11
                  grantDetails:
                    priority: 1
                    expiryType: PRICING_CYCLE
                    applicableEntityIds: []
                  invoiceTiming: IN_ARREARS
                  recurrenceConfig:
                    offset: 0
                    interval: 1
              type: BILLING
        description: Starter plan
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Bearer <credential>

````