Free-Tier Conditions & Limitations

“Free” is rarely unconditional. A trial expires, a credit pool runs dry, a tier wants a card on file, a program is open only to students. To compare offers honestly we enumerate every constraint on each provider and assign it a type from a fixed taxonomy. Free-text caveats are not enough — typed limitations are searchable, sortable, renderable as icons, and feed directly into the generosity score.

The rule is simple: list all of them, not just the headline three. A renewable daily quota, a finite lifetime cap, a required deposit, and a no-HA restriction can all apply to the same provider at once, and each one matters to a different builder.

How a limitation is shaped

Every limitation is a typed object:

- type: total_volume_cap      # one of the taxonomy types below
  label: "$200 lifetime credit"   # short, provider-specific headline
  detail: "A one-time $200 credit pool; once spent there is no free tier."
  severity: high              # info | low | medium | high
  renewable: false            # true only for cycle-resetting quotas/rate limits
  value: 200                  # optional, when quantifiable
  unit: USD                   # optional

The four classes

Every limitation type belongs to one of four classes. The class is what determines how much a limitation should hurt the score — a renewable quota is expected, a barrier or a finite cap is costly.

ClassMeaningEffect on score
RenewableResets on a cycle (daily / monthly). Normal and expected.Low — constrains throughput, not lifetime value.
FiniteA one-time pool or window that does not regenerate.High — caps the total value you can ever extract.
BarrierAn up-front gate (cost or eligibility) before you can use it.Medium–High — hurts accessibility.
QualityThe tier works but is degraded versus paid.Medium — hurts usability.

The distinction the catalog cares about most: a daily quota that regenerates is fine; a fixed lifetime pool that never comes back is a real ceiling. A provider that gives “1M tokens per day, every day” is in a completely different class from one that gives “1M tokens, ever.”

The taxonomy

IconTypeClassDefault severityWhat it means
time_limitedfinitehighAccess expires after a fixed period — a trial window or a credit that lapses. After it ends you must pay or reapply.
🔋total_volume_capfinitehighA one-time allotment that never regenerates — e.g. $200 of credits or 1M lifetime tokens. Once spent, it is gone.
🔄quota_renewablerenewablelowA daily or monthly allotment that resets each cycle. Normal and expected; constrains throughput, not lifetime value.
🔁rate_limitrenewablelowA requests-per-second/minute/day ceiling that continuously resets. Caps burst throughput only.
💳requires_cardbarriermediumA credit/debit card must be on file to activate the tier, even if it is never charged.
💰requires_min_balancebarriermediumThe tier unlocks or expands only after you deposit/hold a minimum balance — e.g. OpenRouter’s $10 top-up for higher limits.
🔒requires_eligibilitybarrierhighRestricted to a group or requires approval: students, startups, a specific region, a waitlist, or manual review.
🧩feature_restrictedqualitymediumThe free tier omits capabilities present on paid plans — no high availability, no backups, fewer models/regions, capped seats.
🐢performance_throttledqualitymediumRuns on shared, deprioritized, or slower resources; latency and throughput are worse than paid tiers.
💤cold_start_sleepqualitymediumThe service spins down when idle and cold-starts on the next request, adding latency and making it unsuitable for always-on use.
1️⃣single_resource_capqualitylowHard cap of one — one project, one node, one database, one seat, or one domain — with no horizontal room on the free tier.
🚫no_commercial_usequalityhighThe license or terms forbid commercial or production use; the tier is for evaluation/personal projects only.
🏷️attribution_requiredqualitylowYou must display the provider’s branding or a backlink to keep using the free tier.

Reading the icons

In the catalog, a provider’s limitation icons are shown as a compact row. At a glance:

  • ⏳ or 🔋 → finite. There is a clock or a ceiling; plan an exit.
  • 🔒 💳 💰 → a barrier. You can’t just sign up and go.
  • 🔄 🔁 → renewable. Normal throughput limits, nothing to worry about long-term.
  • 💤 🐢 🧩 1️⃣ 🚫 🏷️ → quality cuts. It works, but with caveats for production.

The two highest-signal distinctions, called out explicitly because the project brief demands them:

  1. Time-limited (⏳) vs. renewable (🔄): does the clock run out, or does the allowance come back every cycle?
  2. Finite pool (🔋) vs. renewable (🔄): is there a fixed lifetime amount, or does it regenerate? AWS’s “$200 credits, 6 months” is both time-limited and a finite pool; a “500 MB/month, forever” tier is neither.

Classification fields

Alongside the limitation list, every provider carries a few typed scalars that summarize the shape of the offer. These power filtering and the score.

pricingModel — the kind of free this is:

ValueMeaning
free_foreverA perpetual, standalone free tier.
freemiumA free tier inside a paid product.
finite_creditA one-time credit pool, then pay-as-you-go.
trialA time-boxed evaluation.
byokAn aggregator / bring-your-own-key surface.
open_source_selfhostFree when you self-host the open-source software.
studentAn education / student program.
startupA startup / accelerator program.

renewalnone · daily · monthly · annual · one_time. The cadence at which the main allowance refills.

requiresCard — boolean. Whether a card must be on file at all.

creditAmountUsd — the dollar value of the credit pool when the offer is credit-based, otherwise null.

eligibility — who can actually get it: anyone · students · startups · businesses · open_source_projects · region_restricted · approval_required · waitlist.

Special-condition labels

Two of these constraints deserve loud, dedicated treatment in the UI because they change whether the offer is even real for you, not just how big it is:

  • Time-limited (⏳) — surfaced as a label with the duration (“Trial: 3 months”, “Credit expires in 6 months”). This is the most common reason a “free” tool isn’t free next quarter.
  • Capacity-limited / finite pool (🔋) — surfaced as a label with the total (“$200 total”, “1M tokens lifetime”). The key signal here is non-renewing: it is a fixed amount, not a per-cycle quota.

Eligibility gates (🔒, plus the specific eligibility tags such as students or startups) and cost barriers (💳 card, 💰 minimum balance) round out the conditions that move a provider from the catalog’s “no strings attached” section into “free — with conditions.”

Why typed, not prose

  • Exhaustive. A type forces the question “is there also a rate limit? a card? a region lock?” — so nothing is silently dropped.
  • Comparable. You can filter the catalog to “renewable, no card, anyone” and get a clean answer.
  • Scored. The score reads the limitation classes directly: finite and barrier limitations pull renewability and accessibility down; quality limitations pull usability down.
  • Renderable. A fixed icon set means the same constraint looks the same everywhere.

The taxonomy is defined in code at src/data/generosity.ts and validated by the content schema, so every provider’s limitations conform to exactly these types.