Loyalty programs API omits custom fields in GET member response

We recently extended our loyalty member schema to include custom fields for tier preferences and engagement scores. The fields were successfully added through the admin console and appear correctly in the UI. However, when we query member data via the REST API, these custom fields are completely missing from the response.

API call example:


GET /api/loyalty/members/12345
Response: {"id": 12345, "name": "...", "points": 1500}
// Missing: tier_preference, engagement_score

The standard fields (id, name, points, tier) all return correctly, but our three custom fields (tier_preference, engagement_score, preferred_rewards_category) don’t appear at all. We’ve tried adding query parameters like ?fields=all and ?includeCustomFields=true but neither works. This is blocking our personalization engine which relies on these custom attributes. Is there a specific API configuration or metadata refresh needed after extending the schema?

Let me provide a comprehensive solution addressing dynamic schema extension, API metadata refresh, and field visibility configuration.

Dynamic Schema Extension and API Visibility: When you add custom fields to the loyalty member schema, three separate configurations must align for API visibility:

  1. Field-Level Visibility: Each custom field needs “API Accessible” enabled (which you’ve confirmed)
  2. Field Group Assignment: Custom fields must be in an API-exposed field group, not UI-only groups
  3. API Metadata Cache: The API gateway must have the updated schema definition

Verify your field group configuration:

  • Navigate to Admin Console → Loyalty Programs → Schema Management
  • Find your custom fields: tier_preference, engagement_score, preferred_rewards_category
  • Check the “Field Group” column - it should show “Custom Attributes” or “Extended Profile”, not “UI Display Only”
  • If they’re in the wrong group, reassign them to an API-compatible field group

API Metadata Refresh Process: The API gateway caches schema metadata for performance. After schema changes, trigger a manual refresh:

POST /api/v1/admin/loyalty-programs/schema/refresh
Authorization: Bearer {admin_token}
Content-Type: application/json

{"force_reload": true}

The refresh typically completes within 2-3 minutes. You can verify completion by checking the schema version:

GET /api/v1/loyalty-programs/schema/version

The version number should increment after the refresh.

Field Visibility Settings and API Query Parameters: Once the metadata is refreshed, use the correct query parameter to request custom fields. Adobe Experience Cloud uses fieldset rather than fields for extended attributes:

GET /api/loyalty/members/12345?fieldset=extended

Available fieldsets:

  • standard (default) - Returns only built-in fields
  • extended - Includes all API-accessible custom fields
  • complete - Returns everything including metadata

For selective field retrieval, use the fields parameter with explicit custom field names:

GET /api/loyalty/members/12345?fields=id,name,points,tier_preference,engagement_score

Verification Steps:

  1. Confirm field group assignment is correct
  2. Trigger the metadata refresh via admin API
  3. Wait 2-3 minutes for propagation
  4. Test with the extended fieldset parameter
  5. Verify custom fields appear in response

Common Pitfalls to Avoid:

  • Underscore vs Camel Case: API field names might use camelCase (tierPreference) even if you defined them with underscores (tier_preference). Check the schema documentation for the exact field names.

  • Data Type Mismatches: If custom fields have null values for all queried members, they might be omitted from the response by default. Use ?includeNull=true to force their inclusion.

  • Permission Scopes: While you have loyalty_programs:read, custom fields might require loyalty_programs:extended_read. Update your OAuth client scope in Developer Console:

{
  "scopes": [
    "loyalty_programs:read",
    "loyalty_programs:extended_read",
    "loyalty_programs:write"
  ]
}

Testing Custom Field Access:

After implementing the fixes, validate with this test sequence:

# 1. Get schema to verify custom fields are registered
GET /api/v1/loyalty-programs/schema

# 2. Query member with extended fieldset
GET /api/loyalty/members/12345?fieldset=extended

# 3. Verify response includes custom fields
{
  "id": 12345,
  "name": "John Doe",
  "points": 1500,
  "tier": "Gold",
  "tierPreference": "Platinum",
  "engagementScore": 87.5,
  "preferredRewardsCategory": "Travel"
}

If fields still don’t appear after the metadata refresh and correct fieldset parameter, check the API response headers for schema-version. If it hasn’t incremented, the refresh didn’t complete successfully and you may need to contact Adobe Support to manually clear the metadata cache.

For your personalization engine integration, I recommend caching the schema definition locally and refreshing it daily to avoid repeated metadata lookups. This also allows you to validate that custom fields exist before querying member data, preventing null reference errors in your personalization logic.


This draft is based on general Adobe Experience Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

Custom fields in Adobe Experience Cloud require explicit field visibility configuration in the API settings. By default, new custom fields are set to UI-only visibility. You need to go to the loyalty program settings, find your custom fields, and enable “API Accessible” for each field. This is a security feature to prevent accidental exposure of sensitive custom data.

Also check if your API client has the correct permissions scope. Custom field access requires the extended_read permission on the loyalty_programs scope. Your OAuth token might only have basic read access. You can verify this by decoding your access token and checking the scopes claim. If the extended permissions are missing, you’ll need to update your API client configuration in the Developer Console and regenerate your credentials.

I checked the field visibility settings and all three custom fields are marked as “API Accessible”. Our OAuth scope includes loyalty_programs:read and loyalty_programs:write. Is there something else that controls custom field visibility in API responses?

There’s a metadata cache layer in the API gateway that doesn’t automatically refresh when schema changes are made. After adding custom fields, you need to trigger a metadata refresh. This can be done through the admin API or by contacting support. The cache TTL is typically 24 hours, so your fields might appear automatically tomorrow, but the manual refresh is instant. We had the exact same issue last quarter and the metadata refresh solved it immediately.

For the metadata refresh, you can use the admin API endpoint POST /api/admin/loyalty/schema/refresh with admin credentials. This forces the API gateway to reload the schema definition including your custom fields. After the refresh, you might also need to explicitly request custom fields using the fieldset parameter like ?fieldset=extended rather than ?fields=all.

“Confirmed this resolves the missing custom fields issue — refreshing the API metadata cache in Adobe Experience Platform after reassigning fields to an API-exposed field group immediately surfaced them in GET member responses.”

One more thing to check - make sure your custom fields are assigned to the correct field group in the schema. If they’re in a field group that’s marked as “internal only” or “UI display group”, they won’t be exposed via API regardless of the individual field settings. The field group configuration overrides individual field visibility settings.