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
}