Choosing an integration model
Most teams pick one of three shapes depending on how much of the payroll experience they want to own.
- Embedded UI — drop our components in, we own the interface
- Headless API — you build the interface, we handle calculation and filing
- Hybrid — embedded onboarding, your own payroll approval flow
Embedded components
Components render in an iframe and are authorized with a short-lived session token minted server-side. Never expose an API key to the browser.
// Server
const session = await payflo.sessions.create({
company_id: 'cmp_8f2a',
component: 'employee_onboarding',
expires_in: 900,
});
// Browser
Payflo.mount('#onboarding', { token: session.token }); Syncing your own records
Store the Payflo object id alongside your own record rather than matching on email or name. Ids are stable; the fields people use to match are not.
When a sync conflict occurs, Payflo returns a 409 with both versions rather than picking a winner.
Testing
Sandbox provides deterministic test fixtures. Specific EINs and routing numbers trigger specific outcomes so you can exercise failure paths without waiting for a real rejection.
- EIN 00-0000001 — filing rejected, invalid account
- Routing 110000000 — ACH return, account closed
- Employee SSN 000-00-0002 — jurisdiction registration missing