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

# Activate a plan

> Move a plan from draft to active. The plan must have at least one tier and every tier must contain at least one item.



## OpenAPI

````yaml post /api/plans/{id}/activate
openapi: 3.1.0
info:
  title: Fynn V2 Plans API
  version: 2026-06
  description: >-
    REST API for the Fynn V2 Plans. Use it to define plans with upgrade and
    downgrade tiers, sell them through checkout links, and let customers switch
    tiers from your customer portal. All amounts use the minor or decimal
    representation documented per field. Authenticate setup endpoints with an
    API token and customer endpoints with a customer token.
servers:
  - url: https://coreapi.io
    description: Production
  - url: https://preview.coreapi.io
    description: Sandbox
security:
  - ApiToken: []
tags:
  - name: Plans
    description: Create and manage plans, tiers and items.
  - name: Checkout Links
    description: Sell a plan tier through a hosted checkout link.
  - name: Plan switching (customer)
    description: Customer facing upgrade and downgrade between tiers.
paths:
  /api/plans/{id}/activate:
    post:
      tags:
        - Plans
      summary: Activate a plan
      description: >-
        Move a plan from draft to active. The plan must have at least one tier
        and every tier must contain at least one item.
      operationId: activatePlan
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            example: 1280792f-4e23-793d-8e9c-3a1bf36630bd
          description: The plan UUID.
      responses:
        '200':
          description: The activated plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plan'
        '401':
          description: Authentication is missing or the token is invalid.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '403':
          description: The token is valid but lacks the required permission.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '404':
          description: The requested resource does not exist for this Organisation.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '422':
          description: The request failed validation or a business rule was violated.
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ValidationError'
                  - $ref: '#/components/schemas/ProblemError'
components:
  schemas:
    Plan:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 1280792f-4e23-793d-8e9c-3a1bf36630bd
        code:
          type: string
          example: pro-plan
        name:
          type: string
          example: Pro Plan
        status:
          $ref: '#/components/schemas/PlanStatus'
        currency:
          type: string
          nullable: true
          example: EUR
          description: >-
            Currency derived from the price plans, null when the plan has no
            items yet.
        tiers:
          type: array
          items:
            $ref: '#/components/schemas/PlanTier'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ProblemError:
      type: object
      description: >-
        Problem detail error body (application/problem+json). Additional members
        may be present depending on the error.
      properties:
        status:
          type: integer
          example: 404
        type:
          type: string
          description: Stable machine readable error key.
          example: PLAN__NOT_FOUND
        title:
          type: string
          example: An error occurred
        detail:
          type: string
          example: Plan not found.
      required:
        - status
        - type
        - title
        - detail
    ValidationError:
      type: object
      description: >-
        Validation error body (application/problem+json) returned when input
        fails field level validation.
      properties:
        status:
          type: integer
          example: 422
        type:
          type: string
          example: https://tools.ietf.org/html/rfc2616#section-10
        title:
          type: string
          example: Validation Failed
        violations:
          type: array
          items:
            type: object
            properties:
              propertyPath:
                type: string
                example: tiers[0].name
              message:
                type: string
                example: This value should not be blank.
              code:
                type: string
                nullable: true
      required:
        - status
        - type
        - title
        - violations
    PlanStatus:
      type: string
      enum:
        - draft
        - active
        - archived
      description: >-
        Lifecycle status. A plan is created as draft, becomes active once you
        activate it, and can later be archived. Only active plans can be sold or
        switched into.
    PlanTier:
      type: object
      properties:
        id:
          type: string
        position:
          type: integer
          example: 1
        name:
          type: string
          example: Pro
        upgradeable:
          type: boolean
        downgradeable:
          type: boolean
        changeTiming:
          $ref: '#/components/schemas/ChangeTiming'
        creditType:
          $ref: '#/components/schemas/CreditType'
        commitmentPeriod:
          type: string
          nullable: true
          example: P1Y
        items:
          type: array
          items:
            $ref: '#/components/schemas/PlanTierItem'
    ChangeTiming:
      type: string
      enum:
        - immediately
        - end_of_period
      description: >-
        When a switch into this tier takes effect. immediately applies the
        change at once, end_of_period waits until the current billing period
        ends.
    CreditType:
      type: string
      enum:
        - pro_rata
        - none
      description: >-
        How unused time is credited when switching into this tier with
        immediately timing. pro_rata credits the remaining part of the current
        period, none gives no credit. The values full and last_invoiced are not
        available for plans.
    PlanTierItem:
      type: object
      properties:
        id:
          type: string
        productId:
          type: string
        productName:
          type: string
          example: Add-On
        pricePlanId:
          type: string
        pricePlanName:
          type: string
          example: Add-On Monthly
        currency:
          type: string
          example: EUR
        defaultQuantity:
          type: number
          example: 1
        minQuantity:
          type: number
          nullable: true
        maxQuantity:
          type: number
          nullable: true
  securitySchemes:
    ApiToken:
      type: http
      scheme: bearer
      description: >-
        Organisation API token. Send it as Authorization: Bearer api_... The
        token is scoped to a single Organisation.

````