{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/noozra/json-schema/noozra-job-schema.json",
  "title": "Job",
  "x-generated": "2026-11-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/noozra-openapi.json#/components/schemas/Job",
  "properties": {
    "apply_url": {
      "description": "Only for an employer's own listing or a job posted on Noozra: where to apply.",
      "format": "uri",
      "type": "string"
    },
    "categories": {
      "description": "Category slugs; [\"any\"] = listed under every category.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "company": {
      "type": "string"
    },
    "country": {
      "description": "ISO 3166-1 alpha-2 when the listing names a country; else null. An employer's listing names one when its location does; listings from other job boards name none.",
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "description": "Only for an employer's own listing (its first 500 characters) or a job posted on Noozra: the employer's own text. A listing from another job board never carries its text; follow `url`.",
      "type": "string"
    },
    "employment_type": {
      "description": "schema.org employmentType, or null when the listing did not say.",
      "enum": [
        "FULL_TIME",
        "PART_TIME",
        "CONTRACTOR",
        "TEMPORARY",
        "INTERN",
        "OTHER",
        null
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "expires_at": {
      "description": "When the listing closes.",
      "format": "date-time",
      "type": "string"
    },
    "from_employer": {
      "description": "Read from the employer's own job board.",
      "type": "boolean"
    },
    "hybrid": {
      "description": "Part on site, part remote. Never true alongside `remote`.",
      "type": "boolean"
    },
    "id": {
      "format": "uuid",
      "type": "string"
    },
    "location": {
      "description": "Where the job is, as the listing says (\"Remote\" for most).",
      "type": "string"
    },
    "noozra_url": {
      "description": "The listing's page on Noozra.",
      "format": "uri",
      "type": "string"
    },
    "posted_at": {
      "format": "date-time",
      "type": "string"
    },
    "remote": {
      "description": "Fully remote.",
      "type": "boolean"
    },
    "salary": {
      "$ref": "#/$defs/JobSalary",
      "description": "Only when the listing gives a salary."
    },
    "source": {
      "description": "Where the listing comes from: \"{Company} careers\" for an employer's own job board, We Work Remotely, RemoteOK, Arbeitnow, or Noozra. Name it when you show the listing.",
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "url": {
      "description": "The original listing; for a job posted on Noozra, its Noozra page. Link to this.",
      "format": "uri",
      "type": "string"
    }
  },
  "required": [
    "id",
    "title",
    "company",
    "location",
    "country",
    "remote",
    "hybrid",
    "employment_type",
    "categories",
    "posted_at",
    "expires_at",
    "source",
    "from_employer",
    "url",
    "noozra_url"
  ],
  "type": "object",
  "$defs": {
    "JobSalary": {
      "properties": {
        "currency": {
          "description": "ISO 4217, such as USD.",
          "type": [
            "string",
            "null"
          ]
        },
        "max": {
          "type": [
            "integer",
            "null"
          ]
        },
        "min": {
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object"
    }
  }
}