objectChangeHistory query. One query works for all four object types, and the event shape is the same for each. Only the events differ.
Activity history records actions on the object, not reads or spend.Revealing card details, viewing balances, and listing objects aren’t recorded. Neither are card transactions, authorizations, or refunds. To read spend, use Transaction activity.
Supported objects
Query activity history
objectChangeHistory
Returns the newest events first, up to 50 per object.
Required scope: VIEW_OBJECT_CHANGE_HISTORY
Prerequisites: the
VIEW_OBJECT_CHANGE_HISTORY scope enabled on your application. The query accepts both Bearer (a user access token that carries the scope) and Basic (<API_KEY>) authentication. The object must belong to the account the credentials act on.Arguments
Sample query
cURL example
Sample response
A card that an authorized user asked to unlock, and a manager approved through the API. The newest event comes first.Response fields
objectChangeHistory returns a list of ObjectChangeHistoryEvent.
Change types
Treat
changeType as an open list: new values can appear as Fluz records more actions.
The change payload
change is a JSON object. Its keys use snake_case.
Fluz never puts sensitive values in
change. PINs, card numbers, wallet tokens, address text, and memo or receipt content are replaced by a marker such as "updated", "UPDATED", or "ADDED", or by an ID.
Who made the change
actor names the one party that performed the action.
Exactly one of
userId and system is set. Each object page lists the system values you can see for that object. Treat system values as labels for display and auditing: new values can appear, and existing ones can change.
With API key (Basic) authentication, userId is the user who owns your developer account and applicationId is your application.
subjectUserId names the person the change was made for, when that’s someone other than the actor. For example, an admin creates a card for an authorized user: actor.userId is the admin, and subjectUserId is the cardholder.
Approvals
When a change goes through Approvals & requests, the object’s history shows the whole trail. Every event in it carries the sameapprovalId.
APPROVAL_REQUESTED. The actor is the requester, with the application the request came through.APPROVAL_APPROVEDorAPPROVAL_DECLINED. One event per approver who decided. The actor is the user who submitted the decision, andsubjectUserIdis the requester. A decision made through an approval link that names no approver is attributed tosystem: "approvals-service".- The resulting action. For example, a
FIELD_CHANGEDevent that unlocks the card. A change to the object itself is usually attributed to the requester, because they asked for it. An access grant is attributed to the approver who granted it. Each object page notes the exceptions.
APPROVAL_EXPIRED event is recorded instead, attributed to system: "approvals-service".
For a request that creates a new object, such as a virtual card or gift card purchase, the new object gets the request and approval events once it exists. A declined or expired creation request doesn’t create an object, so the new object has no history. A request to replace a virtual card records its decline or expiry on the original card.
The approval field returns the approval as it is now:
Fluz never asks a requester to approve their own request, and rejects the decision if they try.
Ownership and access
Ownership and access events work the same way on every object type that supports them.- Ownership.
assignObjectOwnerrecordsOWNER_ASSIGNED.transferObjectOwnerrecordsOWNER_TRANSFERRED. New virtual cards and gift cards also recordOWNER_ASSIGNED. Spend accounts created in the Fluz app record it for the owner picked, or for the creator. - The owner’s access. An owner always gets at least
SPENDERaccess. When that access is granted, raised, or removed, the access event carries"reason": "owner-floor". For example, a transfer revokes the previous owner’sSPENDERaccess. - Sharing. Sharing an object with a member of the account in the Fluz app records
ACCESS_GRANTED,ACCESS_LEVEL_CHANGED, orACCESS_REVOKED.subjectUserIdis the member. - Invites. Sharing with someone who hasn’t registered yet records
PENDING_ACCESS_*events. Those events have nosubjectUserId;change.subject_non_registered_user_ididentifies the invite. When the person registers,ACCESS_APPLIED_ON_REGISTRATIONis recorded and attributed to the person who invited them. - Access requests. A member who asks for access to an object goes through an approval. The object records
APPROVAL_REQUESTED, thenAPPROVAL_APPROVEDorAPPROVAL_DECLINED. If the request is approved, anACCESS_GRANTEDevent follows, orACCESS_LEVEL_CHANGEDif the requester already had lower access. It’s attributed to the approver, with the requester assubjectUserId. If the requester already had that level or higher, no access event is recorded.
change.old and change.new:
Access a user has through a group isn’t recorded on the object.
Good to know
- History starts when recording started. Changes made before Fluz began recording an action don’t appear, and nothing is backfilled, with one exception. Virtual cards that existed when ownership launched have an
OWNER_ASSIGNEDevent dated when ownership launched, not when the card was created. - Only real changes are recorded. An update that sets a field to its current value records nothing.
- Recording doesn’t block most actions. If an event can’t be written, the action still succeeds. Most ownership and access events are the exception: they’re written together with the change. Use the object’s current state, not its history, as the source of truth for its current values.
- The newest 50 events. The query returns at most 50 events, newest first, with no pagination.
- Changes from every channel. The history includes changes made through the API, in the Fluz web and mobile apps, by Fluz support, and by Fluz systems.
Access rules
The object must belong to the account the credentials act on:
For an OAuth grant restricted to specific spend accounts,
SPEND_ACCOUNTS history is only available for those spend accounts.
Asking for an object on another account returns the same error as asking for one that doesn’t exist, so the API never reveals whether the object exists.
Errors
See General API error codes for authentication errors shared by every operation.
Next steps
Virtual card activity history
Creation, settings, locks, PINs, wallet tokens, and expense details.
Gift card activity history
Purchase, archive, used status, balance, and expense details.
Spend account activity history
Creation, renames, default changes, images, and closure.
Funding source activity history
Bank cards, bank accounts, PayPal, and primary or backup changes.