Planon Connect For Izix

Introduction

Planon Connect for Izix integrates Planon with Izix, a cloud-based smart parking, visitor and access-management platform. It synchronizes parking bookings and visitor requests created in Planon with Izix as required, ensuring that relevant information is available across both systems.

Planon users can also view real-time parking availability from Izix directly within Planon, without switching applications. Also, selected Planon user accounts can be synchronized with Izix as authenticated profiles, enabling users to access the required Izix functionality.

Key capabilities:

The app provides the following capabilities:

A scheduled worker that synchronizes selected Planon user accounts with Izix as profiles, enabling Izix to recognize these users for reservation or visitor matching and authentication. Near real-time synchronization of Planon Reservation records (parking bookings) with Izix reservations. Near real-time synchronization of Planon Visitor records (visitor parking requests associated with a reservation) with Izix visits. A parking availability lookup that can be opened from a Reservation or Visitor record to display live parking availability per access policy in Izix.

Prerequisites

Environment

  • A Planon Live environment of version L132 and higher

Constraints

The app is based on the following constraints, derived from its current implementation:

  • The Izix Parking Lot Ids are manually mapped to Planon properties via free field
  • Reservations must start and end on the same calendar day. If the BeginDateTime and EndDateTime of a Reservation fall on different days, the record is not sent to Izix and an error is logged.
  • The “Send Booking to Izix” flag must be set to Yes on the Reservation/Visitor record, and other mandatory fields (dates, requestor, license plate for visitors, etc.) must be populated, before a record is considered by the business rules.
  • The requestor must already have a linked Izix profile. For a Reservation, the internal requestor; For a Visitor, the internal requestor of its parent Reservation, must already be linked to an Izix profile via an External BO Link. If no link exists, the record is skipped — the app does not create a profile on-the-fly (profiles are only created by the scheduled worker, see Synchronizing Planon users to Izix profiles).
  • One Account per Person. If a Person is linked to more than one Planon Account, the app cannot unambiguously resolve a single Izix profile, and the record is skipped.
  • Parking spot availability is checked before booking. A booking/visit is only created in Izix if at least one spot is available for the resolved access policy, parking lot and time window. If no spots are available, the record is skipped silently (no reservation/visit is created, but no error is raised either — this is checked during outbound message transmission).
  • Updates are implemented as delete + recreate. When a Reservation/Visitor is updated in Planon, the app deletes the existing booking/visit in Izix and creates a new one. As a result, the Izix reservation/visit id linked to the Planon record changes every time the record is updated.
  • Access policy type depends on record type. Reservations use the Izix booking access-policy type; Visitor records use the visitor access-policy type.
  • User synchronization is scoped to configured User Groups. Only Planon Accounts that belong to a User Group listed in the worker settings are considered for profile synchronization. Accounts without a Person and accounts linked to a Person without a first name, last name or email, or whose account end date is in the past, are skipped.
  • Izix sends confirmation of the reservation to the email of the users upon successful booking

Required free fields & configuration items

Business ObjectField (suggested system name)TypePurpose
PropertyUsrIzixParkingLotIdFree StringMaps a Planon Property to its corresponding Izix Parking Lot id. Used both for outbound bookings and for the availability lookup screen.
ReservationUsrSendBookingToIzixFree field (Yes/No code)Trigger flag — only Reservations with this field set to Yes are synchronized to Izix.
VisitorUsrSendBookingToIzixFree field (Yes/No code)Trigger flag — only Visitors with this field set to Yes are synchronized to Izix

Note: The app auto-creates the External System record (default code Izix) if it does not already exist. It is nevertheless recommended to pre-configure the External System with the actual Izix API URL rather than relying on the app’s internal placeholder value.

Assumptions

This design and functionality of the solution is based on the following assumptions:

  • The Izix Client Id, Client Secret and Organization Id have already been issued to the customer by Izix.
  • The user configuring this app has Planon knowledge that includes: configuring free fields, Business Rules, the Event Connector, TSI Actions/layouts, and App Center settings.
  • If further support is required with installation of the app or related configuration, please contact your Planon Account Manager regarding support from Planon Services.

Features

Synchronize Planon users as Izix profiles

The app comes with an enterprise talk worker which sends Planon user accounts, filtered by User Group, to Izix as profiles. Existing Izix profiles can also be updated when configured to do so. These profiles are subsequently used to resolve requestors for Reservations and Visitors sent to Izix.

Send Reservations to Izix

When a Reservation record is inserted, updated, or deleted (and it satisfies the constraints above), the app creates, updates or deletes the corresponding reservation (parking booking) in Izix.

Send Visitors to Izix

When a Reservation is inserted, updated, or deleted and meets the configured conditions, the app creates, updates, or deletes the corresponding parking reservation in Izix.

Process booking confirmations from Izix

After Izix confirms that a reservation or visit has been created or deleted, the app stores the relationship between the Planon record and the corresponding Izix reservation or visit ID. This mapping is used for subsequent updates and deletions.

Check parking availability

The Show Izix Availability TSI Action can be made available on Reservation and Visitor records. It opens a Planon web page that displays live parking availability for the selected property, date/time window, and booking type. The page shows the parking lot, access policy, and number of available spots, and allows the user to adjust the filters and refresh the results.

How does it work?

This chapter provides a technical description of the features above.

%%{init: {'flowchart': {'nodeSpacing': 60, 'rankSpacing': 80}, 'themeVariables': {'fontSize': '20px'}}}%%
flowchart LR
    A[Reservation / Visitor\nchanged in Planon] -->|Business Rule| B[Outbound message\nEvent Connector]
    B -->|Transformer + Transmitter| C[Izix REST API]
    C -->|Reservation / Visit id| D[Inbound message\n'Izix Response']
    D -->|Message Processor| E[External BO Link\nPlanon record <-> Izix id]

Authentication and token caching

  • The app calls POST oauth/token on the Izix API with grant_type=client_credentials, using the clientId / clientSecret module settings, and returns an access token, its type, and its lifetime in seconds.
  • A new token is requested for every new webservice call.

Synchronizing Planon users to Izix profiles (scheduled worker)

The Send Users To Izix worker is an Import/Export worker that can be scheduled to run periodically via Action Definitions or run manually

  1. On start-up, it validates that url, clientId, clientSecret and izixOrganisationId are configured, and obtains an access token.
  2. It the fetches the Planon Accounts that are linked to the confgured user groups
  3. For each account belonging to one of the configured groups
    • The record is only processed if the linked person has first name, last name and email, and the account end date is empty or in the future.
    • If the Account is not yet linked to an Izix profile (no External BO Link), a new profile is created via POST profiles, using the module’s default language setting, and an External BO Link is created on the Account, storing <izixProfileId>_<profileExternalReference> as the external id.
    • If the Account is already linked and updateDetails is set to Yes, the worker fetches the existing Izix profile (GET profiles, filtered by profile id and organization), computes only the attributes that actually changed (language, first/last name, email — compared case-insensitively —, tags, license plates, and phone numbers), and sends a PATCH profiles request containing only those changed attributes. If nothing changed, no call is made.
  4. Any errors returned by Izix, or communication failures, are logged both to the worker’s log and to the server log.

Sending Reservations to Izix

  1. The app comes with the Business Rule Create Izix Booking that triggers on AFTERDBINSERT and AFTERDBUPDATE of the Reservation business object. It:
    • Validates that the Reservation has BeginDateTime, EndDateTime, an internal requestor, and that UsrSendBookingToIzix = Yes.
    • Validates the configured trigger fields actually changed (see Business rule settings), and that the Reservation matches the configured filter (if any).
    • Validates if BeginDateTime and EndDateTime are on the same calendar day.
    • Resolves the Izix profile id of the requestor via the requestor’s linked Planon Account and its External BO Link to Izix external system. If none is found, the Reservation is skipped indicating the requestor is not an Izix User.
    • Builds a ReservationRequest payload and creates an outbound Event Connector message of type “Send Reservation to Izix”, carrying the action (INSERT/UPDATE), the parking lot id (via the Reservation’s Property), and the resolved profile id.
  2. The Business Rule Delete Izix Booking runs on AFTERDBDELETE (hard delete) and also on AFTERDBUPDATE (e.g. when the Reservation is cancelled) to send a DELETE action for Reservations that already have a linked Izix reservation id.
  3. The Reservation Message Transformer turns the outbound message into a raw JSON body (an empty object {} for deletes).
  4. The Reservation Message Transmitter:
    • For a DELETE action: calls DELETE reservations/{id} on Izix, then creates an inbound “Izix Response” message so the External BO Link can be removed.
    • For INSERT/UPDATE: first checks available parking spots (GET access-rights filtered by profile/organization, then GET available-spots filtered by the resolved access policy ids, parking lot and date range). If no spots are available, nothing further happens. If spots are available, it resolves the access_policy_id, then calls POST reservations. For UPDATE, the existing Izix reservation is first deleted, then a new one is created (delete + recreate pattern).
    • On success, an inbound “Izix Response” message is created with the new Izix reservation_id, so the app can create/refresh the External BO Link between the Planon Reservation and the Izix reservation.

Reservation payload mapping

Izix fieldPlanon source
profile_idIzix profile id linked to the Reservation’s internal requestor (via Account → External BO Link)
fromReservation.BeginDateTime (formatted yyyy-MM-dd'T'HH:mm:ss)
toReservation.EndDateTime (formatted yyyy-MM-dd'T'HH:mm:ss)
organization_idModule setting izixOrganisationId
access_policy_idResolved at transmission time from Izix Access Rights (booking policy type) for the profile and parking lot
dry_runModule setting dryRun

Sending Visitors to Izix

The flow mirrors the Reservation flow, using the Business Rules Create Izix Visitor and Delete Izix Visitor, the Visitor Message Transformer and Visitor Message Transmitter, and the outbound message type “Send Visitor to Izix”.

  • Validity check: the Visitor’s OrderRef (link to its parent Reservation) is populated, UsrSendBookingToIzix = Y, and ParkingBeginTime, ParkingEndTime and LicensePlateNumber are populated.
  • The requestor’s Izix profile id is resolved from the parent Reservation’s internal requestor (via OrderRef).
  • The visitor’s name/email are resolved in this order: the External Visitor reference, then the Internal Visitor reference, then a free-text visitor name field (with Unknown/Visitor/visitor@example.com used as a last-resort fallback so a request can still be attempted).
  • valid_from/valid_to are built by combining the Visitor’s VisitingDate with ParkingBeginTime/ParkingEndTime.
  • The access-policy lookup uses the Izix visitor policy type.

Visit payload mapping

Izix fieldPlanon source
first_name / last_name / emailExternal Visitor, else Internal Visitor, else free-text visitor name (fallback values used if none resolve)
license_plateVisitor.LicensePlateNumber
valid_fromVisitor.VisitingDate + Visitor.ParkingBeginTime
valid_toVisitor.VisitingDate + Visitor.ParkingEndTime
organization_idModule setting izixOrganisationId
access_policy_idResolved at transmission time from Izix Access Rights (visitor policy type) for the profile and parking lot
dry_runModule setting dryRun

Linking Planon records with Izix records

Confirmations coming back from Izix are carried on an inbound Event Connector message of type “Izix Response”:

  • The Message Transformer builds the inbound message from the metadata provided by the transmitter (no additional parsing is required, since the identifiers are already carried as additional information).
  • The Message Processor inspects the additional information:
    • If an INSERT action is present, it creates an External BO Link between the Planon Business Object (Reservation or Visitor) and the returned Izix id, against the External System configured in externalSystemCode (default Izix).
    • If a DELETE action is present, it removes the corresponding External BO Link.

This External BO Link is what subsequent update/delete Business Rule executions use to know whether a Reservation/Visitor already exists in Izix, and with which id.

Parking availability lookup

  • The TSI Action Show Izix Availability is configured on the Reservation and Visitor business objects. When executed:
    • It requires exactly one record to be selected (otherwise an error panel is shown).
    • It resolves the property code (via the Reservation, or via the parent Reservation of the selected Visitor), the begin/end date-time of the booking, and whether the record is a User (Reservation) or Visitor type booking.
    • It opens an internal Planon web page (.../webpages/planonsoftware/apps/connectforizix/module/parkingavailability) with these values as query parameters, and opens the URL in a new browser tab.
  • The web page (Parking Spots Availability Page) then:
    • Resolves the Izix Parking Lot id from the Property’s UsrIzixParkingLotId free field.
    • Resolves the current Planon user’s linked Izix profile id (via the user’s Account and its External BO Link).
    • Retrieves a valid access token, then calls GET access-rights (filtered by organization and profile) and filters the results by parking lot id and access-policy type (booking or visitor, based on the selected reservation type).
    • Calls GET available-spots (filtered by organization, date range and the resolved access policy ids) and displays, per access policy: the parking lot name and address, the access policy name, and the number of available spots.
    • Provides a filter form (property code, reservation type, from/to date-time) that can be used to refresh the results without leaving the page, with pagination for larger result sets.
    • Validates that the requested from date is not more than 5 minutes in the past, and that from/to fall on the same calendar day, showing an inline error message otherwise.

Installation

This chapter describes the steps required to install this app on your Planon environment.

Installation Process

There are two ways to install the app:

  1. Using the Marketplace
  2. Manual installation

Install the app by using the marketplace

In case your environment is configured to use the Planon app store the only thing required to install the app is to add the app license in the AppCenter TSI. Planon will automatically download and install the app.

AppCenter Marketplace Installation

Manual installation

In case you want to perform a manual installation follow the steps below.

  1. Open AppCenter TSI from Planon webclient and click on install from action menu

AppCenter Installation

  1. Browse to the .ppk file

Browse ppk file

  1. Click OK to install the app and follow the installation process
  2. When the app is successfully installed, the app will appear in the AppCenter

Installed App

  1. Add the app license in Apps TSI

Add App License

App Level Configuration

Add module settings

In the Module Settings section, provide the required values and click Save.

Module Setting details

ParameterExample ValueDescription
urlhttps://api.izix.euBase Url of Izix API
clientIdClient Id to generate a token for authenticating with the Izix system
clientSecretClient Secret to generate a token for authenticating with the Izix system (secure value)
izixOrganisationIdOrganization Id from Izix, used to fetch/filter Access Rights, Reservations, Visits, and Profiles
externalSystemCodeIzixCode of the External System used for Izix (auto-created if not present)
dryRunNoSet to Yes to create reservations/visits in dry run — the request is sent, but Izix does not actually create the record in Izix; the response is mimicked. Set to No to create actual bookings/visits.

Note: For the clientSecret setting, click the popup button at the end of the field to open the secure-value dialog and paste the client secret there.

Business rule settings

The Business Rules Create/Delete Izix Booking and Create/Delete Izix Visitor share a common set of component settings:

ParameterExample ValueDescription
filterThe rule triggers only for Business Objects that meet the filter criteria configured here
triggerFieldsSystem names of the fields that trigger create/update of a booking in Izix when changed

Details on Filtering

This is used to filter the reservations/visitors to be sent to Izix.

For example, if we have to filter the records containing ‘000’, the value for the filter param should be as below Code CONTAINS 000

To add multiple filters, for example Code containing 000 and Name does not contain Test, below is format Code CONTAINS 000 & Name NOT_CONTAINS Test

Multiple values (in case of IN operator) can be combined using ‘,’. Multiple filters can be combined using the ‘and’ keyword. Reference fields will be filtered based on the lookup field of the referenced business object (usually ‘Code’).

Supported operators: EQUAL, NOT_EQUAL, LESS, LESS_EQUAL, GREATER, GREATER_EQUAL, IN, NOT_IN, CONTAINS, NOT_CONTAINS, STARTSWITH, NOT_STARTSWITH, ENDSWITH, NOT_ENDSWITH, NULL, NOT_NULL.

Worker settings

The Send Users To Izix worker has the following component settings:

ParameterExample ValueDescription
validUserGroupsSystem names of the User Groups whose users should be sent to Izix. Only users linked to these groups can create reservations in Izix.
updateDetailsNoSet to Yes to send updates for existing Izix users. Set to No to only create new profiles, without updating existing ones.
defaultUserLanguageen_USDefault language set on new/updated Izix profiles when the user’s Planon language cannot be determined

Translations

The app includes translations for error messages displayed on the parking availability web page and through the TSI Action. Configure the app log level

App log level

Reservation and Visitor synchronization errors, as well as parking availability lookup errors, are logged in the application server log (WildFly/Tomcat). To capture additional information, such as request and response bodies exchanged with Izix, set the App log level to DEBUG.

  1. Go to the AppCenter TSI.
  2. Select the connectforizix app at the Apps Selection level.
  3. Set the App log level to DEBUG and Save.

The app uses the Event Connector to exchange data with Izix. Make sure the app is linked to a User Group that has the Event Connector product definition linked to it:

  1. Find a User Group that is linked to the Event Connector Product Definition.
  2. Go to App Center.
  3. Select the app connectforizix and click Link App User Group.
  4. Select the User Group from step 1 and move it to the “In Use” section.
  5. Click OK.

Activation

Once the app has been configured, you can activate the app by pressing the Active status transition from the action panel. Always make sure that the required User groups are linked correctly and the Configure action is executed before activating the App.

AppCenter App Activation

Planon Configuration

This chapter describes the configuration required in Planon, such as free fields, Business Rules and the TSI Action. Please follow the sections in order.

BO Property (fields)

DescriptionUser defined System nameFree field typePlanon field type
Izix Parking Lot IdUsrIzixParkingLotIdAny available FreeStringString

BO Reservation (fields)

DescriptionUser defined System nameFree field typePlanon field type
Send Booking to IzixUsrSendBookingToIzixAny available Codes/Code-Name (Yes/No) fieldCode

BO Visitor (fields)

DescriptionUser defined System nameFree field typePlanon field type
Send Booking to IzixUsrSendBookingToIzixThe same Codes/Code-Name field used on ReservationCode

PSS Configuration to show/hide URL

This helps to dynamically show or hide the Izix parking availability URL based on the ‘Send Booking to Izix’ field value. When this field is set to ‘Yes’ while booking a reservation via PSS, the url to check availability Izix will be displayed. When set to ‘No’ or left empty, the URL will be hidden.

Follow the below steps to achieve the functionality,

  1. Go to TSI for Web Configuration or PSS Configuration
  2. Select Reservations selection step
  3. Select the required PSS definition
  4. Click on Add block under General section
  5. Click on Add fields
  1. Add the newly added ‘Send Booking to Izix’ field
  2. Once added, go to Java script tab of the field and copy the below script
function addOrRemoveLinkButton($input){
	console.log('the value', $input.val());
	$('#myCustomButton').remove();
	if($input.val()?.toLowerCase().startsWith('y')){
		var $button = $('<a href="/services/sdk/platform/webpages/planonsoftware/apps/connectforizix/module/parkingavailability?type=booking" target="_blank">Check Izix Parking Availability</a>');
		$input.closest('.pss_field').append($button);
	}
}
$(this).find('input').change(function(){
	addOrRemoveLinkButton($(this));
});
addOrRemoveLinkButton($(this).find('input'));
  1. Now go to the Visitor PSS definition linked to the selected Reservation PSS definition
  2. Go to All selection step and filter with the Code field
  3. Go to Add block under Add page
  4. Click on Add fields
  5. Add the newly added ‘Send Booking to Izix’ field
  6. Once added, go to Java script tab of the field and copy the below script
function addOrRemoveLinkButton($input){
	console.log('the value', $input.val());
	$('#myCustomButton').remove();
	if($input.val()?.toLowerCase().startsWith('y')){
		var $button = $('<a href="/services/sdk/platform/webpages/planonsoftware/apps/connectforizix/module/parkingavailability?type=visitor" target="_blank">Check Izix Parking Availability</a>');
		$input.closest('.pss_field').append($button);
	}
}
$(this).find('input').change(function(){
	addOrRemoveLinkButton($(this));
});
addOrRemoveLinkButton($(this).find('input'));

Business Rule configuration

  1. Go to the Field Definer TSI.
  2. Configure the Business Rules Create Izix Booking and Delete Izix Booking on the Reservation business object, and Create Izix Visitor and Delete Izix Visitor on the Visitor business object.
  3. Configure the trigger events as follows:
    • Create Izix Booking / Create Izix Visitor: AFTERDBINSERT, AFTERDBUPDATE.
    • Delete Izix Booking / Delete Izix Visitor: AFTERDBDELETE, AFTERDBUPDATE.
  4. Configure the Business Rule component settings (filter, triggerFields) as described under Business rule settings.

TSI Action configuration

  1. Go to the Field Definer TSI.
  2. On the Reservation and Visitor business objects, add an Extended Action using the class name ShowIzixAvailability.
  3. Provide a suitable translation for the end user, e.g. “Show Izix Availability”, and save.
  4. Add the action to the relevant layouts (Reservations / Visitors TSIs).
  5. Logout and login to Planon to see the changes.

Worker configuration

  1. Configure the Send Users To Izix worker’s component settings as described under Worker settings.
  2. Schedule the worker to run periodically using Planon’s standard Import/Export Worker scheduling mechanism.

Sample payloads

OAuth2 token request (POST oauth/token)

{
  "grant_type": "client_credentials",
  "client_id": "<clientId>",
  "client_secret": "<clientSecret>",
  "scope": "*"
}

OAuth2 token response

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Reservation request (POST reservations)

{
  "profile_id": 264262,
  "access_policy_id": 118,
  "from": "2026-07-20T09:00:00",
  "to": "2026-07-20T17:00:00",
  "organization_id": 42,
  "dry_run": false
}

Reservation/Visit response

{
  "reservation_id": "9f1c3b2a-1234-4d56-9abc-1234567890ab",
  "remote_control_url": "https://api.izix.eu/remote-control/9f1c3b2a"
}

Visit request (POST visits)

{
  "first_name": "John",
  "last_name": "Doe",
  "email": "john.doe@example.com",
  "license_plate": "1-ABC-123",
  "access_policy_id": 205,
  "valid_from": "2026-07-20T09:00:00",
  "valid_to": "2026-07-20T17:00:00",
  "organization_id": 42,
  "dry_run": false
}

Profile create request (POST profiles)

[
  {
    "organization_id": 42,
    "language": "en_US",
    "tags": [],
    "plates": [],
    "email": "john.doe@example.com",
    "last_name": "Doe",
    "first_name": "John",
    "profile_external_reference": "john.doe@example.com",
    "phones": []
  }
]

Profile patch request (PATCH profiles)

[
  {
    "attributes": {
      "language": "en_US",
      "first_name": "John"
    },
    "profile_external_reference": "john.doe@example.com",
    "email": "john.doe@example.com",
    "organization_id": 42
  }
]

Available spots response (GET available-spots)

{
  "items": [
    { "access_policy_id": 118, "available_spots": 4 },
    { "access_policy_id": 205, "available_spots": 0 }
  ],
  "pagination": { "page": 1, "total_items": 2, "pages": 1, "per_page": 100 }
}

Troubleshooting

Error Handling

  • Reservation/Visitor not created in Izix: Check that UsrSendBookingToIzix is set to Yes, all mandatory fields are populated, and that the requestor is already linked to an Izix profile (either via the scheduled worker, or manually through an External BO Link). Also confirm that a parking spot is actually available for the requested date/time, parking lot and access-policy type — the app will not report an error if no spots are available, it simply does not create the record.

  • Reservation/Visitor id keeps changing after each update: This is expected — updates are implemented as a delete followed by a re-create in Izix (see Constraints).

  • Availability page shows “No Izix profile is linked to your user”: The current Planon user’s Account has no External BO Link to an Izix profile. Run/verify the Send Users To Izix worker for this user’s User Group, or link the Account manually.

  • Availability page shows “Parking lot ID not found for property”: Configure UsrIzixParkingLotId on the relevant Property record.

  • Authentication errors: Verify the url, clientId and clientSecret module settings

  • Set the App log level to DEBUG (see App log level) to see detailed request/response information for all Izix API calls in the application log.

  • You should also ensure that the app is linked to a User Group that has the Event Connector Product Definition linked to it (see Link User Groups), otherwise outbound messages to Izix will not be transmitted.

  • Any errors related to TSI action or Webpage can be found in Tomcat log file

  • Any errors related to Business rules or Worker can be found in Wildfly log file