Integrations.

PerkUp leans on a lot of third-party services — for HR data, payments, messaging, commerce, and more. This page is the map: who we depend on, what each one is for, and the shape they all share. It is not a wiring guide; the exact flows, headers, and secrets live in the code and in docs/integrations/AGENTS.md alongside the per-provider files.

Documented providers

ProviderUsed forStatusGuide
FinchHRIS abstraction (BambooHR, Rippling, Gusto)Livedocs/integrations/finch.md
WorkOSSAML SSO / directory syncLivedocs/integrations/workos.md
SlackNotifications + reward deliveryLivedocs/integrations/slack.md
NangoOAuth broker (Cal.com, others)Livedocs/integrations/nango.md
StripePayments / billingLivedocs/integrations/stripe.md
Attio · TypeformCRM / intakePlanned

Other connected providers

In use without a dedicated guide page — code is the reference:

ShopifyPrintfulRyeResendMailjetCourierSegmentOpenAIAnthropicAftershipOrderDeskTopshelfPrintroveSageOneSourceAtlasFlatfilePlacidIMG.LYBrandfetchMapboxAurigmaCloudconvertDimonaLinearTinybirdPlum

The shape of an integration

Providers differ, but almost every integration touches the same three surfaces. Knowing this shape is usually enough to find your way around a new one.

  • Connect. An OAuth or connect flow that establishes the link and stores credentials. Some providers go through a broker rather than a bespoke flow.
  • Receive. A webhook receiver for events the provider pushes to us. Inbound webhooks are verified before we trust them — the exact signature scheme is the provider's, and the code is the source of truth for it.
  • Sync. The logic that reconciles their data with ours, on a schedule or in response to events.
New integrations are backend work, so they follow the same rule as everything else: a TypeScript Cloud Function unless you're extending something that already lives in the Go service. See Architecture.

Exercising one locally

The dev environment can receive real inbound webhooks: pnpm op default brings up the full stack behind an HTTPS tunnel so a provider can reach your machine. Payments are the usual exception — Stripe has its own CLI for replaying events. The per-provider docs cover the specifics; the Dev Environment page covers the setup.

Source: docs/integrations/AGENTS.md + per-provider .md files. Compiled 2026-06-07. A map, not a wiring guide — the code is the source of truth for how each integration actually works.