Skip to content

Selling

Catalog fields

On this page

Use these tables to build a ListingInput for market.products.define. They list SDK input types, required fields, defaults, and validation constraints. The API uses the same field names, but sends prices and tier bounds as strings. validateListing checks input locally; Metzia also checks it on the server.

Objects are strict. An unknown field fails with the unknown rule.

Why the values are closedLink to this section

An agent compares listings across sellers. Classification fields use a shared vocabulary so that the same value has the same meaning across listings.

Identity and textLink to this section

FieldTypeAllowed valuesRequired
skustring1 to 120 characters after a trimYes
namestring1 to 120 characters after a trimYes
summarystring1 to 280 characters after a trimYes
descriptionstring or nullAt most 4000 characters after a trimNo. The default is null.
notAFitWhenstring40 to 1000 characters after a trimYes
destinationPathstringA path on your own site that starts with one slash, for example /products/exampleYes

A destinationPath holds no backslash and no . or .. segment. The rule also applies to every form that the path decodes to. Not a fit when explains how to write notAFitWhen.

ClassificationLink to this section

FieldTypeAllowed valuesRequired
categorySlugstringA slug from the category listYes
pricingModelstringflat, seat, usage, or tieredYes
deliversstringseats, credits, api_key, license, access, or shipmentYes
provisioningstringdelegated, keyless, or claimYes
integrationsarray of stringsAt most 50 slugs from the integration listNo. The default is an empty array.
limitsobjectAt most 50 vocabulary keys. Values are nonnegative safe integers or booleans, as the vocabulary requires.No. The default is an empty object.

A slug holds 1 to 63 lower case letters, digits, and hyphens. It starts and ends with a letter or a digit. The SDK exports the rule as SLUG_PATTERN.

A limit key holds 1 to 63 lower case letters, digits, and underscores. It starts with a letter.

Metzia checks categorySlug, every integration slug, and every limit key against its vocabulary when you submit a listing. An unknown value fails with unknown_category, unknown_integration, or unknown_limit_key. A retired category fails with deprecated_category.

Price pointsLink to this section

FieldTypeAllowed valuesRequired
pricePointsarray of price points1 to 20 price pointsYes

Each price point holds the fields below.

FieldTypeAllowed valuesRequired
amountMicrosnumberNonnegative safe integer in micro-units of USD. One dollar is 1000000.Yes
unitNamestring1 to 40 characters after a trimYes
intervalstring or nullmonth, year, or nullNo. The default is null.
planstring or null1 to 80 characters after a trim, or nullNo. The default is null.
tierMinnumber or nullNonnegative safe integer, or null. Inclusive lower bound.No. The default is null.
tierMaxnumber or nullNonnegative safe integer, or null. Exclusive upper bound.No. The default is null.

SDK numeric values must not exceed Number.MAX_SAFE_INTEGER (9007199254740991). The SDK converts prices and tier bounds to digit strings for JSON. In a direct API request, send amountMicros, tierMin, and tierMax as digit strings or null where allowed, not JSON numbers.

The price points also follow these rules:

  • A price point states tierMin or tierMax only when pricingModel is tiered.
  • A tiered listing forms one ordered, contiguous set of tiers. Every tier states tierMin. Only the last tier can leave tierMax null.
  • A listing with several price points states a plan on each one, unless the pricing model is tiered.
  • Plan names must be unique within a listing, ignoring case.

SubscriptionLink to this section

FieldTypeAllowed valuesRequired
isSubscriptionbooleantrue or falseNo. The default is false.
subscriptionobject or nullThe terms below, or nullYes when isSubscription is true

The subscription object holds the fields below.

FieldTypeAllowed valuesRequired
billingIntervalstringmonthly, annual, or otherYes
renewalBehaviourstringauto_renews, manual_renewal, or one_timeYes
cancellationUrlstringOne absolute https address on your own site, at most 2048 characters, with no credentialsYes
freeTrialDaysinteger or nullA whole number of 0 to 365, or nullNo. The default is null.
renewalTermsstring or null40 to 600 Unicode code points, or nullNo. The default is null.

The subscription fields also follow these rules:

  • A price point that charges every month or every year makes the listing a subscription. Set isSubscription to true.
  • If isSubscription is false, omit subscription or set it to null.
  • A monthly billing interval needs a price point with the month interval. An annual billing interval needs a price point with the year interval.
  • A one_time renewal behavior refuses a price point that charges every month or every year.
  • A cancellationUrl holds printable ASCII characters only. Percent encode any other character, and write an international host in its xn-- form.
  • Metzia compares the host of cancellationUrl with the website domain that your seller profile holds.

Updated 2026-10-07