The Source Code for our Zapier integration is publicly available and can be found on our GitHub.
This integration is currently in the application process to be a public Zapier connector. If you wish to access it prior to being release, you can click this link to access the private beta.
If you have issues, please contact our support team at [email protected]
Prerequisites
Before setting up the HRMLESS Zapier integration, ensure you have:
-
Active HRMLESS Account
- Sign up at https://hrmless.com
- Verify your account and complete onboarding
- Note your organization ID (automatically retrieved during authentication)
-
HRMLESS Credentials
- Username
- Password
-
Zapier Account
- Free or paid Zapier account
- Join our Zapier Integration Beta by clicking this link
-
API Access
- HRMLESS API access is included with all account tiers
- No additional API key required (uses OIDC authentication)
Quick Start (2 minutes)
Step 1: Access HRMLESS in Zapier
- Log in to your Zapier account at https://zapier.com
- Create a new Zap
- Add a trigger (e.g. "schedule")
Step 2: Add a HRMLESS Zapier Action
- Add a new action step
- Search for "HRMLESS" in the app directory
- Select the HRMLESS app
- Choose an action (e.g., "Get All Positions")
Step 3: Authentication
- Click "Sign in"
- When the authentication window opens, log into your HRMLESS account
Step 4: Configure Action
- Select any required fields (if applicable)
- Test the action to ensure it works
- Review output data
- Publish action
HRMLESS uses session-based OAuth authentication with automatic token management. You never need to manually handle tokens or refresh credentials.
How It Works
-
Initial Authentication:
- User provides username and password
- Integration exchanges credentials for access token and refresh token
- Organization ID is automatically retrieved and stored
-
Automatic Token Refresh:
- Access tokens expire after a set period
- Integration automatically refreshes tokens before expiration
- No user action required
-
Secure Storage:
- Credentials are encrypted by Zapier
- Tokens are securely stored and never exposed
- Organization ID is cached for all subsequent requests
Authentication Flow
Code
Troubleshooting Authentication
Problem: "Authentication failed. Please verify your credentials."
Solutions:
- Verify username and password are correct
- Ensure your HRMLESS account is active
- Check for extra spaces in username/password fields
- Try logging into your account and reseting your password.
Problem: "Token expired" or "Invalid token"
Solutions:
- This should be handled automatically by refresh token
- Try disconnecting and reconnecting your HRMLESS account in Zapier
- Contact support if issue persists
Available Actions
Position Management
📋 List All Positions
Action Key: orgPositionList
Retrieves all job positions created in your organization, including active, draft, and inactive positions.
Use Case: Display available positions in a dashboard, sync to job boards, or generate reports.
Input Fields: None (uses organization ID from authentication)
Output Fields: Returns array of position objects
| Field | Type | Description |
|---|---|---|
id | String (UUID) | Unique position identifier |
name | String | Position title (e.g., "Senior Software Engineer") |
state | String | Position status: active, draft, or inactive |
department | String | Department name |
location | String | Job location |
min_score | Integer | Minimum interview score required to pass |
role_description | String | Detailed job description |
position_calender_link | String | Custom calendar link for this position |
created_at | DateTime | Position creation timestamp |
updated_at | DateTime | Last modification timestamp |
agent_id | String | AI agent identifier (internal use) |
questionaire | Array | Custom interview questions (see below) |
created_by | Object | User who created the position |
Questionnaire Structure:
Code
Example Output:
Code
🔍 Get Position By ID
Action Key: orgPositionRead
Retrieves detailed information about a specific position.
Use Case: Get full position details before adding candidates or updating position information.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown populated from available positions) |
Output Fields: Same as List All Positions (single object instead of array)
Candidate Management
📋 List Candidates in a Position
Action Key: orgPositionsRead
Retrieves all candidates associated with a specific position.
Use Case: Generate candidate reports, sync candidate lists to spreadsheets, or monitor pipeline health.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
Output Fields: Returns array of candidate objects
| Field | Type | Description |
|---|---|---|
id | String (UUID) | Unique candidate identifier |
name | String | Candidate's full name |
email | String | Candidate's email address |
phone | String | Candidate's phone number |
state | String | Current candidate status (see states below) |
score | Integer | AI interview score (0-10) |
feedback | String | AI-generated feedback |
hired | Boolean | Whether candidate was hired |
language | String | Interview language (e.g., "en", "es") |
invited_at | DateTime | When invitation was sent |
completed_at | DateTime | When interview was completed |
created_at | DateTime | When candidate was added |
updated_at | DateTime | Last modification timestamp |
position_id | String (UUID) | Associated position ID |
organization_id | String (UUID) | Organization ID |
activity | Array | Candidate activity history |
Candidate States:
not_invited_yet- Candidate added but not contactedinvited- Invitation email sentattempted- Started but didn't finish interviewcompleted- Interview finishedgraded- AI scoring completepassed- Met minimum requirementsrejected- Did not meet requirementscalendar_link_sent- Follow-up scheduling link sent
Example Output:
Code
➕ Create Candidate For a Position
Action Key: orgPositionsCreate
Adds a new candidate to a position and automatically triggers the AI interview process.
Use Case: Automatically add applicants from job boards, forms, or your ATS to HRMLESS for screening.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
name | String | Yes | Candidate's full name |
email | String | Yes | Candidate's email address |
phone | String | Yes | Candidate's phone number |
language | String | Yes | Interview language code (e.g., "en", "es", "fr") |
state | String | No | Initial state (default: not_invited_yet) |
Example Input:
Code
What Happens Next:
- Candidate is added to the position
- Candidate record is created with
not_invited_yetstatus - You can trigger invitation manually or via automation
- Candidate receives email with interview link
- AI conducts interview when candidate clicks link
- Results are automatically scored and available via API
🔍 Get Candidate Details
Action Key: orgPositionsCandidatesRead
Retrieves comprehensive information about a specific candidate, including interview scores, feedback, and activity history.
Use Case: Get candidate details before making hiring decisions or sending follow-up communications.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
candidate_id | String (UUID) | Yes | Candidate ID |
Output Fields: Same as List Candidates (single object)
✏️ Update Candidate Details
Action Key: orgPositionsCandidatesUpdate
Updates candidate information, status, or hiring decision.
Use Case: Mark candidates as hired, update contact information, or change candidate status based on external workflow.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
candidate_id | String (UUID) | Yes | Candidate ID |
name | String | No | Updated full name |
email | String | No | Updated email address |
phone | String | No | Updated phone number |
state | String | No | Updated status |
hired | Boolean | No | Hiring decision (true/false) |
feedback | String | No | Additional feedback or notes |
Example: Marking a Candidate as Hired
Code
🗑️ Delete Candidate
Action Key: orgPositionsCandidatesDelete
Permanently removes a candidate from a position.
Warning: This action cannot be undone. Interview data and history will be permanently deleted.
Use Case: Remove duplicate entries or candidates who requested data deletion (GDPR compliance).
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
candidate_id | String (UUID) | Yes | Candidate ID to delete |
Output:
Code
Interview Management
📊 Get Candidate Interview Details
Action Key: orgPositionsCandidatesInterview
Retrieves complete interview information including transcript, recording link, AI score, and detailed feedback.
Use Case: Review interview performance, access transcripts for hiring decisions, or archive interview data for compliance.
Input Fields:
| Field | Type | Required | Description |
|---|---|---|---|
position_id | String (UUID) | Yes | Position ID (dynamic dropdown) |
candidate_id | String (UUID) | Yes | Candidate ID |
Output Fields:
| Field | Type | Description |
|---|---|---|
id | String (UUID) | Interview ID |
conversation_id | String | Unique conversation identifier |
transcript_link | String (URL) | Link to full transcript |
recording_link | String (URL) | Link to audio/video recording |
start_time | DateTime | Interview start timestamp |
end_time | DateTime | Interview end timestamp |
graded_at | DateTime | When AI scoring completed |
last_attempted_at | DateTime | Most recent attempt timestamp |
ip_address | String | Candidate's IP address (privacy-aware) |
location | String | Candidate's geographic location |
interview_link | String (URL) | Original interview invitation link |
status | String | Interview status: completed, attempted, not_started |
score | Integer | AI-generated score (0-10) |
feedback | String | Comprehensive AI feedback |
interview_transcript | String | Complete interview transcript |
candidate | String (UUID) | Candidate ID |
Example Output:
Code
Data Structure Reference
Position Object
Code
Candidate Object
Code
Candidate States
| State | Description | Typical Next Actions |
|---|---|---|
not_invited_yet | Candidate added, invitation pending | Send invitation email |
invited | Invitation sent, awaiting response | Monitor for interview start |
attempted | Started but didn't complete | Send reminder email |
completed | Interview finished, awaiting grading | Wait for AI scoring |
graded | AI scoring complete | Review results, decide next steps |
passed | Met minimum requirements | Schedule follow-up interview |
rejected | Did not meet requirements | Send rejection email |
calendar_link_sent | Follow-up scheduling link sent | Wait for scheduling |
Interview Object
Code
Troubleshooting
Authentication Issues
Problem: "Authentication failed. Please verify your credentials."
Cause: Invalid username or password.
Solution:
- Double-check username (email) for typos
- Verify password is correct (try logging in at hrmless.com)
- Check for extra spaces before/after credentials
- Reset password if necessary
- Ensure account is active and verified
Problem: Token expired or keeps disconnecting
Cause: Refresh token may have expired or been revoked.
Solution:
- Disconnect HRMLESS account in Zapier settings
- Reconnect with fresh credentials
- If issue persists, contact [email protected]
Action/Trigger Issues
Problem: "Position not found" or "Candidate not found"
Cause: Referenced resource doesn't exist or was deleted.
Solution:
- Verify the ID is correct (UUIDs are case-sensitive)
- Check if resource was deleted
- Use "List" actions to find valid IDs
- Ensure organization ID is correct
Problem: Dynamic dropdown not showing positions
Cause: No positions exist or API connection issue.
Solution:
- Create at least one position in HRMLESS first
- Refresh the dropdown in Zapier
- Check authentication is still valid
- Try disconnecting and reconnecting account
Problem: Candidate creation fails with validation error
Cause: Required fields are missing or formatted incorrectly.
Solution:
- Ensure
name,email,phone, andlanguageare provided - Validate email format (must be valid email address)
- Check phone number format (include country code)
- Verify language code is supported (e.g., "en", "es")
Problem: "Organization ID not found"
Cause: Organization ID wasn't retrieved during authentication.
Solution:
- Disconnect and reconnect HRMLESS account
- During connection, ensure "Get Organization ID" completes
- Check that your HRMLESS account has organization access
- Contact support if issue persists
Error Codes
| HTTP Code | Meaning | Solution |
|---|---|---|
| 400 | Bad Request - Invalid input data | Check field formats and required fields |
| 401 | Unauthorized - Invalid credentials | Reconnect your HRMLESS account |
| 403 | Forbidden - Insufficient permissions | Verify account permissions |
| 404 | Not Found - Resource doesn't exist | Verify IDs are correct |
| 409 | Conflict - Duplicate resource | Check if candidate/position already exists |
| 500 | Server Error - HRMLESS API issue | Retry in a few minutes, contact support if persistent |
Best Practices
Security
-
Never share authentication credentials
- Use Zapier's secure credential storage
- Don't log or print access tokens
- Rotate passwords regularly
-
Validate input data
- Check email formats before sending to API
- Sanitize phone numbers
- Validate UUIDs
-
Handle sensitive data carefully
- Interview transcripts may contain PII
- Comply with GDPR/CCPA requirements
- Implement data retention policies
End of Documentation
This README was last updated on November 13, 2025. For the latest version, visit https://github.com/hrmless/zapier
HRMLESS LLC. All rights reserved.