Skip to content

Get a user's public activity feed​

GET
/users/{id}/activity

The public activity feed on a profile (#1693): six kinds of public act, ordered newest first. Accepts a UUID or a profile_slug; auth-optional.

campaign_launched (the campaign passed approval), achievement_earned (a badge, read through the same public projection the profile badge strip uses), commented, donated, update_posted and endorsed (declared, or their referral link for that campaign recorded a visit — the definition the Endorsed-by dialog and the profile chip already use).

Each row inherits the visibility of the thing it reports: a refunded or charged-back gift, a hidden or retracted comment, a withdrawn update, a soft-deleted campaign and a revoked award are all simply absent. Anonymous gifts never appear, for anyone, including the profile's owner. A campaign that is unlisted, private, paused, draft or deleted is never named. A profile with show_donations_on_profile off keeps every row type except donated.

All money is INTEGER CENTS, never dollars. amount_cents on a donated row is what the giver paid — the donation plus the platform tip — which is the same figure the profile's Impact stat sums, so the two cannot disagree.

Paging is a KEYSET cursor, not an offset: pass the nextCursor from the previous page back as cursor. A cursor this endpoint did not issue is a 400. nextCursor is null on the last page.

Parameters​

Path Parameters

id*

A user UUID or a profile_slug.

Type
string
Required

Query Parameters

group

Filter chip. giving is donated; fundraising is campaign_launched and update_posted; community is commented, achievement_earned and endorsed. An unrecognised value falls back to all. The summary block is NOT filtered — it is the strip above the chips and always counts every type.

Type
string
Valid values
"all""giving""fundraising""community"
Default
"all"
limit
Type
integer
Minimum
1
Maximum
50
Default
20
cursor

The opaque nextCursor from the previous page. Omit for page 1.

Type
string

Responses​

A page of the feed. A private profile answers 200 with an empty items array to everybody but its owner, rather than 404 — the page renders and the section is simply empty.

application/json
JSON
{
"items": [
{
"id": "donated:6f1c2a2e-2b0a-4c6f-9a7e-2f0b9c1d4e55",
"type": "string",
"at": "string",
"campaign": {
"id": "string",
"slug": "string",
"title": "string",
"cover_image": "string"
},
"amount_cents": 0,
"currency": "string",
"excerpt": "string",
"gif": {
"id": "xT4uQulxzV39haRFjG",
"title": "string",
"width": 480,
"height": 270,
"mp4_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/giphy.mp4",
"webp_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/giphy.webp",
"gif_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/giphy.gif",
"still_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/giphy_s.gif",
"preview_mp4_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/200w.mp4",
"preview_webp_url": "https://media2.giphy.com/media/xT4uQulxzV39haRFjG/200w.webp",
"preview_width": 200,
"preview_height": 113
},
"achievement": {
"id": "string",
"title": "string",
"tagline": "string",
"tier": "string",
"badge_art_url": "string",
"background_color": "string"
}
}
],
"nextCursor": "string",
"joinedAt": "string",
"summary": {
"windowDays": 0,
"total": 0,
"byType": {
"additionalProperties": 0
}
}
}

Playground​

Server
Variables
Key
Value

Samples​

Powered by VitePress OpenAPI

Built with VitePress