Headless & Integration package

Webhook multi-system sync

A CRM "account updated" webhook is validated and fanned out to the ERP, billing platform and support desk, with every result written to a sync log.

Headless / APIIntermediate~20 min setupv1.0.0

About this package

What it does

Webhook multi-system sync keeps customer master data consistent across systems without anyone touching it. Your CRM posts an "account updated" webhook with the account id, name, billing address, tax id, status, owner and change time.

The workflow rejects payloads without an account id or name, then builds a payload per target system and calls them one after another: PUT the customer into the ERP, POST a sync to the billing platform and PATCH the organisation in the support desk. An HTTP error from one system does not stop the others: each call is checked for a status of 400 or above and logged as a failure or a success in the Sync log table.

Adapt the three payloads to your systems' field names, point the integrations at your APIs and create an inbound webhook for the workflow in your CRM. The Sync log gives you a monitoring view and the rows you need to replay a failed sync.

Headless / API

Starts from an inbound webhook: create one for the Account sync workflow and register its URL in your CRM for "account updated" events.

Another system starts it over REST or an inbound webhook. No UI is needed; people only appear where a decision needs a human.

The flow

Step by step

  1. 1

    Webhook received

    The CRM posts the account id, name, billing address, tax id, status, owner email and updated time.

  2. 2

    Validate

    Payloads without an account id or name are logged and rejected.

  3. 3

    Upsert the ERP customer

    The customer record is PUT into the ERP keyed by the CRM account id; the result is logged.

  4. 4

    Sync billing

    The billing platform receives the name, address, tax id and status; an HTTP error is logged as a failure and the run continues.

  5. 5

    Update the support desk

    The support organisation is patched with the name, owner and status tag.

  6. 6

    Sync log

    Every call writes its HTTP status and result to the Sync log table.

Account sync — Receives the CRM "account updated" webhook, validates it and upserts the account into the ERP, billing platform and support desk, logging each result. The same canvas you get in the designer after installing.

Forms

Inputs and task forms

The inputs a caller passes when it starts a run, and the forms people complete when the process needs a decision.

Start inputs

Account sync

Passed by the calling system

Account id * account_id · textCRM account id (required; used as the external id everywhere)
Account name * account_name · textLegal or trading name
Billing address billing_address · json{ … }Billing address object: line1, line2, city, region, postcode, country
Tax id tax_id · textTax / VAT / GST number
Status account_status · select
activeon_holdclosed
Account status in the CRM: active, on_hold or closed
Owner email owner_email · emailname@company.comAccount owner email in the CRM
Updated at updated_at · textWhen the account changed in the CRM (ISO timestamp)

Headless

Call it from your systems

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"account_id":"ACC-20117","account_name":"Harbour Logistics Ltd","billing_address":{"line1":"14 Quay Street","line2":"Level 3","city":"Auckland","region":"Auckland","postcode":"1010","country":"NZ"},"tax_id":"NZ-123-456-789","account_status":"active","owner_email":"jamie.cole@example.com","updated_at":"2026-10-26T07:14:02Z"}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input account_id=ACC-20117 --input account_name="Harbour Logistics Ltd" --input billing_address='{"line1":"14 Quay Street","line2":"Level 3","city":"Auckland","region":"Auckland","postcode":"1010","country":"NZ"}' --input tax_id=NZ-123-456-789 … --wait

Inbound webhook

shell
usertasks webhooks create <workflow id>          # prints the hook slug and secret once
curl -X POST "$USERTASKS_URL/api/webhooks/inbound?hook=<slug>" \
  -H "Authorization: Bearer <webhook secret>" -H "Content-Type: application/json" \
  -d '{"account_id":"ACC-20117","account_name":"Harbour Logistics Ltd","billing_address":{"line1":"14 Quay Street","line2":"Level 3","city":"Auckland","region":"Auckland","postcode":"1010","country":"NZ"},"tax_id":"NZ-123-456-789","account_status":"active","owner_email":"jamie.cole@example.com","updated_at":"2026-10-26T07:14:02Z"}'

What's included

8 assets, ready to adapt

TypeNameDetails
Data tableSync logOne row per target system per webhook: the HTTP status and whether the sync succeeded. Use it for monitoring and replays.
IntegrationBilling platform
IntegrationERP
IntegrationSupport desk
API referenceSync billing accountPOST /accounts/{{account_id}}/sync — Push the account name, billing address, tax id and status to the billing platform.
API referenceUpdate support organisationPATCH /organizations/{{organization_id}} — Update the matching organisation in the support desk (name, status, account owner).
API referenceUpsert ERP customerPUT /customers/{{external_id}} — Create or replace the customer master record in the ERP, keyed by the CRM account id.
WorkflowAccount sync22 steps — Receives the CRM "account updated" webhook, validates it and upserts the account into the ERP, billing platform and support desk, logging each result.

Sync log · schema only

Synced atAccount idTarget systemOperationHTTP statusResultMessage

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • REST API — A REST API integration: set its base URL and credentials on install.
  • Inbound webhook — An inbound webhook created for the workflow, so other systems can start it.

After installing

  1. ERP integration: set the base URL and API token. Upsert ERP customer calls PUT /customers/{external_id}.
  2. Billing platform integration: set the base URL and API token. Sync billing account calls POST /accounts/{id}/sync.
  3. Support desk integration: set the base URL and API token. Update support organisation calls PATCH /organizations/{id}.
  4. Adjust the three "payload" steps to the field names each system expects.
  5. Create an inbound webhook for the Account sync workflow (Settings → Webhooks) and register it in your CRM. Map the CRM field names to the workflow inputs in the webhook payload mapping if they differ.

Asked for on install

  • Integration “Billing platform”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://billing.example.com/api· optional
  • Integration “ERP”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://erp.example.com/api· optional
  • Integration “Support desk”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://support.example.com/api· optional

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download webhook-multi-system-sync-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/webhook-multi-system-sync-1.0.0.utpkg
usertasks packages inspect webhook-multi-system-sync-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install webhook-multi-system-sync-1.0.0.utpkg --dry-run
usertasks packages install webhook-multi-system-sync-1.0.0.utpkg       # prompts for each requirement
usertasks packages install webhook-multi-system-sync-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete webhook-multi-system-sync -f values.yaml

Verify the download

File SHA-256
be49163f8a2cf25c9136c67d90f4d058eecd0dce4e8dd28bac08c1728a0c05c6
Package checksum (what is signed)
sha256:569d9662f7e96e616e3c918eb214be44f03eadeee2eeca5921ade154f0d2d2d5
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 webhook-multi-system-sync-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-26First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery