{"id":22061,"date":"2026-06-11T12:17:44","date_gmt":"2026-06-11T12:17:44","guid":{"rendered":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/"},"modified":"2026-06-11T12:17:44","modified_gmt":"2026-06-11T12:17:44","slug":"how-to-create-a-custom-job-in-qbcore","status":"publish","type":"post","link":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/","title":{"rendered":"How to Create a Custom Job in QBCore (2026 Guide)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Adding a custom job to your QBCore server comes down to one file: <code>qb-core\/shared\/jobs.lua<\/code>. Once you understand the table structure and how grades map to salaries, you can go from idea to working in-game job in under ten minutes. This guide walks through every field, shows a full worked example, covers whitelisted (allow-listed) jobs, and explains how to apply your changes safely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you are still setting up your server environment, the <a href=\"https:\/\/xgamingserver.com\/docs\/fivem\">XGamingServer FiveM documentation hub<\/a> covers installation, txAdmin configuration, and resource management from the ground up. And if you want a managed host that handles the infrastructure so you can focus on scripts, take a look at our <a href=\"https:\/\/xgamingserver.com\/five-m-server-hosting\">FiveM server hosting plans<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where Jobs Live in QBCore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">All jobs are declared in a single shared Lua file that both the server and client load at startup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>resources\/[qb]\/qb-core\/shared\/jobs.lua<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The file populates the <code>QBShared.Jobs<\/code> table. Every resource on your server that needs to check or assign a job reads from this shared table, so a single edit here propagates everywhere. The key for each entry is the internal job identifier \u2014 a lowercase string with no spaces \u2014 and the value is a table of properties.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Job Table Structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Below is the complete set of top-level fields and what each one controls:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Field<\/th><th>Type<\/th><th>Required<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>label<\/code><\/td><td>string<\/td><td>Yes<\/td><td>Player-facing display name shown in HUD and menus<\/td><\/tr><tr><td><code>type<\/code><\/td><td>string<\/td><td>No<\/td><td>Job category \u2014 e.g. <code>leo<\/code>, <code>ems<\/code>, <code>mechanic<\/code> \u2014 used by resources that branch on job type<\/td><\/tr><tr><td><code>defaultDuty<\/code><\/td><td>boolean<\/td><td>Yes<\/td><td>Whether the player is automatically clocked in on login<\/td><\/tr><tr><td><code>offDutyPay<\/code><\/td><td>boolean<\/td><td>Yes<\/td><td>Whether the paycheck resource pays the player while they are off duty<\/td><\/tr><tr><td><code>grades<\/code><\/td><td>table<\/td><td>Yes<\/td><td>Rank definitions; each entry sets a rank name, salary, and optional boss flag<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Inside <code>grades<\/code>, each entry is keyed by a string or number index starting at <code>0<\/code>. The fields per grade are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong><code>name<\/code><\/strong> \u2014 the rank title shown to the player (e.g. <code>\"Rookie\"<\/code>, <code>\"Supervisor\"<\/code>)<\/li><li><strong><code>payment<\/code><\/strong> \u2014 the salary amount paid each paycheck cycle by the paycheck resource<\/li><li><strong><code>isboss<\/code><\/strong> \u2014 optional boolean; set to <code>true<\/code> on the highest rank to grant management capabilities such as hiring and promoting through job-management UIs like <code>qb-bossmenu<\/code><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Add Your Job to jobs.lua<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open <code>qb-core\/shared\/jobs.lua<\/code> and scroll to the end of the <code>QBShared.Jobs<\/code> table. Add your new job before the closing brace. Here is a complete delivery driver example with four grades:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>['delivery'] = {\n    label        = 'Delivery Driver',\n    type         = 'delivery',\n    defaultDuty  = false,\n    offDutyPay   = false,\n    grades = {\n        ['0'] = { name = 'Trainee',       payment = 50  },\n        ['1'] = { name = 'Driver',        payment = 100 },\n        ['2'] = { name = 'Senior Driver', payment = 150 },\n        ['3'] = { name = 'Dispatcher',    payment = 200, isboss = true },\n    },\n},<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A few rules to avoid silent failures:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>The job key (<code>'delivery'<\/code>) must be unique, lowercase, and contain no spaces or special characters.<\/li><li>Grades must start at <code>0<\/code>. Gaps in the sequence are allowed but can confuse promotion UIs.<\/li><li>Only one grade should carry <code>isboss = true<\/code>; assigning it to multiple grades may cause unexpected behaviour in boss-menu resources.<\/li><li>Save the file with UTF-8 encoding \u2014 a BOM or Windows line endings can break Lua parsing on some hosts.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Restart qb-core to Apply the Change<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because <code>jobs.lua<\/code> is a shared file loaded at resource start, you must restart the <code>qb-core<\/code> resource (or the full server) for your change to take effect. Use any of these methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>txAdmin console<\/strong> \u2014 navigate to Resources, find <code>qb-core<\/code>, and click Restart.<\/li><li><strong>Server console<\/strong> \u2014 type <code>restart qb-core<\/code> and press Enter.<\/li><li><strong>Full server restart<\/strong> \u2014 the safest option on a live server with players, since restarting only <code>qb-core<\/code> mid-session can desync player data in dependent resources.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">After the restart, confirm the job loaded cleanly by checking the server console for Lua errors. If there are syntax mistakes in <code>jobs.lua<\/code>, QBCore will print the line number and stop loading.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Assign the Job to a Player<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Admin command (in-game or console):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/setjob [player_id] [job_name] [grade]\n\n-- Examples:\n\/setjob 1 delivery 0    -- assigns player 1 as Trainee\n\/setjob 2 delivery 3    -- assigns player 2 as Dispatcher (boss)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>\/setjob<\/code> command requires the <code>admin<\/code> permission level. If you need to assign jobs programmatically from a script, use the server-side function below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Assigning Jobs from a Script (Server-Side)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The standard pattern is to retrieve the player object with <code>QBCore.Functions.GetPlayer<\/code>, validate it exists, then call <code>Player.Functions.SetJob<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- In a server-side Lua file of your resource\nlocal QBCore = exports['qb-core']:GetCoreObject()\n\nRegisterNetEvent('myresource:server:assignDelivery', function()\n    local src    = source\n    local Player = QBCore.Functions.GetPlayer(src)\n    if not Player then return end\n\n    -- SetJob(jobName, grade)\n    Player.Functions.SetJob('delivery', 0)\n    TriggerClientEvent('QBCore:Notify', src, 'You have been hired as a Delivery Trainee!', 'success')\nend)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To read a player&#8217;s current job data server-side \u2014 for example to gate a function behind a specific job or grade \u2014 access <code>Player.PlayerData.job<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>local Player = QBCore.Functions.GetPlayer(source)\nif not Player then return end\n\nlocal jobName   = Player.PlayerData.job.name          -- e.g. 'delivery'\nlocal gradeLevel = Player.PlayerData.job.grade.level  -- e.g. 2\nlocal gradeName  = Player.PlayerData.job.grade.name   -- e.g. 'Senior Driver'\nlocal isOnDuty  = Player.PlayerData.job.onduty        -- boolean\nlocal isBoss    = Player.PlayerData.job.isboss        -- boolean\n\nif jobName == 'delivery' and gradeLevel >= 2 then\n    -- senior staff logic\nend<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Whitelisted Jobs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In current QBCore the concept of a &#8220;whitelisted job&#8221; is handled at the application level, not by a flag in <code>jobs.lua<\/code>. The core framework does not expose an <code>isWhitelisted<\/code> field; earlier references to <code>QBCore.Functions.IsWhitelisted<\/code> belong to older versions no longer maintained.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The modern approach is to create a separate allow-list resource or use your server&#8217;s ACE permissions to control who can be hired into sensitive jobs (police, EMS, etc.). Resources like <code>qb-whitelist<\/code> or custom job-application scripts check a database table or Discord role before calling <code>Player.Functions.SetJob<\/code>. The job definition itself in <code>jobs.lua<\/code> is identical whether the job is whitelisted or open \u2014 the restriction lives in the hiring script, not the shared config.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a deeper look at restricting command access and role permissions, the <a href=\"https:\/\/xgamingserver.com\/blog\/fivem-qbcore-admin-commands-guide\/\">QBCore admin commands guide<\/a> covers ACE permission setup alongside the most useful admin commands for day-to-day server management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Paychecks Work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>payment<\/code> value in each grade is the salary amount distributed each cycle by the paycheck resource on your server (commonly a resource such as <code>qb-paycheck<\/code> or a custom replacement). The paycheck resource runs a timed loop server-side; it iterates all connected players, reads <code>Player.PlayerData.job.payment<\/code> (which reflects the grade&#8217;s payment value), and deposits it into the player&#8217;s bank account \u2014 provided the player is on duty or <code>offDutyPay<\/code> is <code>true<\/code> for that job. If you are using a society\/company-funds system, the resource will also check whether the company account can cover the salary before paying out.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The exact interval is set in the paycheck resource&#8217;s config, not in <code>jobs.lua<\/code>. Check that resource&#8217;s config file to tune pay frequency.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting Common Issues<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Job not found after \/setjob<\/strong> \u2014 the job key in <code>jobs.lua<\/code> does not match what you typed. Keys are case-sensitive. Check for a trailing comma on the previous entry if you added mid-table.<\/li><li><strong>Lua syntax error on restart<\/strong> \u2014 open the console and note the line number. Common causes: missing comma after a grade entry, mismatched brackets, or a smart-quote character from copy-paste.<\/li><li><strong>Player not receiving pay<\/strong> \u2014 confirm the player is on duty (<code>\/duty<\/code> toggles duty status), check whether <code>offDutyPay<\/code> is <code>false<\/code>, and verify your paycheck resource is running (<code>ensure qb-paycheck<\/code> or equivalent in <code>server.cfg<\/code>).<\/li><li><strong>isBoss menu not working<\/strong> \u2014 boss-management UIs like <code>qb-bossmenu<\/code> read the <code>isboss<\/code> flag. Confirm the flag is spelled <code>isboss<\/code> (all lowercase) in your grades entry, and that <code>qb-bossmenu<\/code> is ensured in <code>server.cfg<\/code>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For fixing broken resource loading more broadly, see the <a href=\"https:\/\/xgamingserver.com\/blog\/fivem-resource-loading-errors-troubleshooting-guide\/\">FiveM resource loading errors troubleshooting guide<\/a> \u2014 it covers the most common startup failures and how to read the server console output.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need to touch the database to add a job?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No \u2014 the job definition lives entirely in <code>qb-core\/shared\/jobs.lua<\/code. The QBCore framework reads job data from the shared table at runtime. You do not need to insert rows into any database table for the job itself to exist and be assignable. Player job assignments are stored in the database (in the <code>players<\/code> table) when a player&#8217;s job is set, but the job definition does not require a database entry.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I add a job without restarting the entire server?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can restart just the <code>qb-core<\/code> resource via the txAdmin console or by running <code>restart qb-core<\/code> in the server console \u2014 a full server restart is not mandatory. However, on a live server this will briefly disconnect players from the shared data object. If other resources cache job data at their own start, those resources may also need a restart to see the new job. The safest time to make <code>jobs.lua<\/code> edits is during a scheduled maintenance window.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is the difference between defaultDuty and offDutyPay?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>defaultDuty<\/code> controls whether a player spawns into the server already clocked in for this job. Set it to <code>true<\/code> for civilian\/freelance jobs that should always be active, and <code>false<\/code> for uniform jobs (police, EMS) where the player must explicitly clock in. <code>offDutyPay<\/code> is independent \u2014 it controls whether the paycheck resource sends a salary even when <code>onduty<\/code> is <code>false<\/code>. Most whitelisted jobs set both to <code>false<\/code> so that pay only flows when a player is actively working a shift.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Adding a custom job to your QBCore server comes down to one file: qb-core\/shared\/jobs.lua. Once you understand the table structure and how grades map to salaries, you can go from idea to working in-game job in under ten minutes. This guide walks through every field, shows a full worked example, covers whitelisted (allow-listed) jobs, and [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":22046,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gspb_post_css":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[142],"tags":[],"class_list":["post-22061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fivem"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.5 (Yoast SEO v26.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Create a Custom Job in QBCore | 2026 Guide<\/title>\n<meta name=\"description\" content=\"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Create a Custom Job in QBCore (2026 Guide)\" \/>\n<meta property=\"og:description\" content=\"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\" \/>\n<meta property=\"og:site_name\" content=\"XGamingServer\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/web.facebook.com\/xgamingserver69\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-11T12:17:44+00:00\" \/>\n<meta name=\"author\" content=\"Hectar Carson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@xgamingserver\" \/>\n<meta name=\"twitter:site\" content=\"@xgamingserver\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hectar Carson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\"},\"author\":{\"name\":\"Hectar Carson\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/561042c617869348e75abfe16a269f8d\"},\"headline\":\"How to Create a Custom Job in QBCore (2026 Guide)\",\"datePublished\":\"2026-06-11T12:17:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\"},\"wordCount\":1234,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp\",\"articleSection\":[\"FiveM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\",\"url\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\",\"name\":\"How to Create a Custom Job in QBCore | 2026 Guide\",\"isPartOf\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp\",\"datePublished\":\"2026-06-11T12:17:44+00:00\",\"description\":\"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.\",\"breadcrumb\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage\",\"url\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp\",\"contentUrl\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/xgamingserver.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FiveM\",\"item\":\"https:\/\/xgamingserver.com\/blog\/category\/fivem\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Create a Custom Job in QBCore (2026 Guide)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#website\",\"url\":\"https:\/\/xgamingserver.com\/blog\/\",\"name\":\"XGamingServer\",\"description\":\"Dedicated Game Server Hosting\",\"publisher\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/xgamingserver.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#organization\",\"name\":\"XGamingServer\",\"url\":\"https:\/\/xgamingserver.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2020\/09\/logo.svg\",\"contentUrl\":\"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2020\/09\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"XGamingServer\"},\"image\":{\"@id\":\"https:\/\/xgamingserver.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/web.facebook.com\/xgamingserver69\/\",\"https:\/\/x.com\/xgamingserver\",\"https:\/\/www.instagram.com\/xgamingserver\/\",\"https:\/\/www.linkedin.com\/company\/xgamingserver\/\",\"https:\/\/www.pinterest.com\/xgamingserver\/\",\"https:\/\/www.youtube.com\/channel\/UCHnOtWxpzaL2r3jM9Jm40EQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/561042c617869348e75abfe16a269f8d\",\"name\":\"Hectar Carson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1cbcd42dac6c5f21cb52dd64f03fd442250a15f7bb1ade04e23002eb5b384de5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1cbcd42dac6c5f21cb52dd64f03fd442250a15f7bb1ade04e23002eb5b384de5?s=96&d=mm&r=g\",\"caption\":\"Hectar Carson\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Create a Custom Job in QBCore | 2026 Guide","description":"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/","og_locale":"en_US","og_type":"article","og_title":"How to Create a Custom Job in QBCore (2026 Guide)","og_description":"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.","og_url":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/","og_site_name":"XGamingServer","article_publisher":"https:\/\/web.facebook.com\/xgamingserver69\/","article_published_time":"2026-06-11T12:17:44+00:00","author":"Hectar Carson","twitter_card":"summary_large_image","twitter_creator":"@xgamingserver","twitter_site":"@xgamingserver","twitter_misc":{"Written by":"Hectar Carson","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#article","isPartOf":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/"},"author":{"name":"Hectar Carson","@id":"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/561042c617869348e75abfe16a269f8d"},"headline":"How to Create a Custom Job in QBCore (2026 Guide)","datePublished":"2026-06-11T12:17:44+00:00","mainEntityOfPage":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/"},"wordCount":1234,"commentCount":0,"publisher":{"@id":"https:\/\/xgamingserver.com\/blog\/#organization"},"image":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage"},"thumbnailUrl":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp","articleSection":["FiveM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/","url":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/","name":"How to Create a Custom Job in QBCore | 2026 Guide","isPartOf":{"@id":"https:\/\/xgamingserver.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage"},"image":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage"},"thumbnailUrl":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp","datePublished":"2026-06-11T12:17:44+00:00","description":"Step-by-step guide to adding a custom job in QBCore \u2014 shared\/jobs.lua structure, grades, payment, whitelisted jobs, and applying changes without downtime.","breadcrumb":{"@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#primaryimage","url":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp","contentUrl":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/xgamingserver.com\/blog\/how-to-create-a-custom-job-in-qbcore\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/xgamingserver.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FiveM","item":"https:\/\/xgamingserver.com\/blog\/category\/fivem\/"},{"@type":"ListItem","position":3,"name":"How to Create a Custom Job in QBCore (2026 Guide)"}]},{"@type":"WebSite","@id":"https:\/\/xgamingserver.com\/blog\/#website","url":"https:\/\/xgamingserver.com\/blog\/","name":"XGamingServer","description":"Dedicated Game Server Hosting","publisher":{"@id":"https:\/\/xgamingserver.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/xgamingserver.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/xgamingserver.com\/blog\/#organization","name":"XGamingServer","url":"https:\/\/xgamingserver.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/xgamingserver.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2020\/09\/logo.svg","contentUrl":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2020\/09\/logo.svg","width":"1024","height":"1024","caption":"XGamingServer"},"image":{"@id":"https:\/\/xgamingserver.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/web.facebook.com\/xgamingserver69\/","https:\/\/x.com\/xgamingserver","https:\/\/www.instagram.com\/xgamingserver\/","https:\/\/www.linkedin.com\/company\/xgamingserver\/","https:\/\/www.pinterest.com\/xgamingserver\/","https:\/\/www.youtube.com\/channel\/UCHnOtWxpzaL2r3jM9Jm40EQ"]},{"@type":"Person","@id":"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/561042c617869348e75abfe16a269f8d","name":"Hectar Carson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/xgamingserver.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1cbcd42dac6c5f21cb52dd64f03fd442250a15f7bb1ade04e23002eb5b384de5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1cbcd42dac6c5f21cb52dd64f03fd442250a15f7bb1ade04e23002eb5b384de5?s=96&d=mm&r=g","caption":"Hectar Carson"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/xgamingserver.com\/blog\/wp-content\/uploads\/2026\/06\/fivem-2.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/posts\/22061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/comments?post=22061"}],"version-history":[{"count":0,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/posts\/22061\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/media\/22046"}],"wp:attachment":[{"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/media?parent=22061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/categories?post=22061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xgamingserver.com\/blog\/wp-json\/wp\/v2\/tags?post=22061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}