grant_job_external_publication

Permit a job posting's internet listing

All MCP toolsWrite

Permit the internet listing of a market-published job posting. Passes under the connection's scopes — the same act as the list-on-the-internet button on the employer app; the permission is attributed to this credential. This permission is separate from market publication (publish_job_posting): the market shows a published posting to signed-in candidates; the internet listing additionally lets search engines and the public URL reach people who have not registered. Readiness does not block saving: a posting whose content falls short of the disclosure items is judged short at read time and stays off the public face until update_job_posting completes it — check get_job_external_publication's readiness before and after. A posting that is not market-published refuses (job_not_published). originalPublishedAt is the date the employer first listed the role and validThrough is the application deadline — both the employer's own statements, never derived from the market publication time; once recorded, originalPublishedAt cannot change (original_date_changed), and a renewal sends the stored value with a new validThrough. Use the version from get_job_external_publication as expectedPermissionVersion and the version from get_job_posting as expectedPostingVersion — a stale value refuses with a version conflict naming the axis (permission or posting) with the expected and latest versions; re-read and retry. Granting the permission that is already stored is a no-op (changed: false, no version bump).

Input schema

{
  "type": "object",
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "The market-published job to list on the internet (jobs.id)."
    },
    "expectedPermissionVersion": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2147483647,
      "description": "The permission version you loaded (0 for a job never granted)."
    },
    "expectedPostingVersion": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647,
      "description": "The posting version you loaded — the content the permission is granted for."
    },
    "originalPublishedAt": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "The employer's original listing date of this role (ISO 8601 with offset); must be in the past and, once stored, unchanged."
    },
    "validThrough": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "The application deadline (ISO 8601 with offset); must be in the future. The listing expires at this instant."
    }
  },
  "required": [
    "jobId",
    "expectedPermissionVersion",
    "expectedPostingVersion",
    "originalPublishedAt",
    "validThrough"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output schema

{
  "type": "object",
  "properties": {
    "changed": {
      "type": "boolean",
      "description": "False when the stored permission already equalled the request: no version bump, no history row."
    },
    "permission": {
      "type": "object",
      "properties": {
        "jobId": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "mode": {
          "type": "string",
          "enum": [
            "market-only",
            "indexable"
          ],
          "description": "\"indexable\" = the employer permits the internet listing; \"market-only\" = not permitted (the default of every job)."
        },
        "version": {
          "type": "integer",
          "minimum": 0,
          "maximum": 2147483647,
          "description": "The permission's own version — pass as expectedPermissionVersion on the next write."
        },
        "permissionStatus": {
          "type": "string",
          "enum": [
            "not-permitted",
            "permitted",
            "expired"
          ],
          "description": "\"permitted\" = mode indexable and validThrough still ahead; \"expired\" = permitted but validThrough passed (renew the deadline to list again); \"not-permitted\" otherwise."
        },
        "policyVersion": {
          "anyOf": [
            {
              "type": "number",
              "const": 1
            },
            {
              "type": "null"
            }
          ],
          "description": "The disclosure policy version the permission was granted under; null until granted."
        },
        "originalPublishedAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "The employer's stated original listing date (ISO 8601, UTC); retained across renewals."
        },
        "validThrough": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "The application deadline the employer stated (ISO 8601, UTC); the listing expires at this instant."
        },
        "firstPublishedAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "When the public face first went live (ISO 8601, UTC); null until the first delivery."
        },
        "contentUpdatedAt": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "When the public face last reflected a content change (ISO 8601, UTC); null until the first delivery."
        },
        "stopReason": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "withdrawn"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "\"withdrawn\" after withdraw_job_external_publication; null otherwise."
        },
        "evaluatedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
          "description": "The database instant permissionStatus was judged at (ISO 8601, UTC)."
        }
      },
      "required": [
        "jobId",
        "mode",
        "version",
        "permissionStatus",
        "policyVersion",
        "originalPublishedAt",
        "validThrough",
        "firstPublishedAt",
        "contentUpdatedAt",
        "stopReason",
        "evaluatedAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "changed",
    "permission"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

On this page