Get all user field histories in a community
List every recorded change to any trader's user field values in your community, newest first, a page at a time.
- Method
- GET
- Path
https://api.returning.ai / v1/ communities/ {communityId}/ user-field-histories - Permission
- userFields
- Retries
- Read-only; exact retries are safe
When to use this
- Reconcile the values your platform wrote in a time window against what Returning.AI recorded.
- Investigate an incident, such as a feed that wrote the wrong value, when you don't yet know which traders or fields it touched.
- Export the recent change log to your own reporting store.
Authentication#
- Header
Authorization: Bearer <API_KEY>- Permission
- userFieldsShown in the dashboard as “User Fields”
Use a Community API key with the userFields permission, and keep it on your server. communityId must be the ID of the community that owns the key.
Behaviour#
The list holds every trader's changes to every field in your community, newest first, so data[0] is the latest change. It includes:
- Changes to your custom fields, such as those made with Update a user field value. Creating a trader with a broker identifier also adds an entry for the identifier field.
- XP and coin changes, as entries for the built-in
total_xpandtotal_coinsfields. Theiractionuses the platform's own labels rather thanoverwrite,increaseanddecrease, andstoredValueis usuallynull. Premium currency changes are not included.
Entries stay after you delete a field. They keep their fieldName and fieldID, and fieldType becomes null.
Request#
Path parameters#
Rule24 hex characters
Eg"66f000000000000000000010"
Query parameters#
Headers#
userFields.RuleBearer <API_KEY>
curl --request GET \
--url 'https://api.returning.ai/v1/communities/66f000000000000000000010/user-field-histories?page=1&limit=50' \
--header 'Authorization: Bearer <API_KEY>'
Response#
A 200 returns one page of entries in data. Branch on the HTTP status and meta.code, never on message. To read everything, start at page=1 and ask for the next page while meta.hasNext is true. Only the first 10,000 entries can be paged to, so for a longer export narrow the read by trader or field. A community with no changes returns 200 with an empty list.
Eg{ ... }
success.Eg"success"
200.Eg200
RuleUSER_FIELD_HISTORIES_LISTED
community on this endpoint.Eg1551
Eg1
Eg50
true when there are more entries after this page. Ask for page + 1.Eg"Read all user field histories api success."
Eg[ ... ]
Eg"66f000000000000000000511"
total_xp and total_coins, their platform user ID as a number instead; use userNumericID to be safe.null when the entry doesn't hold one, which is usual for total_xp and total_coins._id.kycstatus or total_coins.null when the field has since been deleted.increase and decrease the amount. For total_xp and total_coins, the signed change, such as -25.Eg"verified"
null when no value after the change was recorded, which is usual for total_xp and total_coins.overwrite, increase or decrease. For total_xp and total_coins, the platform's own label for the change instead, such as add,api or redeem reward,<product name>.Eg"overwrite"
RuleDate-time
Eg"2026-09-26T08:30:00.000Z"
{
"meta": {
"status": "success",
"statusCode": 200,
"code": "USER_FIELD_HISTORIES_LISTED",
"scope": "community",
"total": 1551,
"page": 1,
"limit": 50,
"hasNext": true
},
"message": "Read all user field histories api success.",
"data": [
{
"_id": "66f000000000000000000511",
"communityID": "66f000000000000000000010",
"userID": "<userObjectId>",
"userObjectID": "<userObjectId>",
"userNumericID": 3247779,
"fieldID": "66f000000000000000000510",
"fieldName": "kycstatus",
"fieldType": "single-line-text",
"value": "verified",
"storedValue": "verified",
"action": "overwrite",
"createdAt": "2026-09-26T08:30:00.000Z",
"updatedAt": "2026-09-26T08:30:00.000Z"
},
{
"_id": "66f000000000000000000601",
"communityID": "66f000000000000000000010",
"userID": 3247779,
"userObjectID": null,
"userNumericID": 3247779,
"fieldID": "66f000000000000000000602",
"fieldName": "total_coins",
"fieldType": "numerical",
"value": -25,
"storedValue": null,
"action": "subtract,api",
"createdAt": "2026-09-26T07:10:00.000Z",
"updatedAt": "2026-09-26T07:10:00.000Z"
}
]
}
Errors#
Every error carries its code in meta.code.
Fix the request04
INVALID_PAGINATIONFix the requestpage or limit isn't a whole number from 1, limit is over 100, or page × limit is over 10,000. detail names the limit and 10,000 rules; a bad page only says Invalid input.AUTHENTICATION_REQUIREDFix the requestAuthorization: Bearer <API_KEY> with a current Community API key.API_KEY_PERMISSION_DENIEDFix the requestuserFields. Add the permission in Settings > Integration > API Keys.API_KEY_COMMUNITY_MISMATCHFix the requestcommunityId is not the community that owns your key, or isn't a valid ID. Use your own community's ID.Fix the data01
COMMUNITY_NOT_FOUNDFix the dataRetry with backoff01
USER_FIELD_OPERATION_FAILEDRetry with backoff{
"meta": {
"status": "error",
"statusCode": 400,
"code": "INVALID_PAGINATION"
},
"message": "Read user field histories api validation error.",
"detail": "Limit must be at most 100",
"solution": "Use integer pagination within the supported window."
}