---
title: "Get a single plan by ID"
method: GET
path: "/api/v1/plans/{id}"
tags: ["Plans"]
---

# Get a single plan by ID

`GET /api/v1/plans/{id}`

Retrieves a plan by its unique identifier, including entitlements and pricing details.

## Path parameters

- `id` string, required

## Headers

- `X-ACCOUNT-ID` string
- `X-ENVIRONMENT-ID` string

## Response `200`

The plan object with full details.

- PlanResponseDto — Response object
  - `data` object, required — Plan configuration object
    - `id` string, required — The unique identifier for the entity
    - `displayName` string, required — The display name of the package
    - `description` string, nullable, required — The description of the package
    - `productId` string, required — The product id of the package
    - `status` 'DRAFT' | 'PUBLISHED' | 'ARCHIVED', required — The status of the package
    - `pricingType` 'FREE' | 'PAID' | 'CUSTOM', nullable, required — The pricing type of the package
    - `billingId` string, nullable, required — The unique identifier for the entity in the billing provider
    - `versionNumber` integer, required — The version number of the package
    - `isLatest` boolean, nullable, required — Indicates if the package is the latest version
    - `entitlements` object[], required — List of entitlements of the package
      - `type` 'FEATURE' | 'CREDIT', required
      - `id` string, required — The unique identifier for the entity
    - `metadata` object, required — Metadata associated with the entity
    - `createdAt` string, date-time, required — Timestamp of when the record was created
    - `updatedAt` string, date-time, required — Timestamp of when the record was last updated
    - `parentPlanId` string, nullable, required — The ID of the parent plan, if applicable
    - `defaultTrialConfig` object, nullable, required — Default trial configuration for the plan
      - `duration` number, required — The duration of the trial in the specified units
      - `units` 'DAY' | 'MONTH', required — The time unit for the trial duration (DAY or MONTH)
      - `budget` object, nullable — Budget configuration for the trial
        - `limit` number, required — The budget limit amount
        - `hasSoftLimit` boolean, required — Whether the budget limit is a soft limit (allows overage) or hard limit
      - `trialEndBehavior` 'CONVERT_TO_PAID' | 'CANCEL_SUBSCRIPTION', nullable — Behavior when the trial ends (CONVERT_TO_PAID or CANCEL_SUBSCRIPTION)
    - `compatibleAddonIds` string[], nullable, required

## Other responses

- `400` — bad request.
- `401` — User is not authenticated.
- `403` — User is not allowed to access this resource.
- `404` — Plan not found.
- `429` — Too many requests.

---

[API](https://skmtc.net/stiggio/apis/stigg-api.md) · [All operations](https://skmtc.net/stiggio/apis/stigg-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stiggio/stigg-api/versions/ffc977f1c07e/schema)
