Get user field histories for a specific field
List every recorded change to one user field across all your traders, newest first, a page at a time.
- Method
- GET
- Path
https://api.returning.ai / v1/ communities/ {communityId}/ user-fields/ {fieldIdOrName}/ histories - Permission
- userFields
- Retries
- Read-only; exact retries are safe
When to use this
- Check which traders a feed updated for one field, such as every KYC status change today.
- Audit a field before you change its type or delete it, to see how it's being written.
- Follow XP or coin changes across your community by reading
total_xportotal_coins.
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#
Each change to any trader's value for the field adds one entry, and the newest entry comes first. Its storedValue is that trader's value after the change; for numerical fields it is the running total.
Entries are tied to the field's _id. Once you delete a field its history can't be read here, and a new field created with the same key starts with an empty history. The old entries still appear in Get all user field histories in a community.
For the built-in total_xp and total_coins fields, the list holds every trader's XP or coin changes instead. action uses the platform's own labels rather than overwrite, increase and decrease, and storedValue is usually null. Premium currency changes are not included in total_coins.
Request#
Path parameters#
Rule24 hex characters
Eg"66f000000000000000000010"
_id. Capitals and spaces are cleaned up as on create, so KYCStatus finds kycstatus.RuleField key or 24-character ID
Eg"kycstatus"
Query parameters#
Headers#
userFields.RuleBearer <API_KEY>
curl --request GET \
--url 'https://api.returning.ai/v1/communities/66f000000000000000000010/user-fields/kycstatus/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. A field with no changes returns 200 with an empty list, not 404.
Eg{ ... }
success.Eg"success"
200.Eg200
RuleUSER_FIELD_HISTORIES_LISTED
field on this endpoint.Eg2
Eg1
Eg50
true when there are more entries after this page. Ask for page + 1.Eg"Read user field histories for specific user field 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.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 adjust xps,api or add,api.Eg"overwrite"
RuleDate-time
Eg"2026-09-26T08:30:00.000Z"
{
"meta": {
"status": "success",
"statusCode": 200,
"code": "USER_FIELD_HISTORIES_LISTED",
"scope": "field",
"total": 2,
"page": 1,
"limit": 50,
"hasNext": false
},
"message": "Read user field histories for specific user field 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": "66f000000000000000000512",
"communityID": "66f000000000000000000010",
"userID": "<userObjectId>",
"userObjectID": "<userObjectId>",
"userNumericID": 3247779,
"fieldID": "66f000000000000000000510",
"fieldName": "kycstatus",
"fieldType": "single-line-text",
"value": "pending",
"storedValue": "pending",
"action": "overwrite",
"createdAt": "2026-09-20T10:05:00.000Z",
"updatedAt": "2026-09-20T10:05:00.000Z"
}
]
}
Errors#
Every error carries its code in meta.code. A 404 USER_FIELD_NOT_FOUND means the field doesn't exist now; it isn't an empty history.
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 data02
USER_FIELD_NOT_FOUNDFix the datameta.fieldIdOrName echoes what you sent.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."
}