payloadcms/payload · error · APIError

The global with slug

Error message

The global with slug ${String(globalSlug)} can't be found.

What it means

Thrown by updateGlobalLocal (payload.updateGlobal) when globalSlug is not in payload.globals.config. Guard before delegating to updateOperation.

Solutions

  1. Validate the slug against payload.globals.config before calling.
  2. Use typed GlobalSlug at every update call site.
  3. Run a grep pass after renaming a global.
  4. Ensure payload.init() has resolved.

Example fix

// before
await payload.updateGlobal({ slug: 'seettings', data })

// after
if (!payload.globals.config.some(g => g.slug === slug)) {
  throw new Error(`Unknown global slug: ${slug}`)
}
await payload.updateGlobal({ slug, data })
Defensive patterns

Strategy: validation

Validate before calling

if (!payload.globals.config.some((g) => g.slug === slug)) {
  throw new Error(`Unknown global: ${slug}`)
}

Type guard

function isGlobalSlug(payload: Payload, slug: string): slug is GlobalSlug {
  return payload.globals.config.some((g) => g.slug === slug)
}

Try / catch

try {
  await payload.updateGlobal({ slug, data })
} catch (err) {
  if (err instanceof APIError && /can't be found/.test(err.message)) return null
  throw err
}

Prevention

When it happens

Trigger: Calling payload.updateGlobal({ slug: 'mistyped', data }) with an unregistered slug.

Common situations: Slug typo; renamed global; programmatic update with a slug from untrusted/dynamic input; calling before init.

Related errors


AI-assisted analysis of payloadcms/payload@00c58b35c0 (2026-08-12). Data as JSON: /api/errors/f9cba77e72f09658. Report an issue: GitHub.

Appendix: source

Thrown at packages/payload/src/globals/operations/local/update.ts:131

): Promise<TransformGlobalWithSelect<TSlug, TSelect>> {
  const {
    slug: globalSlug,
    data,
    depth,
    draft,
    overrideAccess = true,
    overrideLock,
    populate,
    publishAllLocales,
    select,
    showHiddenFields,
    unpublishAllLocales,
  } = options

  const globalConfig = payload.globals.config.find((config) => config.slug === globalSlug)

  if (!globalConfig) {
    throw new APIError(`The global with slug ${String(globalSlug)} can't be found.`)
  }

  return updateOperation<TSlug, TSelect>({
    slug: globalSlug as string,
    data: deepCopyObjectSimple(data), // Ensure mutation of data in create operation hooks doesn't affect the original data
    depth,
    draft,
    globalConfig,
    overrideAccess,
    overrideLock,
    populate,
    publishAllLocales,
    req: await createLocalReq(options as CreateLocalReqOptions, payload),
    select,
    showHiddenFields,
    unpublishAllLocales,
  })
}

View on GitHub (pinned to 00c58b35c0)