Account journal
GET /portal/merchants/{merchant}/journal (Owner/Admin, membership version header) returns 50 entries a page, newest first: {data, next_cursor, matching, total}. Each entry has sequence, occurred_at, actor (kind MEMBER with email and current role — null once removed —, KEY with the API key’s label in key, FUTA or SYSTEM, never a staff identity), action (a KYB review command reads as kyb.message, kyb.information_requested or kyb.rejected; Futa taking a file is not shown; from 0.55.0, key.permissions_reduced, in DEVELOPERS by the SYSTEM with the key’s label as object, when the platform withdrew keys:manage a key had been given by another key, D-034), category (TEAM, DEVELOPERS, BRAND, ACCOUNT, SETTLEMENTS, STORES), object (an invitation’s or member’s email, a key’s label or a store’s code, else null) and before/after for role changes and invitations. The recorded free-text detail is never returned, and entries cannot be changed. The IP address is not recorded yet. The portal lists the entries to the second in Kinshasa time and filters the period over the last 7 days (its default), the last 30 days or two chosen dates.
matching counts the filters whatever the page. Query parameters: member (a subject, KEY for every API key, FUTA or SYSTEM), category, from and to (instants, to exclusive and after from), search (1 to 100 characters, case-insensitive, in a member’s email or the object’s name) and cursor (the previous page’s next_cursor). Unknown parameters return 400 INVALID_REQUEST.
GET …/journal/export returns the same filters as text/csv (UTF-8 with BOM) with the columns occurred_at, actor_kind, actor, role, action, category, object, before, after (actor is a member’s email or a key’s label); cells are quoted and formula-like values neutralised. More than 10,000 entries return 409 JOURNAL_TOO_LARGE. Payment and refund events are journaled by switch-core and are not part of this journal yet.