Skip to main content
note

This is a new feature and is still under development.

Migrate to custom flow

Custom Flow is a more flexible alternative to marketing consents. Instead of using the predefined consent types (email, sms, digital, personal), Custom Flow allows you to create your own screens with custom checkboxes and consent elements via the merchant portal.

Why migrate to Custom Flow?​

With Custom Flow, you can:

  • Create multiple screens with custom titles and descriptions
  • Define your own checkbox elements with merchant-specific IDs
  • Include "read more" sections for each element
  • Have full control over the consent collection experience

Portal configuration comparison​

Marketing consents configuration​

With marketing consents, you configure predefined consent types (Email, SMS, Digital, Personal) and set global links to your terms and privacy statement.

The configuration options are limited to:

  • Toggling predefined consent types on/off
  • Marking consents as required or optional

Custom flow builder​

With Custom Flow, you get access to a visual flow builder where you can create multiple pages with custom content.

The flow builder lets you:

  • Add multiple pages to your flow
  • Set custom titles and descriptions for each page
  • Create checkboxes with your own titles and IDs
  • Add "Read more" sections with additional information
  • Enable explicit consent requirements
  • Preview how the flow looks on mobile in real-time

Prerequisites​

Before migrating, ensure you have:

  • Access to portal.vippsmobilepay.com
  • An understanding of your current marketing consents setup
  • The ability to update your backend to handle the new response format

Migration steps​

Step 1: Create a flow in the merchant portal​

  1. Log in to portal.vippsmobilepay.com
  2. Navigate to the Custom Flow Builder
  3. Create a new flow with the pages and elements you need
  4. Configure each page with:
    • A title and description
    • Checkbox elements with your own titles
    • Optional "Read more" sections for additional information

Step 2: Publish the flow​

Once you're satisfied with your flow configuration, publish it to make it available for your login integration.

Step 3: Update your backend to parse flowResult​

The Custom Flow response uses a different structure than marketing consents. Update your backend to parse the flowResult object from the userinfo response.

Example response:

{
"flowResult": {
"language": "EN",
"screens": [
{
"title": "Extra consent",
"description": "Accept terms and conditions",
"terms": {
"links": [
{
"title": "Terms of Service",
"url": "https://example.com/terms"
}
]
},
"elements": [
{
"type": "checkbox",
"id": "cf_accept_terms",
"title": "Accept T&C",
"checked": true,
"required": true,
"readMore": {
"title": "Read more",
"description": "Details about the custom flow"
}
}
]
},
{
"title": "Additional consents",
"description": "Choose what to share",
"elements": [
{
"type": "checkbox",
"id": "cf_marketing",
"title": "Marketing consents",
"checked": false,
"required": false,
"readMore": {
"title": "Why we ask",
"description": "We'll send occasional updates."
}
},
{
"type": "checkbox",
"id": "cf_personalization",
"title": "Personalization consents",
"checked": false,
"required": false,
"readMore": {
"title": "Details",
"description": "Helps tailor your experience."
}
}
]
}
],
"timeOfConsent": "2025-11-27T09:31:00Z"
}
}

Step 4: Change the scope​

Update the scope in your authorization request from delegatedConsents to customFlow.

Before:

scope=openid name phoneNumber delegatedConsents

After:

scope=openid name phoneNumber customFlow

Key differences​

AspectMarketing Consents (delegatedConsents)Custom Flow (customFlow)
Response fielddelegatedConsentsflowResult
Element IDsPredefined (email, sms, digital, personal)Merchant-defined (e.g., cf_marketing)
ScreensSingle screenMultiple configurable screens
ConfigurationPortal configuration pagePortal flow builder
Text customizationLimited to predefined typesFully customizable titles and descriptions
Read more sectionNot availableAvailable per element

See also​