The imin Platform
2.0.0
2.0.0
  • Introduction to the imin Platform
  • Using the Platform
    • imin's Platform Products
    • Authentication
    • Our Platform Data
      • Understanding Responses
      • Namespaces and Extensions
      • Defensive Data Consumption
      • Mocking the Interface
  • platform products
    • Search
      • imin Events API
        • Events API Reference
        • Virtual & Physical Sessions
        • Concepts
          • EventSeries
          • ScheduledSessions and eventSchedules
          • Activities and Collections
            • Activities
            • Activity Concept Collections
          • Accessibility Support
          • Prices
        • Filters
          • Modes
          • Age Ranges
          • Dates and Times
          • Activities and Concept Collections
          • High Frequency Sessions
      • imin Facilities API
        • Query Parameter Search
          • Mandatory Query Parameters
            • mode=discovery-geo
            • mode=upcoming-slots
          • Optional Query Parameters
        • ByID Search
          • FacilityUse By-ID
          • Slot By-ID
        • FacilityUses and IndividualFacilityUses
        • Slots
        • Facilities Slot Booking
      • imin Places API [BETA]
        • Example Request & Response
    • Firehose
      • Introduction to the Firehose
      • Accessing the Firehose
      • Firehose Usage Policy & Restrictions
      • Firehose and Search
      • Bookable Firehose Feeds
      • Bookable Sellers Feed
      • Attribution Catalog Endpoint
    • Live Timetables
      • Pre-Requisites: Open Data Feeds
      • The Onboarding Process
        • 1. Ensuring your Data Offers the Best User Experience
        • 2. Setting up and Embedding your First Timetable
        • 3. Setting up the Rest of your Timetables
        • 4. Activating Booking via Guest Checkout
      • Features Available Upon Request
      • Styling the Live Timetables
      • FAQs
    • Data Dashboard
  • incorporating book and pay
    • imin Branded Checkout
      • Introduction
      • Setup
        • Information We Require From You
        • Actions You Need to Complete
      • Authenticated Checkout
        • Testing [BETA]
        • 👪Group Booking [BETA]
      • Standalone Checkout
      • Firehose and Checkout [BETA]
        • Loading the Checkout via Firehose
    • imin Booking Platform
      • Customer Account Management
        • Create Customer Account
        • Update Customer Account
        • Get Customer Account
        • Delete Customer Account
        • Example Scenario
        • Payment Card Management
        • Linked Accounts
        • Entitlement
          • Evidence Requests
          • Entitlement Pricing in Search
          • Entitlement Pricing in Checkout
        • Access Pass
        • Webhooks
      • Orders
        • Order History
        • Order (by ID)
        • Cancellations & Refunds
      • Upcoming OrderItems
      • Receipt (by ID)
  • imin and booking systems
    • Seller Onboarding
      • API
  • HINTS & TIPS
    • Get the Best Out of Search
      • Displaying Schedule Information
      • URLs and Offering a Call to Action
      • Searching by Activity
      • Your Search Results and HighFrequencySessions
      • Customer Specific Images
  • Info for Data Publishers
    • Your RPDE Feed & the imin Platform [BETA]
      • Providing Places Data [BETA]
      • Providing Schedule Information [BETA]
Powered by GitBook
On this page
  • Get Linked Accounts
  • Delete Notification
  • Delete Linked Account
  • Connect Account
  1. incorporating book and pay
  2. imin Booking Platform
  3. Customer Account Management

Linked Accounts

Manage a Customer's Linked Accounts.

PreviousPayment Card ManagementNextEntitlement

Last updated 3 years ago

One of your can be linked to accounts across multiple Sellers. e.g., say there is a Seller, Acme Leisure Centre. It will have its own database of Customers (or it may call them "Accounts", "Members", etc).

If a Customer has an account with a Seller that is linked to their account in your broker, the account with the Seller is called a Linked Account.

Say that you have a Customer called Rosie. There are a few different scenarios for whether or not she has a linked account with Acme Leisure Centre:

  1. Rosie has no account with Acme Leisure Centre Rosie has no account with Acme Leisure Centre and may want to create one and link it to her account with your Broker. When calling the endpoint for Rosie, the imin:item item for Acme Leisure Centre will include:

    • "imin:matchingEmailExists": false

    • potentialAction, containing a RegisterAction and a CreateAction. If Rosie chooses to link to an existing account in Acme Leisure Centre or create a new one, she should be redirected to either of these URLs respectively.

  2. Rosie has an account with Acme Leisure Centre, but it is not linked Rosie does have an account with Acme Leisure Centre and may want to link this to her account with your Broker. When calling the endpoint for Rosie, the imin:item item for Acme Leisure Centre will include:

    • "imin:matchingEmailExists": true, indicating that her email is known in this Seller and therefore will likely just have to login and link it to her account with your Broker.

    • potentialAction, containing a RegisterAction and a CreateAction. If Rosie chooses to link to an existing account in Acme Leisure Centre or create a new one, she should be redirected to either of these URLs respectively.

  3. Rosie has a linked account with Acme Leisure Centre Rosie has already linked her Acme Leisure Centre account with her account in your broker. When calling the endpoint for Rosie, the imin:item item for Acme Leisure Centre will NOT include imin:matchingEmailExists and potentialAction, but instead includes a number of fields containing information about the Linked Account including , an Access Pass, etc. For a full list of fields, check out the example response in .

All requests that require the X-Api-Key header must be made Server-side. Otherwise, it would be possible to view the secret API key with a browser.

Get Linked Accounts

GET https://book.imin.co/api/v2/customer-accounts/:customerIdentifier/linked-accounts

For a given Customer, this endpoint returns information about whether that Customer has an account with each Seller. The response includes information about all Sellers, regardless of whether the Customer has linked to an account with that Sellers. If an account has not been linked for a particular Seller, information will be included which will allow the Customer to do so (in the potentialAction). If an account has been linked for a particular Seller, information about this account will be included in the response. Key fields in the response: • imin:item[].potentialAction[].target: Direct a Customer to this URL in order to have them login/register with the Seller and link their account to your Broker. This URL is for the Connect Account endpoint.

Path Parameters

Name
Type
Description

customerIdentifier

string

Customer Identifier

Query Parameters

Name
Type
Description

redirectUri

string

Used to create the RegisterAction and RegisterOrCreateAction URLs. Use the URL that you want imin to redirect to when a user has linked their account. The RegisterAction and RegisterOrCreateAction will only be created if this parameter is included.

Headers

Name
Type
Description

X-Api-Key

string

API Key

{
  "@context": [
    "https://openactive.io/",
    "https://schema.imin.co/"
  ],
  "@id": "https://book.imin.co/api/v2/customer-accounts/1234/linked-accounts",
  "@type": "imin:Collection",
  "imin:entitlementFilter": "<opaque token>",
  "imin:item": [{
    "@type": "CustomerAccount",
    "@id": "https://example-linked-booking-system.com/customer-accounts/fdc14503-275e-46d3-9922-45b986c9f9aa",
    "accountNumber": "CA00000123",
    "seller": {
      "@type": "Organization",
      "@id": "https://id.bookingsystem.example.com/organizers/1",
      "name": "Acme Leisure Centre",
      "url": "https://acmeleisurecentre.com/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://acmeleisurecentre.com/logo.jpg"
      },
      "email": "contact@acmeleisurecentre.com",
      "telephone": "01455 890508",
      "sameAs": [
        "https://www.facebook.com/acmeleisurecentre/",
        "https://twitter.com/acmeleisurecentre"
      ]
    },

    // 👇👇👇 These fields are only included if this account is NOT connected with this customer 👇👇👇
    "potentialAction": [
      {
        "@type": "RegisterAction",
        "target": "https://book.imin.co/auth/connect-account?jwt=<opaque token>"
      },
      {
        "@type": "RegisterOrCreateAction",
        "target": "https://book.imin.co/auth/connect-account?jwt=<opaque token>"
      }
    ],
    "imin:matchingEmailExists": true,
    // 👆👆👆 These fields are only included if this account is NOT connected with this customer 👆👆👆

    // 👇👇👇 These fields are only included if this account IS connected with this customer 👇👇👇
    "imin:dateLinked": "2021-01-27T12:00:00Z",
    "hasHiddenEntitlements": true,
    "customer": {
      "@type": "Person",
      "email": "<email address>"
    },
    "accessPass": {
      "@type": "Barcode",
      "text": "<barcode number>"
    },
    "imin:updateNotifications": [
      {
        "@type": "CustomerUpdateAction",
        "@id": "https://book.imin.co/api/v2/customer-accounts/1234/linked-accounts/5678/linked-account-updates/JhbGciOiJIUzI1NiIsInR5cCI",
        "actionStatus": "https://schema.org/CompletedActionStatus"
      },
      {
        "@type": "imin:AccessPassUpdateAction",
        "@id": "https://book.imin.co/api/v2/customer-accounts/1234/linked-accounts/5678/linked-account-updates/iIxMjM0NTY3ODkwIiwibm",
        "actionStatus": "https://schema.org/CompletedActionStatus"
      }
    ],
    "imin:updateFailures": [
      {
        "@type": "imin:EntitlementUpdateAction",
        "actionStatus": "https://schema.org/FailedActionStatus",
        "error": [
          {
            "@context": "https://openactive.io/",
            "@type": "EntitlementConflictError",
            "name": "The entitlement cannot be applied due to other entitlements already associated with the Customer.",
            "description": "This customer already has a paid monthly membership"
          }
        ]
      },
      {
        "@type": "imin:AccessPassUpdateAction",
        "actionStatus": "https://schema.org/FailedActionStatus",
        "error": [
          {
            "@context": "https://openactive.io/",
            "@type": "BarcodeInvalidError",
            "name": "The barcode value specified is not permitted within this booking system.",
          }
        ]
      }
    ],
    "outstandingAction": [
      {
        "@type": "UnblockAction",
        "description": "There is unpaid debt on your account. You must log in to your account and pay this debt in order to continue to make bookings.",
        "target": [
          {
            "@type": "EntryPoint",
            "urlTemplate": "https://example-booking-system.com/login"
          }
        ]
      },
      {
        "@type": "UnblockAction",
        "description": "Your pay monthly membership has expired. Please log in to your example-operator.co.uk account to renew your membership.",
        "target": [
          {
            "@type": "EntryPoint",
            "urlTemplate": "https://example-booking-system.com/login"
          }
        ]
      },
      {
        "@type": "ResolveAction",
        "description": "You have not yet completed your gym induction, so you will not be able to book gym activities. Please book a gym induction."
      }
    ]
    // 👆👆👆 These fields are only included if this account IS connected with this customer 👆👆👆
  }]
}

Key fields in the response:

If there is no Linked Account

  • potentialAction: URLs that you can have your customer navigate to in order to either log in to an existing account with the Seller (RegisterAction) or create a new one (RegisterOrCreateAction). Note that RegisterOrCreateAction also includes an option to login to an existing account.

    • If a customer logs in to their existing account via RegisterOrCreateAction, and the connected account does not exactly match the imin Customer Account, a CustomerUpdateAction will be visible in imin:updateNotifications.

  • imin:matchingEmailExists: If true, there is an account with the same email with the Seller.

If there is a Linked Account

  • accountNumber: The membership number of the Customer with this Seller

  • imin:dateLinked: The date the account was linked

  • hasHiddenEntitlements: Whether the account has other entitlements in addition to any assigned entitlements.

    • CustomerUpdateAction

    • imin:AccessPassUpdateAction

    Note that an imin:EntitlementUpdateAction will not be shown here as exact Linked Account Entitlements are not visible in the API. User experience note: You should check for notifications before allowing the user to update their customer details or before setting a barcode, in case there is an update notification pending from a linked account. For example, if a user is about to edit their customer details, then they probably would be interested to see that the update from a linked account is pending (if they just made the same update there).

  • imin:updateFailures: Any errors that were received while attempting to update account details in the Linked Account. This may include one of each:

    • imin:AccessPassUpdateAction

    • imin:EntitlementUpdateAction

  • outstandingAction: Any outstanding actions on this Customer Account, such as the resolution of outstanding debts or membership renewal. These may prevent the Customer from making bookings until resolved.

    • UnblockAction is reserved for actions that are required to make any booking (e.g. paying outstanding debts) User experience note: Any outstanding UnblockAction entries should be displayed prominently, as they will prevent the Customer from making any bookings if not resolved.

    • ResolveAction is reserved for actions that are required to make specific bookings, or which are generally useful for the upkeep of the account (e.g. attending an in-person gym induction, or viewing an online gym induction).

Delete Notification

DELETE https://book.imin.co/api/v2/customer-accounts/:customerIdentifier/linked-accounts/:linkedAccountIdentifier/linked-account-updates/:notificationIdentifier

This URL to use for the DELETE call will be found in the imin:updateNotifications field in the response from Get Linked Accounts.

Path Parameters

Name
Type
Description

customerIdentifier

string

Customer Identifier

linkedAccountIdentifier

string

Linked Account Identifier

notificationIdentifier

string

Notification Identifier

Delete Linked Account

DELETE https://book.imin.co/api/v2/customer-accounts/:customerIdentifier/linked-accounts

Unlink the Customer's account within a specified Seller from the Customer's account within your Broker.

Path Parameters

Name
Type
Description

customerIdentifier

string

Customer Identifier

Query Parameters

Name
Type
Description

seller

string

Seller ID e.g. https://id.bookingsystem.example.com/organizers/1

Headers

Name
Type
Description

X-Api-Key

string

API Key

Connect Account

GET https://book.imin.co/auth/connect-account

Note: Do not navigate manually to this endpoint. URLs for accessing this endpoint will be generated in the potentialAction target URLs found in the response from the Get Linked Account endpoint. When a Customer navigates to this page, the process for connecting with a Linked Account will initiate.

Query Parameters

Name
Type
Description

jwt

string

An opaque token created by imin

imin:entitlementFilter: Use for .

If a new account is created by RegisterOrCreateAction, it is automatically updated with the current details within the imin Customer Account (that were previously added via ).

imin:updateNotifications: Notifications that a change has happened to the Customer's details or Barcode in this Linked Account. You may, upon seeing this, wish to notify your Customer about the change. Verify that you or your Customer have processed the notification by calling using its @id. This may include one of each:

Note that a CustomerUpdateAction will not be shown here as these actions are never asserted onto Linked Accounts in the background - they are only asserted by your making a call to and so you will see any errors in the response from that call.

Entitlement Pricing in Search
Update Customer Account
Update Customer Account
Customers
Entitlements
Get Linked Accounts
Get Linked Accounts
Get Linked Accounts
Get Linked Accounts
Delete Notification