Single source of truth for Birkly CMS documentation

The Commerce fieldtype is registered by the Commerce plugin on the fieldtype shelf. It marks how an entry (or variant sub-entry) is sold.

Commerce v2 stores fulfillment (ship, deliver, register, gift_card, none), optional tax_class / tax_included, ship weight_grams / dims, and one or more purchase_options (one-time and/or recurring prices) on each sellable entry. Optional quantity_available and sku support capacity and fulfillment. Variants use a variants sub-collection with a Commerce field on each sub-entry.

Schema (v2 stored value)

FieldTypeNotes
fulfillmentenumship, deliver, register, gift_card, none
tax_classstringstandard, reduced, zero, or custom. Default standard. Rates from Settings → Tax
tax_includedboolDefault true (EU): shelf price includes tax. false = tax excluded and added at checkout
weight_gramsint | nullRequired on ship when EasyPost live rates are enabled
length_mm / width_mm / height_mmint | nullOptional parcel dims for live rates
purchase_options[]arrayid, label, billing, price_cents, currency, interval?
quantity_availableint | nullCatalog projection of Inventory Available; capacity for register; null = unlimited
skustring | nullFulfillment/import; defaults to entry slug

Example:

{
  "fulfillment": "register",
  "tax_class": "standard",
  "tax_included": true,
  "purchase_options": [
    { "id": "ticket", "label": "Workshop ticket", "billing": "one_time", "price_cents": 2500, "currency": "eur" }
  ],
  "quantity_available": 20
}

Fulfillment panels

ValueEditor extrasCheckout
shipWeight (grams); optional L×W×H mmShipping address; live rates need weight
deliverAsset URL/fileDownload token after pay
registerUses quantityAttendee name
gift_cardFace value = purchase option priceEmail only; issues codes on pay
none—Purchase mappings / membership

Collection schema may include commerce_settings to preset enabled fulfillments and billing intervals. Fieldtype profiles under Commerce → Fieldtypes can restrict enabled fulfillments (including a gift-card-only profile).

What is NOT on the fieldtype

  • Discount amounts — Commerce Discounts (promotions)
  • Affiliate codes — ?ref= + rule engine
  • Tier grants — Settings → Mappings
  • Stock ledger rows — Inventory (modes: Unlimited · Simple · Locations)
  • Tax rates / providers — Settings → Tax (field picks tax_class + included/excluded mode)
  • Shipping rate provider — Settings → Shipping (field supplies weight/dims for quotes)

Catalog index

One indexed row per sellable unit (variant sub-entry if variants exist, else parent). Cart/checkout read from catalog_index.json. For countable SKUs, Inventory is the ledger system of record; Catalog stores projected availability.

Legacy migration

P6.4 values (price_cents + billing only) migrate to a single purchase_option with inferred fulfillment (default ship).