---
title: "Request self-service plan options"
method: GET
path: "/organizations/{organizationId}/plan-options"
tags: ["Organizations"]
---

# Request self-service plan options

`GET /organizations/{organizationId}/plan-options`

## Request

- Base URL: `https://api.xfa.tech`
- URL: `https://api.xfa.tech/organizations/{organizationId}/plan-options`
- Auth: HTTP bearer

## Path parameters

- `organizationId` string, required

## Response `200`

Returns available plans and current billing context

- PlanOptionsResponse
  - `plans` GlobalPlanDefinition[]
    - `planName` string, required
    - `paymentPlan` PaymentPlan, required
      - `Name` string
      - `NrOfPolicies` integer
      - `NrOfDiscovery` integer
      - `AwarenessVerificationFrequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `AwarenessRiskFrequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `NrOfEnforcement` integer
      - `CustomIntegration` boolean
      - `AdminSecurityReports` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `Cves` boolean
      - `Mfa` boolean
      - `AdvancedMfa` boolean
      - `ExportToGRC` boolean
      - `ApplyDuringTrial` boolean
    - `featureFlags` string[], required
    - `pricing` PlanPricing
      - `monthlyPricePerSeat` number, float, nullable
      - `yearlyPricePerSeat` number, float, nullable
      - `currency` 'EUR' | 'USD' | 'GBP': Supported currencies
      - `minimumSeats` integer
    - `revision` integer: Assigned by the billing service on every change and ignored on a PUT body. 0 for a plan not changed since revision tracking started (it counts as revision 1).
  - `current_plan_name` string
  - `current_billing_cycle` 'monthly' | 'yearly'
  - `current_seats` integer
  - `pending_plan_change` ScheduledPlanChange
    - `requested_at` string
    - `request_id` string
    - `change_id` string
    - `requested_by_email` string
    - `requested_by_user_id` string
    - `effective_date` string
    - `status` 'applied' | 'scheduled' | 'checkout_required' | 'blocked' | 'canceled'
    - `pending_checkout` boolean: True when the target plan is waiting for checkout/payment mandate completion and has not been applied.
    - `plan_name` string
    - `billing_cycle` 'monthly' | 'yearly'
    - `seats` integer
    - `current_plan_name` string
    - `current_billing_cycle` 'monthly' | 'yearly'
    - `current_seats` integer
    - `target_payment_plan` PaymentPlan
      - `Name` string
      - `NrOfPolicies` integer
      - `NrOfDiscovery` integer
      - `AwarenessVerificationFrequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `AwarenessRiskFrequency` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `NrOfEnforcement` integer
      - `CustomIntegration` boolean
      - `AdminSecurityReports` 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'none' | 'on-demand' | 'limited': Frequency interval
      - `Cves` boolean
      - `Mfa` boolean
      - `AdvancedMfa` boolean
      - `ExportToGRC` boolean
      - `ApplyDuringTrial` boolean
    - `pricing` PlanChangePricing
      - `currency` 'EUR' | 'USD' | 'GBP': Supported currencies
      - `unit_price` number, float
      - `recurring_amount` number, float
      - `billing_cycle` 'monthly' | 'yearly'
    - `hubspot_notification_required` boolean
    - `internal_notification_required` boolean
    - `has_partner_terms` boolean
    - `has_discount_terms` boolean
    - `upgrade_charge` PlanUpgradeCharge: What a paying organization owes for the rest of its current billing cycle when it upgrades mid-cycle: the unit price difference for the seats it pays for, pro-rated from the day the upgrade was applied to the next renewal, net of its discounts and before VAT. Invoiced by the next daily invoicing run. On a change that still waits for a checkout it is the amount as of the preview; the charge is computed again on the day the change applies.
      - `change_id` string
      - `from_plan` string
      - `to_plan` string
      - `applied_at` string: When the upgrade took effect, 20060102T150405 UTC
      - `cycle_start` string: The first day of the billing cycle the upgrade fell in, 20060102
      - `cycle_end` string: The last day of that cycle, 20060102
      - `seats` integer: The seats the difference is charged for (free users left out)
      - `unit_price_difference` number, float
      - `billing_cycle` 'monthly' | 'yearly'
      - `pro_rata` number, float: The fraction of the cycle that remained when the upgrade was applied
      - `amount` number, float: The net amount, discounts applied, before VAT
      - `discounts` object
        - `DiscountPercentage` number, float
        - `DiscountCodePercentage` number, float
        - `DiscountCodeID` string
      - `billed` boolean
      - `invoice_date` string: The key of the invoice once billed; empty when nothing was owed
  - `pending_seat_change` SeatChange: A seat decrease scheduled for the next renewal (ScheduledSeatChange) or the last one that ended (LastSeatChange). seats_removed is what the renewal applies; target_seats is the target as of the request.
    - `requested_at` string
    - `request_id` string
    - `change_id` string
    - `requested_by_email` string
    - `requested_by_user_id` string
    - `effective_date` string
    - `status` string: One of scheduled, applied, canceled, superseded (stored) or blocked (only reported by a preview or a refused confirmation). billing_seat_change events also use warning.
    - `billing_cycle` 'monthly' | 'yearly'
    - `current_seats` integer
    - `seats_removed` integer
    - `target_seats` integer
    - `users_at_request` integer
    - `users_at_warning` integer
    - `warning_sent_at` string
    - `users_at_apply` integer
    - `seats_before_apply` integer
    - `seats_after_apply` integer
    - `ended_at` string
    - `pricing` SeatChangePricing: Per billing cycle: billed seats (seats less free users) times the unit price of the current cycle, before discounts and VAT.
      - `currency` 'EUR' | 'USD' | 'GBP': Supported currencies
      - `unit_price` number, float
      - `recurring_amount_now` number, float
      - `recurring_amount_after` number, float

---

[API](https://skmtc.dev/xfa/apis/xfa-api.md) · [All operations](https://skmtc.dev/xfa/apis/xfa-api/llms.txt) · [OpenAPI document](https://skmtc.dev/xfa/apis/xfa-api/revisions/1a1be0e8972b?raw)
