Feature flags
The Features constants control which capabilities an extension declares support for. Extensions return these from their getSupports() method to tell Siren which engagement triggers and conversion types they enable.
| Constant | Value | What it enables |
|---|
Features::Coupons | coupons | Coupon-based engagement tracking |
Features::Courses | courses | Course completion engagement triggers |
Features::Lessons | lessons | Lesson completion engagement triggers |
Features::Posts | posts | Blog post visit engagement triggers |
Features::Renewals | renewals | Renewal conversion type |
Features::Forms | forms | Form submission engagement triggers |
Features::ManualOrdering | manual_ordering | Manual product ordering support |
Source: Siren\Extensions\Core\Enums\Features
Frontend feature flags
The frontend build system uses a separate set of flags to control which admin screens are available. These are injected at build time and cannot be changed at runtime.
| Flag | Lite | Essentials |
|---|
programs | yes | yes |
collaborators | yes | yes |
conversions | yes | yes |
engagements | yes | yes |
opportunities | yes | yes |
obligations | yes | yes |
fulfillments | yes | yes |
transactions | yes | yes |
programGroups | no | yes |
distributors | no | yes |
Status values
Collaborator status
| Status | Description |
|---|
active | Participating in programs, earning rewards |
pending | Awaiting approval |
inactive | Temporarily disabled |
rejected | Application denied |
deleted | Soft-deleted |
Program status
| Status | Description |
|---|
active | Running and processing conversions |
inactive | Paused, not processing |
draft | Not yet published |
deleted | Soft-deleted |
Conversion status
| Status | Description |
|---|
pending | Awaiting commerce event completion |
approved | Confirmed, obligation being calculated |
complete | Fully processed with obligation created |
rejected | Denied (e.g., refund) |
deleted | Soft-deleted |
Engagement status
| Status | Description |
|---|
active | Credit claim is live, awaiting conversion |
complete | Converted into an obligation |
expired | Engagement window elapsed |
Obligation status
| Status | Description |
|---|
pending | Awaiting approval or fulfillment |
approved | Confirmed, ready for payout |
complete | Included in a fulfillment and paid |
rejected | Cancelled or denied |
deleted | Soft-deleted |
Fulfillment status
| Status | Description |
|---|
pending | Created, not yet processing |
processing | Payment in progress |
complete | All payouts disbursed |
failed | Payment processing failed |
Payout status
| Status | Description |
|---|
paid | Disbursed to collaborator |
unpaid | Awaiting payment |
Transaction status
| Status | Description |
|---|
pending | Commerce event received, not finalized |
complete | Order confirmed and finalized |
failed | Transaction did not complete |
Distributor status
| Status | Description |
|---|
active | Running distributions on schedule |
inactive | Paused |
deleted | Soft-deleted |
Currencies
Siren ships with the following currencies registered. Extensions can register additional currencies via the CurrencyRegistryInitiated event.
| Code | Symbol | Name |
|---|
USD | $ | US Dollar |
EUR | € | Euro |
GBP | £ | British Pound |
JPY | ¥ | Japanese Yen |
CAD | $ | Canadian Dollar |
AUD | $ | Australian Dollar |
NZD | $ | New Zealand Dollar |
CHF | CHF | Swiss Franc |
CNY | ¥ | Chinese Yuan |
INR | ₹ | Indian Rupee |
BRL | R$ | Brazilian Real |
MXN | $ | Mexican Peso |
SGD | $ | Singapore Dollar |
HKD | $ | Hong Kong Dollar |
KRW | ₩ | South Korean Won |
SEK | kr | Swedish Krona |
NOK | kr | Norwegian Krone |
PLN | zł | Polish Zloty |
TRY | ₺ | Turkish Lira |
THB | ฿ | Thai Baht |
MYR | RM | Malaysian Ringgit |
ZAR | R | South African Rand |
RUB | ₽ | Russian Ruble |
All monetary values in Siren are stored as integers in the smallest currency unit (e.g., cents for USD). See Amount & Currency for conversion utilities.
Engagement trigger types
Engagement triggers define what actions create credit claims for collaborators.
Core triggers (always available)
| ID | Label | Description |
|---|
referredSiteVisit | Site Visited | Customer arrives via a collaborator’s referral link |
manual | Manual Attribution | Admin manually attributes a transaction to a collaborator |
Feature-dependent triggers
| ID | Label | Requires |
|---|
boundCouponUsed | Coupon Code Used | Features::Coupons |
boundPostUsed | Blog Post Visited | Features::Posts |
collaboratorProductSold | Collaborator Product Sold | (product ownership) |
courseCompleted | Course Completed | Features::Courses |
lessonCompleted | Lesson Completed | Features::Lessons |
collaboratorFormSubmitted | Form Submitted | Features::Forms |
Extensions can register custom engagement triggers via the EngagementTriggerRegistryInitiated event.
Conversion types
| ID | Label | Supported incentive types |
|---|
sale | Sale | saleFixedPerTransaction, saleFixedPerProduct, saleTransactionPercentage |
lead | Lead | leadFixed |
renewal | Renewal | (requires Features::Renewals) |
Incentive types
Incentive types define how reward amounts are calculated.
Core (Lite + Essentials)
| ID | Label | Description |
|---|
saleFixedPerTransaction | Fixed per transaction | Flat amount per qualifying transaction |
saleTransactionPercentage | Percentage of transaction | Percentage of the transaction total |
Essentials only
| ID | Label | Description |
|---|
saleFixedPerProduct | Fixed per product | Flat amount per qualifying product in a transaction |
leadFixed | Fixed per lead | Flat amount per lead conversion |
Incentive resolvers
Resolvers determine how rewards are distributed when multiple collaborators have engagements for the same conversion.
Core (Lite + Essentials)
| ID | Label | Description |
|---|
newestBindingWins | Newest engagement wins | Last collaborator to engage gets the full reward |
oldestBindingWins | Oldest engagement wins | First collaborator to engage gets the full reward |
Essentials only
| ID | Label | Description |
|---|
topScoreWins | Top score wins | Highest engagement score gets the full reward |
evenlySharedPool | Shared engagement pool | Reward split equally among all engaged collaborators |
everyBindingWins | Every engagement wins | Each engaged collaborator receives the full amount |
performanceSharePool | Performance-weighted pool | Reward distributed proportionally by engagement score |
Program group sorters
When programs are in a group, the sorter determines which program takes priority for a given conversion.
| ID | Description |
|---|
newestBindingWins | Most recent engagement determines which program fires |
oldestBindingWins | First engagement determines which program fires |
Collaborator group structures
A collaborator group’s structure is the id of a registered structure resolver. The resolver determines how members relate to one another and which walker capabilities the group provides. See Choosing a collaborator group structure for the picker guide.
| ID | Tier | Description |
|---|
flat | Plus | No hierarchy. Every member is a peer. Provides no walker capabilities. |
linearChain | Pro | Members are ordered by a position value. Provides hasLayer. |
parentChild | Pro | Members form a tree by parentCollaboratorId. Provides hasLayer. |
The installed resolvers and the capabilities each one advertises are also available at runtime via GET /collaborator-groups/structures (see Collaborator Groups).
Calculation strategies
A calculationType is the id of a registered calculation strategy. It is stored on both sides of a calculation: on program engagement types and on distributor metric types. The strategy determines how a reward is spread across a group’s members. See Choosing a calculation strategy for the picker guide.
| ID | Tier | Requires | Description |
|---|
fixed | Core | (none) | Credits the converting collaborator only, with no layered distribution. Valid against any structure, including flat. |
upline | Pro | hasLayer | Credits collaborators above the converting member, walking the group upward by layer. |
downline | Pro | hasLayer | Credits collaborators below the converting member, walking the group downward by layer. |
The Requires column is the walker capability the strategy needs from the bound group’s structure. The calc picker hides upline and downline when the bound structure does not provide hasLayer, which is why they do not appear for a flat group. fixed requires nothing, so it is always available.
Walker capabilities
The WalkerCapability enum identifies what a structure’s walkers can do. A calculation strategy can require a capability, and the calc picker hides strategies whose required capabilities the bound group’s structure does not provide.
| Constant | Value | Description |
|---|
WalkerCapability::HAS_LAYER | hasLayer | The structure’s walkers yield layered steps, so a calc can credit collaborators per layer. Provided by linearChain and parentChild, not by flat. Required by the upline and downline calculation strategies. |
Source: Siren\Pro\Core\Groups\Structure\Enums\WalkerCapability
Line item filter types
Programs can filter which line items in a transaction are eligible for reward calculation.
| Type | Description |
|---|
inCategories | Only items in specific product categories |
withSkus | Only items matching specific SKUs |
withTypes | Only items of a specific type (products or subscriptions) |
collaboratorOwned | Only items owned by the collaborator |
Distribution frequency
Distributors use these frequencies to schedule reward distributions.
| Value | Description |
|---|
weekly | Distributes rewards every week |
monthly | Distributes rewards every month |
yearly | Distributes rewards every year |
Roles
| Constant | Value | Description |
|---|
Roles::Collaborator | collaborator | Affiliate or partner participating in programs |
Roles::PlatformManager | platform_manager | Full administrative access |
Roles::FulfillmentManager | fulfillment_manager | Can manage payouts and fulfillments |
Roles::ProgramManager | program_manager | Can manage programs and collaborators |
Roles::CreativeManager | creative_manager | Can manage promotional creatives |
Roles::GoalManager | goal_manager | Can manage goals and targets |
The Value column is the base identifier from the Roles enum. The role slug actually registered in WordPress and checked by the capability gates is prefixed with siren_. For example, Roles::PlatformManager is registered as the role siren_platform_manager, and Roles::Collaborator as siren_collaborator. The built-in WordPress administrator role is the exception and is used unprefixed. When you call current_user_can() or add_role(), use the siren_-prefixed slug rather than the bare enum value.
Managed resources
Capabilities are generated per resource by pairing an action with a model class. CollaboratorGroup (Siren\Plus\Core\Groups\Models\CollaboratorGroup) is a permissioned resource: every collaborator-group endpoint requires the matching capability on it. Only administrator and siren_platform_manager receive full create, read, update, and delete capabilities on CollaboratorGroup. See Collaborator Groups for the endpoints these capabilities gate.