payloadcms/payload · error · APIError

The collection with slug

Error message

The collection with slug ${String(collectionSlug)} can't be found. Find Operation.

What it means

Thrown by the Local API `findDistinct` wrapper in packages/payload/src/collections/operations/local/findDistinct.ts:129 when `payload.findDistinct({ collection, field })` references a slug absent from `payload.collections`. Defaults to HTTP 500. Note the message text reuses 'Find Operation.' (not 'Find Distinct'), which can mislead debugging.

Solutions

  1. Match the slug to the collection config exactly.
  2. Validate the slug via `Object.keys(payload.collections)` before the call.
  3. Ensure `payload.init()` completed.
  4. Drop `as CollectionSlug` casts so the literal union catches typos.

Example fix

// before
await payload.findDistinct({ collection: 'tag', field: 'name' }) // slug is 'tags'

// after
await payload.findDistinct({ collection: 'tags', field: 'name' })
Defensive patterns

Strategy: validation

Validate before calling

function assertCollectionSlug(payload: Payload, slug: string): void {
  if (!(slug in payload.collections)) {
    throw new Error(`Unknown collection slug '${slug}'`)
  }
}
assertCollectionSlug(payload, 'tags')
await payload.findDistinct({ collection: 'tags', field: 'name' })

Type guard

const slugIsRegistered = (payload: Payload, slug: string): slug is CollectionSlug =>
  slug in (payload.collections as Record<string, unknown>)

if (slugIsRegistered(payload, slug)) {
  await payload.findDistinct({ collection: slug, field: 'name' })
}

Try / catch

try {
  await payload.findDistinct({ collection: slug, field })
} catch (err) {
  // NOTE: message says 'Find Operation.' not 'Find Distinct'
  if (err instanceof APIError && /Find Operation/.test(err.message) && field) {
    // likely unknown slug — verify against payload.collections
  } else throw err
}

Prevention

When it happens

Trigger: Calling `payload.findDistinct({ collection: 'tag', field: 'name' })` with a misspelled slug; building a distinct-values endpoint from a config-driven slug that is out of sync; calling before collections are registered.

Common situations: Slug typo; collection renamed; plugin not loaded; `as CollectionSlug` cast on a dynamic slug.

Related errors


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

Appendix: source

Thrown at packages/payload/src/collections/operations/local/findDistinct.ts:129

): Promise<PaginatedDistinctDocs<Record<TField, DataFromCollectionSlug<TSlug>[TField]>>> {
  const {
    collection: collectionSlug,
    depth = 0,
    disableErrors,
    field,
    limit,
    overrideAccess = true,
    page,
    populate,
    showHiddenFields,
    sort,
    trash = false,
    where,
  } = options
  const collection = payload.collections[collectionSlug]

  if (!collection) {
    throw new APIError(
      `The collection with slug ${String(collectionSlug)} can't be found. Find Operation.`,
    )
  }

  return findDistinctOperation({
    collection,
    depth,
    disableErrors,
    field,
    limit,
    overrideAccess,
    page,
    populate,
    req: await createLocalReq(options as CreateLocalReqOptions, payload),
    showHiddenFields,
    sort,
    trash,
    where,

View on GitHub (pinned to 00c58b35c0)