Obtain a valid OAuth access token for the company using your client credentials.
POST to /v1/companies/{company_uuid}/payrolls with body fields: off_cycle: true, off_cycle_reason (e.g. 'Bonus' or 'Correction'), employee_uuids (array), start_date, end_date, and check_date.
Receive a 202 Accepted response; the submission is asynchronous — poll or use webhooks to track status.
Once the payroll is in 'unprocessed' state, update individual employee earnings via PUT /v1/companies/{company_uuid}/payrolls/{payroll_uuid}.
Submit the payroll for processing via PUT /v1/companies/{company_uuid}/payrolls/{payroll_uuid}/submit.
Known gotchas
When off_cycle_reason is 'Bonus', all benefits and deductions are blocked by default and a fixed withholding rate applies — override these explicitly if standard withholding is needed.
The create-payroll call returns 202, not 200; treat the response as a job ticket and wait for the payroll to reach a processable state before submitting earnings.
check_date must comply with the company's bank processing cutoff; a date too soon will be rejected.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp