--- title: "Checkout Service" slug: "checkout-service" tags: ["Subscription Management", "User Documentation"] updated: 2026-11-06T14:28:58Z published: 2026-11-06T14:28:58Z canonical: "docs.unite.as/checkout-service" excludeFromExternalSearch: true --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.unite.as/llms.txt > Use this file to discover all available pages before exploring further. # Checkout Service **How to link your paywall to the Checkout Service?** Your paywall links to the Unite Checkout Service, where the user picks a product, logs in, and pays. When the purchase is done, the Checkout Service sends the user back to your site. This page covers the URLs you can link to, the query parameters they accept, and how the user gets back to your site. ## Key terms | Term | Definition | | --- | --- | | Tenant | A Unite customer. A tenant has one or more publications. | | Publication | Your website, with content behind a paywall. | | Publication domain | The domain of your publication, such as `example.com`. | | Paywall | The gate on your publication that sends users without access to the Checkout Service. | | User | The person who reads your publication and uses the Checkout Service in their browser. | | Customer | A person or organisation registered in Connect, your tenant's subscription system. A user is tied to at most one customer, and isn't necessarily the same person as the customer. | | Identity Provider (IdP) | The Unite login service. It keeps a single sign-on session that your publication and the Checkout Service share. | | Campaign | A set of products that the Checkout Service shows on one page. Each campaign has a slug. | | Product | A subscription offer. Each product has a slug that's unique within its campaign. | | Subscription | Access to the content of a product. It belongs to a customer. | | Checkout Host | The host name of the Checkout Service for your publication, such as `order.example.com`. Unite provides it. By convention, Norwegian sites use `ordre` and Swedish sites use `order`, for example `ordre.example.no`. | | Entry point | A URL on your Checkout Host that you can link to. | | Login initiation URL | A URL in your CMS that logs the user in and sends them to a given page, such as an article. | ## How a purchase works A purchase takes the user from your paywall through the Checkout Service, the IdP, and the payment page, then back to your site. In the diagram, blue arrows are your paywall link and the way back to your site. Gray arrows are the redirects that the services handle. ![Swimlane diagram with four lanes: your site, the Checkout Service, the Unite IdP, and the payment page. Your paywall links to the campaign page, the user logs in at the IdP from the product page, pays from the checkout, and the Checkout Service sends the user back to your site, where the login initiation URL of your CMS finds the existing IdP session.](https://cdn.document360.io/b43d0d84-a763-460a-99dc-65200f9b83a6/Images/Documentation/order-purchase-flow(1).png?sv=2026-02-06&spr=https&st=2026-11-10T09%3A23%3A48Z&se=2026-11-10T10%3A23%3A48Z&sr=c&sp=r&sig=%2FBUmmj1CzdRPp65vmslzAXEoREpKeQK8FYJtpS4d1I8%3D) 1. Your paywall links to a campaign or product page on the Checkout Service. 2. When the user picks a product, the Checkout Service redirects the browser to the IdP to log in. If the user already has an IdP session, the IdP shows no login screen. 3. The Checkout Service checks the user's access. Without access, the browser goes to the payment page and comes back after payment. 4. The Checkout Service sends the user back to your site. 5. If your CMS has a login initiation URL, the user gets back to the article, signed in. The IdP session from step 2 exists, so the user doesn't see a login screen. > **Good to know**: If the user already has access to the product in step 3, the Checkout Service skips the payment and sends the user back to your site right away. ## Your Checkout Host Your Checkout Host is the host name of the Checkout Service for your publication, such as `order.example.com`. Unite provides it. The examples on this page use `order.example.com` as the Checkout Host and `www.example.com` as your publication. ## Pages you can link to The Checkout Service has three entry points, and one of them needs a logged-in user: | Entry point | Page | Login required | | --- | --- | --- | | `/` | Default campaign | **No** | | `/{campaignSlug}` | Campaign | **No** | | `/{campaignSlug}/{productSlug}` | Product | **Yes** | ### Default campaign `GET /` fetches the default campaign and then redirects to the slug that it has set which could be itself (`default`) or a slug of another campaign (`digital` etc.) ### Campaign page `GET /{campaignSlug}` shows every product in the campaign. The user doesn't need to log in to see it. Every product link on the page carries the page's full query string, and so does the footer link to another campaign. That's how your query parameters reach the product page. ### Product page `GET /{campaignSlug}/{productSlug}` shows the checkout for one product. Link here to skip the campaign page. The product page needs a logged-in user. Without a session, the Checkout Service redirects the browser to the IdP, which redirects back to the same URL after login. After login, the Checkout Service checks the user's access. If the user already has access to the product, the Checkout Service sends the user back to your site. Otherwise, it shows the checkout. ### Query parameters The campaign and product pages accept these query parameters: | Parameter | Required | Type | Example | Description | | --- | --- | --- | --- | --- | | `login` | **No** | `vipps` or `credentials` | `login=vipps` | The preferred login method to trigger. Use it on product links | | `contentUrl` | **No** | URL or path | `contentUrl=/news/article-1` | The article to send the user to after the purchase | | `utm_*` | **No** | String | `utm_source=newsletter` | Campaign tracking for links from social media, newsletters, ads and similar | | `_ptid` | **No** | String | `_ptid=your_piano_tracking_id` | Piano only. The ID of the Piano experience that showed the offer, for conversion attribution | | `at_*` | **No** | String | `at_medium=social` | Piano only. Piano Analytics campaign parameters, such as `at_medium` and `at_campaign` | The campaign page passes every parameter on to the product page, and they stay on the URL through login. #### `login` `login` sets the preferred login method to trigger when the user logs in, which happens on the product page. Use it on product links. For a Vipps button on your paywall, link to the product page with `login=vipps`: ``` https://order.example.com/digital/monthly?login=vipps ``` The parameter accepts these values: | Value | Behavior | | --- | --- | | `vipps` | Redirects the user straight to Vipps Login. Your tenant needs Vipps Login enabled. | | `credentials` | Shows the email and password form, without the login start screen. | If the user is already logged in, `login` has no effect. The IdP rejects other values with an error page. > **Good to know**: The campaign page shows the same login options whatever `login` says. On a campaign link, `login` only reaches the product page when the campaign doesn't offer Vipps. When it does, the button the user picks there decides the login method. #### `contentUrl` Use `contentUrl` to send the user to a specific article after the purchase, for example from a social campaign link. Unite sends the user there through your CMS's login initiation URL, signed in. The value can be a path or a full URL on your publication. ``` https://order.example.com/digital?contentUrl=/news/article-1&utm_source=facebook ``` > **Good to know**: Unite can also find the article from a cookie that your CMS sets with our custom script when the paywall shows. That's best effort. When both exist, the query param takes precedence over the cookie. #### `utm_*` Use `utm_*` parameters on campaign links from social media, newsletters, ads and similar. The analytics on the Checkout Service read them from the page URL. The Checkout Service doesn't use them otherwise. ``` https://order.example.com/digital?utm_source=newsletter&utm_medium=email&utm_campaign=autumn_offer ``` --- **Piano parameters** The next two parameters only apply if your publication uses Piano. Skip them otherwise. #### `_ptid` `_ptid` connects the purchase to the Piano experience that showed the offer. When the purchase completes, the Checkout Service sends it to Piano. Your tenant needs Piano conversion tracking enabled. Use the `_ptid` that Piano issued, because Piano rejects other values. Without `_ptid`, the Checkout Service reports no conversion. ``` https://order.example.com/digital?_ptid=your_piano_tracking_id ``` #### `at_*` The `at_*` parameters are Piano Analytics' own campaign parameters, from the product's AT Internet days, and work the same way as `utm_*`. The Checkout Service doesn't use them otherwise. ``` https://order.example.com/digital?at_medium=social&at_campaign=autumn_offer ``` ## How the user gets back to your site Unite handles the way back to your site. The Checkout Service sends the user back after a completed payment and a short confirmation, and when the user opens a product page they already have access to. If the payment fails or the user cancels it, an error page links back to your site and to a retry. If your CMS has a login initiation URL, Unite sends the user there, so the user gets back to the article, signed in. Unite knows the article from `contentUrl` in your link, or from a cookie that your CMS sets when the paywall shows. The cookie is best effort. When Unite doesn't know the article, or your CMS has no login initiation URL, the user lands on your home page. ## Common errors When something goes wrong, the user sees one of these pages: | What happened | What the user sees | | --- | --- | | The campaign or product slug in your link doesn't exist | A page-not-found page | | The user cancels the payment, the payment fails, or the Checkout Service can't create the order | An error page with **Try again** and a link back to your site | | The login fails or the user cancels it, for example at Vipps | A login error page | | `login` has another value than `vipps` or `credentials`, or your tenant doesn't have Vipps Login | A login error page | | The user takes more than 15 minutes to log in | The IdP's error page | **Try again** opens the same product page, so the user can try the purchase again. ## Examples ### Paywall link to a campaign Your paywall links to the campaign `digital`. Unite takes care of returning the user to your site: ``` https://order.example.com/digital ``` ### Product link with Vipps login This link opens the product `monthly` in the campaign `digital`, and the user logs in with Vipps: ``` https://order.example.com/digital/monthly?login=vipps ``` ### Campaign link with marketing tracking The analytics on the Checkout Service read the `utm_` parameters on this link: ``` https://order.example.com/digital?utm_source=newsletter&utm_campaign=autumn_offer ``` ## FAQ ### Why does the user land on my home page instead of the article? Unite sends the user back to the article through your CMS's login initiation URL. It finds the article from `contentUrl` in your link, or from a cookie your CMS sets when the paywall shows, and the cookie is best effort. Without a login initiation URL or a known article, the user lands on your home page. ### Why doesn't the user see a login screen on my site after buying? The user logged in at the IdP during the purchase. When your CMS logs the user in, the IdP finds that session and shows no login screen. ## Related - [Authorization Server](/authorization-server.md)