openapi: 3.1.0 info: title: Jev Agent (Jagent) API version: '2026-10-18' description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-18: 13 operation(s) read from 5 public documentation page(s) (each operation names its page in x-source). This is not the provider''s published contract; Jev Agent (Jagent) has published no machine-readable contract that the pipeline could find. Engine: local.' x-evidence-tiers: code-example: 4 documentation: 9 pages-with-code: 3 pages-read: 5 x-generated-from: documentation x-provenance: generated x-authored-by: API Evangelist x-generated: '2026-10-18' x-generator: generate-contract-from-docs.py x-engine: local x-sources: - https://jev-agent.com/decisions-api - https://jev-agent.com/essay-grading-api - https://jev-agent.com/openai-decisions-api - https://jev-agent.com/api-reference - https://jev-agent.com/docs paths: /api/keys: delete: operationId: delete_api_keys tags: - Api summary: DELETE /api/keys x-source: https://jev-agent.com/docs responses: '200': description: Success (status as documented) x-evidence: kind: code-example language: curl snippet: 'curl -X DELETE https://jev-agent.com/api/keys -H "Authorization: Bearer $JEV_AGENT_KEY" # revoke Rotating kills the old key at once and returns a new one; usage follows the account, not the key. Jev API documentation from TypeSafe This is not TypeSafe. It is our endpoint and our quota on top of their API. The model''s own Jev API documentation is at docs.typesafe.ai , and current first-party access' get: operationId: get_api_keys tags: - Api summary: Top up or check GET /api/keys with your key for the current balance x-source: https://jev-agent.com/docs responses: '200': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/GetApiKeysResponse' x-evidence: kind: documentation put: operationId: put_api_keys tags: - Api summary: PUT /api/keys x-source: https://jev-agent.com/docs responses: '200': description: Success (status as documented) x-evidence: kind: code-example language: curl snippet: 'curl -X PUT https://jev-agent.com/api/keys -H "Authorization: Bearer $JEV_AGENT_KEY" # rotate' /api/v1/classify: post: operationId: post_api_v1_classify tags: - Api summary: Text plus a ruleset name x-source: https://jev-agent.com/docs requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostApiV1ClassifyRequest' responses: '201': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/PostApiV1ClassifyResponse' x-evidence: kind: documentation /api/v1/decisions: post: operationId: post_api_v1_decisions tags: - Api summary: POST /api/v1/decisions description: Submit a decision request to Jev's gateway; the request follows OpenAI's format and the response mirrors OpenAI's response schema. x-source: https://jev-agent.com/decisions-api requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostApiV1DecisionsRequest' responses: '201': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/PostApiV1DecisionsResponse' x-evidence: kind: documentation /api/v1/models: get: operationId: get_api_v1_models tags: - Api summary: The full list with limits is GET /api/v1/models , the same models answer Jev-shaped requests at /api/v1/systemone. description: Retrieve the catalog of decision models and their capabilities. x-source: https://jev-agent.com/decisions-api responses: '200': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/GetApiV1ModelsResponse' x-evidence: kind: documentation /api/v1/rulesets: get: operationId: get_api_v1_rulesets tags: - Api summary: The exact Jev call behind each one is public at GET /api/v1/rulesets/ x-source: https://jev-agent.com/docs responses: '200': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/GetApiV1RulesetsResponse' x-evidence: kind: documentation /api/v1/systemone: post: operationId: post_api_v1_systemone tags: - Api summary: POST /api/v1/systemone x-source: https://jev-agent.com/api-reference requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostApiV1SystemoneRequest' responses: '201': description: Success (status as documented) x-evidence: kind: code-example language: curl snippet: "curl -X POST https://jev-agent.com/api/v1/systemone -H \"Authorization: Bearer $JEV_AGENT_KEY\" -H \"content-type: application/json\"\ \ -d '{\n \"state\": \"Charged twice for September and cancelling Friday unless refunded.\",\n \"questions\": {\n \"route\": {\n \"\ type\": \"choice\",\n \"instructions\": \"Which team should handle this?\",\n \"criteria\": { \"billing\": \"Payments and refunds\"\ , \"technical\": \"Bugs and outages\" }" /api/v1/tools/grade: post: operationId: post_api_v1_tools_grade tags: - Api summary: POST /api/v1/tools/grade x-source: https://jev-agent.com/essay-grading-api requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostApiV1ToolsGradeRequest' responses: '201': description: Success (shape read from the example response on the page) content: application/json: schema: $ref: '#/components/schemas/PostApiV1ToolsGradeResponse' x-evidence: kind: code-example language: curl snippet: "curl https://jev-agent.com/api/v1/tools/grade -H \"Authorization: Bearer $JAGENT_API_KEY\" -H \"content-type: application/json\"\ \ -d '{\"rubric\": \"essay\", \"level\": \"high school\",\n \"assignment\": \"Should high schools start later?\",\n \"essay\": \"…\"\ }' Try a request · no key needed Load a sample essay rubric essay common-app sat POST /api/v1/tools/grade Send request Runs on the page's\ \ allowance for visitors" /api/v1/tools/resume-check: post: operationId: post_api_v1_tools_resume_check tags: - Api summary: Resume check API description: Evaluates a resume against an optional job description and returns a match score, keyword analysis, ATS checks, level fit, interview probability, and usage information. x-source: https://jev-agent.com/essay-grading-api requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostApiV1ToolsResumeCheckRequest' responses: '201': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/PostApiV1ToolsResumeCheckResponse' x-evidence: kind: documentation /v1/decisions: post: operationId: post_v1_decisions tags: - Decisions summary: 'OpenAI''s Decisions API is POST /v1/decisions : you send an input (text, or user messages with images) and an array of questions, and get typed answers back instead of text.' description: Send an input and an array of questions to receive typed answers. x-source: https://jev-agent.com/decisions-api requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostV1DecisionsRequest' responses: '201': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/PostV1DecisionsResponse' x-evidence: kind: documentation /v1/models: get: operationId: get_v1_models tags: - Models summary: GET https://api.typesafe.ai/v1/models lists only the aliases description: Retrieves the list of model aliases available on the official host. x-source: https://jev-agent.com/api-reference responses: '200': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/GetV1ModelsResponse' x-evidence: kind: documentation /v1/systemone: post: operationId: post_v1_systemone tags: - Systemone summary: Endpoint POST /v1/systemone x-source: https://jev-agent.com/api-reference requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostV1SystemoneRequest' responses: '201': description: Success (status as documented) content: application/json: schema: $ref: '#/components/schemas/PostV1SystemoneResponse' x-evidence: kind: documentation components: schemas: GetApiKeysResponse: type: object properties: credits_charged: type: integer used: type: integer limit: type: integer remaining: type: integer PostApiV1ClassifyRequest: type: object properties: ruleset: type: string items: type: array required: - ruleset - items PostApiV1ClassifyResponse: type: object properties: ruleset: type: string ruleset_version: type: integer model: type: string results: type: array usage: type: object PostApiV1DecisionsRequest: type: object properties: model: type: string description: Model identifier (e.g., "jev-latest"). input: type: string description: The input text or conversation. questions: type: array description: Array of question objects. questions.type: type: string description: One of "predicate", "choice", or "score". questions.name: type: string description: Identifier for the question. questions.instructions: type: string description: Instructions for the model. questions.choices: type: array description: For "choice" type, list of possible options. questions.choices.value: type: string description: Value of a choice option. required: - model - input - questions - questions.type - questions.name - questions.instructions - questions.choices.value PostApiV1DecisionsResponse: type: object properties: answers: type: array description: Typed answers returned by the selected model. GetApiV1ModelsResponse: type: object properties: models: type: array description: List of available decision models with their limits. models.id: type: string description: Model identifier. models.price_per_million_tokens: type: number description: Cost in dollars per million input tokens. models.supports_images: type: boolean description: Whether the model accepts image inputs. models.question_types: type: array description: Supported question types (e.g., predicate, choice, score). GetApiV1RulesetsResponse: type: object properties: rulesets: type: array PostApiV1SystemoneRequest: type: object properties: state: type: string questions: type: object properties: route: type: object properties: type: type: string instructions: type: string criteria: type: object properties: billing: type: string technical: type: string urgency: type: object properties: type: type: string instructions: type: string criteria: type: object properties: 'true': type: string 'false': type: string PostApiV1ToolsGradeRequest: type: object properties: rubric: type: string level: type: string assignment: type: string essay: type: string PostApiV1ToolsGradeResponse: type: object properties: rubric: type: string custom: type: object properties: points: type: integer criteria: type: array items: type: object properties: name: type: string description: type: string submissions: type: array items: type: object properties: name: type: string text: type: string PostApiV1ToolsResumeCheckRequest: type: object properties: resume: type: string description: Full text of the resume to evaluate. job_description: type: string description: Optional job posting description to match against. required: - resume PostApiV1ToolsResumeCheckResponse: type: object properties: match_score: type: integer description: Overall 0–100 match score. keywords_found: type: array description: Keywords from the posting that were found in the resume. keywords_missing: type: array description: Keywords from the posting that are missing in the resume. ats_checks: type: array description: ATS format checks results. level_fit: type: string description: Fit level for the resume (e.g., "junior", "mid", "senior"). interview_probability: type: number description: Probability a recruiter would move the resume to interview. usage: type: object description: Billing usage information. usage.credits_charged: type: integer description: Credits charged for the call. usage.credits_remaining: type: integer description: Credits remaining after the call. PostV1DecisionsRequest: type: object properties: input: type: string description: The input text or user messages (may include images). questions: type: array description: Array of question objects. questions.type: type: string description: One of "predicate", "choice", or "score". questions.name: type: string description: Identifier for the question. questions.instructions: type: string description: Instructions for the model. questions.choices: type: array description: For "choice" type, list of possible options. questions.choices.value: type: string description: Value of a choice option. required: - input - questions - questions.type - questions.name - questions.instructions - questions.choices.value PostV1DecisionsResponse: type: object properties: answers: type: array description: Typed answers corresponding to each question. GetV1ModelsResponse: type: object properties: models: type: array description: List of model aliases such as jev-latest and jev-preview. PostV1SystemoneRequest: type: object properties: state: type: string description: The raw text, transcript, document, or serialized program state to evaluate. questions: type: object description: A dictionary of question objects keyed by an identifier. required: - state - questions PostV1SystemoneResponse: type: object properties: model: type: string description: The model identifier that answered the request. answers: type: object description: Answers keyed by the same IDs as the request questions. usage: type: object description: Token usage information (input_tokens, output_tokens). quota: type: object description: Quota information (used, limit, remaining). securitySchemes: bearer: type: http scheme: bearer security: - bearer: [] tags: - name: Api - name: Decisions - name: Models - name: Systemone