Account history no longer returns internal processing fields
Fewer internal fields in account history
Entries fromGET /api/history with resource=account no longer include a
few internal processing fields that were never part of the documented
response. Every documented field is unchanged, and so is the payment and
provider data each entry carries. If you don’t read undocumented fields,
there is nothing to change on your side.Change or move many cards in one call
Batch card changes on the MCP server
Two new tools take a list of up to 25 cards, so changing many cards no longer means one call per card (and one second per card under the rate limit). Both need anmcp:write key.updateUserCardsapplies the same status (active,inactive,locked), spending limit or interval to every card in the list. Canceling stays one card at a time, withupdateUserCard.moveCardsToGroupmoves every card in the list into the same group, or takes them out of their groups.
updated/moved, failed with a code, or
notAttempted — so a partly finished call tells you exactly which cards to
send again. See updateUserCards and
moveCardsToGroup.The MCP server can now read and manage card groups
Card groups on the MCP server
Eight new tools let an assistant work with card groups: list them, follow a group-wide change, and — with anmcp:write key — create, change and delete
them. See Card groups.Reading (the mcp scope is enough):getCardGroupslists your groups with their card count, locked cards, total spending limit and 30-day spend.getCardGroupJobsfollows a lock, unlock or cancel that is running in the background.getCardSpendReportreports spend over a date range by group, by card and by who created each card.
mcp:write):createCardGroupandupdateCardGroupcreate a group, rename it, and change its description.moveCardToGroupputs a card into a group, moves it, or takes it out.setCardGroupCardsStatuslocks or unlocks every card in a group in one call. It returns ajobIdstraight away; follow it withgetCardGroupJobs.deleteCardGroupdeletes a group and keeps its cards. WithcancelCards: trueit cancels every card in the group first — permanently.
getUserCards,getUserCardTransactionsandgetUserCardSummarytake agroupIdfilter, and every card carriesgroupIdandgroupName.createUserCardstakes agroupIdto create cards straight into a group.aggregatecan group and filter card transactions bygroupName. Spend on cards outside any group is reported as(no group).
Account history now returns the settlement date and notes shown in the statement export
resource=account: the same dates and descriptions as the statement export
Several fields on account history entries came back empty even though the
statement export filled them. They are now populated from the same data:executedAtis when the transaction settled, which was always empty before. It can be later than the creation date: a payment created on one day and settled on another carries the settlement day here, as the export’s “Executed At” column does. If you group transactions by day, use this field.descriptionnow ends with any note added to the transaction afterwards, after-, as it does in the export. The note alone is in the newadditionalDescriptionfield.userDescriptionreturns the memo entered when the transaction was created. It was alwaysnullbefore.transactionPurposereturns the purpose given for a withdrawal. It was always empty before.fiatExecutedAtis new: for deposits and withdrawals, it is when the fiat side was processed.
executedAt was empty,
transactions that settled on a later day may be filed under the wrong day.
Re-run those days using executedAt.The MCP server can now create and change cards, with an mcp:write key
createUserCards and updateUserCard — the first writes
The MCP server used to be read-only. Two tools now change something, and both
need the new mcp:write scope, checked on every call. Existing keys are
unaffected: without the scope a key connects exactly as before, and is refused
only when a write is attempted.Scopes are fixed when a key is created and can’t be added to an existing one.
To start writing, create a new key at
Settings → API keys
with MCP + Write selected, then revoke the old one.createUserCards
Creates one card, or queues a batch of up to 30. A single card comes back
immediately; a batch doesn’t, since issuing thirty cards outlives the request.
You get a batchId instead, and call the same tool with that id to read the
batch’s progress (cardsCreated, cardsFailed, cardIds). Nothing is created
when batchId is set.Retrying is safe without an idempotency key: a batch already running with the
same recipe and size is returned (alreadyRunning: true) rather than queued a
second time.Name a batch with nicknamePrefix (plus optional nicknameStartAt and
nicknamePadding) — nickname would repeat the same label on all 30 cards.Bulk is a business-account feature. Without it, a quantity above 1 creates
one card and the response says so — created, requested and
bulkUnavailable: true, alongside the card.updateUserCard
Changes one card per call: status, nickname, spendingLimit,
spendingInterval. It returns the card’s state after the change, so you don’t
have to list cards again to see the result.canceled is permanent. To stop a card temporarily, use inactive or
locked — both reversible with active.One less id to pass
You no longer need to send acardIssuerUserId: if your account has a single
card-issuer account it’s filled in for you. If it holds more than one, the tool
lists the ids you can choose from.getCashbackSummary: cashback, with pending broken out
getCashbackSummary — your LootRush Rewards cashback
Cashback was visible on the site but nowhere in the API. The new
getCashbackSummary returns it across every enrolled card-issuer
account, and it also comes back as a cashback section on
getAccountBalance and getUserCards — the same treatment cardBalance gets.Four cashback balances, not one “pending”
Cashback isn’t a single balance with a pending amount. It has four states, and only one of them is money the cardholder can use today:total is the headline (available + redeeming), taken as-is from the same
source the site shows, so it can’t drift from it.Also returned: expiring (the soonest slice about to lapse), and
monthProgress — this month’s spend buckets with their rate ladder, which is
what answers “what rate am I on”.enrolled: false is not “zero”
An account with no cashback-active card issuer gets zeros and
enrolled: false. Those zeros mean cashback is not switched on, which is a
different answer from earned nothing. Read the flag before quoting the
number.No card ids
The tool takes nocardId or cardIssuerUserId — enrollment is resolved from
your identity server-side. The only parameter is an optional month
(YYYY-MM) for the rate ladder.Currencies are never added together
If your accounts disagree about currency, the headline fields stay zero and abyCurrency array carries the real per-currency split.aggregate: totals without paging
aggregate — totals over your whole slice, in one call
The listing tools return rows, so answering “how much did I spend last month”
meant paging every one of them and adding up client-side — slow, and wrong the
moment a page is missed. The new aggregate tool returns the number
instead, computed over the whole filtered set.- Ops:
sum,count,avg,min,max,median. - Break it down by a column (
groupBy) or by time (timeBucket:day,week,month). - Sources:
cardTransactionsandaccountHistory.
Listing responses now carry a datasetId
getUserCardTransactions and getAccountHistory return a datasetId
alongside their rows, plus aggregatable, groupable and ops describing
what you can ask of them.Pass that handle to aggregate and the total covers exactly the slice you just
listed — the handle stores that call’s filters, never its rows, and expires
after 15 minutes. You can also skip the listing entirely and pass source +
filters straight to aggregate.Three things to know about the numbers
- A partial result says so. If the slice exceeded the row cap the response
carries
complete: falsewith the coverage it does have. Check it before quoting the number. - Currencies are never merged. Amounts in different currencies come back as separate entries.
- Declined card attempts don’t count as spend. Money columns on
cardTransactionsare split bystatusunless you pin one — onlysettled(andon_hold, still authorising) is money that left the account.
MCP card tools + card balance
New card tools on the MCP server
Three new read-only tools give your AI assistant a full view of your card balance and its history — the data the LootRush app shows, now available over MCP.getUserCardBalanceMovements— your card balance (collateral) ledger. Each entry carries its running balance and previous balance — the statement-style running total that card transactions don’t include. Results are grouped per card issuer so each running-balance series stays coherent. OptionalcardIssuerUserId,page/pageSize,startDate/endDate.getUserCardSummary— a point-in-time snapshot of your cards: per-card balance, status, and limits as of any instant (asOf, defaults to now).getUserCardBalanceAutomation— your spending-limit auto-refill history: each automatic balance top-up (amount, status, retries, on-chain tx hash, and when it ran).
Card balance now in getAccountBalance and getUserCards
Both tools now return a normalized cardBalance block —
{ total, pendingDeposit, pendingWithdraw } — the card collateral shared
across your cards. In getAccountBalance it is reported as its own bucket
and is not added into totalUsdValue (which stays crypto + tokenized +
available wallet stablecoins).The getAccountBalance reference now also covers the availableStableUsdValue
and stableCoins fields (your live on-chain wallet stablecoins), and
getUserCards returns the raw balances payload alongside cardBalance when
you need the licensed / non-licensed split.See the MCP Server reference for the full field
and parameter tables.