{
    "openapi": "3.0.3",
    "info": {
        "title": "Jobless Partner API",
        "version": "1",
        "description": "Server-to-server JSON API over the Jobless job index: filter search, natural-language\nsearch, job detail, global stats, and a stateless CV audit.\n\n## Base URL\n\n`https://api.jobless.dev/partners/v1`. Guides and the partner portal live at\n`https://partners.jobless.dev`.\n\n## Authentication\n\nSend your key on every request as `Authorization: Bearer jl_live_...` or as\n`X-API-Key: jl_live_...`. Keys are shown once when created; we store only a hash.\nCalls from a browser (any request with an `Origin` header) are refused with\n`403 browser_not_allowed`: never ship a key to a client.\n\n## Credits\n\nEvery successful (2xx) call is charged once, in credits:\n\n`credits = ai_tokens + data_tokens`\n\n- `ai_tokens`: the weighted model tokens the call actually spent (0 for the non-AI endpoints).\n- `data_tokens`: the o200k (tiktoken) token count of the compact JSON body you receive,\n  without the `usage` object. You can reproduce it with the public `tiktoken` library.\n\nEach charged response carries a `usage` object and the headers `X-Credits-Charged`,\n`X-Credits-Breakdown` and `X-Credits-Remaining`. Errors (4xx and 5xx) are never charged.\n`GET /usage` reports the balance and spend for free.\n\nSome responses are served from a short-lived cache (filter search 120 s, job detail and\nbatch reads 10 min, stats 1 h, natural-language search 1 h). A cached response is charged\nits data tokens only, with `ai_tokens: 0` and `usage.cached: true`.\n\nAsk for less to pay less: `fields=title,company,url` on `GET /jobs`, `GET /jobs/ai-search`\nand `GET /jobs/batch` returns only those fields (`id` and `url` are always included), and\nthe smaller body costs fewer data tokens.\n\n## Errors\n\nEvery error uses one envelope:\n`{\"error\": {\"type\", \"code\", \"message\", \"param\", \"request_id\", \"doc_url\"}}`.\n`type` is one of `invalid_request`, `authentication`, `permission`, `not_found`,\n`conflict`, `rate_limit`, `billing`, `upstream`, `internal`; `code` is stable and\nmachine-readable.\n\n## Idempotency\n\nPOST endpoints accept an `Idempotency-Key` header (8-128 characters of `A-Z a-z 0-9 _ -`).\nA repeated key returns `409 request_in_progress` while the first call runs and\n`409 already_processed` after it was charged. No response body is stored, so a CV\naudit is never replayed: send a new key to run it again.\n\n## Limits\n\nRequests are rate limited per partner (`X-RateLimit-Limit`, `X-RateLimit-Remaining`,\n`X-RateLimit-Reset`); AI endpoints also cap concurrent calls. A `429` carries `Retry-After`.\nAI endpoints answer `429 ai_failure_limit_reached` until 00:00 UTC once too many of an\naccount's AI calls failed in one day without a result; other endpoints keep working.\n\n## Logos\n\n`company.logo_url` is a signed URL on this API (`/logos/{key}?s=...`). It needs no key,\nis free, and is safe to put in an `<img>` tag. Use it exactly as returned.\n\n## Versioning\n\nThe path carries the major version (`/v1`). Additive changes (new fields, new optional\nparameters, new error codes) ship without notice; treat unknown fields as optional.\nEvery response carries `Jobless-Api-Version: 1`."
    },
    "paths": {
        "/health": {
            "get": {
                "operationId": "get_health",
                "description": "Liveness and whether the API and the AI endpoints are switched on. Free, no key, always reachable.",
                "summary": "Health",
                "tags": [
                    "health"
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Health"
                                },
                                "examples": {
                                    "Health": {
                                        "value": {
                                            "object": "health",
                                            "status": "ok",
                                            "api_version": "1",
                                            "api_enabled": true,
                                            "ai_enabled": true
                                        }
                                    }
                                }
                            }
                        },
                        "description": "Status.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs": {
            "get": {
                "operationId": "search_jobs",
                "description": "Filter the job index by keywords, role, place, workplace, seniority and date. Returns compact Job objects, newest first unless `q` is set. Without `q` or any filter, at most one job per company is shown. Charged in data tokens only; identical searches within 120 seconds are served from cache (`usage.cached: true`).",
                "summary": "Search jobs",
                "parameters": [
                    {
                        "in": "query",
                        "name": "city",
                        "schema": {
                            "type": "string"
                        },
                        "description": "City names, comma separated (at most 5). On-site and hybrid jobs in the city; with `country`, the city is pinned to those countries."
                    },
                    {
                        "in": "query",
                        "name": "country",
                        "schema": {
                            "type": "string"
                        },
                        "description": "ISO 3166-1 alpha-2 codes, comma separated (at most 10). Jobs located in, or open to applicants from, these countries. `GB`, not `UK`."
                    },
                    {
                        "in": "query",
                        "name": "employment_type",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP."
                    },
                    {
                        "in": "query",
                        "name": "fields",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated Job fields to return; `id` and `url` are always included. Allowed: object, id, title, company, location_label, locations, workplace, remote_eligibility, employment_type, seniority, role_family, role_families, skills, salary, posted_at, posted_at_estimated, url. Smaller bodies cost fewer data tokens. Unknown names answer 400 `invalid_parameter`."
                    },
                    {
                        "in": "query",
                        "name": "page",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-based page. `page x per_page` may not exceed 1,000."
                    },
                    {
                        "in": "query",
                        "name": "per_page",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-25, default 10."
                    },
                    {
                        "in": "query",
                        "name": "posted_within_days",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-365. Jobs published in the last N days, counted from 00:00 UTC of the first day."
                    },
                    {
                        "in": "query",
                        "name": "q",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Keywords matched against title, summary, skills and text."
                    },
                    {
                        "in": "query",
                        "name": "remote_worldwide",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Also include remote jobs open to applicants anywhere."
                    },
                    {
                        "in": "query",
                        "name": "role_family",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Role family slugs, comma separated (at most 5). See the role family list in the guides."
                    },
                    {
                        "in": "query",
                        "name": "seniority",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: entry, mid, senior, staff, manager, director, executive. `executive` includes `director`."
                    },
                    {
                        "in": "query",
                        "name": "skill",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Skills, comma separated (at most 3). Jobs that list them."
                    },
                    {
                        "in": "query",
                        "name": "sort",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "newest",
                                "relevance"
                            ]
                        },
                        "description": "`relevance` (default with `q`) or `newest`."
                    },
                    {
                        "in": "query",
                        "name": "workplace",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: remote, hybrid, on_site."
                    }
                ],
                "tags": [
                    "jobs"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobList"
                                },
                                "examples": {
                                    "Jobs": {
                                        "value": {
                                            "object": "list",
                                            "data": [
                                                {
                                                    "object": "job",
                                                    "id": "job_1zq8m4k2t9bx3kd7r5w0c6y1nf",
                                                    "title": "Senior Backend Engineer",
                                                    "company": {
                                                        "name": "Northwind Analytics",
                                                        "logo_url": "https://api.jobless.dev/partners/v1/logos/1j8k2m4n6p8r0t2v4x6z8b0d2f?s=b81d3c0a91fe4c2d7e6f",
                                                        "website": "https://northwind.io"
                                                    },
                                                    "location_label": "Berlin",
                                                    "locations": [
                                                        {
                                                            "city": "Berlin",
                                                            "country": "DE"
                                                        }
                                                    ],
                                                    "workplace": "hybrid",
                                                    "remote_eligibility": null,
                                                    "employment_type": "FULL_TIME",
                                                    "seniority": "senior",
                                                    "role_family": "software_engineering",
                                                    "role_families": [
                                                        "software_engineering"
                                                    ],
                                                    "skills": [
                                                        "Python",
                                                        "Django",
                                                        "PostgreSQL"
                                                    ],
                                                    "salary": {
                                                        "min": 70000,
                                                        "max": 90000,
                                                        "currency": "EUR",
                                                        "period": "year"
                                                    },
                                                    "posted_at": "2026-10-02T09:14:00Z",
                                                    "posted_at_estimated": false,
                                                    "url": "https://jobless.dev/jobs/senior-backend-engineer-northwind-3f2a91c4?ref=acme"
                                                }
                                            ],
                                            "pagination": {
                                                "page": 1,
                                                "per_page": 10,
                                                "total": 1842,
                                                "total_is_capped": false,
                                                "max_reachable": 1000,
                                                "has_more": true
                                            },
                                            "usage": {
                                                "credits": 2721,
                                                "ai_tokens": 0,
                                                "data_tokens": 2721,
                                                "ai_breakdown": {},
                                                "cached": false
                                            }
                                        }
                                    },
                                    "WithFields=title,company(cached)": {
                                        "value": {
                                            "object": "list",
                                            "data": [
                                                {
                                                    "id": "job_1zq8m4k2t9bx3kd7r5w0c6y1nf",
                                                    "title": "Senior Backend Engineer",
                                                    "company": {
                                                        "name": "Northwind Analytics",
                                                        "logo_url": "https://api.jobless.dev/partners/v1/logos/1j8k2m4n6p8r0t2v4x6z8b0d2f?s=b81d3c0a91fe4c2d7e6f",
                                                        "website": "https://northwind.io"
                                                    },
                                                    "url": "https://jobless.dev/jobs/senior-backend-engineer-northwind-3f2a91c4?ref=acme"
                                                }
                                            ],
                                            "pagination": {
                                                "page": 1,
                                                "per_page": 10,
                                                "total": 1842,
                                                "total_is_capped": false,
                                                "max_reachable": 1000,
                                                "has_more": true
                                            },
                                            "usage": {
                                                "credits": 912,
                                                "ai_tokens": 0,
                                                "data_tokens": 912,
                                                "ai_breakdown": {},
                                                "cached": true
                                            }
                                        },
                                        "summary": "With fields=title,company (cached)"
                                    }
                                }
                            }
                        },
                        "description": "A page of jobs.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "502": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`upstream_unavailable`: search failed. Not charged."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/ai-search": {
            "get": {
                "operationId": "ai_search_jobs",
                "description": "Describe the job you want in a sentence. The response shows how the query was read (`interpretation`) and a replayable `filters` object for `GET /jobs`. Explicit filters win over places and levels named in the sentence. Page 1 is ranked by relevance; later pages continue with the rest of the matching jobs, newest first. Charged in AI tokens plus data tokens; a repeated query within an hour costs data tokens only. When the text is not a job search, `clarification` is set and `data` is empty.",
                "summary": "Search jobs in plain language",
                "parameters": [
                    {
                        "in": "query",
                        "name": "city",
                        "schema": {
                            "type": "string"
                        },
                        "description": "City names, comma separated (at most 5). On-site and hybrid jobs in the city; with `country`, the city is pinned to those countries."
                    },
                    {
                        "in": "query",
                        "name": "country",
                        "schema": {
                            "type": "string"
                        },
                        "description": "ISO 3166-1 alpha-2 codes, comma separated (at most 10). Jobs located in, or open to applicants from, these countries. `GB`, not `UK`."
                    },
                    {
                        "in": "query",
                        "name": "employment_type",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP."
                    },
                    {
                        "in": "query",
                        "name": "fields",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated Job fields to return; `id` and `url` are always included. Allowed: object, id, title, company, location_label, locations, workplace, remote_eligibility, employment_type, seniority, role_family, role_families, skills, salary, posted_at, posted_at_estimated, url. Smaller bodies cost fewer data tokens. Unknown names answer 400 `invalid_parameter`."
                    },
                    {
                        "in": "query",
                        "name": "page",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-based page. `page x per_page` may not exceed 1,000."
                    },
                    {
                        "in": "query",
                        "name": "per_page",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-25, default 10."
                    },
                    {
                        "in": "query",
                        "name": "posted_within_days",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "1-365. Jobs published in the last N days, counted from 00:00 UTC of the first day."
                    },
                    {
                        "in": "query",
                        "name": "q",
                        "schema": {
                            "type": "string"
                        },
                        "description": "The search in plain words, 2-200 characters.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "remote_worldwide",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Also include remote jobs open to applicants anywhere."
                    },
                    {
                        "in": "query",
                        "name": "role_family",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Role family slugs, comma separated (at most 5). See the role family list in the guides."
                    },
                    {
                        "in": "query",
                        "name": "seniority",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: entry, mid, senior, staff, manager, director, executive. `executive` includes `director`."
                    },
                    {
                        "in": "query",
                        "name": "workplace",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma separated: remote, hybrid, on_site."
                    }
                ],
                "tags": [
                    "jobs"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AISearchResult"
                                },
                                "examples": {
                                    "Search": {
                                        "value": {
                                            "object": "list",
                                            "query": "senior python jobs in berlin, hybrid is fine",
                                            "interpretation": {
                                                "role_family": "software_engineering",
                                                "role_family_label": "Software Engineering",
                                                "role_stated": true,
                                                "skills": [
                                                    "Python"
                                                ],
                                                "seniority": "senior",
                                                "workplace": [],
                                                "countries": [
                                                    "DE"
                                                ],
                                                "cities": [
                                                    "Berlin"
                                                ],
                                                "excluded_countries": [],
                                                "worldwide": false,
                                                "posted_within_days": 60,
                                                "posted_within_days_stated": false,
                                                "relaxed": [],
                                                "filters": {
                                                    "role_family": "software_engineering",
                                                    "skill": "Python",
                                                    "seniority": "senior",
                                                    "country": "DE",
                                                    "city": "Berlin",
                                                    "posted_within_days": 60
                                                }
                                            },
                                            "clarification": null,
                                            "data": [
                                                {
                                                    "object": "job",
                                                    "id": "job_1zq8m4k2t9bx3kd7r5w0c6y1nf",
                                                    "title": "Senior Backend Engineer",
                                                    "company": {
                                                        "name": "Northwind Analytics",
                                                        "logo_url": "https://api.jobless.dev/partners/v1/logos/1j8k2m4n6p8r0t2v4x6z8b0d2f?s=b81d3c0a91fe4c2d7e6f",
                                                        "website": "https://northwind.io"
                                                    },
                                                    "location_label": "Berlin",
                                                    "locations": [
                                                        {
                                                            "city": "Berlin",
                                                            "country": "DE"
                                                        }
                                                    ],
                                                    "workplace": "hybrid",
                                                    "remote_eligibility": null,
                                                    "employment_type": "FULL_TIME",
                                                    "seniority": "senior",
                                                    "role_family": "software_engineering",
                                                    "role_families": [
                                                        "software_engineering"
                                                    ],
                                                    "skills": [
                                                        "Python",
                                                        "Django",
                                                        "PostgreSQL"
                                                    ],
                                                    "salary": {
                                                        "min": 70000,
                                                        "max": 90000,
                                                        "currency": "EUR",
                                                        "period": "year"
                                                    },
                                                    "posted_at": "2026-10-02T09:14:00Z",
                                                    "posted_at_estimated": false,
                                                    "url": "https://jobless.dev/jobs/senior-backend-engineer-northwind-3f2a91c4?ref=acme"
                                                }
                                            ],
                                            "pagination": {
                                                "page": 1,
                                                "per_page": 10,
                                                "total": 214,
                                                "total_is_capped": false,
                                                "max_reachable": 1000,
                                                "has_more": true
                                            },
                                            "usage": {
                                                "credits": 5288,
                                                "ai_tokens": 2412,
                                                "data_tokens": 2876,
                                                "ai_breakdown": {
                                                    "query_plan": 2402,
                                                    "query_embedding": 10
                                                },
                                                "cached": false
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "description": "Ranked jobs and the reading.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`invalid_query` (empty, a URL, or not text), or an invalid parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`rate_limited`, `concurrency_limited`, `daily_credit_cap_reached`, or `ai_failure_limit_reached` (too many failed AI calls today; AI endpoints reopen at 00:00 UTC). See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`ai_unavailable`, `unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged."
                    },
                    "502": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`upstream_unavailable`: search failed. Not charged."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/batch": {
            "get": {
                "operationId": "batch_get_jobs",
                "description": "Up to 25 jobs by id in one call, in the order you asked. Duplicate ids are collapsed; ids that are unknown or closed are listed in `missing` instead of failing the call. Compact Jobs by default, full Jobs with `full=true`. Charged in data tokens only, so re-checking saved jobs costs only what is returned.",
                "summary": "Get several jobs",
                "parameters": [
                    {
                        "in": "query",
                        "name": "description_format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "markdown",
                                "text"
                            ]
                        },
                        "description": "`markdown` (default) or `text`."
                    },
                    {
                        "in": "query",
                        "name": "fields",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated Job fields to return; `id` and `url` are always included. With `full=true` also: summary, description, visa_sponsorship, relocation_support, status."
                    },
                    {
                        "in": "query",
                        "name": "full",
                        "schema": {
                            "type": "boolean"
                        },
                        "description": "Return full Job objects (with description)."
                    },
                    {
                        "in": "query",
                        "name": "ids",
                        "schema": {
                            "type": "string"
                        },
                        "description": "1-25 job ids (`job_...`), comma separated.",
                        "required": true
                    }
                ],
                "tags": [
                    "jobs"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobBatch"
                                },
                                "examples": {
                                    "Batch": {
                                        "value": {
                                            "object": "list",
                                            "data": [
                                                {
                                                    "object": "job",
                                                    "id": "job_1zq8m4k2t9bx3kd7r5w0c6y1nf",
                                                    "title": "Senior Backend Engineer",
                                                    "company": {
                                                        "name": "Northwind Analytics",
                                                        "logo_url": "https://api.jobless.dev/partners/v1/logos/1j8k2m4n6p8r0t2v4x6z8b0d2f?s=b81d3c0a91fe4c2d7e6f",
                                                        "website": "https://northwind.io"
                                                    },
                                                    "location_label": "Berlin",
                                                    "locations": [
                                                        {
                                                            "city": "Berlin",
                                                            "country": "DE"
                                                        }
                                                    ],
                                                    "workplace": "hybrid",
                                                    "remote_eligibility": null,
                                                    "employment_type": "FULL_TIME",
                                                    "seniority": "senior",
                                                    "role_family": "software_engineering",
                                                    "role_families": [
                                                        "software_engineering"
                                                    ],
                                                    "skills": [
                                                        "Python",
                                                        "Django",
                                                        "PostgreSQL"
                                                    ],
                                                    "salary": {
                                                        "min": 70000,
                                                        "max": 90000,
                                                        "currency": "EUR",
                                                        "period": "year"
                                                    },
                                                    "posted_at": "2026-10-02T09:14:00Z",
                                                    "posted_at_estimated": false,
                                                    "url": "https://jobless.dev/jobs/senior-backend-engineer-northwind-3f2a91c4?ref=acme"
                                                }
                                            ],
                                            "missing": [
                                                "job_0000000000000000000000000z"
                                            ],
                                            "usage": {
                                                "credits": 301,
                                                "ai_tokens": 0,
                                                "data_tokens": 301,
                                                "ai_breakdown": {},
                                                "cached": false
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "description": "Found jobs plus the missing ids.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "502": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`upstream_unavailable`: search failed. Not charged."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}": {
            "get": {
                "operationId": "get_job",
                "description": "The full Job object, with the cleaned description. Charged in data tokens only. To read several jobs at once, use `GET /jobs/batch`.",
                "summary": "Get a job",
                "parameters": [
                    {
                        "in": "query",
                        "name": "description_format",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "markdown",
                                "text"
                            ]
                        },
                        "description": "`markdown` (default) or `text`."
                    },
                    {
                        "in": "path",
                        "name": "job_id",
                        "schema": {
                            "type": "string"
                        },
                        "description": "The job id (`job_...`).",
                        "required": true
                    }
                ],
                "tags": [
                    "jobs"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FullJobWithUsage"
                                },
                                "examples": {
                                    "Job": {
                                        "value": {
                                            "object": "job",
                                            "id": "job_1zq8m4k2t9bx3kd7r5w0c6y1nf",
                                            "title": "Senior Backend Engineer",
                                            "company": {
                                                "name": "Northwind Analytics",
                                                "logo_url": "https://api.jobless.dev/partners/v1/logos/1j8k2m4n6p8r0t2v4x6z8b0d2f?s=b81d3c0a91fe4c2d7e6f",
                                                "website": "https://northwind.io",
                                                "industry": "Data Software",
                                                "size": "201-500",
                                                "founded_year": 2016
                                            },
                                            "location_label": "Berlin",
                                            "locations": [
                                                {
                                                    "city": "Berlin",
                                                    "country": "DE"
                                                }
                                            ],
                                            "workplace": "hybrid",
                                            "remote_eligibility": null,
                                            "employment_type": "FULL_TIME",
                                            "seniority": "senior",
                                            "role_family": "software_engineering",
                                            "role_families": [
                                                "software_engineering"
                                            ],
                                            "skills": [
                                                "Python",
                                                "Django",
                                                "PostgreSQL"
                                            ],
                                            "salary": {
                                                "min": 70000,
                                                "max": 90000,
                                                "currency": "EUR",
                                                "period": "year"
                                            },
                                            "posted_at": "2026-10-02T09:14:00Z",
                                            "posted_at_estimated": false,
                                            "summary": "Own the ingestion services behind the analytics product.",
                                            "description": "## About the role\nYou will run the ingestion services ...",
                                            "visa_sponsorship": null,
                                            "relocation_support": "offered",
                                            "status": "active",
                                            "url": "https://jobless.dev/jobs/senior-backend-engineer-northwind-3f2a91c4?ref=acme",
                                            "usage": {
                                                "credits": 1356,
                                                "ai_tokens": 0,
                                                "data_tokens": 2721,
                                                "ai_breakdown": {},
                                                "cached": false
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "description": "The job.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`job_not_found`: unknown id."
                    },
                    "410": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`job_closed`: the job is no longer open. Drop it from your listings."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logos/{key}": {
            "get": {
                "operationId": "get_logo",
                "description": "The image behind `company.logo_url`. Use the URL exactly as returned in a Job: it is signed, and any other key or signature answers 404. Free, no key needed, safe to put in an `<img>` tag. PNG, JPEG, GIF, WebP, SVG or ICO, at most 512 KB, cached for 7 days.",
                "summary": "Company logo",
                "parameters": [
                    {
                        "in": "path",
                        "name": "key",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Opaque logo key from the URL.",
                        "required": true
                    },
                    {
                        "in": "query",
                        "name": "s",
                        "schema": {
                            "type": "string"
                        },
                        "description": "URL signature.",
                        "required": true
                    }
                ],
                "tags": [
                    "logos"
                ],
                "responses": {
                    "200": {
                        "content": {
                            "image/*": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            }
                        },
                        "description": "The logo image.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`logo_not_found`: bad signature, or the company has no logo."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Too many requests."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/resumes/audit": {
            "post": {
                "operationId": "audit_resume",
                "description": "Reviews one CV and returns a score, a summary, strengths, gaps and red flags.\nStateless: the file, its text and everything derived from it are dropped when\nthe response is sent. Nothing is stored, and nothing can be fetched by the `id` later.\n\n- **Strength**: something a recruiter would count in the candidate's favour for the\n  target role, backed by text in the CV.\n- **Gap**: something missing or underdeveloped in the document. Fixed by editing or\n  adding; always carries a `fix`.\n- **Red flag**: something present in the CV, or a pattern in it, that may make a\n  screener doubt the candidate (an unexplained gap of 6+ months, 3+ roles under a year,\n  contradicting dates, no email). Fixed by explaining or correcting. Always cites\n  verbatim CV text or a computed fact.\n- Never judged: age, gender, nationality, ethnicity, religion, disability, health,\n  family status, photo, name, stated leave, or employer prestige.\n\nThe response never echoes the candidate's name, email or phone. All generated text is\nEnglish. Typical latency is 20-45 seconds (hard limit 85 s, `504 timeout`). Charged only\non the 200; a scanned PDF without a text layer is `422 unreadable_cv` and costs nothing.",
                "summary": "Audit a CV",
                "parameters": [
                    {
                        "in": "header",
                        "name": "Idempotency-Key",
                        "schema": {
                            "type": "string"
                        },
                        "description": "8-128 characters of A-Z a-z 0-9 _ -. A repeat within 15 minutes returns 409 (`request_in_progress` or `already_processed`); no body is replayed."
                    }
                ],
                "tags": [
                    "resumes"
                ],
                "requestBody": {
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "$ref": "#/components/schemas/AuditFileInputRequest"
                            }
                        },
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AuditTextInputRequest"
                            },
                            "examples": {
                                "CVText": {
                                    "value": {
                                        "text": "Backend engineer with six years of experience ...",
                                        "target_role": "Backend Engineer",
                                        "end_user_ref": "cand_19284"
                                    },
                                    "summary": "CV text"
                                }
                            }
                        }
                    },
                    "required": true
                },
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CVAudit"
                                },
                                "examples": {
                                    "Audit": {
                                        "value": {
                                            "object": "cv_audit",
                                            "id": "aud_01j9zq4m2t8bx3kd",
                                            "end_user_ref": "cand_19284",
                                            "created_at": "2026-10-05T10:02:11Z",
                                            "target_role": "Backend Engineer",
                                            "score": 68,
                                            "summary": "Clear backend profile with six years of relevant work, held back by unmeasured results, no summary and an unexplained 9-month gap in 2021.",
                                            "strengths": [
                                                {
                                                    "title": "Recent, relevant experience",
                                                    "detail": "Three years building payment services matches the target role directly.",
                                                    "evidence": "Built services processing 2M payments a day"
                                                }
                                            ],
                                            "gaps": [
                                                {
                                                    "code": "summary",
                                                    "title": "No summary",
                                                    "detail": "A screener has to read the whole page to learn what the candidate does.",
                                                    "severity": "medium",
                                                    "section": "summary",
                                                    "fix": "Add 2 lines: role, years, core strengths, one proof point."
                                                }
                                            ],
                                            "red_flags": [
                                                {
                                                    "code": "employment_gap",
                                                    "title": "Unexplained 9-month gap",
                                                    "detail": "No role between two consecutive positions in 2021.",
                                                    "severity": "medium",
                                                    "section": "experience",
                                                    "evidence": "No role between Delta Soft (ended 2021-02) and Acme Pay (started 2021-12), 9 months."
                                                }
                                            ],
                                            "cv": {
                                                "language": "en",
                                                "parse_quality": "good",
                                                "years_experience": 6.5
                                            },
                                            "usage": {
                                                "credits": 17112,
                                                "ai_tokens": 16524,
                                                "data_tokens": 588,
                                                "ai_breakdown": {
                                                    "cv_parse": 9140,
                                                    "cv_review": 7384
                                                },
                                                "cached": false
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "description": "The audit.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "409": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Idempotency-Key already used."
                    },
                    "413": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`file_too_large`."
                    },
                    "415": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unsupported_file_type`."
                    },
                    "422": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unreadable_cv`, `cv_not_a_resume`, `text_too_short`, `text_too_long`."
                    },
                    "502": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`upstream_unavailable`: parser or model down. Not charged."
                    },
                    "504": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`timeout` after 85 s. Not charged."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stats": {
            "get": {
                "operationId": "get_stats",
                "description": "Counts across the whole job index, refreshed hourly. `posted_last_24h` and `posted_last_7d` count exactly what `GET /jobs` returns for `posted_within_days=1` and `7` (publication date, from 00:00 UTC of the first day).",
                "summary": "Index statistics",
                "tags": [
                    "stats"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Stats"
                                },
                                "examples": {
                                    "Stats": {
                                        "value": {
                                            "object": "stats",
                                            "updated_at": "2026-10-05T10:00:00Z",
                                            "total_jobs": 1946340,
                                            "posted_last_24h": 41210,
                                            "posted_last_7d": 236904,
                                            "remote_worldwide_jobs": 8597,
                                            "by_country": [
                                                {
                                                    "value": "US",
                                                    "count": 612004
                                                },
                                                {
                                                    "value": "DE",
                                                    "count": 141220
                                                }
                                            ],
                                            "by_workplace": [
                                                {
                                                    "value": "on_site",
                                                    "count": 512003
                                                },
                                                {
                                                    "value": "remote",
                                                    "count": 210554
                                                }
                                            ],
                                            "by_employment_type": [
                                                {
                                                    "value": "FULL_TIME",
                                                    "count": 1210554
                                                }
                                            ],
                                            "by_seniority": [
                                                {
                                                    "value": "mid",
                                                    "count": 701220
                                                },
                                                {
                                                    "value": "senior",
                                                    "count": 402118
                                                }
                                            ],
                                            "by_role_family": [
                                                {
                                                    "value": "software_engineering",
                                                    "count": 121905
                                                }
                                            ],
                                            "unknown": {
                                                "workplace": 1138554,
                                                "seniority": 4973,
                                                "role_family": 50
                                            },
                                            "usage": {
                                                "credits": 1402,
                                                "ai_tokens": 0,
                                                "data_tokens": 1402,
                                                "ai_breakdown": {},
                                                "cached": true
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "description": "The stats object.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "402": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Not enough credits."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "500": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Our error. Not charged."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "502": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`upstream_unavailable`: stats failed. Not charged."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/usage": {
            "get": {
                "operationId": "get_usage",
                "description": "The current credit balance, limits, and the spend of a period by endpoint and by day (UTC). Free. The period spans at most 90 days; the default is the last 30 days.",
                "summary": "Balance and usage",
                "parameters": [
                    {
                        "in": "query",
                        "name": "from",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        },
                        "description": "First day (UTC)."
                    },
                    {
                        "in": "query",
                        "name": "to",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        },
                        "description": "Last day (UTC), default today."
                    }
                ],
                "tags": [
                    "usage"
                ],
                "security": [
                    {
                        "PartnerKey": []
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UsageReport"
                                },
                                "examples": {
                                    "Usage": {
                                        "value": {
                                            "object": "usage",
                                            "partner": "acme",
                                            "environment": "live",
                                            "balance_credits": 28120455,
                                            "rate_limit": {
                                                "per_minute": 60,
                                                "daily_credit_cap": null
                                            },
                                            "period": {
                                                "from": "2026-09-06T00:00:00Z",
                                                "to": "2026-10-05T23:59:59Z"
                                            },
                                            "totals": {
                                                "requests": 1204,
                                                "credits_charged": 1879545,
                                                "ai_tokens": 412880,
                                                "data_tokens": 1466665
                                            },
                                            "by_endpoint": [
                                                {
                                                    "endpoint": "GET /v1/jobs",
                                                    "requests": 980,
                                                    "credits": 1301220
                                                }
                                            ],
                                            "daily": [
                                                {
                                                    "date": "2026-10-05",
                                                    "requests": 41,
                                                    "credits": 60112
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        },
                        "description": "The usage report.",
                        "headers": {
                            "X-Request-Id": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Request id (`req_...`), also in error bodies."
                            },
                            "X-Credits-Charged": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Credits charged for this call (0 on errors)."
                            },
                            "X-Credits-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Balance after this call."
                            },
                            "X-RateLimit-Limit": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests allowed per minute."
                            },
                            "X-RateLimit-Remaining": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Requests left in the current minute."
                            },
                            "X-RateLimit-Reset": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Seconds until the window resets."
                            },
                            "Jobless-Api-Version": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "Major API version (`1`)."
                            }
                        }
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Invalid or unknown parameter."
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Missing, invalid or revoked key."
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Key lacks the scope, partner suspended, or browser call."
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "Rate, concurrency or daily credit limit. See `Retry-After`."
                    },
                    "503": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        },
                        "description": "`unavailable` or `upstream_unavailable` (a dependency is down, or private request tracing could not be ensured). Not charged. Retry shortly."
                    },
                    "default": {
                        "description": "Error envelope. Errors are never charged.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PartnerError"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "AISearchResult": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "list"
                    },
                    "query": {
                        "type": "string"
                    },
                    "interpretation": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Interpretation"
                            }
                        ],
                        "nullable": true
                    },
                    "clarification": {
                        "type": "string",
                        "nullable": true,
                        "description": "Set (and `data` empty) when the query is not a job search."
                    },
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Job"
                        }
                    },
                    "pagination": {
                        "$ref": "#/components/schemas/Pagination"
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "clarification",
                    "data",
                    "interpretation",
                    "pagination",
                    "query",
                    "usage"
                ]
            },
            "AuditCV": {
                "type": "object",
                "properties": {
                    "language": {
                        "type": "string",
                        "nullable": true,
                        "description": "ISO 639-1 code of the CV text."
                    },
                    "parse_quality": {
                        "$ref": "#/components/schemas/ParseQualityEnum"
                    },
                    "years_experience": {
                        "type": "number",
                        "format": "double",
                        "nullable": true
                    }
                },
                "required": [
                    "language",
                    "parse_quality",
                    "years_experience"
                ]
            },
            "AuditFileInputRequest": {
                "type": "object",
                "properties": {
                    "file": {
                        "type": "string",
                        "format": "binary",
                        "description": "The CV as .pdf or .docx, at most 5 MB. PDFs need a text layer."
                    },
                    "target_role": {
                        "type": "string",
                        "minLength": 2,
                        "description": "Judge relevance to this role. Omit to judge against the career the CV implies.",
                        "maxLength": 100
                    },
                    "end_user_ref": {
                        "type": "string",
                        "minLength": 1,
                        "description": "Your reference, echoed back, never stored.",
                        "maxLength": 64
                    }
                },
                "required": [
                    "file"
                ]
            },
            "AuditGap": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string",
                        "nullable": true,
                        "description": "Open enum: the automated check or computed fact this is based on (`summary`, `unquantified`, `weak_opener`, `dates_missing`, `employment_gap`, ...). Null for a reviewer-only observation."
                    },
                    "title": {
                        "type": "string",
                        "maxLength": 80
                    },
                    "detail": {
                        "type": "string",
                        "maxLength": 240
                    },
                    "severity": {
                        "$ref": "#/components/schemas/AuditGapSeverityEnum"
                    },
                    "section": {
                        "$ref": "#/components/schemas/SectionEnum"
                    },
                    "fix": {
                        "type": "string",
                        "description": "One actionable sentence.",
                        "maxLength": 240
                    }
                },
                "required": [
                    "code",
                    "detail",
                    "fix",
                    "section",
                    "severity",
                    "title"
                ]
            },
            "AuditGapSeverityEnum": {
                "enum": [
                    "high",
                    "medium",
                    "low"
                ],
                "type": "string",
                "description": "* `high` - high\n* `medium` - medium\n* `low` - low"
            },
            "AuditRedFlag": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string",
                        "nullable": true,
                        "description": "Open enum, as for gaps."
                    },
                    "title": {
                        "type": "string",
                        "maxLength": 80
                    },
                    "detail": {
                        "type": "string",
                        "maxLength": 240
                    },
                    "severity": {
                        "$ref": "#/components/schemas/AuditRedFlagSeverityEnum"
                    },
                    "section": {
                        "$ref": "#/components/schemas/SectionEnum"
                    },
                    "evidence": {
                        "type": "string",
                        "description": "Verbatim CV text or a computed fact. Never null.",
                        "maxLength": 200
                    }
                },
                "required": [
                    "code",
                    "detail",
                    "evidence",
                    "section",
                    "severity",
                    "title"
                ]
            },
            "AuditRedFlagSeverityEnum": {
                "enum": [
                    "high",
                    "medium"
                ],
                "type": "string",
                "description": "* `high` - high\n* `medium` - medium"
            },
            "AuditStrength": {
                "type": "object",
                "properties": {
                    "title": {
                        "type": "string",
                        "maxLength": 80
                    },
                    "detail": {
                        "type": "string",
                        "maxLength": 240
                    },
                    "evidence": {
                        "type": "string",
                        "nullable": true,
                        "description": "Verbatim CV text, or null.",
                        "maxLength": 200
                    }
                },
                "required": [
                    "detail",
                    "evidence",
                    "title"
                ]
            },
            "AuditTextInputRequest": {
                "type": "object",
                "properties": {
                    "text": {
                        "type": "string",
                        "minLength": 300,
                        "description": "Plain or markdown CV text, 300-40,000 characters.",
                        "maxLength": 40000
                    },
                    "target_role": {
                        "type": "string",
                        "minLength": 2,
                        "maxLength": 100
                    },
                    "end_user_ref": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                    }
                },
                "required": [
                    "text"
                ]
            },
            "BasisEnum": {
                "enum": [
                    "stated",
                    "listed"
                ],
                "type": "string",
                "description": "* `stated` - stated\n* `listed` - listed"
            },
            "Bucket": {
                "type": "object",
                "properties": {
                    "value": {
                        "type": "string"
                    },
                    "count": {
                        "type": "integer"
                    }
                },
                "required": [
                    "count",
                    "value"
                ]
            },
            "CVAudit": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "cv_audit"
                    },
                    "id": {
                        "type": "string",
                        "description": "`aud_...`, not stored: nothing can be fetched by it later."
                    },
                    "end_user_ref": {
                        "type": "string",
                        "nullable": true
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "target_role": {
                        "type": "string",
                        "nullable": true
                    },
                    "score": {
                        "type": "integer",
                        "maximum": 100,
                        "minimum": 0,
                        "description": "Reviewer judgement of shortlist likelihood."
                    },
                    "summary": {
                        "type": "string",
                        "maxLength": 400
                    },
                    "strengths": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AuditStrength"
                        },
                        "description": "1 to 5 items."
                    },
                    "gaps": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AuditGap"
                        },
                        "description": "0 to 6 items, by severity. Fixed by editing or adding."
                    },
                    "red_flags": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/AuditRedFlag"
                        },
                        "description": "0 to 4 items, by severity. Fixed by explaining or correcting."
                    },
                    "cv": {
                        "$ref": "#/components/schemas/AuditCV"
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "created_at",
                    "cv",
                    "end_user_ref",
                    "gaps",
                    "id",
                    "red_flags",
                    "score",
                    "strengths",
                    "summary",
                    "target_role",
                    "usage"
                ]
            },
            "Company": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "logo_url": {
                        "type": "string",
                        "nullable": true,
                        "description": "Signed logo URL on this API (`/logos/{key}?s=...`), free and keyless. Null when we have no logo."
                    },
                    "website": {
                        "type": "string",
                        "nullable": true
                    }
                },
                "required": [
                    "logo_url",
                    "name",
                    "website"
                ]
            },
            "EmploymentTypeEnum": {
                "enum": [
                    "FULL_TIME",
                    "PART_TIME",
                    "CONTRACT",
                    "INTERNSHIP"
                ],
                "type": "string",
                "description": "* `FULL_TIME` - FULL_TIME\n* `PART_TIME` - PART_TIME\n* `CONTRACT` - CONTRACT\n* `INTERNSHIP` - INTERNSHIP"
            },
            "EnvironmentEnum": {
                "enum": [
                    "live",
                    "test"
                ],
                "type": "string",
                "description": "* `live` - live\n* `test` - test"
            },
            "FullCompany": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "logo_url": {
                        "type": "string",
                        "nullable": true,
                        "description": "Signed logo URL on this API (`/logos/{key}?s=...`), free and keyless. Null when we have no logo."
                    },
                    "website": {
                        "type": "string",
                        "nullable": true
                    },
                    "industry": {
                        "type": "string",
                        "nullable": true
                    },
                    "size": {
                        "type": "string",
                        "nullable": true,
                        "description": "Employee count band, e.g. `201-500`."
                    },
                    "founded_year": {
                        "type": "integer",
                        "nullable": true
                    }
                },
                "required": [
                    "founded_year",
                    "industry",
                    "logo_url",
                    "name",
                    "size",
                    "website"
                ]
            },
            "FullJob": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "job"
                    },
                    "id": {
                        "type": "string",
                        "description": "`job_...`. Opaque: do not parse it."
                    },
                    "title": {
                        "type": "string"
                    },
                    "company": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FullCompany"
                            }
                        ],
                        "nullable": true
                    },
                    "location_label": {
                        "type": "string",
                        "nullable": true
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "workplace": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/WorkplaceEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "remote_eligibility": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FullRemoteEligibility"
                            }
                        ],
                        "nullable": true
                    },
                    "employment_type": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/EmploymentTypeEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "seniority": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/SeniorityEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "role_family": {
                        "type": "string",
                        "nullable": true
                    },
                    "role_families": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "At most 15."
                    },
                    "salary": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Salary"
                            }
                        ],
                        "nullable": true
                    },
                    "posted_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    },
                    "posted_at_estimated": {
                        "type": "boolean"
                    },
                    "url": {
                        "type": "string",
                        "description": "The job page on jobless.dev with your attribution."
                    },
                    "summary": {
                        "type": "string",
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "description": "Markdown or plain text, at most 20,000 characters. Apply links and contact details are removed."
                    },
                    "visa_sponsorship": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/VisaSponsorshipEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "relocation_support": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/RelocationSupportEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "status": {
                        "$ref": "#/components/schemas/StatusEnum"
                    }
                },
                "required": [
                    "company",
                    "description",
                    "employment_type",
                    "id",
                    "location_label",
                    "locations",
                    "posted_at",
                    "posted_at_estimated",
                    "relocation_support",
                    "remote_eligibility",
                    "role_families",
                    "role_family",
                    "salary",
                    "seniority",
                    "skills",
                    "status",
                    "summary",
                    "title",
                    "url",
                    "visa_sponsorship",
                    "workplace"
                ]
            },
            "FullJobWithUsage": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "job"
                    },
                    "id": {
                        "type": "string",
                        "description": "`job_...`. Opaque: do not parse it."
                    },
                    "title": {
                        "type": "string"
                    },
                    "company": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FullCompany"
                            }
                        ],
                        "nullable": true
                    },
                    "location_label": {
                        "type": "string",
                        "nullable": true
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "workplace": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/WorkplaceEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "remote_eligibility": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/FullRemoteEligibility"
                            }
                        ],
                        "nullable": true
                    },
                    "employment_type": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/EmploymentTypeEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "seniority": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/SeniorityEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "role_family": {
                        "type": "string",
                        "nullable": true
                    },
                    "role_families": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "At most 15."
                    },
                    "salary": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Salary"
                            }
                        ],
                        "nullable": true
                    },
                    "posted_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    },
                    "posted_at_estimated": {
                        "type": "boolean"
                    },
                    "url": {
                        "type": "string",
                        "description": "The job page on jobless.dev with your attribution."
                    },
                    "summary": {
                        "type": "string",
                        "nullable": true
                    },
                    "description": {
                        "type": "string",
                        "description": "Markdown or plain text, at most 20,000 characters. Apply links and contact details are removed."
                    },
                    "visa_sponsorship": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/VisaSponsorshipEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "relocation_support": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/RelocationSupportEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "status": {
                        "$ref": "#/components/schemas/StatusEnum"
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "company",
                    "description",
                    "employment_type",
                    "id",
                    "location_label",
                    "locations",
                    "posted_at",
                    "posted_at_estimated",
                    "relocation_support",
                    "remote_eligibility",
                    "role_families",
                    "role_family",
                    "salary",
                    "seniority",
                    "skills",
                    "status",
                    "summary",
                    "title",
                    "url",
                    "usage",
                    "visa_sponsorship",
                    "workplace"
                ]
            },
            "FullRemoteEligibility": {
                "type": "object",
                "properties": {
                    "scope": {
                        "$ref": "#/components/schemas/ScopeEnum"
                    },
                    "countries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "ISO 3166-1 alpha-2 codes when scope=countries."
                    },
                    "basis": {
                        "nullable": true,
                        "description": "`stated`: the posting says so. `listed`: inferred from the listed locations.\n\n* `stated` - stated\n* `listed` - listed",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/BasisEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "evidence": {
                        "type": "string",
                        "nullable": true,
                        "description": "Verbatim sentence from the posting, at most 300 characters."
                    }
                },
                "required": [
                    "basis",
                    "countries",
                    "evidence",
                    "scope"
                ]
            },
            "Health": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "health"
                    },
                    "status": {
                        "type": "string"
                    },
                    "api_version": {
                        "type": "string"
                    },
                    "api_enabled": {
                        "type": "boolean"
                    },
                    "ai_enabled": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "ai_enabled",
                    "api_enabled",
                    "api_version",
                    "status"
                ]
            },
            "Interpretation": {
                "type": "object",
                "properties": {
                    "role_family": {
                        "type": "string",
                        "nullable": true
                    },
                    "role_family_label": {
                        "type": "string",
                        "nullable": true
                    },
                    "role_stated": {
                        "type": "boolean",
                        "description": "False when the role was inferred."
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seniority": {
                        "type": "string",
                        "nullable": true
                    },
                    "workplace": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cities": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "excluded_countries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "worldwide": {
                        "type": "boolean"
                    },
                    "posted_within_days": {
                        "type": "integer",
                        "nullable": true
                    },
                    "posted_within_days_stated": {
                        "type": "boolean"
                    },
                    "relaxed": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/RelaxedEnum"
                        },
                        "description": "Filters loosened because too few jobs matched."
                    },
                    "filters": {
                        "type": "object",
                        "additionalProperties": {},
                        "description": "Parameters that replay this search on `GET /jobs`."
                    }
                },
                "required": [
                    "cities",
                    "countries",
                    "excluded_countries",
                    "filters",
                    "posted_within_days",
                    "posted_within_days_stated",
                    "relaxed",
                    "role_family",
                    "role_family_label",
                    "role_stated",
                    "seniority",
                    "skills",
                    "workplace",
                    "worldwide"
                ]
            },
            "Job": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "job"
                    },
                    "id": {
                        "type": "string",
                        "description": "`job_...`. Opaque: do not parse it."
                    },
                    "title": {
                        "type": "string"
                    },
                    "company": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Company"
                            }
                        ],
                        "nullable": true
                    },
                    "location_label": {
                        "type": "string",
                        "nullable": true
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "workplace": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/WorkplaceEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "remote_eligibility": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/RemoteEligibility"
                            }
                        ],
                        "nullable": true,
                        "description": "Who can apply from where. Null unless the job is remote."
                    },
                    "employment_type": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/EmploymentTypeEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "seniority": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/SeniorityEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    },
                    "role_family": {
                        "type": "string",
                        "nullable": true
                    },
                    "role_families": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skills": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "At most 15."
                    },
                    "salary": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Salary"
                            }
                        ],
                        "nullable": true
                    },
                    "posted_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true
                    },
                    "posted_at_estimated": {
                        "type": "boolean"
                    },
                    "url": {
                        "type": "string",
                        "description": "The job page on jobless.dev with your attribution."
                    }
                },
                "required": [
                    "company",
                    "employment_type",
                    "id",
                    "location_label",
                    "locations",
                    "posted_at",
                    "posted_at_estimated",
                    "remote_eligibility",
                    "role_families",
                    "role_family",
                    "salary",
                    "seniority",
                    "skills",
                    "title",
                    "url",
                    "workplace"
                ]
            },
            "JobBatch": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "list"
                    },
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/FullJob"
                        },
                        "description": "Found open jobs, in the requested order. Compact Jobs unless `full=true`."
                    },
                    "missing": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Requested ids that are unknown or closed."
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "data",
                    "missing",
                    "usage"
                ]
            },
            "JobList": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "list"
                    },
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Job"
                        }
                    },
                    "pagination": {
                        "$ref": "#/components/schemas/Pagination"
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "data",
                    "pagination",
                    "usage"
                ]
            },
            "Location": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "nullable": true
                    },
                    "country": {
                        "type": "string",
                        "nullable": true,
                        "description": "ISO 3166-1 alpha-2, or null."
                    }
                },
                "required": [
                    "city",
                    "country"
                ]
            },
            "NullEnum": {
                "enum": [
                    null
                ]
            },
            "Pagination": {
                "type": "object",
                "properties": {
                    "page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer",
                        "nullable": true,
                        "description": "Matching jobs. Null when no honest count exists."
                    },
                    "total_is_capped": {
                        "type": "boolean",
                        "description": "True when `total` is a lower bound."
                    },
                    "max_reachable": {
                        "type": "integer",
                        "description": "Deepest result paging can reach (1,000)."
                    },
                    "has_more": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "has_more",
                    "max_reachable",
                    "page",
                    "per_page",
                    "total",
                    "total_is_capped"
                ]
            },
            "ParseQualityEnum": {
                "enum": [
                    "good",
                    "partial"
                ],
                "type": "string",
                "description": "* `good` - good\n* `partial` - partial"
            },
            "PartnerError": {
                "type": "object",
                "properties": {
                    "error": {
                        "$ref": "#/components/schemas/PartnerErrorDetail"
                    }
                },
                "required": [
                    "error"
                ]
            },
            "PartnerErrorDetail": {
                "type": "object",
                "properties": {
                    "type": {
                        "$ref": "#/components/schemas/TypeEnum"
                    },
                    "code": {
                        "type": "string",
                        "description": "Stable machine-readable code, e.g. `invalid_parameter`."
                    },
                    "message": {
                        "type": "string",
                        "description": "Human-readable explanation. May change."
                    },
                    "param": {
                        "type": "string",
                        "nullable": true,
                        "description": "The offending parameter, if any."
                    },
                    "request_id": {
                        "type": "string",
                        "nullable": true,
                        "description": "Quote this when asking for help."
                    },
                    "doc_url": {
                        "type": "string",
                        "nullable": true
                    }
                },
                "required": [
                    "code",
                    "doc_url",
                    "message",
                    "param",
                    "request_id",
                    "type"
                ]
            },
            "PeriodEnum": {
                "enum": [
                    "hour",
                    "day",
                    "week",
                    "month",
                    "year"
                ],
                "type": "string",
                "description": "* `hour` - hour\n* `day` - day\n* `week` - week\n* `month` - month\n* `year` - year"
            },
            "RelaxedEnum": {
                "enum": [
                    "skill",
                    "seniority",
                    "city",
                    "worldwide",
                    "date"
                ],
                "type": "string",
                "description": "* `skill` - skill\n* `seniority` - seniority\n* `city` - city\n* `worldwide` - worldwide\n* `date` - date"
            },
            "RelocationSupportEnum": {
                "enum": [
                    "offered",
                    "not_offered"
                ],
                "type": "string",
                "description": "* `offered` - offered\n* `not_offered` - not_offered"
            },
            "RemoteEligibility": {
                "type": "object",
                "properties": {
                    "scope": {
                        "$ref": "#/components/schemas/ScopeEnum"
                    },
                    "countries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "ISO 3166-1 alpha-2 codes when scope=countries."
                    },
                    "basis": {
                        "nullable": true,
                        "description": "`stated`: the posting says so. `listed`: inferred from the listed locations.\n\n* `stated` - stated\n* `listed` - listed",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/BasisEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    }
                },
                "required": [
                    "basis",
                    "countries",
                    "scope"
                ]
            },
            "Salary": {
                "type": "object",
                "properties": {
                    "min": {
                        "type": "integer",
                        "nullable": true
                    },
                    "max": {
                        "type": "integer",
                        "nullable": true
                    },
                    "currency": {
                        "type": "string",
                        "nullable": true,
                        "description": "ISO 4217 code."
                    },
                    "period": {
                        "nullable": true,
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/PeriodEnum"
                            },
                            {
                                "$ref": "#/components/schemas/NullEnum"
                            }
                        ]
                    }
                },
                "required": [
                    "currency",
                    "max",
                    "min",
                    "period"
                ]
            },
            "ScopeEnum": {
                "enum": [
                    "worldwide",
                    "countries",
                    "unknown"
                ],
                "type": "string",
                "description": "* `worldwide` - worldwide\n* `countries` - countries\n* `unknown` - unknown"
            },
            "SectionEnum": {
                "enum": [
                    "header",
                    "summary",
                    "experience",
                    "education",
                    "skills",
                    "projects",
                    "certificates",
                    "overall"
                ],
                "type": "string",
                "description": "* `header` - header\n* `summary` - summary\n* `experience` - experience\n* `education` - education\n* `skills` - skills\n* `projects` - projects\n* `certificates` - certificates\n* `overall` - overall"
            },
            "SeniorityEnum": {
                "enum": [
                    "entry",
                    "mid",
                    "senior",
                    "staff",
                    "manager",
                    "director",
                    "executive"
                ],
                "type": "string",
                "description": "* `entry` - entry\n* `mid` - mid\n* `senior` - senior\n* `staff` - staff\n* `manager` - manager\n* `director` - director\n* `executive` - executive"
            },
            "Stats": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "stats"
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "total_jobs": {
                        "type": "integer"
                    },
                    "posted_last_24h": {
                        "type": "integer",
                        "description": "Same count as `GET /jobs?posted_within_days=1` (publication date, from 00:00 UTC of the previous day)."
                    },
                    "posted_last_7d": {
                        "type": "integer",
                        "description": "Same count as `GET /jobs?posted_within_days=7`."
                    },
                    "remote_worldwide_jobs": {
                        "type": "integer"
                    },
                    "by_country": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Bucket"
                        },
                        "description": "Top 50 countries."
                    },
                    "by_workplace": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Bucket"
                        }
                    },
                    "by_employment_type": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Bucket"
                        }
                    },
                    "by_seniority": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Bucket"
                        }
                    },
                    "by_role_family": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Bucket"
                        }
                    },
                    "unknown": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/StatsUnknown"
                            }
                        ],
                        "description": "Jobs with no value for the field."
                    },
                    "usage": {
                        "$ref": "#/components/schemas/Usage"
                    }
                },
                "required": [
                    "by_country",
                    "by_employment_type",
                    "by_role_family",
                    "by_seniority",
                    "by_workplace",
                    "posted_last_24h",
                    "posted_last_7d",
                    "remote_worldwide_jobs",
                    "total_jobs",
                    "unknown",
                    "updated_at",
                    "usage"
                ]
            },
            "StatsUnknown": {
                "type": "object",
                "properties": {
                    "workplace": {
                        "type": "integer"
                    },
                    "seniority": {
                        "type": "integer"
                    },
                    "role_family": {
                        "type": "integer"
                    }
                },
                "required": [
                    "role_family",
                    "seniority",
                    "workplace"
                ]
            },
            "StatusEnum": {
                "enum": [
                    "active"
                ],
                "type": "string",
                "description": "* `active` - active"
            },
            "TypeEnum": {
                "enum": [
                    "invalid_request",
                    "authentication",
                    "permission",
                    "not_found",
                    "conflict",
                    "rate_limit",
                    "billing",
                    "upstream",
                    "internal"
                ],
                "type": "string",
                "description": "* `invalid_request` - invalid_request\n* `authentication` - authentication\n* `permission` - permission\n* `not_found` - not_found\n* `conflict` - conflict\n* `rate_limit` - rate_limit\n* `billing` - billing\n* `upstream` - upstream\n* `internal` - internal"
            },
            "Usage": {
                "type": "object",
                "properties": {
                    "credits": {
                        "type": "integer",
                        "description": "Credits charged for this call."
                    },
                    "ai_tokens": {
                        "type": "integer",
                        "description": "Weighted model tokens spent."
                    },
                    "data_tokens": {
                        "type": "integer",
                        "description": "o200k tokens of the compact JSON body, without `usage`."
                    },
                    "ai_breakdown": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "integer"
                        },
                        "description": "AI tokens by step: `query_plan`, `place_lookup`, `query_embedding`, `cv_parse`, `cv_review`."
                    },
                    "cached": {
                        "type": "boolean",
                        "description": "Served from cache (data tokens only)."
                    }
                },
                "required": [
                    "ai_breakdown",
                    "ai_tokens",
                    "cached",
                    "credits",
                    "data_tokens"
                ]
            },
            "UsageDay": {
                "type": "object",
                "properties": {
                    "date": {
                        "type": "string",
                        "format": "date"
                    },
                    "requests": {
                        "type": "integer"
                    },
                    "credits": {
                        "type": "integer"
                    }
                },
                "required": [
                    "credits",
                    "date",
                    "requests"
                ]
            },
            "UsageEndpoint": {
                "type": "object",
                "properties": {
                    "endpoint": {
                        "type": "string",
                        "description": "e.g. `GET /v1/jobs`."
                    },
                    "requests": {
                        "type": "integer"
                    },
                    "credits": {
                        "type": "integer"
                    }
                },
                "required": [
                    "credits",
                    "endpoint",
                    "requests"
                ]
            },
            "UsagePeriod": {
                "type": "object",
                "properties": {
                    "from": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "to": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "from",
                    "to"
                ]
            },
            "UsageRateLimit": {
                "type": "object",
                "properties": {
                    "per_minute": {
                        "type": "integer"
                    },
                    "daily_credit_cap": {
                        "type": "integer",
                        "nullable": true
                    }
                },
                "required": [
                    "daily_credit_cap",
                    "per_minute"
                ]
            },
            "UsageReport": {
                "type": "object",
                "properties": {
                    "object": {
                        "type": "string",
                        "default": "usage"
                    },
                    "partner": {
                        "type": "string"
                    },
                    "environment": {
                        "$ref": "#/components/schemas/EnvironmentEnum"
                    },
                    "balance_credits": {
                        "type": "integer"
                    },
                    "rate_limit": {
                        "$ref": "#/components/schemas/UsageRateLimit"
                    },
                    "period": {
                        "$ref": "#/components/schemas/UsagePeriod"
                    },
                    "totals": {
                        "$ref": "#/components/schemas/UsageTotals"
                    },
                    "by_endpoint": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UsageEndpoint"
                        }
                    },
                    "daily": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UsageDay"
                        }
                    }
                },
                "required": [
                    "balance_credits",
                    "by_endpoint",
                    "daily",
                    "environment",
                    "partner",
                    "period",
                    "rate_limit",
                    "totals"
                ]
            },
            "UsageTotals": {
                "type": "object",
                "properties": {
                    "requests": {
                        "type": "integer"
                    },
                    "credits_charged": {
                        "type": "integer"
                    },
                    "ai_tokens": {
                        "type": "integer"
                    },
                    "data_tokens": {
                        "type": "integer"
                    }
                },
                "required": [
                    "ai_tokens",
                    "credits_charged",
                    "data_tokens",
                    "requests"
                ]
            },
            "VisaSponsorshipEnum": {
                "enum": [
                    "offered",
                    "not_offered"
                ],
                "type": "string",
                "description": "* `offered` - offered\n* `not_offered` - not_offered"
            },
            "WorkplaceEnum": {
                "enum": [
                    "remote",
                    "hybrid",
                    "on_site"
                ],
                "type": "string",
                "description": "* `remote` - remote\n* `hybrid` - hybrid\n* `on_site` - on_site"
            }
        },
        "securitySchemes": {
            "PartnerKey": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "jl_live_...",
                "description": "Partner API key as `Authorization: Bearer jl_live_...`. `X-API-Key: jl_live_...` is accepted too."
            }
        }
    },
    "tags": [
        {
            "name": "jobs",
            "description": "Filter search, natural-language search, job detail and batch reads."
        },
        {
            "name": "logos",
            "description": "Company logo images. Free, no key."
        },
        {
            "name": "stats",
            "description": "Global index statistics."
        },
        {
            "name": "resumes",
            "description": "Stateless CV audit. Nothing is stored."
        },
        {
            "name": "usage",
            "description": "Balance and spend. Free."
        },
        {
            "name": "health",
            "description": "Liveness. Free, no key."
        }
    ],
    "servers": [
        {
            "url": "https://api.jobless.dev/partners/v1"
        }
    ]
}