{"openapi":"3.1.0","info":{"title":"Resurface API","version":"1.0.0","description":"Score resumes against jobs with evidence. Powered by TypeSafe Jev."},"servers":[{"url":"https://getresurface.dev/api/v1"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"rs_live_… API key"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"security":[{"bearer":[]}],"paths":{"/score":{"post":{"summary":"Score one resume against a job","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"resume":{"type":"string","format":"binary"},"resume_text":{"type":"string"},"job_description":{"type":"string"},"job_title":{"type":"string"},"rubric_id":{"type":"string"},"questions":{"type":"string","description":"JSON array"}}}},"application/json":{"schema":{"type":"object","properties":{"resume_text":{"type":"string"},"job_description":{"type":"string"},"job_title":{"type":"string"},"rubric_id":{"type":"string"},"questions":{"type":"array","items":{}}}}}}},"responses":{"200":{"description":"Score with per-question verdicts and evidence"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid key"},"402":{"description":"Free tier exhausted"},"429":{"description":"Rate limited"}}}},"/rubrics":{"post":{"summary":"Draft screening questions from a job description","responses":{"200":{"description":"Cached rubric"},"201":{"description":"Rubric"}}}},"/rubrics/{id}":{"get":{"summary":"Get a rubric","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Rubric"}}}},"/usage":{"get":{"summary":"Usage and billing status","responses":{"200":{"description":"Usage"}}}},"/keys":{"post":{"summary":"Create a developer account and API key","security":[],"responses":{"201":{"description":"API key (shown once)"}}}}}}