[REWST - TASK] PSA-KaseyaBMS: Upsert Contact

This workflow automates contact creation and updates in Kaseya BMS by checking if a contact exists via ID or email, then either updating it or creating a new one. It’s ideal for MSPs automating onboarding, user provisioning, ticketing, or syncing across platforms, ensuring clean, duplicate-free records. The logic follows a decision tree to determine the right action, executes the proper API call, and includes error handling to save time and keep contact data consistent across systems.

This workflow contains 9 tasks.

Inputs

  • psa_contact_id - string

    • Specify the Contact to update, if known

  • existing_ticket - string

    • Specify the existing ticket id in order to update an existing ticket. If none specified, we will create a new ticket.

  • user_attributes - object

    • Specify the user object that includes the user properties

    • Default: {{ { } }}

  • psa_disable_contact - boolean

    • Specify whether to disable the contact if found. Defaults to false.

    • Default: {{ false }}

  • psa_contact_location - string

    • Specify the location for the contact to be created under

Outputs

  • automation_log: Standardized Rewst automation log

Key tasks

  • check_contact_found: Validation/verification

  • determine_upsert: Core integration: noop

  • no_update_contact_endpoint: Data modification

  • bms_list_contacts_id: Kaseya BMS integration: Get Contact by ID

  • bms_list_contacts_email: Kaseya BMS integration: List Contacts

Jinja examples

Example 1


<div data-gb-custom-block data-tag="set" data-0='@' data-1='@' data-2='@' data-3='@' data-4='@' data-5='@' data-6='@' data-7='@' data-8='@' data-9='@' data-10='@' data-11='@'></div>

{{ email | regex_match('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$') }}

This is used in transition condition to see if a email was provided.

Example 2

{{ CTX.psa_contact_id | d }}

This is used in transition condition to see if a contact ID was provided.

Last updated

Was this helpful?