HRIS live sync (BambooHR and Dynamics 365 HR)
Plan availability: HRIS live sync is available on the business, enterprise, and agency plans.
Use Settings → Integrations to connect a single HRIS integration for your tenant. Supported providers are BambooHR and Dynamics 365 HR.
The integrations page is visible only to roles that include integration management. In the default tenant role bundles that means owner and admin.
Astro can read HRIS connection health, recent sync status, and related operational context, but it cannot connect, pause, resume, disconnect, or rerun integration workflows for you. Those remain human-owned settings and operations.
Connect an HRIS provider
- Open
/settings/integrations/hris. - If no provider is connected, use the BambooHR or Dynamics 365 HR tab to choose a provider.
- Use the provider setup action to open the connection form, then enter provider credentials:
- BambooHR: subdomain + API key
- Dynamics 365 HR: environment URL, tenant ID, client ID, and client secret
- Choose where incoming changes apply:
- Live Baseline
- one or more active scenarios
- all future scenarios (optional)
- Click Test connection to validate credentials.
- Save the connector to activate reconciliation jobs for the selected provider.
Webhook auth requires
config_encrypted.webhook_secreton the integration record. The current UI saves subdomain + API key; webhook secrets must be provisioned through deployment/config automation before callbacks are accepted.
Dynamics 365 HR (reconciliation-only)
- Dynamics 365 HR runs through nightly reconciliation in Orgonaut v1.
- No Dynamics webhook endpoint is required for this release.
- Configure Microsoft Entra OAuth2 client credentials in the integration form.
- Workforce scope should be constrained in your source tenant (for example, legal-entity scoping and app permissions).
Webhook endpoint (BambooHR only in this release)
- Endpoint:
POST /api/v1/integrations/bamboohr/webhook/{tenant} - The endpoint acknowledges quickly (
202 Accepted) and queues asynchronous processing. - Validation order:
X-BambooHR-SignatureHMAC SHA-256 (if provided), orX-Orgonaut-Webhook-Secretshared-secret fallback.
- Payloads are processed idempotently via
event_idempotency_keyinintegration_sync_logs.
Scheduled reconciliation
- Nightly reconciliation runs at
02:00server time. - Reconciliation uses queued jobs and writes
integration_sync_logswithkind = reconcile. - Archived/snapshot scenarios remain read-only and are automatically excluded from writes.
- When all future scenarios is enabled, only scenarios created after the toggle is enabled are auto-targeted. Existing scenarios remain unchanged unless explicitly selected.
- If a tenant is downgraded below HRIS integration availability, webhook callbacks (where configured) acknowledge without queueing work and queued sync/reconcile jobs no-op until the tenant upgrades again.
Operational runbook
Initial sync
- There is no dedicated “Run initial sync” button on the connection form.
- Initial full-directory sync runs as a
manual_syncexecution in the HRIS sync engine. - After setup is complete, validate outcomes in Recent sync logs and drill into View run details.
Webhook processing
- Configure BambooHR to call
POST /api/v1/integrations/bamboohr/webhook/{tenant}. - Include either:
X-BambooHR-Signature(HMAC SHA-256), orX-Orgonaut-Webhook-Secret(shared secret fallback).
- Confirm
202 Acceptedresponses and inspect queued runs in Recent sync logs.
Nightly reconciliation
- Laravel scheduler enqueues reconciliation daily at
02:00(integrations:reconcile-nightly). - Reconcile runs are logged with
kind = reconcile,event_type = nightly_reconciliation.
Where to look when sync fails
- Open
/settings/integrations/hris. - Review integration status plus last sync/reconciliation timestamps.
- Open View run for the failed row.
- Check error summary, structured error JSON, run details JSON, and affected identities.
How to re-run a sync safely
- From
/settings/integrations/logs/{integration_sync_log}:- Re-run this sync for non-reconcile runs with an affected employee identity.
- Re-run reconciliation for reconcile runs.
- Reruns enqueue new jobs and preserve tenant + scenario targeting.
Important guardrails
- Orgonaut allows only one active HRIS integration per tenant.
- Tenant boundaries are enforced for integration-scoped API access; probing another tenant's integration ID resolves to
404. - The scenario target selector excludes read-only contexts:
- archived scenarios
- snapshots / immutable kinds
- Sync changes mutate actor and organisational data in the selected contexts.
- Sync-driven model mutations continue through the standard observer pipeline so
audit_eventsremains complete. - Department/division mappings prefer stable BambooHR source IDs when available, so source-side renames update existing records instead of creating duplicates.
- Actor matching now prefers actor-side Bamboo source identity first:
actors.source_hris = bamboohractors.source_hris_id = Bamboo employee/Person ID
- Email is now treated as contact data and a compatibility fallback, not the canonical Bamboo identity key.
- When a legacy actor is matched only through
IntegrationIdentityMapor old Bamboo metadata, the sync self-heals by persisting the Bamboo source identity onto the actor record.
Manage an existing connection
From the same page you can:
- Pause sync processing
- Resume sync processing
- Disconnect to deactivate the integration and remove stored credentials
The page also shows:
- current status
- last sync timestamp
- last reconciliation timestamp
- recent
integration_sync_logsentries (shown only after a connector is configured)
Connection health notification
- Connection health is surfaced with:
- status badge (
active,paused,error,disconnected) - last sync and reconciliation timestamps
- per-run error summaries in recent logs
- status badge (
- Use run detail diagnostics for full troubleshooting without exposing secrets.
Sync run detail diagnostics
Use /settings/integrations/logs/{integration_sync_log} from the View run action in the sync logs table to inspect one run in detail.
The run detail page includes:
- provider, sync kind, status, start/finish timestamps, and duration
- configured apply targets at run time (baseline, explicit scenario IDs, all future scenarios flag)
- count metrics (fetched, created, updated, deactivated, errors)
- concise error summary plus collapsible structured JSON payloads
- paginated affected identities captured for the run (source HRIS, source ID, email, and scenario context)
Operators can queue safe reruns from this page:
- Re-run this sync for rerunnable non-reconciliation runs with a known affected identity
- Re-run reconciliation for reconciliation runs
Run diagnostics are tenant-scoped and never expose stored integration credentials.
Actor identity behavior
Bamboo sync uses the following actor resolution order inside each baseline/scenario target:
- actor-side
source_hris = bamboohr+source_hris_id - compatibility fallback through
IntegrationIdentityMap - compatibility fallback through email
This means Bamboo email changes update the same actor when the Bamboo employee ID is stable.
Manager resolution
- Bamboo manager relationships resolve from the manager's Bamboo employee ID, not from Orgonaut actor IDs.
- If a manager has not been imported yet, the employee keeps a deferred Bamboo manager ID and Orgonaut retries resolution later in the same run or on a later sync.
Notifications centre + email alerts
Orgonaut now surfaces BambooHR health issues through a tenant notifications centre instead of persistent in-page banners.
Header inbox + notifications centre
- Open Profile menu → Notifications (
/notifications) to review messages. - When unread notifications exist, a square inbox button with a red badge appears immediately left of the profile menu in the top banner.
- Notifications support:
- All/Unread filtering
- Mark read / mark unread
- Mark all as read
- CTA links for actionable events (for example, opening a failed sync run)
Who receives system notifications
- System integration notifications are created for tenant owners and admins only.
- Read state is tracked per user, per tenant.
HRIS failure and recovery events
- On integration health transition healthy → failed, Orgonaut creates an
integration.failednotification and emails tenant owners/admins. - Email subject uses the active provider label (for example, “BambooHR connection needs attention” or “Dynamics 365 HR connection needs attention”).
- Messages include an actionable summary and a link to run diagnostics.
- A cooldown (default 24h) suppresses repeated alerts for the same ongoing failure.
- On failed → healthy, Orgonaut emits an
integration.recoveredinformational notification.