HireSquire API
Integrate AI-powered candidate screening into your applications. Automate your hiring workflow with n8n, Zapier, Make.com, or any HTTP client.
For Business Users & AI Operators
Looking for fast onboarding? You don't need to write code to use HireSquire with Claude, ChatGPT, or Cursor. We have 1-click setup guides and copy-paste prompts ready for you in our AI Workspaces Hub.
On This Page
Authentication
The HireSquire API uses Bearer token authentication. Include your API token in the Authorization header of every request.
Authorization Header
Authorization: Bearer YOUR_API_TOKEN
Getting Your API Token
- Log in to your HireSquire account
- Go to Profile Settings
- Scroll to the API Tokens section
- Click Create Token and give it a name
- Copy the token immediately - it won't be shown again!
Security Notice: Keep your API token secure. Never commit it to version control or share it publicly.
Base URL
All API requests should be made to the following base URL:
https://hiresquireai.com/api/v1
API Endpoints
Jobs
/api/v1/jobs
Create a new job posting and optionally start screening candidates.
Request Body
{
"title": "Senior Software Engineer",
"description": "We're looking for a senior software engineer...",
"leniency_level": 5,
"resumes": [
{
"filename": "john_doe.pdf",
"content": "John Doe\nSenior Developer\n5 years experience..."
}
],
"webhook_url": "https://your-app.com/webhooks/hiresquire"
}
Parameters
title(required): Job title.description(required): Job description or requirements.leniency_level(optional): Integer (1-10). 1 is very lenient, 10 is extremely strict. Default: 5.resumes(optional): Array of resume objects.webhook_url(optional): URL to receive screening updates.
/api/v1/jobs
List all job postings for the authenticated user.
/api/v1/jobs/{id}
Get a specific job posting with its candidates.
Candidates
/api/v1/candidates
List candidates with filtering and search.
Query Parameters
job_id: Filter by specific job IDstatus: Filter by status (new, shortlisted, hired, etc.)min_score: Minimum score threshold (0-100)limit: Pagination limit (max 100)
/api/v1/candidates/{id}
Get candidate details including AI screening results.
/api/v1/candidates/{id}/status
Update candidate status (rejected, shortlisted, hired).
Request Body
{
"status": "shortlisted"
}
Email Generation
/api/v1/jobs/{job_id}/generate-email
Generate personalized email content for candidates.
Email Types
invite- Interview invitationrejection- Rejection emailkeep-warm- Keep-warm follow-upfollowup- General follow-up
Request Body
{
"candidate_id": 123,
"type": "invite",
"tone": "professional",
"custom_notes": "We are excited to meet you!"
}
Cancel Job
/api/v1/jobs/{job_id}/cancel
Cancel a processing job.
{
"job_id": 123,
"status": "cancelled",
"message": "Job has been cancelled."
}
Compare Candidates
/api/v1/jobs/{job_id}/compare?ids=1,2,3
Compare multiple candidates side-by-side.
{
"job_id": 123,
"compared_count": 3,
"top_candidate": "John Doe",
"top_score": 92,
"score_range": 15,
"candidates": [...]
}
Report Outcome
/api/v1/jobs/{job_id}/outcome
Report hiring outcome for feedback loop.
Request Body
{
"candidate_id": 123,
"outcome": "hired" // or "rejected", "withdrawn"
}
Test Webhook
/api/v1/webhooks/test
Test a webhook endpoint before deploying.
Request Body
{
"url": "https://your-webhook.com/callback",
"event": "job.completed"
}
Resume Schema
/api/v1/schema
Get the full OpenAPI 3.0 specification or dynamic schema for fields.
Response
{
"name": "string",
"email": "string (email format)",
"phone": "string",
"location": "string",
"experience": [
{
"company": "string",
"title": "string",
"start_date": "YYYY-MM-DD",
"end_date": "YYYY-MM-DD or null",
"description": "string"
}
],
"education": [
{
"institution": "string",
"degree": "string",
"field": "string",
"graduation_date": "YYYY-MM-DD"
}
],
"skills": ["string"],
"certifications": ["string"]
}
Webhooks
Configure webhooks to receive real-time notifications when events occur in your HireSquire account.
Available Events
| Event | Description |
|---|---|
| job.processing | AI screening has started for a job |
| job.completed | AI screening has completed for all candidates |
| job.failed | Job processing encountered an error |
| high_score_detected | A candidate scored above the threshold (85+) |
| candidate.shortlisted | Candidate was shortlisted manually or via agent |
| candidate.rejected | Candidate was rejected manually or via agent |
| candidate.hired | Candidate was hired manually or via agent |
Webhook Payload
JSON Payload
{
"event": "job.completed",
"job_id": 123,
"job_title": "Senior PHP Developer",
"timestamp": "2026-05-01T10:30:00Z",
"status": "completed",
"summary": {
"total_candidates": 10,
"qualified_count": 3,
"top_score": 92,
"average_score": 65
},
"top_candidates": [
{
"id": 1,
"name": "John Doe",
"score": 92,
"summary": "Excellent fit..."
}
],
"results_url": "https://hiresquireai.com/api/v1/jobs/123/results"
}
Retry Policy: Failed webhooks are automatically retried up to 5 times with exponential backoff (30s, 1m, 2m, 5m, 10m).
Security & Signature Verification
All webhook requests include a X-Webhook-Signature header. You should verify this signature to ensure the request came from HireSquire.
PHP Verification Example
$signature = $request->header('X-Webhook-Signature');
list($t, $v1) = explode(',', $signature);
$timestamp = str_replace('t=', '', $t);
$hash = str_replace('v1=', '', $v1);
$signedPayload = $timestamp . '.' . $request->getContent();
$expectedHash = hash_hmac('sha256', $signedPayload, $webhookSecret);
if (hash_equals($expectedHash, $hash)) {
// Signature is valid
}
Conditional Webhooks
Filter which webhook events are triggered based on candidate scores or rank.
Add webhook_conditions to your job submission:
{
"title": "Senior Developer",
"description": "Looking for...",
"webhook_url": "https://your-app.com/webhook",
"webhook_conditions": {
"min_score": 80,
"only_top_n": 5,
"events": ["job.completed", "high_score_detected"]
}
}
| Parameter | Type | Description |
|---|---|---|
| min_score | integer | Only trigger for candidates scoring at or above this threshold (0-100) |
| only_top_n | integer | Only trigger for top N ranked candidates |
| events | array | Filter specific events: job.completed, job.processing, job.failed, high_score_detected, candidate.shortlisted, candidate.rejected |
Code Examples
cURL
# Create a job posting
curl -X POST "https://hiresquireai.com/api/v1/jobs" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Senior Software Engineer",
"description": "Looking for a Python developer with 5+ years experience...",
"resumes": [
{"filename": "resume.pdf", "content": "John Doe\nExperience..."}
]
}'
JavaScript / Node.js
const response = await fetch('https://hiresquireai.com/api/v1/jobs', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'Senior Software Engineer',
description: 'Looking for a Python developer with 5+ years experience...',
resumes: [
{ filename: 'resume.pdf', content: 'John Doe\nExperience...' }
]
})
});
const data = await response.json();
console.log(data);
Python
import requests
url = "https://hiresquireai.com/api/v1/jobs"
headers = {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
}
data = {
"title": "Senior Software Engineer",
"description": "Looking for a Python developer with 5+ years experience...",
"resumes": [
{"filename": "resume.pdf", "content": "John Doe\nExperience..."}
]
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
n8n Integration
- Add an HTTP Request node
- Set Method to
POST - Set URL to
https://hiresquireai.com/api/v1/jobs - Add Header:
Authorization=Bearer YOUR_API_TOKEN - Add Body Content Type:
JSON - Map your data to the JSON body
Zapier
- Create a new Zap
- Add HTTP by Zapier action
- Set URL to
https://hiresquireai.com/api/v1/jobs - Set Method to
POST - Add Headers:
Authorization=Bearer YOUR_API_TOKENContent-Type=application/json
- Map your data to the Body field
Make (Integromat)
- Create a new HTTP module
- Set Method to
POST - Set URL to
https://hiresquireai.com/api/v1/jobs - Add Header:
Authorization=Bearer YOUR_API_TOKEN - Add Header:
Content-Type=application/json - Map your data to the Body (JSON)
Error Handling
The API uses standard HTTP status codes to indicate success or failure.
| Status | Meaning |
|---|---|
| 200 | Success |
| 201 | Created |
| 202 | Accepted (async processing started) |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid API token |
| 403 | Forbidden - Insufficient permissions |
| 422 | Validation Error |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Rate Limits
API requests are rate limited to ensure fair usage and system stability.
60
requests/minute
1,000
candidates/day
100
webhooks/day
Rate limit information is included in response headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640995200
Tip: Check the /api/v1/rate-limit endpoint to see
your current rate limit status.
Agent API Keys
Create dedicated API keys for AI agents with built-in spend limits. Perfect for controlling costs while allowing agents to operate autonomously.
Create Agent Key
/api/v1/agent-keys
Create a new API key with spend limits for an AI agent.
Request Body
{
"name": "My Agent",
"daily_spend_limit": 5.00,
"monthly_spend_limit": 100.00,
"lifetime_spend_limit": null,
"permissions": ["read", "write", "screen", "email", "bulk"]
}
All Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/agent-keys | List all agent keys |
| POST | /api/v1/agent-keys | Create new agent key |
| GET | /api/v1/agent-keys/{id} | Get key details + usage summary |
| GET | /api/v1/agent-keys/{id}/usage | Detailed real-time tracking |
| DELETE | /api/v1/agent-keys/{id} | Revoke agent key |
Spend Limit Units
All limits are in dollars. A daily_spend_limit of 5.00 means the agent can spend up to $5.00 per day (500 candidate screenings).
Prepaid Credits
Purchase prepaid credits for pay-as-you-go agent usage. No subscription required.
Credit Satchels
Pouch
$5
500 credits
$0.01/candidate
Satchel
$25
2,750 credits (+250 bonus)
$0.0089/candidate
Chest
$100
12,000 credits (+2,000 bonus)
$0.0083/candidate
Credit Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/credits/balance | Check current balance |
| GET | /api/v1/credits/transactions | Transaction history |
| GET | /api/v1/credits/packs | List available packs |
| POST | /api/v1/credits/purchase | Direct purchase with saved payment method |
| POST | /api/v1/credits/checkout | Create Stripe checkout |
| POST | /api/v1/credits/auto-reload/enable | Enable auto-reload |
| POST | /api/v1/credits/auto-reload/disable | Disable auto-reload |
| POST | /api/v1/credits/webhook/configure | Configure usage webhooks |
Auto-Reload
Enable auto-reload to automatically purchase more credits when your balance falls below:
- $1 (minimum threshold)
- 5% of your largest single purchase (whichever is higher)
Usage Webhook Events
| Event | Description |
|---|---|
| threshold_reached | 80% of spend limit reached |
| daily_limit | Daily spend limit hit |
| monthly_limit | Monthly spend limit hit |
| low_balance | Balance below $1 or 5% threshold |
| credits_exhausted | All credits used |
Official Repositories
HireSquire CLI
Official Node.js CLI tool with MCP server integration for AI agents.
View on GitHub →HireSquire Python SDK
Official Python library for LangChain, AutoGen, and custom AI applications.
View on GitHub →Calendar & Meeting Integrations
Automate interview scheduling by connecting calendar and meeting tools.
Quick Option: Simple Scheduling Link (Recommended)
Add your public calendar URL directly in Profile Settings:
- ✅ Works with ANY scheduling tool (Calendly, Cal.com, Google Appointment Schedule, HubSpot Meetings, Microsoft Teams, etc.)
- ✅ Just paste your public booking link - no API keys needed
- ✅ Automatically included in interview invitation emails
Supported URL formats:
https://calendly.com/yourname
https://cal.com/yourname
https://goog.le/appointment-schedule/...
Any public scheduling URL
Advanced: API Integrations (Optional)
For automatic status updates when candidates book, connect via API:
Supported Tools
| Tool | Auth Method | Setup Time | Best For |
|---|---|---|---|
| Any Public Link | None (URL only) | 30 seconds | All users (Recommended) |
| Calendly | API Key | 2 min | All user types |
| Cal.com | API Key | 2 min | Open-source users |
API Endpoints
Manage Calendar Connections
GET|POST|DELETE /api/v1/calendar/connections
Connect, list, or disconnect calendar tools
Get Available Slots
GET /api/v1/calendar/slots?provider=calendly&date=2026-04-27
Retrieve available time slots for scheduling
Create Interview
POST /api/v1/interviews
{
"job_id": 123,
"candidate_id": 456,
"scheduled_at": "2026-04-28T10:00:00Z"
}
Generate Meeting Link
POST /api/v1/meetings/links
{
"provider": "calendly",
"topic": "Interview with John Doe"
}
Quick Setup
Recommended: Add your public calendar link in Profile Settings (works with Calendly, Cal.com, Google, Teams, etc.)
Advanced: Navigate to Profile → Integrations for API-based connections with webhook support.
Advanced Tutorials & Case Studies
Ready to Get Started?
Create your free account and start integrating HireSquire into your hiring workflow today.