GET/v1/activities
List what happened
What happened in the business, newest first: a refund, a dispute opened, a day closed, a
person joining. Each is read from the fact that recorded it, at the locations the caller
holds; one at no location is the business's. Paged with the cursor of the previous page.
An owner or a manager, or an integration granted reports. Whether the caller has read one is
theirs to work out against GET /v1/activity-read-markers/me.
Parameters
-
cursorquery · stringOpaque cursor from a previous page's
next_cursor. Omit to start from the beginning.Pass it back exactly as received. It is base64 and its structure is not part of this contract — decoding it, or constructing one by hand, will break without notice.
-
limitquery · integer · int32Maximum items to return. The server may return fewer, so always drive the loop from
has_morerather than from the size of the page you got back.
Responses
-
200
A page of what happened.
Activity page · application/json
has_morebooleanRequired
Whether another page may follow.
-
itemsarray of ActivityRequired
idstring · uuidRequiredRead only
Named by what it is about, so the same thing is the same activity however often its fact is read.
kindstring · enumRequired
What happened.
refund: money went back on a sale, the sale its subject.dispute_opened: a cardholder disputed a payment, the dispute its subject.day_closed: a location's business day was first closed.member_joined: a person joined the team, the person its subject.delivery_short: a purchase order's receiving was closed with lines still due, the order its subject and the short value its amount.till_offline: a till stopped being heard from, the till its subject. Read an unknown kind as something happened, and skip it.refunddispute_openedday_closedmember_joineddelivery_shorttill_offline-
amountMoneyRequiredNullable
The money it moved or concerned — refunded, disputed, or the day's takings; null where there is none.
amountinteger · int64Required
The amount, as a whole number of the currency's minor unit. May be negative to express a refund, discount or credit.
currencyCurrencyRequired
ISO 4217 currency code.
Determines the minor unit that
Money.amountis expressed in. Zero-decimal currencies such asJPYhave a minor unit equal to the major unit.One of 182 values; see the schema.
business_datestring · dateRequiredNullable
The business day closed, for
day_closed; null otherwise.location_idstring · uuidRequiredNullable
Where it happened; null for what is the business's rather than a location's.
location_namestringRequiredNullable
The location's name as it is now; null with
location_id.occurred_atstring · date-timeRequired
When it happened, by the log's clock.
person_namestringRequiredNullable
The name of the person who joined, as it is now, for
member_joined; null otherwise.subject_idstring · uuidRequiredNullable
What it was done to — the sale refunded, the dispute, the person who joined; null for a day closed.
next_cursorstringNullable
Pass as
cursorfor the next page, whenhas_moreis true.
-
400
The request could not be parsed. Malformed JSON, a bad query parameter, or a header that failed to decode, among them an
API-Versionlater than the server speaks or not a date (api-version-unknown, with the server's own inapi_version).Distinct from
422: a400never reached validation, soinvalid_paramsis absent. Retrying without changing the request will fail again, except that a request refused for itsAPI-Versiongoes once the server is updated. -
401
No credentials, or credentials that could not be verified — missing bearer token, malformed JWT, expired token, or a signature that failed against the issuer's JWKS.
Refresh the token and retry once. Repeated
401after a refresh means the device needs to re-enrol. -
403
Authenticated, but not permitted. The token is valid and its merchant was resolved, but the caller's role does not allow this operation, or the target belongs to a different merchant.
Cross-tenant access is reported as
403on a resource the caller may not see, and as404where even confirming existence would leak information. Retrying will not help. -
410
The request names an
API-Versionthis server no longer serves (docs/decisions/0011). Nothing in it was read.api_versionnames the version the server speaks: the client is behind, and sends the request again once it is updated. -
422
The request parsed but failed validation.
invalid_paramslists every failing field with a JSON Pointer, not just the first, so a client can mark up a whole form in one pass rather than making the user fix errors one round trip at a time.Also returned when an
Idempotency-Keyis replayed with a different body, and when device-computed order totals disagree with the server's recomputation. -
429
Rate limit exceeded. Honour
Retry-Afterrather than applying your own backoff.A fleet of tills coming back online together after an outage is the realistic cause, which is exactly when uncoordinated client-side retry turns a brief outage into a sustained one. The limit is per process, and per site for what records trade there — a request spends its site's budget, and a till's own smaller one inside it — and per
(client, merchant)for everything else; noRateLimitfield is sent, so this response and itsRetry-Afterare the whole of the contract. -
500
Something failed on our side.
trace_ididentifies the request in our tracing — quote it in a support ticket.The body never carries internal detail: no SQL, no stack traces, no upstream error strings. Safe to retry with the same
Idempotency-Key.