Patterna Docs

Plans and limits

What each plan includes, what a request is, what happens over the limit, and how billing states reach your integration.

Everyone 3 min read View as Markdown

The tables on this page are generated from the engine's plan catalogue (GET https://api.patterna.nl/v1/plans, public, cached for an hour), the same catalogue the panel's Billing page and the quota enforcement read. Prices are in EUR, excluding VAT.

The plans#

PlanFor whomPriceIncludedOver the limit
PilotAnyone evaluatingFree, 60 days100k requests, 1 placement, 3 seatsn/a (hard limit: 429 quota_exceeded)
StarterApps and shops up to ~50k monthly actives€149 / month · €1,490 a year500k requests, 3 placements, 5 seats€0.30 per extra 1,000
GrowthProducts that run recommendations in several places€799 / month · €7,990 a year3M requests, unlimited placements, 25 seats€0.20 per extra 1,000
ManagedCompanies that want results, not a toolbox€2,900 / month + €4,900 one-time setup, 12-month term (invoiced)10M requests, unlimited placements, unlimited seats€0.15 per extra 1,000

Rules that go with the table:

  • A request is a server-side recommendation call (POST /recommendations). Events, impressions, interactions, catalog writes and proof queries are free: never be afraid to send us data.
  • Annual payment gives two months free on Starter and Growth: you pay ten months for twelve. Managed is annual by nature (a 12-month term).
  • Overage is billed per started 1,000 requests at the plan's rate, after the period closes. Starter and Growth keep serving over the included requests; the Pilot has a hard limit instead (see below).
  • The Pilot is free for 60 days from the workspace's creation, with one placement. After 60 days the panel asks you to choose a plan; recommendations keep running until we talk.
  • Managed is invoiced, not paid in the panel: the Billing page says "talk to us". Agencies and resellers have no public plan; they are priced per case.
  • Every paid plan includes a data processing agreement, EU-only hosting (Amsterdam) and an export of the ledger at any time.

Limits the engine enforces#

PlanRequests / monthPlacementsSeatsExtra 1,000 requests
Pilot100,00013n/a (hard limit: 429 quota_exceeded)
Starter500,00035€0.30
Growth3,000,000unlimited25€0.20
Managed10,000,000unlimitedunlimited€0.15
  • Included requests are counted per key as the quota is (key usage, flushed every ten seconds), per billing period: the subscription's cycle, or the calendar month (UTC) without one. Across several engine instances the count can lag by about ten seconds.
  • On a plan with an overage price, requests over the included ones are served and billed. On a plan without one (the Pilot), or when an operator set a hard quota for your workspace, the engine answers 429 quota_exceeded once the included requests are used; details carries quota, used and resets_at. Show your own list until the reset.
  • Placements are counted on creation: POST /surfaces on a plan whose placements are used answers 402 placement_limit with a message that names the plan and the next one up. Existing placements keep working.
  • Seats count members plus pending invites; the invite answers 409 seat_limit when they are used.

Features by plan#

FeaturePilotStarterGrowthManaged
Audit log——✓✓
Consent modes✓✓✓✓
Curated lists—✓✓✓
Email support—✓✓✓
Lab (simulations and benchmarks)——✓✓
Learned rankers——✓✓
Named ML engineer———✓
Priority support——✓✓
Proof ledger✓✓✓✓
Reasons✓✓✓✓
Shadow mode✓✓✓✓
SSO/MFA——✓✓
Testers✓✓✓✓

Billing states and what your integration sees#

StateMeaningWhat the API does
trialingthe Pilot, 60 days from creationeverything works; after the 60 days a banner, no suspension
activepaid, or invoicedeverything works
past_duea payment failed; 14 days of grace with a banner in the paneleverything works; an owner updates the payment method under Settings → Billing
suspendedthe grace period passed, or a cancelled subscription's period endedPOST /recommendations answers 402 billing_suspended; events, interactions and the catalog keep working; the panel still opens
cancelledthe subscription was cancelledeverything works until the paid period ends, then suspended

Managed workspaces are never suspended automatically.

Handle 402 billing_suspended like 429 quota_exceeded: show your own list, do not retry recommend, and alert someone who can open the panel. The SDKs treat every 4xx this way already.

Payment#

Payment runs through Revolut Business: the first payment is made on a hosted checkout page (card, Revolut Pay, Apple Pay or Google Pay, depending on your device and what your bank allows), and the saved method is charged automatically every period. Invoices are listed on the Billing page. Managed receives an invoice by email.

A workspace may have a price of its own, agreed with Ainur (a design partner, a volume deal): the Billing page then shows "Your price" next to the struck list price, and the checkout and the renewals charge that price. The tables on this page always show the list.

See also: the error codes, Go live in six steps.

esc
  • Type to search every page, heading and code sample.