Architecture Overview

Paywall Builder
With Corrily, your pricing page becomes dynamic and remotely-configured, eliminating the need for hardcoded prices. The content of the Pricing Page (including sets of plans to display, prices itself, currencies, discounts, trial info, etc) will be fetched via API, which can be consumed either by your back-end code or directly from the front-end or Mobile App using Corrily’s SDKs. That approach enables a personalized and dynamic pricing experience for each user.Price Management and Price Experimentation
Corrily serves as an external “admin panel” that controls your prices, acting as a source of truth for pricing and monetization. It allows you to configure and immediately apply every aspect of subscription monetization through the Corrily dashboard. On each API call, the platform dynamically determines the country and audience of the User, deciding if the User falls into an active experiment, and then responds with the appropriate pricing page content for that User.After displaying prices to the User, Corrily records the displayed values,
ensuring the User consistently encounters the same prices across the product and checkout pages,
and even on different platforms like on web or mobile app.
Revenue Data Ingestion
To enable Corrily’s analytics capabilities, it’s required to feed revenue events into the Corrily Platform from your Subscription Management solution (Stripe Billing, Chargebee, Recurly or other). Revenue events are typically fetched by Corrily itself using API Key or OAuth integration, but it’s also possible to use Subscription Management Platform webhooks or to feed revenue events using Corrily CRUD API. In summary, the Corrily Platform architecture is designed to provide rich control and optimization capabilities for different aspects of your pricing page. By leveraging these components, you can create personalized pricing experiences for your users, make data-driven decisions, and ultimately maximize revenue.Control Flow
There are typically multiple places where users could see or interact with your pricing page:- Anonymous pricing page, publicly visible for unauthenticated website users or mobile app visitors
- Internal Paywall or Customer Portal, visible for signed users
- Checkout Flow, hosted by you, by subscription management platforms, or by IOS/Google Play
Control Flow before Corrily

- Paywall Plans and Prices are hardcoded on the front-end, or stored in the database
- Checkout prices are configured on the billing platform catalog
Control Flow with Corrily

- Config correctness - Corrily determines User’s country and audience in real-time to let Users see the appropriate prices configured for that country and audience
- User Experience consistency - Corrily ensures User will see the same set of plans, prices and currencies across all the places in the product and all the platforms
- Checkout consistency - Corrily ensures Users will pay the same price that they have seen
- Features consistency - Corrily ensures Users will always see the same set of features available in each plan
-
Anonymous Pricing Page: When a user visits your anonymous pricing page, either your backend or the Corrily Front-End Software Development Kit (FE SDK) sends the user’s IP address as a parameter to the Price request. The request would look like this:
Corrily then stores the prices served for that IP address. This ensures that if the same Visitor opens a pricing page again, he’ll see the same price.
-
Internal Paywall: Once the user signs in and visits the internal paywall, your backend needs to send both the
IP
address and theuser ID
to Corrily. This allows Corrily to associate theIP
address with theuser ID
and maintain the same price that was previously shown to the unauthenticated Visitor. The request would look like this:If it’s not possible to accurately determine the user’sIP
address at the time of visiting the internal paywall, you can associate the user with theIP
address at the time of signup by sending an Identify Request to Corrily with theIP
address anduser ID
.
-
Subscription Creation: When creating a new subscription, you need to pass the price provided by Corrily to the Subscription Management Platform. This is typically done using
Overrides
(refer to the integration guides for each platform for more details) By passing overrides, you ensure that the user will pay the price they saw, not the price hardcoded in the Subscription Management Platform catalog. This is particularly important during price experimentation, where different users might see different prices for the same plans. - Successful Payment: After a successful payment, the new subscription and charge rows will be automatically pulled by Corrily via data ingestion pipeline (for OAuth and API-Key integrations), or via webhook, and will appear in analytics on the next iteration of dashboard metrics recalculation.
Corrily Data Model

Paywall
Corrily Paywall is a fully functional front-end component, displaying plans, prices, coupons, and other entities from Corrily’s Core. Essentially, it’s a payment page, rendered by front-end SDK, that dynamically displays prices from Corrily’s Core for each specific user.Package
A Package means a set of plans to be displayed on the Paywall depending on the user’s location or other attributes. It encapsulates several plans, all of which are displayed on the Paywall. This abstraction simplifies management of which plan sets to show to which Audience and in which country.Product
Corrily Product represents a Plan or Addon User might subscribe to. Typically, Corrily Products are mapped 1:1 to Plans or Addons from billing platforms.Price
Corrily Price is an entity which holds theamount
and currency
to be displayed for the selected Product
in the selected country for the User’s Audience.
Fixed vs. Ephemeral prices
The concept of ephemeral prices in Corrily. Corrily price can be either fixed or ephemeral.Fixed Prices
A fixed price is a set <amount, currency> pair that is set via the dashboard, or one of our CRUD API endpoints, and identifiable by a price_id prefixed byprice_<id>
. The amount set will match exactly the
display values returned by Corrily’s API.
Ephemeral Prices
Ephemeral prices are the product of price transformations applied to fixed prices such as explicit applications of rounding, calls for the price to be displayed in another currency, coupon applications, or price overrides. Ephemeral prices too are identifiable by price IDs but these are prefixed byeph_price_<id>
.