Public API
RemNavi API — for journalists, researchers, and curious operators
Four read-only endpoints, all CORS-enabled, no auth, no API key, no rate-card. The data behind every editorial piece on this site is reproducible from these URLs. Cite the responses in research; subscribe to a feed of any filter; verify our claims against the live corpus.
Licensed CC BY 4.0. Attribution: link back to remnavi.com.
GET /jobs_api.php
jobs_api.php — current corpus + facets
The primary read endpoint. Returns the current job corpus with optional filters and a small facet engine for hybrid mix, HTS by company, and trend snapshots.
Examples
Default — most-recent listings
curl 'https://remnavi.com/jobs_api.php?limit=10&order=recent'Filter by category
curl 'https://remnavi.com/jobs_api.php?category=engineering&limit=20'Filter by ATS source
curl 'https://remnavi.com/jobs_api.php?source=Greenhouse&limit=20'Hybrid-mix facet — corpus-level remote / hybrid / unclear breakdown
curl 'https://remnavi.com/jobs_api.php?facet=hybrid_mix'HTS by company — disclosure quality for the named hubs
curl 'https://remnavi.com/jobs_api.php?facet=hts_by_company'Trend overview — daily corpus metrics, last 30 days
curl 'https://remnavi.com/jobs_api.php?facet=trend_overview&days=30'
Response shape
{
"total": 8889,
"jobs": [
{
"id": 9964119,
"title": "Staff Software Engineer",
"company": "okta",
"url": "https://...",
"source": "Greenhouse:okta",
"category": "Tech",
"location": "Bengaluru, India",
"salary": null,
"posted_at": "2026-05-01T08:53:30+00:00",
"hybrid_classification": "hybrid",
"hybrid_transparency_score": 10
}
]
}Limit defaults to 100, max 5000. Order options: recent, alpha. Facets are mutually exclusive — pick one per request.
GET /feed.php
feed.php — RSS 2.0 of any filter
Same filter surface as jobs_api.php but emits RSS 2.0. Subscribe in any feed reader (Feedly, Inoreader, Slack RSS bot, NetNewsWire) for a live view of any cut of the corpus.
Examples
All recent listings
curl 'https://remnavi.com/feed.php' -H 'Accept: application/rss+xml'$120k+ AI/ML roles
curl 'https://remnavi.com/feed.php?q=ai&salary_min=120000'Greenhouse-sourced engineering, RRS ≥ 70
curl 'https://remnavi.com/feed.php?source=Greenhouse&category=engineering&rrs_min=70'Include hybrid listings (default is fully-remote only)
curl 'https://remnavi.com/feed.php?remote=include_hybrid'
Response shape
application/rss+xml — channel + 50 latest <item> elements with title, link (via /go.php for click attribution), pubDate, guid, dc:creator.Standard RSS 2.0 with atom:self-link. ttl=10. Parameters: q, category, source, salary_min, rrs_min, posted_within (days, default 30), remote (strict | include_hybrid | only_hybrid | any).
GET /repost_clusters.php
repost_clusters.php — ghost-jobs / repost analysis
Returns clusters where the same role title and employer appear multiple times in the current corpus. Three tiers: duplicate (2 listings), persistent (3-4), chronic (5+). Powers the /editorial/ghost-jobs/ data piece.
Examples
Top 50 clusters across the whole corpus
curl 'https://remnavi.com/repost_clusters.php?top=50'Filter to a single employer
curl 'https://remnavi.com/repost_clusters.php?company=Datadog&top=20'Just the corpus-level summary
curl 'https://remnavi.com/repost_clusters.php?top=0' | jq '.summary'
Response shape
{
"as_of": "2026-05-01T...",
"corpus_total": 8889,
"summary": {
"unique_role_keys": 7484,
"clustered_role_keys": 846,
"total_reposts": 1405,
"repost_pct": 15.8,
"tier_breakdown": { "duplicate": 614, "persistent": 163, "chronic": 69 }
},
"top_clusters": [
{ "title": "...", "company": "...", "count": 19,
"tier": "chronic", "first_seen": "...", "last_seen": "..." }
]
}Observational data, not accusatory. Some duplicates are legitimate cross-team or cross-region postings. See /editorial/ghost-jobs/ for the methodology.
GET /health.php
health.php — uptime + corpus integrity
Public health endpoint. Returns 200 with status:ok when all checks pass, 503 with status:degraded when any critical check fails. Suitable for journalist sceptics, uptime monitors, and integrity audits.
Examples
Just the status code
curl -s -o /dev/null -w '%{http_code}\n' 'https://remnavi.com/health.php'Full payload
curl 'https://remnavi.com/health.php' | jq
Response shape
{
"status": "ok",
"timestamp": "2026-05-01T...",
"checks": [
{ "name": "db_reachable", "pass": true },
{ "name": "corpus_nonempty", "pass": true, "detail": { "listings": 8889 } },
{ "name": "metrics_recorder_recent", "pass": true },
{ "name": "ingest_recent", "pass": true }
],
"corpus": { "listings": 8889, "metrics_last_run_utc": "..." }
}Failing checks: DB unreachable, jobs table empty, metrics recorder ran > 36h ago, most recent listing > 36h old. Designed for external uptime monitors with one ping = many signals.
Reasonable use
The endpoints have no enforced rate limit but please be reasonable — a single-digit number of requests per minute is fine; pulling the full corpus thousands of times an hour is not. If you have a research project that needs heavier access, email press@remnavi.com and we'll find a path that doesn't pressure the database.
All responses ship CORS headers (Access-Control-Allow-Origin: *) so the endpoints work from any browser-side application without proxying.
Citing the data
For academic or editorial use, a suggested citation: RemNavi (2026). Live remote-tech corpus, accessed [date], from https://remnavi.com/jobs_api.php. Per-listing audit trails are also citable individually — see /editorial/ghost-jobs/ and /editorial/hybrid-transparency-score/ for editorial pieces that document methodology.
What is not in this API
No applicant data. No employer-private endpoints. No internal analytics. The endpoints expose the same data that powers the public site — nothing more. If you find something on remnavi.com you can't get from these endpoints, that's a documentation gap; please flag it via the corrections form.