Skip to content

API Reference

Arnab Nandy edited this page Sep 3, 2026 · 1 revision

API reference

These routes support the first-party client and are not a versioned public API.

Public route

GET /api/search requires tech. Optional parameters are label, sort, linkedPr, hacktoberfest, experience, contributionType, scope, responsiveness, readiness, and page.

GET /api/search?tech=TypeScript&label=good-first-issue&sort=updated&page=1

The response contains the GitHub query, counts, pagination, rate-limit context, enrichment availability, and ranked issues. Missing technology returns 400, local throttling 429, and upstream failure 502.

Session-protected routes

Route Methods Purpose
/api/auth/* Better Auth handlers GitHub OAuth and sessions
/api/saved-searches POST Synchronize and list up to 100 saved searches
/api/saved-searches/{id} DELETE Delete the caller's saved search
/api/recommendations GET Recommend from all searches or one searchId
/api/contributions?page=1 GET Load GitHub contribution history
/api/opportunities GET, POST, PATCH List, record, and update opportunities
/api/feedback POST Dismiss a recommendation with a reason
/api/hidden-repositories GET, DELETE List or remove repository exclusions
/api/digest-preference GET, PATCH Update weekly digest and alert email
/api/digest-trigger POST Request a weekly digest, subject to cooldown
/api/repositories?query= GET Repository autocomplete
/api/repository-digest-template GET, PUT, PATCH Manage one alert template

Protected routes return 401 without a valid session and scope resources to that user. Templates accept at most five unique owner/repository entries and daily, weekly, or fortnightly frequency. Opportunity notes are limited to 2,000 characters.

Operator routes

GET /api/cron/weekly-digest requires Authorization: Bearer <CRON_SECRET>. GET|POST /api/admin/test-email additionally requires explicit admin table membership.

Status Meaning
400 Invalid input
401 Authentication or cron authorization required
403 Administrator permission required
404 User-scoped resource not found
409 GitHub account/token state conflict
429 Search throttle or digest cooldown
502 GitHub or email upstream failure
503 Email configuration unavailable

Clone this wiki locally