import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const product = await client.v1.products.createProduct({ id: 'id', displayName: 'displayName' });
console.log(product.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
)
product = client.v1.products.create_product(
id="id",
display_name="displayName",
)
print(product.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"),
)
product, err := client.V1.Products.NewProduct(context.TODO(), stigg.V1ProductNewProductParams{
ID: "id",
DisplayName: "displayName",
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", product.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.products.Product;
import io.stigg.models.v1.products.ProductCreateProductParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
ProductCreateProductParams params = ProductCreateProductParams.builder()
.id("id")
.displayName("displayName")
.build();
Product product = client.v1().products().createProduct(params);
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
product = stigg.v1.products.create_product(id: "id", display_name: "displayName")
puts(product)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Products;
StiggClient client = new();
ProductCreateProductParams parameters = new()
{
ID = "id",
DisplayName = "displayName",
};
var product = await client.V1.Products.CreateProduct(parameters);
Console.WriteLine(product);stigg v1:products create-product \
--api-key 'My API Key' \
--id id \
--display-name displayNamecurl --request POST \
--url https://api.stigg.io/api/v1/products \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"id": "<string>",
"displayName": "<string>",
"description": "<string>",
"multipleSubscriptions": false,
"metadata": {}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'displayName' => '<string>',
'description' => '<string>',
'multipleSubscriptions' => false,
'metadata' => [
]
]),
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": "product-revvenu",
"displayName": "Revvenu",
"description": "SaaS billing platform",
"status": "PUBLISHED",
"multipleSubscriptions": false,
"metadata": {},
"productSettings": {
"downgradePlanId": "c9b0a382-5b7d-4d32-9f62-8c4e1a7b3d9f",
"prorateAtEndOfBillingPeriod": null,
"subscriptionCancellationTime": "END_OF_BILLING_PERIOD",
"subscriptionEndSetup": "DOWNGRADE_TO_FREE",
"subscriptionStartPlanId": "a1d4e8f2-6c3b-4a9e-b5f7-2d8c9e0f1a3b",
"subscriptionStartSetup": "FREE_PLAN"
},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z"
}
}{
"message": "<string>",
"code": "BadUserInput"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "DuplicatedEntityNotAllowed"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Create product
Creates a new product.
import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const product = await client.v1.products.createProduct({ id: 'id', displayName: 'displayName' });
console.log(product.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
)
product = client.v1.products.create_product(
id="id",
display_name="displayName",
)
print(product.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"),
)
product, err := client.V1.Products.NewProduct(context.TODO(), stigg.V1ProductNewProductParams{
ID: "id",
DisplayName: "displayName",
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", product.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.products.Product;
import io.stigg.models.v1.products.ProductCreateProductParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
ProductCreateProductParams params = ProductCreateProductParams.builder()
.id("id")
.displayName("displayName")
.build();
Product product = client.v1().products().createProduct(params);
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
product = stigg.v1.products.create_product(id: "id", display_name: "displayName")
puts(product)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Products;
StiggClient client = new();
ProductCreateProductParams parameters = new()
{
ID = "id",
DisplayName = "displayName",
};
var product = await client.V1.Products.CreateProduct(parameters);
Console.WriteLine(product);stigg v1:products create-product \
--api-key 'My API Key' \
--id id \
--display-name displayNamecurl --request POST \
--url https://api.stigg.io/api/v1/products \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"id": "<string>",
"displayName": "<string>",
"description": "<string>",
"multipleSubscriptions": false,
"metadata": {}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'displayName' => '<string>',
'description' => '<string>',
'multipleSubscriptions' => false,
'metadata' => [
]
]),
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": "product-revvenu",
"displayName": "Revvenu",
"description": "SaaS billing platform",
"status": "PUBLISHED",
"multipleSubscriptions": false,
"metadata": {},
"productSettings": {
"downgradePlanId": "c9b0a382-5b7d-4d32-9f62-8c4e1a7b3d9f",
"prorateAtEndOfBillingPeriod": null,
"subscriptionCancellationTime": "END_OF_BILLING_PERIOD",
"subscriptionEndSetup": "DOWNGRADE_TO_FREE",
"subscriptionStartPlanId": "a1d4e8f2-6c3b-4a9e-b5f7-2d8c9e0f1a3b",
"subscriptionStartSetup": "FREE_PLAN"
},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z"
}
}{
"message": "<string>",
"code": "BadUserInput"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "DuplicatedEntityNotAllowed"
}{
"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).
Body
Create a product with a unique identifier, optional display name, description, and metadata.
The unique identifier for the entity
1 - 255^[a-zA-Z0-9][a-zA-Z0-9_|.-]*$Display name of the product
255Description of the product
255Indicates if multiple subscriptions to this product are allowed
Additional metadata for the product
Show child attributes
Show child attributes
Response
The newly created product object.
Response object
Product configuration object
Show child attributes
Show child attributes
Related topics
Zuora APIs used by StiggCustom flowsMonetize your product using recurring creditsSet up credits auto-rechargeLaunch a trial for a paid plan with unlimited usage-based features