{"record":{"id":"85bd907f3a3d7de8","repo":"vercel/next.js","slug":"invalid-profile-provided-profile-must-be-conf","errorCode":null,"errorMessage":"Invalid profile provided \"${profile}\" must be configured under cacheLife in next.config or be \"max\"","messagePattern":"Invalid profile provided \"(.+?)\" must be configured under cacheLife in next\\.config or be \"max\"","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/next/src/server/revalidation-utils.ts","lineNumber":155,"sourceCode":"  // Process each profile group\n  for (const [profile, tagsForProfile] of tagsByProfile) {\n    // Look up the cache profile from workStore if available\n    let durations: { expire?: number } | undefined\n\n    if (profile) {\n      let cacheLife:\n        | { stale?: number; revalidate?: number; expire?: number }\n        | undefined\n\n      if (typeof profile === 'object') {\n        // Profile is already a cacheLife configuration object\n        cacheLife = profile\n      } else if (typeof profile === 'string') {\n        // Profile is a string key, look it up in workStore\n        cacheLife = workStore?.cacheLifeProfiles[profile]\n\n        if (!cacheLife) {\n          throw new Error(\n            `Invalid profile provided \"${profile}\" must be configured under cacheLife in next.config or be \"max\"`\n          )\n        }\n      }\n\n      if (cacheLife) {\n        durations = {\n          expire: cacheLife.expire,\n        }\n      }\n    }\n    // If profile is not found and not 'max', durations will be undefined\n    // which will trigger immediate expiration in the cache handler\n\n    for (const handler of handlers || []) {\n      if (profile) {\n        promises.push(handler.updateTags?.(tagsForProfile, durations))\n      } else {","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/vercel/next.js/blob/0eb377541648e63402a47b38fee00a8d0ce8f8f1/packages/next/src/server/revalidation-utils.ts#L137-L173","documentation":"Profile lookup in revalidateTags: a cacheLife profile name attached to revalidated tags is neither a key in the configured cacheLife profiles in next.config nor the built-in \"max\". The faulting input is the profile string used with cacheLife()/tagged revalidation; without a resolvable profile the expire duration for those tags is unknown.","triggerScenarios":"A revalidate/cacheLife profile name is not configured.","commonSituations":"Using a cacheLife profile string not defined under cacheLife in next.config and not 'max'.","solutions":["Configure the profile under cacheLife in next.config.js, or use the built-in \"max\" profile."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0eb377541648e63402a47b38fee00a8d0ce8f8f1","analyzedAt":"2026-08-19T02:10:13.922Z","contentChangedAt":"2026-08-19T02:10:13.922Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}