Outer Space Jobs
For AI agents
Find open space-industry jobs using a public, read-only JSON endpoint or ordinary HTML links. No API key or account is required.
Search jobs
Send GET /api/public/jobs. The JSON endpoint searches all countries by default. Add filters to narrow the results:
GET /api/public/jobs?q=propulsion&country=US&remote=1 | Parameter | Meaning | Default |
|---|---|---|
q | Role, employer, location, or job family. Matches case-insensitive text; recognized role names use the site's role synonyms. Maximum 200 characters. This does not search full job descriptions. | All roles |
location | City, state, or country; maximum 120 characters. | Every location |
country | ISO country code, such as US or GB, or all. UK is accepted as GB. Available codes are returned in countryCodes. | all |
remote | 1 for remote listings only; 0 includes all workplace types. | 0 |
clearance | any, none, public_trust, secret, top_secret, or ts_sci. A named value matches that extracted clearance bucket exactly. | any |
sort | newest or salary. Salary uses the site's normalized pay ranking, with newest first for ties. | newest |
page | Positive integer starting at 1. Each page contains up to 100 jobs. A page past the end resolves to the last available page. | 1 |
Invalid API parameters return HTTP 400 with an error and a documentation link. A country with no open jobs also returns 400 and the available countryCodes. A valid search with no matches returns HTTP 200, an empty jobs array, total 0, totalPages 0, and null pagination links.
Follow the next link
Read jobs, then request links.next until it is null. links.previous goes back one page. The HTTP Link header also supplies next and prev links when available. Every link preserves the normalized filters. Results are sorted by date or salary, then by job ID to keep ties consistent.
The catalog can change while you browse. This is page-based pagination, not a frozen snapshot: deduplicate results by id, and start a fresh search when completeness matters. Responses may be cached for up to 60 seconds; generatedAt is the response generation time, not when the employer last verified the job.
Response fields and internal links
The example below is illustrative. Job URLs, search links, and documentation links always point to outerspacejobs.com. The API does not expose external application URLs, employer website links, or raw source documents. Send users to each job's url to read the listing and continue from there.
{
"version": 1,
"generatedAt": "2026-10-27T12:00:00.000Z",
"filters": {
"query": "propulsion",
"location": "",
"remoteOnly": true,
"clearance": "any",
"sort": "newest",
"country": "US"
},
"countryCodes": [
"US"
],
"total": 1,
"page": 1,
"pageSize": 100,
"totalPages": 1,
"links": {
"self": "https://outerspacejobs.com/api/public/jobs?q=propulsion&remote=1&country=US",
"next": null,
"previous": null,
"html": "https://outerspacejobs.com/jobs?q=propulsion&remote=1&country=US",
"documentation": "https://outerspacejobs.com/for-agents"
},
"jobs": [
{
"id": "example-id",
"title": "Propulsion Engineer",
"company": "Example employer",
"url": "https://outerspacejobs.com/jobs/example-slug",
"location": "Denver, CO",
"locations": [
"Denver, CO"
],
"places": [
{
"city": "Denver",
"state": "CO",
"country": "US"
}
],
"country": "US",
"family": "Engineering",
"remote": true,
"clearance": null,
"salary": null,
"published": "2026-10-26T12:00:00Z"
}
]
} id is the stable identifier. published is the board's publication timestamp. salary is a display label, not a normalized numeric amount; null means unavailable. clearance is an extracted bucket: null means unknown, none means explicitly no clearance required, and required or eligibility may appear when a specific level is unavailable. remote indicates a remote listing, not worldwide work authorization or eligibility. Review the internal job page for the full requirements.
Browse without JavaScript
HTML search accepts the same filters and page parameter and includes matching jobs and ordinary Next and Previous links in its initial HTML. The HTML page may default to the visitor's country; use country=all or an explicit country for reproducible requests.
You can also read the latest jobs RSS feed, sitemap, employers, and curated searches.
Rate limits
The JSON search endpoint allows approximately 20 requests per 60 seconds per IP address at each Cloudflare location. All search queries and pages share that allowance, including GET and HEAD requests. Interactive filter changes on /jobs and generated /job-search/ pages use a bounded JSON endpoint at /api/search/jobs and share this same allowance; it returns one page with a next-page flag and does not calculate a total. Generated pages supply a registered hub slug to preserve their search defaults and salary floor. Users behind a shared network share an allowance. Cloudflare's counters are approximate and are not a strict worldwide quota.
When limited, the API returns HTTP 429 with a JSON error, retryAfter: 60, and a Retry-After: 60 header. Wait at least 60 seconds before retrying, then back off further if needed. Error responses are not cached. X-RateLimit-Limit and X-RateLimit-Window advertise the policy; no exact remaining count is provided. These headers and pagination Link headers are readable by cross-origin clients.
If the limiter is unavailable, search returns HTTP 503 with the same retry guidance. Ordinary HTML search, RSS, subscriptions, and other routes do not use this public-search allowance.
Use the public reading routes
Use GET requests, follow pagination, reuse cached results, and back off on HTTP 429 or 5xx responses. The JSON endpoint supports cross-origin reads. Subscriptions, job alerts, and posting a job are separate user actions; this search API does not create them.