[{"data":1,"prerenderedAt":842},["ShallowReactive",2],{"/docs/jobs/jobcreator/api/administration-api":3,"/docs/jobs/jobcreator/api/administration-api-surround":829,"/docs/jobs/jobcreator/api/administration-api-implemented-suggestions":841},{"id":4,"title":5,"body":6,"description":818,"extension":819,"head":820,"implementedSuggestions":820,"meta":821,"navigation":822,"path":824,"schemaOrg":820,"seo":825,"sitemap":826,"stem":827,"__hash__":828},"docs/1.docs/0.jobs/6.jobcreator/5.api/4.administration-api.md","Administration API",{"type":7,"value":8,"toc":811},"minimark",[9,29,34,49,54,63,233,240,335,391,398,404,408,415,468,625,631,675,688,700,704,715,764,775,792,807],[10,11,12,13,20,21,24,25,28],"p",{},"Creator's administration UI uses server-side ",[14,15,16],"strong",{},[17,18,19],"code",{},"Sky_Jobs.JobConfigurator"," methods from ",[17,22,23],{},"sky_jobs_base",". They are library methods, not separately named ",[17,26,27],{},"sky_jobcreator"," exports. Use your existing Jobs Base dependency/import loader and wait for its initialization before calling them.",[30,31,33],"h2",{"id":32},"authorized-read-apis","Authorized read APIs",[10,35,36,37,40,41,44,45,48],{},"The following methods require an ",[14,38,39],{},"online, loaded administrator's actual server source"," and ",[17,42,43],{},"sky_jobs_base.jobconfig"," permission. They recheck that actor around yielding work. Passing ",[17,46,47],{},"0",", a character identifier or an actor table does not create console/service-account authority.",[50,51,53],"h3",{"id":52},"getframeworkcatalogsource","GetFrameworkCatalog(source)",[10,55,56,62],{},[14,57,58,59,61],{},"Server · ",[17,60,19],{},"."," Reads the framework jobs/gangs, ranks, management integrations and available editor capabilities. Takes only the acting player's numeric server source.",[64,65,71],"pre",{"className":66,"code":67,"filename":68,"language":69,"meta":70,"style":70},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Sky_Jobs comes from your existing ready Jobs Base dependency loader.\nlocal result = Sky_Jobs.JobConfigurator.GetFrameworkCatalog(player_source)\nif not result.success then\n    print(\"Catalog lookup failed:\", result.error)\n    return\nend\n\nfor _, job in ipairs(result.data.jobs) do\n    print(job.name, job.label)\nend\n","server.lua","lua","",[17,72,73,82,112,131,158,164,170,177,209,228],{"__ignoreMap":70},[74,75,78],"span",{"class":76,"line":77},"line",1,[74,79,81],{"class":80},"sHwdD","-- Sky_Jobs comes from your existing ready Jobs Base dependency loader.\n",[74,83,85,89,93,96,99,103,105,109],{"class":76,"line":84},2,[74,86,88],{"class":87},"sMK4o","local",[74,90,92],{"class":91},"sTEyZ"," result ",[74,94,95],{"class":87},"=",[74,97,98],{"class":91}," Sky_Jobs.",[74,100,102],{"class":101},"sBMFI","JobConfigurator",[74,104,61],{"class":91},[74,106,108],{"class":107},"s2Zo4","GetFrameworkCatalog",[74,110,111],{"class":91},"(player_source)\n",[74,113,115,119,122,125,128],{"class":76,"line":114},3,[74,116,118],{"class":117},"s7zQu","if",[74,120,121],{"class":87}," not",[74,123,124],{"class":91}," result.",[74,126,127],{"class":101},"success",[74,129,130],{"class":117}," then\n",[74,132,134,137,140,143,147,149,152,155],{"class":76,"line":133},4,[74,135,136],{"class":107},"    print",[74,138,139],{"class":91},"(",[74,141,142],{"class":87},"\"",[74,144,146],{"class":145},"sfazB","Catalog lookup failed:",[74,148,142],{"class":87},[74,150,151],{"class":91},", result.",[74,153,154],{"class":101},"error",[74,156,157],{"class":91},")\n",[74,159,161],{"class":76,"line":160},5,[74,162,163],{"class":117},"    return\n",[74,165,167],{"class":76,"line":166},6,[74,168,169],{"class":117},"end\n",[74,171,173],{"class":76,"line":172},7,[74,174,176],{"emptyLinePlaceholder":175},true,"\n",[74,178,180,183,186,189,192,195,198,200,203,206],{"class":76,"line":179},8,[74,181,182],{"class":117},"for",[74,184,185],{"class":91}," _, job ",[74,187,188],{"class":117},"in",[74,190,191],{"class":107}," ipairs",[74,193,194],{"class":91},"(result.",[74,196,197],{"class":101},"data",[74,199,61],{"class":91},[74,201,202],{"class":101},"jobs",[74,204,205],{"class":91},") ",[74,207,208],{"class":117},"do\n",[74,210,212,214,217,220,223,226],{"class":76,"line":211},9,[74,213,136],{"class":107},[74,215,216],{"class":91},"(job.",[74,218,219],{"class":101},"name",[74,221,222],{"class":91},", job.",[74,224,225],{"class":101},"label",[74,227,157],{"class":91},[74,229,231],{"class":76,"line":230},10,[74,232,169],{"class":117},[10,234,235,236,239],{},"Success returns ",[17,237,238],{},"{ success = true, data = { framework, salarySettings, capabilities, jobs, gangs } }",":",[241,242,243,256],"table",{},[244,245,246],"thead",{},[247,248,249,253],"tr",{},[250,251,252],"th",{},"Field",[250,254,255],{},"Meaning",[257,258,259,281,291,324],"tbody",{},[247,260,261,267],{},[262,263,264],"td",{},[17,265,266],{},"framework",[262,268,269,270,273,274,277,278,61],{},"Active framework family, such as ",[17,271,272],{},"esx",", ",[17,275,276],{},"qb"," or ",[17,279,280],{},"qbox",[247,282,283,288],{},[262,284,285],{},[17,286,287],{},"salarySettings",[262,289,290],{},"Current shared salary settings.",[247,292,293,298],{},[262,294,295],{},[17,296,297],{},"capabilities",[262,299,300,301,273,303,273,306,273,309,273,312,273,315,273,318,40,321,61],{},"Supported editor fields: ",[17,302,202],{},[17,304,305],{},"gangs",[17,307,308],{},"jobType",[17,310,311],{},"jobDuty",[17,313,314],{},"whitelisted",[17,316,317],{},"gradeName",[17,319,320],{},"gradeBoss",[17,322,323],{},"gradeBankAuth",[247,325,326,332],{},[262,327,328,273,330],{},[17,329,202],{},[17,331,305],{},[262,333,334],{},"Lists of projected framework entries. ESX returns an empty gangs list.",[10,336,337,338,273,341,273,344,273,346,273,348,273,351,354,355,358,359,362,363,366,367,273,370,273,372,273,374,273,377,380,381,273,384,387,388,61],{},"An entry includes ",[17,339,340],{},"id",[17,342,343],{},"kind",[17,345,219],{},[17,347,225],{},[17,349,350],{},"grades",[17,352,353],{},"integrations",", editor capability/error fields, ",[17,356,357],{},"nativePresent"," and an available ",[17,360,361],{},"memberCount",". Its optional ",[17,364,365],{},"provisioning"," reports managed activation state. Grades include their actual numeric ",[17,368,369],{},"grade",[17,371,219],{},[17,373,225],{},[17,375,376],{},"salary",[17,378,379],{},"salarySource"," and available leadership flags. Integrations identify the owning ",[17,382,383],{},"group",[17,385,386],{},"resource"," and available ",[17,389,390],{},"configKey",[10,392,393,394,397],{},"A ",[17,395,396],{},"forbidden"," result has no usable catalog. Return only the fields needed by your authorized consumer.",[10,399,400,401,403],{},"Capability and activation fields are observations, not permission grants or a guarantee that a later mutation will succeed. Read the current catalog instead of assuming that every native job is Creator-managed or ready for editing. Preserve each grade's numeric ",[17,402,369],{}," value.",[50,405,407],{"id":406},"getframeworkoverviewsource-request","GetFrameworkOverview(source, request)",[10,409,410,414],{},[14,411,58,412,61],{},[17,413,19],{}," Reads administrative invoice aggregates, online job counts and optional selected-job rank counts.",[241,416,417,426],{},[244,418,419],{},[247,420,421,424],{},[250,422,423],{},"Parameter",[250,425,255],{},[257,427,428,438,458],{},[247,429,430,435],{},[262,431,432],{},[17,433,434],{},"source",[262,436,437],{},"Acting loaded administrator's numeric player server source.",[247,439,440,445],{},[262,441,442],{},[17,443,444],{},"request.days",[262,446,447,448,450,451,277,454,457],{},"Required number: ",[17,449,47],{}," for all dates, ",[17,452,453],{},"7",[17,455,456],{},"30"," for the recent issue-date range.",[247,459,460,465],{},[262,461,462],{},[17,463,464],{},"request.name",[262,466,467],{},"Optional technical job key, maximum 50 characters; lowercase letter first, then lowercase letters, digits or underscores. Filters invoices and includes that job's member counts per grade.",[64,469,471],{"className":66,"code":470,"filename":68,"language":69,"meta":70,"style":70},"local result = Sky_Jobs.JobConfigurator.GetFrameworkOverview(player_source, {\n    days = 30,\n    name = \"redwood_timber\",\n})\nif not result.success then\n    print(\"Overview lookup failed:\", result.error)\n    return\nend\n\nfor _, invoice_summary in ipairs(result.data.invoices) do\n    print(invoice_summary.job, invoice_summary.currency, invoice_summary.outstanding)\nend\n",[17,472,473,493,507,524,529,541,560,564,568,572,596,620],{"__ignoreMap":70},[74,474,475,477,479,481,483,485,487,490],{"class":76,"line":77},[74,476,88],{"class":87},[74,478,92],{"class":91},[74,480,95],{"class":87},[74,482,98],{"class":91},[74,484,102],{"class":101},[74,486,61],{"class":91},[74,488,489],{"class":107},"GetFrameworkOverview",[74,491,492],{"class":91},"(player_source, {\n",[74,494,495,498,500,504],{"class":76,"line":84},[74,496,497],{"class":91},"    days ",[74,499,95],{"class":87},[74,501,503],{"class":502},"sbssI"," 30",[74,505,506],{"class":91},",\n",[74,508,509,512,514,517,520,522],{"class":76,"line":114},[74,510,511],{"class":91},"    name ",[74,513,95],{"class":87},[74,515,516],{"class":87}," \"",[74,518,519],{"class":145},"redwood_timber",[74,521,142],{"class":87},[74,523,506],{"class":91},[74,525,526],{"class":76,"line":133},[74,527,528],{"class":91},"})\n",[74,530,531,533,535,537,539],{"class":76,"line":160},[74,532,118],{"class":117},[74,534,121],{"class":87},[74,536,124],{"class":91},[74,538,127],{"class":101},[74,540,130],{"class":117},[74,542,543,545,547,549,552,554,556,558],{"class":76,"line":166},[74,544,136],{"class":107},[74,546,139],{"class":91},[74,548,142],{"class":87},[74,550,551],{"class":145},"Overview lookup failed:",[74,553,142],{"class":87},[74,555,151],{"class":91},[74,557,154],{"class":101},[74,559,157],{"class":91},[74,561,562],{"class":76,"line":172},[74,563,163],{"class":117},[74,565,566],{"class":76,"line":179},[74,567,169],{"class":117},[74,569,570],{"class":76,"line":211},[74,571,176],{"emptyLinePlaceholder":175},[74,573,574,576,579,581,583,585,587,589,592,594],{"class":76,"line":230},[74,575,182],{"class":117},[74,577,578],{"class":91}," _, invoice_summary ",[74,580,188],{"class":117},[74,582,191],{"class":107},[74,584,194],{"class":91},[74,586,197],{"class":101},[74,588,61],{"class":91},[74,590,591],{"class":101},"invoices",[74,593,205],{"class":91},[74,595,208],{"class":117},[74,597,599,601,604,607,610,613,615,618],{"class":76,"line":598},11,[74,600,136],{"class":107},[74,602,603],{"class":91},"(invoice_summary.",[74,605,606],{"class":101},"job",[74,608,609],{"class":91},", invoice_summary.",[74,611,612],{"class":101},"currency",[74,614,609],{"class":91},[74,616,617],{"class":101},"outstanding",[74,619,157],{"class":91},[74,621,623],{"class":76,"line":622},12,[74,624,169],{"class":117},[10,626,627,628,239],{},"The example job key is fictional; use an existing local job. Success returns ",[17,629,630],{},"{ success = true, data = { observedAt, invoices, online, grades? } }",[632,633,634,641,664,670],"ul",{},[635,636,637,640],"li",{},[17,638,639],{},"observedAt",": Unix observation timestamp.",[635,642,643,645,646,273,648,273,650,273,653,273,656,273,659,40,661,61],{},[17,644,591],{},": society-issued Sky invoices, grouped by job and currency. Each row has ",[17,647,606],{},[17,649,612],{},[17,651,652],{},"issued",[17,654,655],{},"billed",[17,657,658],{},"paid",[17,660,617],{},[17,662,663],{},"cancelled",[635,665,666,669],{},[17,667,668],{},"online",": online-character counts keyed by current primary job, folding registered off-duty aliases into their on-duty job. This is not a count of all secondary memberships.",[635,671,672,674],{},[17,673,350],{},": member counts keyed by stringified grade number, present when a job was selected.",[10,676,677,678,681,682,684,685,687],{},"The date filter uses ",[14,679,680],{},"invoice issue date",", not payment date. ",[17,683,658],{}," includes the amount currently paid in installments; ",[17,686,617],{}," counts remaining amounts on open/processing invoices. These are not society balances or a complete income ledger. Counts and SQL aggregates are sequential observations, not one atomic snapshot.",[10,689,690,691,273,693,40,696,699],{},"Failures include ",[17,692,396],{},[17,694,695],{},"invalid_payload",[17,697,698],{},"load_failed","; selected-job member lookup failures can also be returned. Do not render a failed lookup as an empty, successful statistics result.",[30,701,703],{"id":702},"administrator-mutations-and-internal-transport","Administrator mutations and internal transport",[10,705,706,707,710,711,714],{},"The UI's ",[17,708,709],{},"sky_jobcreator:*"," callbacks cover catalog/overview, definitions and grades, members, salary, provisioning, lifecycle/rename, settings, Hub and migration. The ",[17,712,713],{},"jobConfigurator:*"," NUI handlers forward allowed profile operations to Jobs Base. They are internal transports for the supplied administrator workflow; they are not a public REST API or a stable substitute for the documented exports.",[241,716,717,727],{},[244,718,719],{},[247,720,721,724],{},[250,722,723],{},"Area",[250,725,726],{},"Authority and recovery",[257,728,729,737,745,756],{},[247,730,731,734],{},[262,732,733],{},"Definitions, grades and provisioning",[262,735,736],{},"Jobs Base's configurator validates the administrator, framework capability, existing ownership, grade/member mappings and provider state. Sky Base owns durable managed definitions.",[247,738,739,742],{},[262,740,741],{},"Settings and locations",[262,743,744],{},"Jobs Base owns the saved configurator profile; Creator forwards only profiles from the current catalog and its permitted shared-settings scope.",[247,746,747,750],{},[262,748,749],{},"Community Hub",[262,751,752,753,755],{},"Creator checks both Creator command access and ",[17,754,43],{},", retains the actor identity and sends requests through the server-owned Community Hub bridge.",[247,757,758,761],{},[262,759,760],{},"Migration",[262,762,763],{},"The server validates the administrator and source inventory; the run ledger owns progress and recovery. Use the supplied migration screen to inspect or resume a run.",[10,765,766,767,770,771,774],{},"Opening the UI is not an authorization step: ",[17,768,769],{},"/jobcreator"," checks Creator command access, while each owner operation enforces its own access. The client event ",[17,772,773],{},"sky_jobcreator:open"," is an internal server-to-client instruction; it is not a client export or a shortcut for granting editor access.",[10,776,777,778,781,782,273,785,40,788,791],{},"For a mutation, a timeout or disconnected client can mean ",[14,779,780],{},"the result is unknown",". Creator transports distinguish outcomes such as ",[17,783,784],{},"hub_result_unknown",[17,786,787],{},"member_result_unknown",[17,789,790],{},"lifecycle_result_unknown",". Reopen the existing record/run and inspect its current state before retrying. Do not resubmit creation, payments, Hub publication or migration because a reply was lost.",[10,793,794,795,273,799,40,803,806],{},"Use ",[796,797,749],"a",{"href":798},"/docs/jobs/jobcreator/features/community-hub",[796,800,802],{"href":801},"/docs/jobs/jobcreator/features/farming","Farming",[796,804,760],{"href":805},"/docs/jobs/jobcreator/migration"," for the supported user workflows. Keep Hub credentials, private migration backups, account observations and audit identities server-side.",[808,809,810],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":70,"searchDepth":77,"depth":84,"links":812},[813,817],{"id":32,"depth":84,"text":33,"children":814},[815,816],{"id":52,"depth":114,"text":53},{"id":406,"depth":114,"text":407},{"id":702,"depth":84,"text":703},"Read authorized catalog and statistics data and understand the boundary around Creator's internal administration callbacks.","md",null,{},{"icon":823},"i-lucide-shield-check","/docs/jobs/jobcreator/api/administration-api",{"title":5,"description":818},{"loc":824},"1.docs/0.jobs/6.jobcreator/5.api/4.administration-api","0WintlgkPIS5CNgmYOHcaebLW9YZvagyjlIY9zto104",[830,836],{"title":831,"path":832,"stem":833,"description":834,"icon":835,"children":-1},"Shared Job APIs","/docs/jobs/jobcreator/api/shared-job-apis","1.docs/0.jobs/6.jobcreator/5.api/3.shared-job-apis","Connect Creator jobs to Jobs Base duty, employees, salary, garage, business and tablet APIs.","i-lucide-blocks",{"title":837,"path":838,"stem":839,"description":840,"children":-1},"Changelog","/docs/jobs/jobcreator/changelog","1.docs/0.jobs/6.jobcreator/9.changelog","Publication status and future update notes for the Job Creator beta.",[],1792510352774]