API Reference

JobDataPool API v1

Public, no-auth REST API. Canonical paths live on /v1/* with compatibility aliases on /api/*. The contract below is generated from /openapi.json and the JSON schemas under /schemas/.

Canonical server

https://api.jobdatapool.com

Primary host for production traffic. Versioned canonical paths.

Compatibility host

https://jobdatapool.com

Same v1 surface served from the docs origin. /api/* aliases are accepted here for legacy clients.

Overview

What you get from /v1

A small, stable surface for querying job listings, source metadata, service health, and ecosystem launch metrics. Responses are JSON, public, cache-friendly, and rate-limited per IP and origin.

Jobs

Filter the canonical listing dataset by limit, industries, country_code, and an optional dedupe key. Records follow job-listing.schema.json.

Sources

The catalog of upstream data sources, contract pointers, and DVC/CSV locations the pool currently reads. Stable enough to back tooling.

Health & launch metrics

Service liveness with current build version, plus the public ecosystem launch counter rolled up across the usage dashboards.

Endpoints

All /v1 endpoints

Five GET endpoints. Method, path, parameters, response shape, and copy-paste cURL for each.

Jobs

GET /v1/jobs

List jobs from the canonical reviewed dataset, filtered by industry, country, and optional dedupe key.

Query parameters

NameTypeDefault / rangeDescription
limit integer 1-250, default 25 Maximum number of rows returned.
industries string e.g. Software,Government Comma-separated industries filter (case-insensitive partial match against job_industries and industries).
country_code string (2 chars) e.g. US ISO-like 2-letter country code. Compared against country_code.
distinct_by enum job_title | apply_link | url | company_name Optional dedupe key. Keeps the first record per group.

Responses

Response headers

  • X-Jobs-Count — total number of records in the filtered response.
  • X-Jobs-CacheHIT or MISS.
  • X-Jobs-Source — which upstream produced the response.
  • X-Jobdatapool-Version — service build version.
  • X-RateLimit-Policy — e.g. 30;w=60;by=ip+domain.

Example

curl -s 'https://api.jobdatapool.com/v1/jobs?limit=5&industries=Software&country_code=US' \
  -H 'Accept: application/json'

Sources

GET /v1/sources

List canonical data sources, contract pointers, and DVC/CSV locations the pool currently reads.

Responses

Example

curl -s 'https://api.jobdatapool.com/v1/sources' \
  -H 'Accept: application/json'

Health

GET /v1/launch-metrics

Public launch traction metric: rolling request totals, daily averages, and the per-site usage dashboard rollup. Aggregates only — no raw IPs.

Responses

Example

curl -s 'https://jobdatapool.com/v1/launch-metrics' \
  -H 'Accept: application/json'

Health

GET /v1/health

Health check with current build version, service identity, data source, and the public endpoint map.

Responses

Example

curl -s 'https://api.jobdatapool.com/v1/health' \
  -H 'Accept: application/json'

Health

GET /v1

Versioned API index. Returns the canonical endpoint map and version metadata so clients can self-describe.

Responses

  • 200 Versioned API index (open object with canonical endpoints).

Example

curl -s 'https://api.jobdatapool.com/v1' \
  -H 'Accept: application/json'

Response Schemas

JSON shapes you can build against

Stable, machine-readable JSON Schemas published under /schemas/. Wire them into tests, validators, and downstream consumers.

JobListing

Single job record returned by /v1/jobs. Object with open additionalProperties; the listed fields are the canonical surface.

Open job-listing.schema.json

FieldTypeNotes
idstringStable record id within the source.
job_titlestringListing title.
company_namestringHiring company name.
job_locationstringFree-form location, often city / region / remote indicator.
job_seniority_levelstringReported seniority bucket (e.g. Mid-Senior, Entry).
job_employment_typestringReported employment type (e.g. Full-Time).
job_industriesstring or string[]One industry, comma-list, or array.
job_summarystringShort description / posting summary.
job_base_pay_rangestringReported pay band when present.
job_posted_datestringReported posting date (string, often ISO-8601).
competitiveness_scorenumber or stringOptional internal scoring signal.
skillsstringReported skills (comma-list).
certificationsstringReported certifications.
industriesstringFree-text industry tags (legacy alongside job_industries).
achievementsstringReported preferred achievements.
urlstringOrigin posting URL.
apply_linkstringDirect apply URL when known.
country_codestring2-letter country code.
ingest_utc_datestringUTC date the row was ingested into the pool.
ingest_utc_hourstring or numberUTC hour bucket the row was ingested.
source_business_urlstringCanonical homepage of the company / source.

HealthResponse

Strict object (additionalProperties: false) returned by /v1/health.

Open health.schema.json

FieldTypeRequiredNotes
statusstringyesLiveness label, e.g. ok.
servicestringyesService identifier, e.g. jobdatapool.
versionstringyesBuild version.
time_utcstringyesUTC timestamp when the response was produced.
data_sourcestringnoIdentifier for the upstream data source.
endpointsobject<string, string>yesMap of canonical endpoint names to URLs.

SourceCatalog

Strict object returned by /v1/sources. Wraps SourceRecord entries and exposes contract / endpoint maps.

FieldTypeRequiredNotes
servicestringyesService identifier.
versionstringyesCatalog version.
sourcesSourceRecord[]yesArray of source records.
contractsobject<string, string>yesNamed contract URLs (OpenAPI, schemas, RFC).
endpointsobject<string, string>yesNamed endpoint URLs.

SourceRecord

Single entry in SourceCatalog.sources.

FieldTypeRequiredNotes
idstringyesSource identifier.
kindstringyesSource kind (e.g. scraper, feed, dataset).
repository_urlstringyesSource code or contributor repository.
data_api_urlstringyesCanonical data API URL for this source.
dvc_pointer_urlstringyesDVC pointer JSON describing the latest dataset version.
csv_urlstringyesResolved CSV URL for the latest dataset version.

LaunchMetricsResponse

Strict object returned by /v1/launch-metrics. Aggregates only — no raw IPs, user agents, or paths.

Open launch-metrics.schema.json

FieldTypeNotes
requests_since_launchintegerCumulative public request count since launch.
launch_floorintegerFloor used by the dampened public counter.
launch_offsetintegerOffset applied before the rolling window.
metric_window_daysintegerLength of the rolling metric window.
average_daily_requestsintegerDaily average over the metric window.
usage_dashboard_requestsintegerSum of usage dashboard requests across all member sites.
usage_dashboard_sitesUsageDashboardSite[]Per-site rollup. See nested fields below.
netlify_billing_snapshot_requestsintegerNetlify billing-snapshot baseline (for cross-checks).
netlify_edge_tracked_requestsintegerEdge-tracked request counter.
netlify_traffic_log_requestsintegerNetlify traffic-log counter.
previous_requests_since_launchintegerPrior snapshot value (for delta computation).
request_delta_last_hourintegerDelta against the prior snapshot.
metric_refresh_interval_secondsintegerCadence at which the rollup refreshes (hourly).
metric_elapsed_secondsintegerSeconds since the last refresh.
estimated_requests_per_secondnumberSmoothed estimate from the rolling delta.
previous_generated_atstringUTC timestamp of the previous snapshot.
sourceenumusage-dashboard-rollup | netlify-billing-snapshot | netlify-log-drain | netlify-edge-tracker | launch-fallback
updated_atstringUTC timestamp the rollup was last updated.
generated_atstringUTC timestamp the response was generated.
notestringOptional human-readable note for context.

UsageDashboardSite entry shape

FieldTypeNotes
site_keystringStable identifier for the member site (e.g. mewannajob).
site_urlstringCanonical URL of the member site.
request_countintegerCumulative request count for the member.
updated_atstringUTC timestamp the rollup last refreshed for this member.
statusstringOperational status from the rollup (ok, stale, etc.).
dailyDailyEntry[]?Optional per-day rollup. unique_ips is a cardinality count only — never the IPs themselves.

DailyEntry shape

FieldTypeNotes
datestring (YYYY-MM-DD)Local-day bucket.
requestsintegerPublic request count that day.
unique_ipsintegerCardinality of distinct request IPs that day.

ErrorResponse

Open object returned for 4xx/5xx failures. Always carries an error string; additional fields may be present.

Open error.schema.json

FieldTypeRequiredNotes
errorstringyesShort, human-readable error description.

Status Codes

Errors and rate limiting

Standard HTTP semantics. Errors return JSON, rate limits are advertised via response headers.

Common status codes

  • 200 Success — JSON body matches the response schema for that endpoint.
  • 400 Bad request — invalid query parameter (e.g. limit out of range). ErrorResponse.
  • 429 Too many requests — back off and retry. Inspect X-RateLimit-Policy for the current window.
  • 500 Server error — transient. Retry with exponential backoff. ErrorResponse.

Rate limit posture

The default policy is per-IP and per-Origin, advertised in X-RateLimit-Policy (e.g. 30;w=60;by=ip+domain). Cache aggressively when you can — the canonical responses are immutable for the duration of their Cache-Control.

Public endpoints are no-auth on purpose; please pace your traffic so the pool stays useful for everyone.