Skip to main content
POST
/
v1
/
products
/
Go (SDK)
package main

import(
	"context"
	"os"
	polargo "github.com/polarsource/polar-go"
	"github.com/polarsource/polar-go/models/components"
	"log"
)

func main() {
    ctx := context.Background()

    s := polargo.New(
        polargo.WithSecurity(os.Getenv("POLAR_ACCESS_TOKEN")),
    )

    res, err := s.Products.Create(ctx, components.CreateProductCreateProductCreateOneTime(
        components.ProductCreateOneTime{
            Name: "<value>",
            Prices: []components.ProductCreateOneTimePrices{
                components.CreateProductCreateOneTimePricesFixed(
                    components.ProductPriceFixedCreate{
                        PriceCurrency: components.PresentmentCurrencyUsd.ToPointer(),
                        PriceAmount: 677078,
                    },
                ),
                components.CreateProductCreateOneTimePricesCustom(
                    components.ProductPriceCustomCreate{
                        PriceCurrency: components.PresentmentCurrencyUsd.ToPointer(),
                    },
                ),
            },
            OrganizationID: polargo.Pointer("1dbfc517-0bbf-4301-9ba8-555ca42b9737"),
            RecurringInterval: "year",
        },
    ))
    if err != nil {
        log.Fatal(err)
    }
    if res.Product != nil {
        // handle response
    }
}
{
  "id": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "modified_at": "2023-11-07T05:31:56Z",
  "trial_interval_count": 123,
  "name": "<string>",
  "description": "<string>",
  "recurring_interval_count": 123,
  "is_recurring": true,
  "is_archived": true,
  "organization_id": "<string>",
  "metadata": {},
  "prices": [
    {
      "created_at": "2023-11-07T05:31:56Z",
      "modified_at": "2023-11-07T05:31:56Z",
      "id": "<string>",
      "amount_type": "<string>",
      "price_currency": "<string>",
      "is_archived": true,
      "product_id": "<string>",
      "type": "<string>",
      "price_amount": 123,
      "legacy": true
    }
  ],
  "benefits": [
    {
      "id": "<string>",
      "created_at": "2023-11-07T05:31:56Z",
      "modified_at": "2023-11-07T05:31:56Z",
      "type": "<string>",
      "description": "<string>",
      "selectable": true,
      "deletable": true,
      "is_deleted": true,
      "organization_id": "<string>",
      "metadata": {},
      "properties": {
        "note": "<string>"
      },
      "visibility_configurable": true
    }
  ],
  "medias": [
    {
      "id": "<string>",
      "organization_id": "<string>",
      "name": "<string>",
      "path": "<string>",
      "mime_type": "<string>",
      "size": 123,
      "storage_version": "<string>",
      "checksum_etag": "<string>",
      "checksum_sha256_base64": "<string>",
      "checksum_sha256_hex": "<string>",
      "last_modified_at": "2023-11-07T05:31:56Z",
      "version": "<string>",
      "service": "<string>",
      "is_uploaded": true,
      "created_at": "2023-11-07T05:31:56Z",
      "size_readable": "<string>",
      "public_url": "<string>"
    }
  ],
  "attached_custom_fields": [
    {
      "custom_field_id": "<string>",
      "custom_field": {
        "created_at": "2023-11-07T05:31:56Z",
        "modified_at": "2023-11-07T05:31:56Z",
        "id": "<string>",
        "metadata": {},
        "type": "<string>",
        "slug": "<string>",
        "name": "<string>",
        "organization_id": "<string>",
        "properties": {
          "form_label": "<string>",
          "form_help_text": "<string>",
          "form_placeholder": "<string>",
          "textarea": true,
          "min_length": 1073741823,
          "max_length": 1073741823
        }
      },
      "order": 123,
      "required": true
    }
  ]
}

Authorizations

Authorization
string
header
required

You can generate an Organization Access Token from your organization's settings.

Body

application/json
name
string
required

The name of the product.

Required string length: 3 - 64
prices
(ProductPriceFixedCreate · object | ProductPriceCustomCreate · object | ProductPriceFreeCreate · object | ProductPriceSeatBasedCreate · object | ProductPriceMeteredUnitCreate · object)[]
required

List of available prices for this product. It may combine at most one fixed price with one seat-based price (billed as fixed + seat_charge), or contain a single custom or free price, plus any number of metered prices. A free price cannot be combined with other prices, and a custom price cannot be combined with a fixed or seat-based price. Metered prices are not supported on one-time purchase products.

Minimum array length: 1

Schema to create a fixed price.

recurring_interval
enum<string>
required

The recurring interval of the product.

Available options:
day,
week,
month,
year
metadata
Metadata · object

Key-value object allowing you to store additional information.

The key must be a string with a maximum length of 40 characters. The value must be either:

  • A string with a maximum length of 500 characters
  • An integer
  • A floating-point number
  • A boolean

You can store up to 50 key-value pairs.

description
string | null

The description of the product.

visibility
enum<string>
default:public

The visibility of the product.

Available options:
draft,
private,
public
medias
string<uuid4>[] | null

List of file IDs. Each one must be on the same organization as the product, of type product_media and correctly uploaded.

attached_custom_fields
AttachedCustomFieldCreate · object[]

List of custom fields to attach.

organization_id
string<uuid4> | null

The organization ID.

Example:

"1dbfc517-0bbf-4301-9ba8-555ca42b9737"

trial_interval
enum<string> | null

The interval unit for the trial period.

Available options:
day,
week,
month,
year
trial_interval_count
integer | null

The number of interval units for the trial period.

Required range: 1 <= x <= 1000
recurring_interval_count
integer
default:1

Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on.

Required range: 1 <= x <= 999

Response

Product created.

A product.

id
string<uuid4>
required

The ID of the object.

created_at
string<date-time>
required

Creation timestamp of the object.

modified_at
string<date-time> | null
required

Last modification timestamp of the object.

trial_interval
enum<string> | null
required

The interval unit for the trial period.

Available options:
day,
week,
month,
year
trial_interval_count
integer | null
required

The number of interval units for the trial period.

name
string
required

The name of the product.

description
string | null
required

The description of the product.

visibility
enum<string>
required

The visibility of the product.

Available options:
draft,
private,
public
recurring_interval
enum<string> | null
required

The recurring interval of the product. If None, the product is a one-time purchase.

Available options:
day,
week,
month,
year
recurring_interval_count
integer | null
required

Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on. None for one-time products.

is_recurring
boolean
required

Whether the product is a subscription.

is_archived
boolean
required

Whether the product is archived and no longer available.

organization_id
string<uuid4>
required

The ID of the organization owning the product.

metadata
object
required
prices
(LegacyRecurringProductPriceFixed · object | LegacyRecurringProductPriceCustom · object | LegacyRecurringProductPriceFree · object | ProductPriceFixed · object | ProductPriceCustom · object | ProductPriceFree · object | ProductPriceSeatBased · object | ProductPriceMeteredUnit · object)[]
required

List of prices for this product.

A recurring price for a product, i.e. a subscription.

Deprecated: The recurring interval should be set on the product itself.

benefits
(BenefitCustom · object | BenefitDiscord · object | BenefitGitHubRepository · object | BenefitDownloadables · object | BenefitLicenseKeys · object | BenefitMeterCredit · object | BenefitFeatureFlag · object | BenefitSlackSharedChannel · object)[]
required

List of benefits granted by the product.

A benefit of type custom.

Use it to grant any kind of benefit that doesn't fit in the other types.

medias
ProductMediaFileRead · object[]
required

List of medias associated to the product.

attached_custom_fields
AttachedCustomField · object[]
required

List of custom fields attached to the product.