DisplaySync

Pricing tiers

DisplaySync uses a platform fee + per-sign-day metered billing model that aligns with how AV equipment and labor are billed on event production budgets. Marketing pricing lives at displaysync.live/pricing; this page is the docs-side reference with the full enforcement detail behind each limit.

Tier table

TierPlatform fee/moPer sign-daySigns/eventTotal signsConcurrent eventsTeam membersStorage
Free$033120.5 GB
Starter$299$152525155 GB
Professional$599$127515051550 GB
Agency$999$10200200Unlimited5050 GB
Pilot$0200200Unlimited5050 GB
EnterpriseCustomCustomUnlimitedUnlimitedUnlimitedUnlimited500 GB

Pilot and Managed are admin-assigned tiers. Pilot is for demos and trials (usage tracked, not billed). Managed is for DisplaySync-operated fleets (no preset limits — soft caps only). Neither is self-serve.

About the per-event sign limit

The per-event sign number is published as a soft guardrail aligned with the marketing tiers — but the backend currently enforces only the total signs cap across the org, not per-event. So a Professional org could put all 150 of its signs into a single event if it wanted to. This may tighten in a future release.

Additional tier limits

These limits aren't in the headline marketing comparison but matter for orgs choosing a tier or hitting an enforcement edge.

FieldFreeStarterProAgencyEnterprise
maxOrganizations (single-org cap; how many orgs one self-service account can own)11110
analyticsRetentionDays (per-sign analytics history)079090365
auditLogRetentionDays3030unlimited
Agency-only platform limits (platformMaxSigns / maxManagedOrgs / platformMaxStorageGB)1500 / 10 / 500 GB

The Agency-only platform limits cap the totals across all managed orgs an Agency operator runs — independent of any single org's per-tier cap.

What a "sign-day" is

A sign-day is any calendar day during which a sign was linked to an event. Mechanics:

  • A sign linked at 11:55 PM and unlinked at 12:05 AM the next day counts as 2 sign-days (each calendar day touched is one sign-day).
  • A sign powered off but still linked to the event still counts — it's the link that triggers metering, not on/off state.
  • An unlinked sign (in the dashboard's Unlinked state) does not count.
  • Sign-days are computed in your org's time zone (set in Org → General).

This mirrors how equipment rental is billed: you pay for the full day a piece of gear is on the show, regardless of how many hours it was actually powered.

Limits and how they're enforced

Limits are enforced server-side by the enforceTierLimit(resource) middleware. When you trip a limit, the API returns:

HTTP 403
Content-Type: application/json

{
  "success": false,
  "message": "You've reached your plan limit of <label>. Upgrade your plan to add more.",
  "limit": <number>,
  "current": <number>,
  "resource": "<events|signs|members|storage>"
}

The limit and current fields make it straightforward for client code to compute headroom or surface a useful upgrade prompt.

Total signs

The signs resource is org-wide — it counts every Sign record in the org, regardless of which event it's in or whether the kiosk is currently online.

  • Tripped on sign creation (claim or pre-register).
  • Unlinking a sign does not drop its Sign record (the record stays as unlinked), so unlinking alone doesn't free a slot. Delete the Sign record from the dashboard to free one.

Concurrent events

The events resource counts events in active state across the org. upcoming, completed, and archived events don't count.

  • Tripped when activating an event (start date arrives, or manual activation).
  • Move stale events to archived to free slots.

Team members

The members resource counts all org-level memberships (owner + admin + member combined).

  • Tripped on invitation acceptance.
  • Pending invitations don't count toward the cap until they're accepted.
  • Removing a member frees a slot immediately.

Storage

The storage resource caps the bytes of content uploaded to the org (configured in GB per tier). Counted in bytes by the middleware.

  • Tripped on content upload.
  • Today, content is webpage URLs only (v1) — storage is effectively unused. Image, video, and playlist uploads in v2 will be the first time most orgs touch this limit.

Feature gates

Some features are tier-gated by capability flag rather than usage-metered. The flags are checked via requireFeature() middleware on the relevant routes.

Feature flagFreeStarterProfessionalAgencyEnterprise
apiAccess
whiteLabel
clientViewerPortal
crossOrgDashboard
sso
webhooks

Capability flags vs. shipping features

These flags gate routes that are or will be implemented. Some features behind their flags are still in development:

  • apiAccess is set on Professional+ tiers, but a public API isn't actually available yet — see API overview.
  • webhooks and sso are similarly enabled at the tier-flag level but not yet shipping.

The flags exist in advance of the features so that, when each feature ships, it lights up automatically for tiers that already paid for it.

Billing mechanics

  • Platform fee is billed monthly upfront in advance, prorated to the day on tier upgrades/downgrades. Stripe handles the proration.
  • Sign-day usage is billed in arrears at the end of each monthly billing cycle. You see the usage tally in the dashboard's Organization → Billing view in real time.
  • Failed payment triggers a 7-day dunning period. After that, the org transitions to read-only — signs continue displaying content (they're already deployed) but no new claims, content changes, or settings updates apply. Resolving the payment restores write access. See Dunning + downgrade blocking below for the full sequence.

Dunning + downgrade blocking

When a Stripe payment fails, the account enters dunning — a 3-attempt retry sequence on the Stripe side, paired with a grace window before suspension on the DisplaySync side.

StageWhat's happeningDashboard impact
Initial failureStripe retries the card automaticallyBanner alerts billing-role members; signs continue running
Grace window (~7 days)All retries failed; account is in dunningDashboard renders read-only; no new claims/edits/team changes; signs continue running
SuspensionGrace expired without resolutionDashboard read-only; signs continue running until manually unregistered

Tier downgrades are blocked while in dunning — operators must resolve dunning (Stripe Customer Portal → update payment method) before downgrading. The meter continues to accrue during dunning; sign-day usage isn't paused.

To resolve: open Profile → Billing → Manage in Stripe and update the card / pay the outstanding invoice. The dashboard re-enables write operations within ~1 minute of a successful retry.

Active event — precise definition

Tier sign limits enforce against signs assigned to events with status: 'active'. Understanding when an event becomes active matters for self-service users planning multi-day events.

Date-driven transitions:

  • upcomingactive happens when the current date falls between startDate and endDate (inclusive, in event-display TZ)
  • activecompleted happens the day after endDate
  • A manual archived transition is possible from any state — operator-initiated

The meter ticks for the whole event window, not just hours-on. A 3-day conference is 3 sign-days per assigned sign, regardless of whether you power them off overnight.

Tier limit enforcement is at claim/link time — adding a sign that pushes you over the tier's maxSigns is rejected with a clear error referencing the tier's cap. Existing claims aren't ejected mid-event; the next claim is the gating moment.

Upgrades and downgrades

  • Upgrades take effect immediately. New limits apply right away — useful when you need to add capacity mid-event.
  • Downgrades take effect at the next billing cycle to avoid disrupting in-flight events. The downgrade fails up front if your current usage exceeds the target tier's limits ("you have 12 active events; downgrading to Starter would breach the 1-event cap").

Pilot and Managed tiers

These two are admin-assigned overrides:

TierPurposeBehavior
PilotDemos, customer trials, evaluationFree; usage tracked but not reported to Stripe
ManagedDisplaySync-operated fleets (us running the deployment for the customer)Custom-invoiced outside Stripe; soft caps only

These tiers can't be self-served — they're set by [email protected] as part of an evaluation or contract.

Free tier specifics

The Free tier is permanently free, no credit card required. The hard caps:

  • 3 signs total (not per-event — 3 across the whole org)
  • 1 event (concurrent or otherwise — must complete or archive before starting the next)
  • 2 team members including the owner
  • All v1 features available — claim, assign, monitor, mobile app, remote control, notifications, Tailscale
  • Best-effort support: 1-3 business days, docs first

Useful for: learning the platform, side projects, single-day single-display events. Production deployments usually outgrow it within the first project.

See also