API Documentation

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.

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

  1. Log in to your HireSquire account
  2. Go to Profile Settings
  3. Scroll to the API Tokens section
  4. Click Create Token and give it a name
  5. 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

POST /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.
GET /api/v1/jobs

List all job postings for the authenticated user.

GET /api/v1/jobs/{id}

Get a specific job posting with its candidates.

Candidates

GET /api/v1/candidates

List candidates with filtering and search.

Query Parameters

  • job_id: Filter by specific job ID
  • status: Filter by status (new, shortlisted, hired, etc.)
  • min_score: Minimum score threshold (0-100)
  • limit: Pagination limit (max 100)
GET /api/v1/candidates/{id}

Get candidate details including AI screening results.

PATCH /api/v1/candidates/{id}/status

Update candidate status (rejected, shortlisted, hired).

Request Body

{
  "status": "shortlisted"
}

Email Generation

POST /api/v1/jobs/{job_id}/generate-email

Generate personalized email content for candidates.

Email Types

  • invite - Interview invitation
  • rejection - Rejection email
  • keep-warm - Keep-warm follow-up
  • followup - General follow-up

Request Body

{
  "candidate_id": 123,
  "type": "invite",
  "tone": "professional",
  "custom_notes": "We are excited to meet you!"
}

Cancel Job

POST /api/v1/jobs/{job_id}/cancel

Cancel a processing job.

{
  "job_id": 123,
  "status": "cancelled",
  "message": "Job has been cancelled."
}

Compare Candidates

GET /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

POST /api/v1/jobs/{job_id}/outcome

Report hiring outcome for feedback loop.

Request Body

{
  "candidate_id": 123,
  "outcome": "hired" // or "rejected", "withdrawn"
}

Test Webhook

POST /api/v1/webhooks/test

Test a webhook endpoint before deploying.

Request Body

{
  "url": "https://your-webhook.com/callback",
  "event": "job.completed"
}

Resume Schema

GET /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

  1. Add an HTTP Request node
  2. Set Method to POST
  3. Set URL to https://hiresquireai.com/api/v1/jobs
  4. Add Header: Authorization = Bearer YOUR_API_TOKEN
  5. Add Body Content Type: JSON
  6. Map your data to the JSON body

Zapier

  1. Create a new Zap
  2. Add HTTP by Zapier action
  3. Set URL to https://hiresquireai.com/api/v1/jobs
  4. Set Method to POST
  5. Add Headers:
    • Authorization = Bearer YOUR_API_TOKEN
    • Content-Type = application/json
  6. Map your data to the Body field

Make (Integromat)

  1. Create a new HTTP module
  2. Set Method to POST
  3. Set URL to https://hiresquireai.com/api/v1/jobs
  4. Add Header: Authorization = Bearer YOUR_API_TOKEN
  5. Add Header: Content-Type = application/json
  6. 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

POST /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.