Back to Settings

CV-Pooling API

Reference for developers

Available on Enterprise plans. Lets your own systems (ATS, HR tooling) submit candidate CVs and get back AI matching results against a job description you send directly — you don't need to post the job on Orixa at all. Same scoring the dashboard's "Match with AI" button runs, callable headlessly.

Getting an API key

  1. Your company must be on a plan with API access included (Enterprise — contact sales if you're not sure).
  2. In the dashboard, go to Settings → Account → API Access and click Generate new key.
  3. Copy the key immediately — it's shown once and can't be retrieved again. If you lose it, revoke it and generate a new one.

Keep the key secret: it authenticates as your company and its use is billed against your account's credits.

Authentication

Send the key on every request as the X-API-Key header:

X-API-Key: oxa_live_xxxxxxxxxxxxxxxxxxxxxxxx

Match CVs against a job

POST /api/v1/cv-pooling/match

Request body

POST /api/v1/cv-pooling/match
Content-Type: application/json
X-API-Key: oxa_live_xxxxxxxxxxxxxxxxxxxxxxxx

{
  "job_title": "Senior Backend Engineer",
  "job_description": "We're looking for an engineer with 5+ years of Node.js, PostgreSQL, and AWS experience...",
  "candidates": [
    {
      "candidate_ref": "your-ats-id-123",
      "candidate_name": "Jane Doe",
      "cv_file_name": "jane-doe.pdf",
      "cv_url": "https://your-storage.example.com/cvs/jane-doe.pdf"
    },
    {
      "candidate_ref": "your-ats-id-124",
      "cv_file_name": "resume.pdf",
      "cv_base64": "JVBERi0xLjQK..."
    }
  ]
}
  • job_title / job_description — required. The CV is matched directly against these — nothing needs to exist in Orixa first.
  • candidates — 1 to 25 per request. Each candidate needs exactly one of:
    • cv_url — a publicly reachable URL to the CV (preferred for larger files)
    • cv_base64 — the raw file, base64-encoded (for CVs without a public URL)
  • Supported file types: PDF and DOCX. Legacy .doc isn't supported.
  • candidate_ref is your own identifier — echoed back on the result so you can match it up on your side (these CVs aren't stored in Orixa, so there's no internal id to return).

Response

{
  "success": true,
  "message": "CVs matched successfully. 1 credit used, 42 remaining.",
  "data": {
    "job_title": "Senior Backend Engineer",
    "results": [
      {
        "candidate_ref": "your-ats-id-123",
        "candidate_name": "Jane Doe",
        "match_percentage": 87,
        "matched_skills": ["Node.js", "PostgreSQL", "AWS"],
        "missing_skills": ["Kubernetes"],
        "summary": "Strong backend experience with directly relevant stack...",
        "recommendation": "strong_fit"
      }
    ],
    "credits_used": 1,
    "credits_remaining": 42
  }
}

If a specific CV couldn't be scored (unreachable URL, unsupported format, malformed AI response), that candidate's result carries an error field instead of scores — it doesn't fail the rest of the batch.

Credits

Same pricing as the dashboard feature: 1 credit per 5 CVs matched, rounded up, deducted from your subscription before matching runs.

Errors

StatusMeaning
401Missing, invalid, or revoked API key
402Not enough credits remaining
403Your plan doesn't include API access
400Invalid request body (see message for details)