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

# List plans

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Lists Base44's plans with their limits, prices, and the IDs you need to change one.

You can call this without credentials. Then `currency` follows the country the request comes from. With a token, it follows your workspace: a paid workspace sees the currency it pays in, and a free one the currency it can check out in. An invalid or read-only token is ignored, and you get the answer for no credentials.

Prices are in the smallest currency unit, such as cents, and can be `null` while Base44 can't load them. Retry later rather than treating a `null` price as free.

Use `price_ids` with [Change plan](/api-reference/change-plan) on a Stripe-billed workspace, and `wix_product_id` with [Change Wix plan](/api-reference/change-wix-plan) on a Wix-billed one.

Plans come in `hierarchy` order, and the default `limit` of 100 returns every plan on one page. To page through them, pass a smaller `limit` and send each `next_cursor` back as `cursor`. A cursor carries the rest of the query, so send it alone. `hierarchy` always lists every plan.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/billing/tiers
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/billing/tiers:
    get:
      summary: List plans
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Lists Base44's plans with their limits, prices, and the IDs you need to
        change one.


        You can call this without credentials. Then `currency` follows the
        country the request comes from. With a token, it follows your workspace:
        a paid workspace sees the currency it pays in, and a free one the
        currency it can check out in. An invalid or read-only token is ignored,
        and you get the answer for no credentials.


        Prices are in the smallest currency unit, such as cents, and can be
        `null` while Base44 can't load them. Retry later rather than treating a
        `null` price as free.


        Use `price_ids` with [Change plan](/api-reference/change-plan) on a
        Stripe-billed workspace, and `wix_product_id` with [Change Wix
        plan](/api-reference/change-wix-plan) on a Wix-billed one.


        Plans come in `hierarchy` order, and the default `limit` of 100 returns
        every plan on one page. To page through them, pass a smaller `limit` and
        send each `next_cursor` back as `cursor`. A cursor carries the rest of
        the query, so send it alone. `hierarchy` always lists every plan.


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time.</Warning>
      operationId: get_tier_definitions_api_billing_tiers_get
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Plans per page, 1 to 100. Defaults to 100, which fits every plan.
            default: 100
            title: Limit
          description: Plans per page, 1 to 100. Defaults to 100, which fits every plan.
          example: 10
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: '`next_cursor` from the previous page. Send it alone.'
            title: Cursor
          description: '`next_cursor` from the previous page. Send it alone.'
          example: gAAAAABn7vJ0q2kX
      responses:
        '200':
          description: Every plan, with its limits and prices.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanList'
              example:
                tiers:
                  - name: pro
                    display_name: Pro
                    rank: 4
                    hidden: false
                    limits:
                      monthly_message_credits: 500
                      monthly_integration_credits: 20000
                    features:
                      - Unlimited apps
                      - Custom domains
                    pricing:
                      monthly_usd: 5000
                      yearly_usd: 48000
                    price_ids:
                      monthly_usd: price_1QZk4LDr56L89dkKp0Pro0Mo
                      yearly_usd: price_1QZk4LDr56L89dkKp0Pro0Yr
                    wix_product_id: 5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63
                hierarchy:
                  - free
                  - lite
                  - starter
                  - builder
                  - pro
                  - elite
                free_tier: free
                recommended_tier: pro
                currency: usd
        '400':
          description: '`cursor` is invalid or expired, or was sent with `limit`.'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
              example:
                detail:
                  - type: less_than_equal
                    loc:
                      - query
                      - limit
                    msg: Input should be less than or equal to 100
                    input: '101'
                    ctx:
                      le: 100
        '429':
          description: >-
            Rate limit exceeded. The base rate limit is 120 requests per minute
            per user, or per IP address without credentials. See [Rate
            limits](/developers/references/apps-api/get-started/rate-limits) for
            the multiplier your plan gets.
      security:
        - {}
        - PersonalAccessTokenAuth:
            - full_access
components:
  schemas:
    PlanList:
      properties:
        tiers:
          items:
            $ref: '#/components/schemas/Plan'
          type: array
          title: Tiers
          description: >-
            The plans on this page, in `hierarchy` order. With the default
            `limit`, every plan.
          example:
            - display_name: Pro
              features:
                - Unlimited apps
                - Custom domains
              hidden: false
              limits:
                monthly_integration_credits: 20000
                monthly_message_credits: 500
              name: pro
              price_ids:
                monthly_usd: price_1QZk4LDr56L89dkKp0Pro0Mo
                yearly_usd: price_1QZk4LDr56L89dkKp0Pro0Yr
              pricing:
                monthly_usd: 5000
                yearly_usd: 48000
              rank: 4
              wix_product_id: 5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63
        hierarchy:
          items:
            type: string
          type: array
          title: Hierarchy
          description: Plan IDs from smallest to largest.
          example:
            - free
            - lite
            - starter
            - builder
            - pro
            - elite
        free_tier:
          type: string
          title: Free Tier
          description: ID of the free plan.
          example: free
        recommended_tier:
          type: string
          title: Recommended Tier
          description: ID of the plan Base44 recommends.
          example: pro
        currency:
          type: string
          enum:
            - usd
            - ils
            - eur
            - gbp
            - brl
          title: Currency
          description: >-
            Currency you're shown and charged in. `wix_product_id` is for this
            currency.
          example: usd
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
          description: Send as `cursor` to get the next page. `null` on the last page.
          example: gAAAAABn7vJ0q2kX
      type: object
      required:
        - tiers
        - hierarchy
        - free_tier
        - recommended_tier
        - currency
        - next_cursor
      title: PlanList
      description: Base44's plans.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Plan:
      properties:
        name:
          type: string
          title: Name
          description: >-
            ID of the plan. Compare it with the workspace's plan, or with
            `hierarchy`.
          example: pro
        display_name:
          type: string
          title: Display Name
          description: Name of the plan to show people.
          example: Pro
        rank:
          type: integer
          title: Rank
          description: >-
            Position in `hierarchy`, starting at 0 for `free`. A higher rank is
            a bigger plan.
          example: 4
        hidden:
          type: boolean
          title: Hidden
          description: >-
            `true` for plans Base44 doesn't offer in its plan picker, such as
            `lite`.
          example: false
        limits:
          $ref: '#/components/schemas/PlanLimits'
          description: What the plan includes.
        features:
          items:
            type: string
          type: array
          title: Features
          description: >-
            Feature bullets for the plan. Empty while Base44 can't load pricing
            details.
          example:
            - Unlimited apps
            - Custom domains
        pricing:
          additionalProperties:
            anyOf:
              - type: integer
              - type: 'null'
          type: object
          title: Pricing
          description: >-
            Price per billing period in the smallest currency unit, such as
            cents, keyed `<period>_<currency>`, such as `monthly_usd` or
            `yearly_eur`. A value is `null` while Base44 can't load prices, or
            when the plan isn't sold that way.
          example:
            monthly_usd: 5000
            yearly_usd: 48000
        price_ids:
          additionalProperties:
            anyOf:
              - type: string
              - type: 'null'
          type: object
          title: Price Ids
          description: >-
            Price ID per billing period, keyed like `pricing`. Pass one to
            [Change plan](/api-reference/change-plan) or [Preview plan
            change](/api-reference/preview-plan-change) on a Stripe-billed
            workspace. `null` when the plan isn't sold that way.
          example:
            monthly_usd: price_1QZk4LDr56L89dkKp0Pro0Mo
            yearly_usd: price_1QZk4LDr56L89dkKp0Pro0Yr
        wix_product_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Wix Product Id
          description: >-
            Wix product for the plan in `currency`. Pass it as `new_product_id`
            to [Change Wix plan](/api-reference/change-wix-plan) on a Wix-billed
            workspace. `null` when Wix doesn't sell the plan in that currency.
          example: 5f0c7a2e-3b91-4d6a-9e0f-2c8b1d4a7e63
      type: object
      required:
        - name
        - display_name
        - rank
        - hidden
        - limits
        - features
        - pricing
        - price_ids
        - wix_product_id
      title: Plan
      description: One Base44 plan.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    PlanLimits:
      properties:
        monthly_message_credits:
          type: integer
          title: Monthly Message Credits
          description: Message credits the plan grants each month.
          example: 500
        monthly_integration_credits:
          type: integer
          title: Monthly Integration Credits
          description: Integration credits the plan grants each month.
          example: 20000
        daily_message_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Daily Message Limit
          description: Most messages a day, or `null` for no daily limit.
          example: 5
        max_apps:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Apps
          description: Most apps the plan allows, or `null` for no limit.
          example: 5
      type: object
      required:
        - monthly_message_credits
        - monthly_integration_credits
        - daily_message_limit
        - max_apps
      title: PlanLimits
      description: What a plan includes.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: >-
        Personal access token, sent as `Authorization: Bearer <token>`. Each
        operation lists the permission it needs: `read_only` or `full_access`. A
        full-access token can call every operation. A read-only token can call
        only the operations that list `read_only`; anything else returns 403
        `read_only_credential_route_not_allowed`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.