These are the endpoints behind BusinessMade: hiring through offboarding, timesheets through payroll, and a double-entry ledger underneath it. Several dozen controllers, several hundred routes, and 57 bm_* datatypes.
This page is the API surface. For what each area does and how to use it, read the product docs:
Every route on this page lives under that prefix, including the ones the product surfaces as Operations, HR, Payroll, Time and Books.
Setup and seeding
Start here on a new tenant — nothing else works well against an empty chart of accounts.
/business-made/setup/statusJWT/business-made/setup/allJWT/business-made/setup/chart-of-accountsJWT/business-made/setup/locationsJWT/business-made/setup/vendorsJWT/business-made/setup/product-attributesJWT/business-made/setup/workflowsJWT/business-made/setup/scenario/applyJWT/business-made/setup/module/applyJWTScenarios and modules are the templated paths — apply an industry profile rather than configuring every piece by hand.
Employees
/business-made/employeesJWT/business-made/employeesJWT/business-made/employees/updateJWT/business-made/employees/:id/statusJWT/business-made/employees/:id/terminateJWTFiltered views: /department/:department, /location/:location, /status/active, /supervisor/:supervisorId, /skill/:skillName.
Per-employee records — time off, reviews, training, skills and onboarding tasks — hang off /business-made/employees/:id/….
Reports: /reports/headcount, /reports/anniversaries, /reports/birthdays, and /employees/training/expired.
Most BusinessMade controllers update through POST /business-made/<area>/update with the id in the body, rather than PUT /…/:id. The pattern is consistent across employees, benefits, payroll, timesheets, schedules and more.
Timesheets and time clock
/business-made/timesheets/clock-in/:employeeIdJWT/business-made/timesheets/clock-out/:employeeIdJWT/business-made/timesheets/clock-in/:employeeId/activeJWT/business-made/timesheets/reports/on-the-clockJWTApproval flow — POST /business-made/timesheets/:id/<action> for submit, approve, reject, reopen. Entries are managed at /:id/entries[/:entryId].
Reports: /reports/summary/:employeeId, /reports/team-status, /reports/missing.
/reports/missing is the one that matters before running payroll.
Payroll
Two controllers — payroll.controller (34 routes) and payroll-config.controller (50) — sharing the /business-made/payroll prefix.
Runs
/business-made/payroll/runsJWT/business-made/payroll/runs/:id/calculateJWT/business-made/payroll/runs/:id/parallel-checkJWT/business-made/payroll/runs/:id/approveJWT/business-made/payroll/runs/:id/processJWT/business-made/payroll/runs/:id/cancelJWTThe sequence is create → calculate → approve → process. parallel-check re-computes independently and compares — a self-check before money moves.
/business-made/payroll/reports/blockersJWT/business-made/payroll/reports/upcoming-runJWTCall blockers before calculate: it lists what would make the run wrong — missing timesheets, unverified bank accounts, incomplete tax setup.
Pay stubs
/business-made/payroll/stubsJWT/business-made/payroll/stubs/employee/:employeeIdJWT/business-made/payroll/stubs/run/:payrollRunIdJWTEmployee payroll profiles
/business-made/payroll/profiles/employee/:employeeIdJWT/business-made/payroll/profilesJWT/business-made/payroll/profiles/employee/:employeeId/deductionsJWT/business-made/payroll/profiles/employee/:employeeId/bank-accountsJWT/business-made/payroll/profiles/employee/:employeeId/bank-accounts/:accountId/verifyJWTDirect deposit requires a verified account; adding one is not enough.
Employer tax setup
/business-made/payroll/employer-setupJWT/business-made/payroll/employer-setupJWT/business-made/payroll/employer-setup/readinessJWTReports
/business-made/payroll/reports/summary/:yearJWT/business-made/payroll/reports/w2/:employeeId/:yearJWTConfiguration — earning types, deduction types, tax rules, pay periods and schedules — lives in payroll-config.controller. Datatypes: bm_earning_type, bm_deduction_type, bm_tax_rule, bm_pay_period, bm_payroll_schedule, bm_payroll_run, bm_pay_stub, bm_payroll_profile, bm_tax_form.
Government e-filing
Owner, ConfigAdmin or RootAdmin only (anyone else gets 403 EFILE_ADMIN_ONLY). For the how-to, see Contractors, taxes, forms and filings and Set up government filing.
/business-made/efile/connections/:programJWT/business-made/efile/connections/:programJWT/business-made/efile/connections/:program/testJWT/business-made/efile/submissionsJWT/business-made/efile/submissions/:idJWT/business-made/efile/submissions/:id/files/:kindJWTIRS API connections, one per program — iris (1099 filing), tinm (TIN Matching) or eservices. The private key is write-only and never returned; a connection starts on the IRS test system, and production is refused until the owner turns on allowProduction. test requests a token and reports the stage that failed with the IRS error code. Every transmission is recorded as a submission; files/:kind downloads its payload or ack.
/business-made/efile/iris/:taxYear/prepareJWT/business-made/efile/iris/submissions/:id/transmitJWT/business-made/efile/iris/submissions/:id/refreshJWT/business-made/efile/iris/submissions/:id/ackJWTIRIS 1099 e-filing (1099-NEC or 1099-MISC), against the IRS test (ATS) system. prepare builds and validates only; transmit sends it; refresh asks the IRS for the acknowledgement now (a queue job also polls). No response carries the transmission XML — it holds payee TINs.
/business-made/efile/tinm/checkJWT/business-made/efile/tinm/bulkJWT/business-made/efile/tinm/submissions/:id/resultsJWTIRS TIN Matching for 1099 payees: interactive for up to 25 payees, bulk for up to 100,000 (or scope: "all_1099_payees"). Each answer is written on the payee record as tinMatch.
/business-made/payroll/filings/efw2/:taxYear?regenerate=JWT/business-made/payroll/filings/efw2/:taxYear/download?submissionId=JWTThe SSA EFW2 W-2 wage file, built from the year's W-2s for upload to Business Services Online. It needs the BSO User ID in the employer setup (EFW2_BSO_USER_ID_MISSING otherwise) and is recorded as an e-file submission.
Full specifications: Government e-filing.
Books
Double-entry accounting, split across a reporting controller and a posting controller that share /business-made/books.
Accounts and journals
/business-made/books/accountsJWT/business-made/books/accountsJWT/business-made/books/journalsJWT/business-made/books/journalsJWT/business-made/books/journals/:id/postJWT/business-made/books/ledger/:accountCodeJWTA journal is created in draft and only affects the ledger once posted.
Reports
/business-made/books/overviewJWT/business-made/books/reports/plJWT/business-made/books/reports/balance-sheetJWT/business-made/books/reports/cash-flowJWT/business-made/books/reports/trial-balanceJWT/business-made/books/reports/by-locationJWT/business-made/books/reports/close-checkJWT/business-made/books/arJWTP&L and balance sheet also render as PDF: /reports/pl/pdf, /reports/balance-sheet/pdf.
Automatic posting
Commerce activity posts to the ledger through a configurable account map, so a sale in the storefront becomes journal entries without manual work.
/business-made/books/account-mapJWT/business-made/books/account-mapJWT/business-made/books/post/saleJWT/business-made/books/post/refundJWT/business-made/books/post/invoiceJWT/business-made/books/post/paymentJWTRepair tools, for when the ledger and the source records disagree:
/business-made/books/balance-driftJWT/business-made/books/balance-drift/repairJWT/business-made/books/backfillJWT/business-made/books/backfill-cogsJWT/business-made/books/resume-postingsJWTbalance-drift detects the divergence; repair corrects it. resume-postings re-runs postings that failed and were parked.
Datatypes: ledger_account, ledger_entry, journal_entry.
Period close
/business-made/period-close/startJWT/business-made/period-close/:id/checklist/:itemIdJWT/business-made/period-close/:id/lockJWT/business-made/period-close/:id/reopenJWT/business-made/budgets/:id/varianceJWTChecklist-driven. lock freezes the period; reopen unfreezes it. Run books/reports/close-check first.
Bills and vendors
/business-made/billsJWTAccounts payable — bills, payments and vendors (bm_bill, bm_bill_payment, bm_vendor). Receivables live on the commerce side, under invoices.
Recruitment
/business-made/recruitment/boardJWT/business-made/recruitment/jobsJWT/business-made/recruitment/jobs/:idJWTJob postings, applicants, interviews and offers (bm_job_posting, bm_applicant, bm_interview, bm_offer). Feeds onboarding on acceptance.
Onboarding and offboarding
/business-made/employees/:id/onboarding/startJWT/business-made/employees/:id/onboarding/:taskId/completeJWTOffboarding (21 routes) covers exit checklists and exit interviews — bm_offboarding, bm_exit_interview.
Leave
29 routes covering leave types, policies, balances and requests — bm_leave_type, bm_leave_policy, bm_leave_balance, bm_leave_request.
Simple time-off requests can also go through POST /business-made/employees/:id/time-off/request, which is the same data reached from the employee record.
Benefits
/business-made/benefits/plansJWT/business-made/benefits/plans/:id/open-enrollmentJWT/business-made/benefits/enrollmentsJWT/business-made/benefits/enrollments/:id/activateJWT/business-made/benefits/enrollments/:id/terminateJWT/business-made/benefits/enrollments/:id/waiveJWT/business-made/benefits/enrollments/:id/dependentsJWT/business-made/benefits/enrollments/:id/beneficiariesJWT/business-made/benefits/metricsJWTWaiving is a recorded decision, not an absence of one — which is what open-enrollment compliance needs.
Performance and learning
Performance (31 routes) — goals, reviews and PIPs (bm_goal, bm_performance_review, bm_pip).
Learning (32 routes) — courses, certifications, learning paths and enrollments (bm_course, bm_certification, bm_learning_path, bm_course_enrollment).
Compensation
28 routes — salary grades, compensation changes and bonuses (bm_salary_grade, bm_compensation_change, bm_bonus).
Organization
32 routes — departments, positions and org charts (bm_department, bm_position, bm_org_chart).
Documents and policies
31 routes — employee documents, policies and acknowledgements (bm_employee_document, bm_policy, bm_policy_acknowledgement). Acknowledgements are the audit trail that someone read the handbook.
Workforce readiness
/business-made/readiness/overviewJWT/business-made/readiness/employee/:employeeIdJWT/business-made/readiness/check/:employeeId?gate=JWT/business-made/readiness/rulesJWT/business-made/readiness/rulesJWTRequirement rules (bm_requirement_rule) say what a person must have — a certification, a signed policy, a completed training — and what happens where it is missing. Each rule sets an effect per gate: scheduler, clockIn, pos, kitchenStation, payroll and access. kitchenStation is labelled Work station: it covers moving a ticket at any station on a work line — prep line, assembly, service bay — not only a kitchen; the key keeps its name so stored rules still apply. access withholds role and group grants at sign-in until the requirement is met. check returns the answer a gate would give, for screens that want to show it first.
Schedules
/business-made/schedulesJWTShift scheduling (bm_schedule), 22 routes. Pairs with the time clock: scheduled versus actual is what /timesheets/reports/team-status compares.
Work orders
/business-made/work-ordersJWT/business-made/work-orders/:id/assignJWT/business-made/work-orders/:id/itemsJWT/business-made/work-orders/:id/time-entriesJWT/business-made/work-orders/:id/materialsJWT/business-made/work-orders/customer/:customerIdJWTField service — labor and materials on a job, linked to a customer (bm_work_order).
Employee self-service
Employees reach their own data through StaffPortalModule rather than these controllers:
/staff-portal/dashboardJWT/staff-portal/landingJWT/staff-portal/time-offJWTProfile, pay method, schedule, timesheets, payslips and W-2 — scoped to the signed-in employee.