Resume Review API

Review-as-a-service

A stable JSON contract for the Grezlify review pipeline. Ship resume reviews inside your own product — job board, ATS, university placement office — with the same 15-section critique we render on grezlify.com.

Private beta — request access via the Enterprise form.

Endpoints

POST/v1/reviews/skim

Run a Skim review (fast, free tier when authenticated).

Body
{ text?, pdfBase64?, resumeId?, targetRole? }
Returns
Skim report — overall score + 3 dimensions + 3 top fixes.
POST/v1/reviews/depth

Run a Depth review. 15-section JSON v1.4 critique.

Body
{ text?, pdfBase64?, resumeId?, targetRole? }
Returns
Depth report — scores across 8 dimensions, severity-tagged findings, keyword match, ranked fix list.
GET/v1/reviews/:id

Fetch a previously-run review.

Body
Returns
Review row including the full JSON v1.4 report.
POST/v1/webhooks/test

Send a sample on_review_complete event to your endpoint.

Body
{ url, secret? }
Returns
202 — fired async, signed with HMAC-SHA256.
Webhooks

Register a webhook URL — we POST on_review_complete with the review payload, signed HMAC-SHA256 on x-grezlify-signature. Retried with exponential backoff up to 24h on non-2xx responses.

Quickstart

curl -X POST https://api.grezlify.com/v1/reviews/depth \
  -H "Authorization: Bearer grz_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "resumeId": "res_8f2c1e9a",
    "targetRole": { "title": "Product Analyst", "company": "Razorpay" }
  }'

Sample response (Depth, v1.4)

JSON v1.4 (excerpt)
{
  "schema_version": "1.4",
  "candidate": { "name": "Aarav Sharma", "location": "Bengaluru, IN", "experience_years": 3.2 },
  "target_role": { "title": "Product Analyst", "company": "Razorpay" },
  "scores": {
    "overall": { "value": 72, "grade": "B-", "percentile": 62, "projected_after_fixes": 89 },
    "dimensions": {
      "ats_parseability": 94, "jd_match": 58, "content_quality": 61,
      "experience_framing": 74, "narrative": 82, "structure": 71,
      "language_tone": 88, "red_flags": 63
    }
  },
  "severity_counts": { "critical": 3, "important": 9, "minor": 7, "polish": 3 },
  "findings": [
    {
      "id": "f_001",
      "category": "red_flags",
      "severity": "critical",
      "title": "PII over-disclosure: DOB, marital status, father's name",
      "effort": "1-min", "score_lift": 4, "confidence": 0.97,
      "geo_specific": "IN", "auto_fix_available": true
    }
  ],
  "keyword_match": {
    "matched": 14, "partial": 6, "missing": 14,
    "missing_keywords": ["A/B testing", "Mixpanel", "payments", "UPI"]
  }
}

Ready to plug in?

Request beta access. We'll provision a key + sandbox JD, and pair on integration over a 30-minute call.