Success Stories
Fundlies that reached the finish line and what the money did (#2061): the public index and story pages, and the organizer's own edits and approval.
List success stories
Every Fundly that has ended (status ended, or live with its end date passed), raised more than $0 and passes the safety gates: not deleted, public, its organization not deleted or suspended and under no legal hold, its owner not suspended or banned, not under review, no pending report and no open dispute. There is no opt-in. A story staff hid is left out.
featured is the staff pick, else the newest published story; it is left out of data and of pagination.total. counts count every story, the featured one included. stats are the live platform figures (the same cached numbers as GET /platform/numbers), null when they cannot be read.
Parameters
Query Parameters
"all""fully_funded""ended""closed""all"recent orders by finished_at, newest first; raised by raised, most first.
"recent""raised""recent"1482400Titles in this language where a translation exists. Falls back to the language cookie, then Accept-Language.
"en""ru""uk""es"Responses
One page of stories
Get one success story
One Fundly's success story page. 404 unless the Fundly is a success story right now (the same gates as the list) and staff have not hidden it. The Fundly's own slug is accepted too; card.slug is the canonical one. story is null until the organizer-approved story is published; the record is always there, computed live. Anonymous donors are shown as Anonymous.
Parameters
Path Parameters
Query Parameters
"en""ru""uk""es"Responses
The story
Get my Fundly's success story, any status
The owner's view of their Fundly's success story: the whole row in any status, draft text included, and what they may do. Creates the draft row on first read when the Fundly is eligible and the pipeline has not made it yet. Owner only: anyone else gets 403 with code: NOT_OWNER, no session 401 UNAUTHORIZED, no story 404 NOT_FOUND. Every refusal on these three operations is { error, code }.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
The Fundly (fundraiser) id.
"uuid"Responses
The story
Edit my Fundly's success story
The owner edits their story directly, in every status but hidden (409 INVALID_STATUS). headline, dek and ask_excerpt may change only before publish (409 PUBLISHED_FIELD_LOCKED after; sending the unchanged value is fine). Before publish, any change clears organizer_approved_at (an approved story goes back to organizer_review). On a published story the edit is live at once, audit-logged with the old and new values, and staff are notified.
photo_url must be an image uploaded through POST /storage/upload (bucket fundraiser-images), the same check the campaign media uses. ask_excerpt must be quoted word for word from the Fundly's own story (400 VALIDATION_ERROR). Send only the fields that change; null or an empty string clears a text field.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Request Body
Responses
The story after the edit
Approve my Fundly's success story
The organizer approves the words: sets organizer_approved_at and written_with_user_id, the status becomes approved, and staff are notified. Allowed from draft and organizer_review; approving an approved story again is a no-op; 409 NOT_IN_REVIEW once published or hidden. Nothing is published without this approval. Owner only.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Responses
The approved story