How the Integration Works
Risotto connects to BambooHR through BambooHR’s OAuth 2.0 authorization flow. Each Risotto org installs against a single BambooHR tenant identified by your company subdomain (theacme in acme.bamboohr.com). After install, Risotto stores access and refresh tokens scoped to that tenant and uses them to call the BambooHR REST API on your behalf.
When an employee asks Risotto something that needs HRIS data (i.e. “What’s my PTO balance?”), Risotto resolves their BambooHR employee record by matching their work email, then calls only the BambooHR endpoints required to answer that request.
Install from BambooHR
You must be a BambooHR admin to approve the install.1
Start the install from Risotto
In the dashboard, go to Settings > People > Connect and click Connect next to BambooHR. Enter your BambooHR company subdomain (
acme portion of acme.bamboohr.com) and click Continue.2
Approve the install in BambooHR
You’ll be redirected to your BambooHR tenant (
acme.bamboohr.com) to sign in
and approve the requested OAuth scopes for the Risotto app. BambooHR redirects
you back to the Risotto dashboard once the install is complete.3
Confirm the connection
The BambooHR row in People Connect updates to show the integration is connected.
The subdomain accepts lowercase letters, numbers, and hyphens only. If you’re
unsure of your subdomain, check the URL you use to sign in to BambooHR.
Requested OAuth Scopes
During install, Risotto requests the following BambooHR OAuth scopes:Data Fields That Sync
Risotto reads only the fields it needs to fulfill an active request. Nothing is written back to BambooHR unless the matching People Action is enabled.Employee profile (read)
Pulled fromGET /api/v1/employees/{id}:
Home address (read and write)
Pulled fromGET /api/v1/employees/{id} when address access is needed, and written back via POST /api/v1/employees/{id} when Update Home Address is enabled:
Time off (read and write)
Discretionary and manual BambooHR policies don’t track a running balance, so
Risotto surfaces those as “no tracked balance” rather than a literal
0.Supported Actions
BambooHR supports the following People Actions:Get Employee Info
Look up the requesting employee’s profile, title, department, work location,
manager, and start date. Turn it on in Support agent >
Context.
Get Home Address
View the home address on file for the requesting employee.
Update Home Address
Update the home address on file for the requesting employee.
Get PTO Balance
Retrieve balances for each policy type the employee is assigned to.
Request PTO
Submit a time off request for the requesting employee. Requests are created
with status
requested and follow your BambooHR approval flow.Terminated Employees
Risotto checks theemploymentHistoryStatus field on every BambooHR lookup. When the field indicates the employee is no longer active, People Actions stop running for that employee and requests are escalated, even if their Slack account is still active.
Automation triggers
BambooHR employee events can start a Risotto automation. The events come from a BambooHR webhook, so an admin must configure the webhook first.Configure the webhook
1
Open the webhook dialog
In Settings > People > Connect, click Connected on the BambooHR row, then click Configure webhook…. Copy the Webhook URL from the Configure BambooHR webhook dialog.
2
Create the webhook in BambooHR
In BambooHR, go to Settings > Account > Webhooks and create a webhook with the URL. Subscribe to the
Employee Created, Employee Updated, and Employee Deleted events, and to the fields Employment Status, Employment status comments, and Employment status: Date. In the Data section, select JSON for the data format.3
Save the signature key in Risotto
Copy the private signature key of the webhook from BambooHR. Paste it in the Private Signature Key field of the dialog, then click Save. Risotto uses the key to check that each event comes from BambooHR.
Triggers
In the trigger picker, open BambooHR and choose an event:- A custom status such as “Resigned” starts only Employment status changed. A change to Terminated starts both status triggers.
- A rehire uses the existing record in BambooHR, so it does not send Employee created again.
- HR often adds the work email after the record is created. Then Employee created runs with an empty
employee_email. - A status change with an effective date in the future may not send an event on that date.
- When BambooHR deletes an employee, Risotto marks the employee inactive. No automation runs.
What the automation receives
When BambooHR has no date on file, the date Risotto received the event stands in for it. An automation runs once for each event, even if BambooHR sends it more than once.