Messenger error 2018247: Insufficient permission to access user profile
Last verified against Meta for Developers - Messenger Platform error codes
Insufficient permission to access user profile.What error 2018247 means
Code 2018247 comes from the User Profile API, the endpoint bots call as GET /PSID?fields=first_name,last_name,profile_pic to personalize conversations. Meta's error-codes table explains it directly: "The app calling the User Profile API has not been granted the permissions needed to access one or more of the requested fields." The request shape is fine and the PSID resolves; at least one field in your fields list is beyond what the app may read.
The field tiers are the whole story. Basic profile fields, name and profile picture, are available to apps with ordinary messaging access. The extended fields (locale, timezone, gender) require additional approval, and Meta has repeatedly narrowed them over the years; requests written against older docs routinely over-ask. The failure is all-or-nothing for the call, so one ambitious field takes down the fetch of the harmless ones with it.
Two neighbors are worth separating: 2018218 ("no profile available for this user") means the person's account type cannot be profiled at all, notably Messenger accounts created with a phone number, while 2018247 means your app cannot ask for what it asked. And bare code 10 covers profile calls the app may not make at all. A bot should treat all three as degradable: profile data is decoration, and a fetch failure should never block the reply.
What it looks like
{
"error": {
"message": "(#2018247) Insufficient permission to access user profile.",
"type": "OAuthException",
"code": 2018247,
"fbtrace_id": "BLBz/WZt8dN"
}
}Why it happens
- Requesting extended profile fields (locale, timezone, gender) without the corresponding approved permission.
- Field lists copied from outdated tutorials that predate Meta's profile-field restrictions.
- App Review granted for messaging but not for the additional profile-field features.
- A token from an app with narrower grants deployed into a bot that requests wider fields.
- Blanket fields=... requests instead of the minimal set the product actually renders.
How to fix Messenger error 2018247
- 1Reduce the request to first_name,last_name,profile_pic and confirm it succeeds.
- 2Re-add fields one at a time to identify the offender, then either drop it or apply for the permission that unlocks it.
- 3Check the App Dashboard's Permissions & Features for the profile-related features and their review status.
- 4Wrap the profile fetch in graceful degradation: on any error, proceed with a generic salutation.
- 5Cache successful profiles per PSID to cut both error exposure and rate-limit spend.
How to stop it recurring
Request the minimum field set your UI actually uses, and encode it in one shared constant so a single change updates every call site. Treat profile data as optional enrichment with a fallback path, and audit the field list whenever Meta announces profile-API changes. The profile API's availability rules sit in the Messenger limits reference, and the wider permission chain in the troubleshooting guide.
Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.
Related codes
Error 2018247 - quick answers
What does Messenger error 2018247 mean?
Code 2018247 comes from the User Profile API, the endpoint bots call as GET /PSID?fields=first_name,last_name,profile_pic to personalize conversations.
How do I fix Messenger error 2018247?
1. Reduce the request to first_name,last_name,profile_pic and confirm it succeeds. 2. Re-add fields one at a time to identify the offender, then either drop it or apply for the permission that unlocks it. 3. Check the App Dashboard's Permissions & Features for the profile-related features and their review status. 4. Wrap the profile fetch in graceful degradation: on any error, proceed with a generic salutation. 5. Cache successful profiles per PSID to cut both error…
Stop debugging Messenger by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.