import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const plan = await client.v1.plans.update('x');
console.log(plan.data);import os
from stigg import Stigg
client = Stigg(
api_key=os.environ.get("STIGG_API_KEY"), # This is the default and can be omitted
)
plan = client.v1.plans.update(
id="x",
)
print(plan.data)package main
import (
"context"
"fmt"
"github.com/stiggio/stigg-go"
"github.com/stiggio/stigg-go/option"
)
func main() {
client := stigg.NewClient(
option.WithAPIKey("My API Key"),
)
plan, err := client.V1.Plans.Update(
context.TODO(),
"x",
stigg.V1PlanUpdateParams{},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", plan.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.plans.Plan;
import io.stigg.models.v1.plans.PlanUpdateParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
Plan plan = client.v1().plans().update("x");
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
plan = stigg.v1.plans.update("x")
puts(plan)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Plans;
StiggClient client = new();
PlanUpdateParams parameters = new() { ID = "x" };
var plan = await client.V1.Plans.Update(parameters);
Console.WriteLine(plan);stigg v1:plans update \
--api-key 'My API Key' \
--id xcurl --request PATCH \
--url https://api.stigg.io/api/v1/plans/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"displayName": "<string>",
"description": "<string>",
"billingId": "<string>",
"metadata": {},
"parentPlanId": "<string>",
"defaultTrialConfig": {
"duration": 123,
"budget": {
"limit": 123,
"hasSoftLimit": true
}
},
"compatibleAddonIds": [
"<string>"
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/plans/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'displayName' => '<string>',
'description' => '<string>',
'billingId' => '<string>',
'metadata' => [
],
'parentPlanId' => '<string>',
'defaultTrialConfig' => [
'duration' => 123,
'budget' => [
'limit' => 123,
'hasSoftLimit' => true
]
],
'compatibleAddonIds' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"id": "plan-professional",
"displayName": "Professional",
"description": "Professional plan with advanced features",
"productId": "product-starter",
"status": "PUBLISHED",
"pricingType": "PAID",
"billingId": "price_1234567890",
"versionNumber": 1,
"isLatest": true,
"entitlements": [
{
"type": "FEATURE",
"id": "feature-advanced-analytics"
},
{
"type": "CREDIT",
"id": "api-calls"
}
],
"metadata": {},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z",
"parentPlanId": null,
"defaultTrialConfig": {
"duration": 14,
"units": "DAY",
"budget": null,
"trialEndBehavior": null
},
"compatibleAddonIds": []
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "CustomerNotFound"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Update a plan
Updates an existing plan’s properties such as display name, description, and metadata.
import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const plan = await client.v1.plans.update('x');
console.log(plan.data);import os
from stigg import Stigg
client = Stigg(
api_key=os.environ.get("STIGG_API_KEY"), # This is the default and can be omitted
)
plan = client.v1.plans.update(
id="x",
)
print(plan.data)package main
import (
"context"
"fmt"
"github.com/stiggio/stigg-go"
"github.com/stiggio/stigg-go/option"
)
func main() {
client := stigg.NewClient(
option.WithAPIKey("My API Key"),
)
plan, err := client.V1.Plans.Update(
context.TODO(),
"x",
stigg.V1PlanUpdateParams{},
)
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", plan.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.plans.Plan;
import io.stigg.models.v1.plans.PlanUpdateParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
Plan plan = client.v1().plans().update("x");
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
plan = stigg.v1.plans.update("x")
puts(plan)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Plans;
StiggClient client = new();
PlanUpdateParams parameters = new() { ID = "x" };
var plan = await client.V1.Plans.Update(parameters);
Console.WriteLine(plan);stigg v1:plans update \
--api-key 'My API Key' \
--id xcurl --request PATCH \
--url https://api.stigg.io/api/v1/plans/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"displayName": "<string>",
"description": "<string>",
"billingId": "<string>",
"metadata": {},
"parentPlanId": "<string>",
"defaultTrialConfig": {
"duration": 123,
"budget": {
"limit": 123,
"hasSoftLimit": true
}
},
"compatibleAddonIds": [
"<string>"
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/plans/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'displayName' => '<string>',
'description' => '<string>',
'billingId' => '<string>',
'metadata' => [
],
'parentPlanId' => '<string>',
'defaultTrialConfig' => [
'duration' => 123,
'budget' => [
'limit' => 123,
'hasSoftLimit' => true
]
],
'compatibleAddonIds' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"id": "plan-professional",
"displayName": "Professional",
"description": "Professional plan with advanced features",
"productId": "product-starter",
"status": "PUBLISHED",
"pricingType": "PAID",
"billingId": "price_1234567890",
"versionNumber": 1,
"isLatest": true,
"entitlements": [
{
"type": "FEATURE",
"id": "feature-advanced-analytics"
},
{
"type": "CREDIT",
"id": "api-calls"
}
],
"metadata": {},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z",
"parentPlanId": null,
"defaultTrialConfig": {
"duration": 14,
"units": "DAY",
"budget": null,
"trialEndBehavior": null
},
"compatibleAddonIds": []
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "CustomerNotFound"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Authorizations
Server API Key
Headers
Account ID — optional when authenticating with a user JWT (Bearer token); falls back to the user's first membership. Ignored for API-key auth.
Environment ID — required when authenticating with a user JWT (Bearer token) on environment-scoped endpoints. Ignored for API-key auth (env is intrinsic to the key).
Path Parameters
The unique identifier of the entity
1 - 255Body
Partially update an existing plan. Only provided fields are updated; omitted fields keep their current value.
The display name of the package
255The description of the package
255The unique identifier for the entity in the billing provider
255Metadata associated with the entity
Show child attributes
Show child attributes
The ID of the parent plan, if this plan should inherit entitlements from another plan. Optional — omit to create a standalone plan with no inherited entitlements.
255Default trial configuration for the plan. When set, subscriptions provisioned on this plan without explicit trial settings automatically start in trial for the configured duration; leave unset for no automatic trial.
Show child attributes
Show child attributes
List of compatible addon IDs for this plan
255Pricing configuration to set on the plan draft. Unlike the rest of this request, this is a full replace of the pricing configuration, not a merge — see SetPackagePricingRequest.
Show child attributes
Show child attributes
Response
The updated plan object.
Response object
Plan configuration object
Show child attributes
Show child attributes
