Deel
Connect Deel to let Helios agents use its REST and SCIM APIs and start workflows from 55 documented webhook events.
What your agents can do
Agents search Deel's REST and SCIM APIs to manage workers and contracts, inspect payroll and invoices, handle time off and timesheets, and work with recruiting, immigration and IT records. Access depends on your Deel products and permissions.
Agents can upload and download files. Beta endpoints require the headers and version specified by Deel. Helios sends X-Version: 2026-01-01 unless the API request specifies another version.
Authentication
Both methods require Environment, either production or sandbox. Sandbox uses separate credentials. Helios sends API requests to api.letsdeel.com in production or api-staging.letsdeel.com in sandbox.
Deel API token
Create a token in Deel Developer Center, choose Deel API token in Helios, and enter API token. Use an organization token with the permissions your workflows need, including organizations:read, webhooks:read and webhooks:write.
Creating tokens and webhooks requires an Org Admin or IT Developer Admin account. Organization tokens do not expire. Replace revoked tokens in Helios.
Your own Deel app
Create a Deel Organization app and register the callback URL shown by Helios. Choose Your own Deel app, select Environment, enter Client ID and Client secret, then authorize access.
Helios uses the production endpoints in Deel's REST OAuth guide. Sandbox authorization uses app.demo.deel.com with the same /oauth2 paths, because the sandbox host in Deel's guides fails the TLS handshake. Refresh tokens rotate after each use. Helios stores the replacement and schedules weekly refreshes.
Helios requests the following 92 scopes, which are the scopes Deel's Developer Center offers to Organization apps. Deel refuses the authorization with "Invalid scopes for User type" when an Organization app asks for other scopes, such as the OpenID or worker scopes. If authorization fails for another reason, check partnership access with Deel.
Users:read
Users:write
accounting:read
adjustments:read
adjustments:write
agentic-workflows:write
ai:read
ai:write
api-logs:read
approvals:read
approvals:write
ats.applications.notes:write
ats:read
ats:write
benefits:read
benefits:write
candidates:read
candidates:write
compensation-management:read
compensation-management:write
contracts:read
contracts:write
equities:read
equities:write
files:read
files:write
forms:read
global-payroll:read
global-payroll:write
groups:read
groups:write
hr-suite:read
hr-suite:write
i-9:read
i-9:write
immigration:read
immigration:write
invoice-adjustments:read
invoice-adjustments:write
invoice:create
it-agreements:read
it-assets:read
it-assets:write
it-orders:read
it-orders:write
it-policies:read
it-policies:write
it-products:read
it-seats:read
it-seats:write
it-service-requests:read
it-service-requests:write
job-architecture:read
job-architecture:write
jobs:read
jobs:write
knowledge-hub:read
legal-entity:read
legal-entity:write
milestones:read
milestones:write
off-cycle-payments:read
off-cycle-payments:write
on-demand-payroll:read
on-demand-payroll:write
organizations:read
organizations:write
payment-statements:read
payment-statements:write
payments:read
payslips:read
people:read
people:write
profile:read
profile:write
public-token:write
screenings:read
screenings:write
talents:read
talents:write
tasks:read
tasks:write
time-off:read
time-off:write
time-tracking:read
time-tracking:write
timesheets:read
timesheets:write
treasury-vendorbill:write
webhooks:read
webhooks:write
withdrawals:readAdmin access also requests admin:worker, the Embedded worker-token scope. Enable it only for an app approved for that access.
Triggers
Helios subscribes to all 55 events below and updates its existing webhook where possible. If Deel refuses an event, Helios tries the other catalog events and marks uncovered events unavailable with the vendor's reason.
| Helios event | Deel event reference |
|---|---|
ats_application.created | ats.application.created |
ats_application.transitioned | ats.application.transitioned |
ats_job_posting.created | ats.job-posting.created |
ats_job_posting.updated | ats.job-posting.updated |
ats_job_posting_publication.created | ats.job-posting-publication.created |
ats_job_posting_publication.updated | ats.job-posting-publication.updated |
contract.amended | contract.amended |
contract.created | contract.created |
contract.duplicated | contract.duplicated |
contract_signer.invited | contract.sign.team-member-invited |
contract.status_updated | contract.status.updated |
contract.terminated | contract.terminated |
eor_amendment.status_updated | eor.amendment.status.updated |
eor_payslip.made_available | eor.payslips.available |
eor_project_assignment.created | eor.project-assignment.created |
eor_project_assignment_checkin.created | eor.project-assignment-checkin.created |
eor_quote.created | eor.quote.created |
gp_payslip.made_available | gp.payslips.available |
gp_termination.confirmed | gp.termination.confirmed |
contractor_employee.created | employee.created.contractor |
direct_employee.created | employee.created.direct |
eor_employee.created | employee.created.eor |
direct_employee.updated | employee.updated.direct |
scim_worker.created | worker.created |
worker.created | worker.v2.created |
worker.updated | worker.v2.updated |
worker.deleted | worker.v2.deleted |
immigration_case.process_status_updated | immigration.case.process.status.update |
immigration_case_renewal.created | immigration.case.renewal.created |
invoice_adjustment.created | invoice-adjustment.created |
invoice_adjustment.submitted_for_approval | invoice-adjustment.pending-for-approval |
invoice_adjustment.reviewed | invoice-adjustment.reviewed |
it_asset.archived | it-asset.archived |
it_asset.created | it-asset.created |
it_asset.location_updated | it-asset.location-updated |
it_order.created | it-order.created |
it_order.updated | it-order.updated |
learning_journey_assignment.created | engage.learning.journeys.assignments.created |
learning_journey_assignment.reminded | engage.learning.journeys.assignments.reminded |
oauth_token.revoked | oauth2.token.revoked |
onboarding.checklist_updated | onboarding.checklist.updated |
onboarding.status_updated | onboarding.status.updated |
payment_statement.initiated | payment.statement.initiated |
payment_statement.marked_paid | payment.statement.mark-paid |
payslip_document.deleted | payslip.document.deleted |
profile.kyc_changed | profile.kyc.changed |
background_check_result.made_available | bgcheck.result.available |
tax_document.made_available | tax.document.available |
tax_document.deleted | tax.document.deleted |
time_off.created | time-off.created |
time_off.deleted | time-off.deleted |
time_off.reviewed | time-off.reviewed |
time_off.updated | time-off.updated |
timesheet.created | timesheet.created |
timesheet.reviewed | timesheet.reviewed |
Deel's webhook guides use contract.signed and payment.completed in examples. Deel's event reference does not list them, and Deel's API rejects contract.signed as an unknown event, so Helios does not offer them. Contract signing changes the contract's status, which contract.status_updated reports.
Filters use fields in each event's payload. Every event offers Organization ID and Organization name. Depending on the event, you can also filter by resource, contract or worker ID, status, job posting, country, document type, invoice ID or email. Email patterns ignore case. For contract.created, Worker email uses nonempty worker.expected_email, falling back to invitations.worker_email. Worker v2 events contain only the worker ID. Empty filters accept all values; selected filters fail when the delivery lacks the field.
Payslip, tax-document, reviewed-adjustment and reviewed-timesheet payloads can contain arrays. Each delivery starts one event, and filters inspect all its resources. Multiple selected filters can match different resources in that delivery.
Helios prefers data.meta.event_id for deduplication. When it is absent, Helios hashes the event type, organization, top-level timestamp and resource. Deel documents timestamp as the time the event occurred. A retry whose resource changed gets a different ID. Helios accepts signed retries without an age check.
Errors and limits
- A failed connection test can mean a token is invalid, belongs to the other environment or lacks
organizations:read. - Webhook setup requires
webhooks:readandwebhooks:write. - Reauthorize if the rotating refresh token expires or is revoked.
- Deel limits API requests to five per second per organization, shared across tokens. Helios uses its standard retries for rate limits and transient errors.
- Deel retries failed webhook deliveries and can disable a subscription after repeated failures. Scheduled OAuth setup re-enables the webhook; reconnect an API-token connection to rerun setup.
See Deel's sandbox guide, webhook quickstart and rate limits.
Last updated on
Cal.com
The Cal.com integration lets Helios agents manage your scheduling through the Cal.com API v2, and run agents automatically when bookings change, meetings start or end, recordings are ready, or routing forms are submitted.
Figma
Connect Figma with a personal access token or your own OAuth app and start workflows from design events.