Cornelius API

REST API for the Cornelius YSWS submission review engine. Review GitHub repositories for hardware project completeness using rule-based checks and AI-powered analysis.

Base URL
http://localhost:3000
Authentication

Cornelius uses server-side API keys configured via environment variables. No client authentication is required for the REST API itself. The server handles GitHub Proxy and Anthropic API authentication internally.

Variable Required Description
GH_PROXY_API_KEY REQUIRED Hack Club GitHub Proxy API key for repo access
ANTHROPIC_API_KEY optional Enables AI-powered checks (README quality, image analysis)
PORT optional Server port (default: 3000)
Available Checks

Each review runs a set of checks against the target repository. Checks are either rule-based (deterministic) or AI-powered (uses Claude).

github_link_works RULE
Validates the GitHub URL is reachable and the repository contains files.
readme_present RULE
Checks for a README file at the repository root. Accepts README.md, README, README.txt, README.rst, README.adoc.
readme_quality AI
Evaluates README for project description, build instructions, and overall quality. Falls back to word count / heading heuristic without AI.
readme_has_project_image AI
Detects markdown/HTML image tags in README and optionally uses AI to determine if they are project-relevant (hardware photo, 3D render, PCB render).
three_d_files_present RULE
Scans for 3D design files: .stl, .step, .stp, .3mf, .obj, .f3d, .fcstd, .scad. Configurable extensions and minimum count.
pcb_files_present RULE
Detects PCB design files for KiCad (.kicad_pro, .kicad_sch, .kicad_pcb), EasyEDA (.epro), Eagle (.sch, .brd), Altium (.PrjPcb, .SchDoc, .PcbDoc), and Gerber outputs.
bom_present_if_required RULE
Looks for bill of materials files (bom.csv, parts.csv, etc.) or a BOM section in the README.
Presets

Presets configure which checks are enabled, required, and their parameters. Pass a preset name to any review endpoint.

NameDescription
default Standard hardware review. BOM and README quality are warnings only.
hardware-default Strict hardware review. All checks required including BOM and README quality.
blueprint Hack Club Blueprint program preset. All checks required, broad 3D file format support.
POST /api/review

Review a single GitHub repository. Runs all enabled checks from the selected preset and returns detailed results.

FieldTypeDescription
url string REQUIRED GitHub repository URL
preset string optional Preset name (default: "default")
// POST /api/review
// Content-Type: application/json

{
  "url": "https://github.com/user/hardware-project",
  "preset": "blueprint"
}
{
  "githubUrl": "https://github.com/user/hardware-project",
  "status": "pass",
  "overallPass": true,
  "checkResults": [
    {
      "checkName": "github_link_works",
      "required": true,
      "status": "pass",
      "confidence": 1.0,
      "evidence": ["https://github.com/user/hardware-project"],
      "reason": "Repository is accessible and contains files",
      "aiUsed": false
    }
    // ... more check results
  ],
  "warnings": [],
  "errors": [],
  "aiSummary": "Project has complete PCB and CAD files...",
  "suggestedFixes": [],
  "confidenceScore": 0.95
}
200Review completed (check overallPass for result)
400Invalid or missing GitHub URL
500Server error during review
Try It

        
POST /api/batch

Upload a CSV file of repositories for batch review. Returns a job ID to poll for progress. The CSV must have a github_url column.

FieldTypeDescription
csv file REQUIRED CSV file (multipart/form-data)
preset string optional Preset name (default: "default")
// Required: github_url column
// Optional: project_type, program_preset, submission_id, participant_name, email, notes

github_url,submission_id,participant_name
https://github.com/user/project-a,001,Alice
https://github.com/user/project-b,002,Bob
{
  "jobId": "m5x8k2abc1",
  "status": "processing"
}
200Batch job created, returns job ID
400No CSV file uploaded
GET /api/batch/:jobId

Poll for batch job progress and results. Returns current status, completion count, and results array when complete.

ParamTypeDescription
jobId string Job ID returned from POST /api/batch
{
  "status": "processing",
  "total": 50,
  "completed": 12,
  "results": []
}
{
  "status": "complete",
  "total": 50,
  "completed": 50,
  "results": [
    {
      "submissionId": "001",
      "githubUrl": "https://github.com/user/project-a",
      "projectType": "hardware",
      "overallStatus": "pass",
      "passedChecks": ["github_link_works", "readme_present"],
      "failedChecks": [],
      "warnings": [],
      "reviewSummary": "All checks passed",
      "confidenceScore": 0.98
    }
    // ... more results
  ]
}
200Job found, returns current state
404Job ID not found
GET /api/health

Returns server health status and whether API keys are configured.

{
  "status": "ok",
  "version": "1.0.0",
  "github": true,   // GH_PROXY_API_KEY configured
  "ai": false        // ANTHROPIC_API_KEY configured
}
Try It

        

Schemas

Response type definitions.

ReviewResult
FieldTypeDescription
githubUrlstringThe reviewed repository URL
status"pass" | "fail" | "warning" | "error"Overall review status
overallPassbooleanTrue if no required checks failed
checkResultsCheckResult[]Individual check results
warningsstring[]Warning messages
errorsstring[]Error messages from failed required checks
aiSummarystring?AI-generated review summary (if AI enabled)
suggestedFixesstring[]?AI-suggested improvements
confidenceScorenumberAverage confidence across checks (0-1)
CheckResult
FieldTypeDescription
checkNamestringCheck identifier
requiredbooleanWhether this check is required to pass
status"pass" | "fail" | "warning" | "error" | "skipped"Check result status
confidencenumberConfidence in result (0-1)
evidencestring[]Files or data supporting the result
reasonstringHuman-readable explanation
aiUsedbooleanWhether Claude AI was used for this check
BatchResult
FieldTypeDescription
submissionIdstringID from CSV or auto-generated index
githubUrlstringRepository URL
projectTypestringProject type (e.g. "hardware")
overallStatusstringOverall status
passedChecksstring[]IDs of passed checks
failedChecksstring[]IDs of failed checks
warningsstring[]Warning messages
reviewSummarystringAI summary or status string
confidenceScorenumberAverage confidence (0-1)
Cornelius v1.0.0 · Hack Club YSWS Review Engine
GitHub Proxy: gh-proxy.hackclub.com