SwiftLynx API Documentation

Simple, secure endpoints to analyze resumes against job descriptions and return a match score, insights, and a shareable report.

Overview

Base URL: https://swiftlynx.ai

Content-Type: application/json

Auth: Authorization: Bearer <access_token>

Authentication (OAuth / Zapier)

  • In Zapier, choose SwiftLynx Resume Analyzer and click Connect.
  • Enter your email → open the magic link we send → you’ll be returned to Zapier and connected.
  • Zapier will then hold a refreshable access_token used to call the endpoints below.

Server Tokens (Advanced)

For server-to-server integrations (outside Zapier), contact us for a scoped long-lived token tied to your account.

Security: HTTPS only. Store and rotate tokens securely.

GET /api/oauth/authorize (PKCE)

Starts the OAuth flow. Parameters (query):

  • client_id (required)
  • response_type=code (required)
  • redirect_uri (required)
  • state (recommended)
  • code_challenge & code_challenge_method=S256 (recommended)

POST /api/oauth/token

Exchange & refresh tokens. x-www-form-urlencoded body:

Authorization Code:

grant_type=authorization_code
code=...
code_verifier=...
client_id=zapier
redirect_uri=...

Refresh:

grant_type=refresh_token
refresh_token=...
client_id=zapier

Response includes: access_token, refresh_token, token_type, expires_in, email.

Endpoints

GET
/api/me

Returns the authenticated account and remaining credits.

cURL

curl -s https://swiftlynx.ai/api/me \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response 200

{
  "email": "you@company.com",
  "plan": "free",
  "creditsRemaining": 198
}
POST
/api/analyze

Analyze a resume against your job description. Provide either a resumeUrl (PDF link) or resumeText.

Request Body

{
  "jobTitle": "Engineering Manager",
  "jobDescription": "We are seeking an EM to lead a platform team...",
  "resumeUrl": "https://files.example.com/cv/alex-chen.pdf",
  // or:
  // "resumeText": "Alex Chen\nSummary: ...",
  "candidateName": "Alex Chen",
  "fileName": "alex-chen.pdf"
}

Response 200

{
  "matchScore": 92,
  "strengths": [
    "Extensive experience leading platform teams",
    "Strong Java/Kubernetes background"
  ],
  "risks": [
    "Recent entrepreneurship may impact long-term tenure"
  ],
  "summary": "Alex is a strong match for EM with relevant leadership...",
  "recommendation": "Highly recommend proceeding to onsite.",
  "scoreExplanation": "Weighted scoring across skills, tenure, scope…",
  "requestId": "req_01JABCDXYZ9T4",
  "shareUrl": "https://swiftlynx.ai/r/req_01JABCDXYZ9T4?exp=17647...&token=47e0c0e1ae..."
}

Example cURL

curl -s https://swiftlynx.ai/api/analyze \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "jobTitle": "Engineering Manager",
  "jobDescription": "We are seeking an EM to lead a platform team...",
  "resumeUrl": "https://files.example.com/cv/alex-chen.pdf",
  "candidateName": "Alex Chen"
}
JSON

Field Limits

  • jobDescription: 200–8000 characters
  • resumeText: up to 8000 characters
  • Each analysis of one resume consumes 1 credit.

Rate Limits

Default: 60 requests per minute per account. Contact us for higher throughput.

Errors

  • 401 – invalid or missing token
  • 402 – insufficient credits
  • 429 – rate limited
  • 5xx – transient server error

Example 402:

{
  "error": "insufficient_credits",
  "message": "Purchase more credits to continue."
}

Notes