Skip to content

Milestones​

Campaign milestones and progress tracking


List milestones​

GET
/fundraisers/{fundraiserId}/milestones

Get all milestones for a fundraiser, earliest due date first. Readable exactly when GET /fundraisers/{id} is: a campaign that is not active, paused or ended, is private, or has been deleted answers 404 to everyone but its owner. Authentication is optional.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)
or

Parameters​

Path Parameters

fundraiserId*
Type
string
Required
Format
"uuid"

Query Parameters

lang

Overlay the stored translation of title and description for this language, when one exists.

Type
string
Valid values
"en""ru""uk""es"

Responses​

List of milestones

application/json
JSON
{
"milestones": [
]
}

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Create milestone​

POST
/fundraisers/{fundraiserId}/milestones

Add a milestone to a campaign. Only the campaign owner may post one, the caller's email must be verified, and the endpoint is gated by the features.milestones flag.
The request body is camelCase (targetAmountCents, dueDate) while the response row is snake_case (target_amount_cents, due_date). Both are in CENTS; target_amount_cents is also accepted in the body. The dollars-era targetAmount is not, and is ignored.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

fundraiserId*
Type
string
Required
Format
"uuid"

Request Body​

application/json
JSON
{
"title": "string",
"description": "string",
"targetAmountCents": 0,
"dueDate": "string"
}

Responses​

Milestone created

application/json
JSON
"string"

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​


Get milestone​

GET
/milestones/{id}

A single milestone by id. Public when its campaign is: a milestone of a campaign that is not active, paused or ended, is private, or has been deleted answers 404 to everyone but the campaign's owner. Authentication is optional.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)
or

Parameters​

Path Parameters

id*
Type
string
Required
Format
"uuid"

Query Parameters

lang

Overlay the stored translation of title and description for this language, when one exists.

Type
string
Valid values
"en""ru""uk""es"

Responses​

Milestone details

application/json
JSON
"string"

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Update milestone​

PUT
/milestones/{id}

Partial update of a milestone. Only the owner of the parent campaign may update it, and the caller's email must be verified. Send only the fields you are changing; an empty body answers 400.
The request body is camelCase (targetAmountCents, dueDate, completedAt) while the response row is snake_case. Setting completedAt is what marks a milestone complete.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

id*
Type
string
Required
Format
"uuid"

Request Body​

application/json
JSON
{
"title": "string",
"description": "string",
"targetAmountCents": 0,
"dueDate": "string",
"completedAt": "string"
}

Responses​

Milestone updated

application/json
JSON
"string"

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​


Delete milestone​

DELETE
/milestones/{id}

Deletes a milestone. Only the owner of the parent campaign may delete it.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

id*
Type
string
Required
Format
"uuid"

Responses​

Deleted

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Save a hand-edited milestone translation​

PUT
/fundraisers/{id}/milestones/{milestoneId}/translations/{lang}

Creates or overwrites one milestone's translation in lang as source: "human". The milestone must belong to the campaign in the path. Campaign owner only. Audit-logged. lang may not be the campaign's source language.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

id*

The campaign's UUID.

Type
string
Required
Format
"uuid"
milestoneId*
Type
string
Required
Format
"uuid"
lang*
Type
string
Required
Valid values
"en""ru""uk""es"

Request Body​

application/json
JSON
{
"title": "string",
"description": "string"
}

Responses​

The saved row

application/json
JSON
{
"data": {
"milestone_id": "string",
"language": "string",
"title": "string",
"description": "string",
"source": "string",
"translated_at": "string"
}
}

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​


Powered by VitePress OpenAPI

Built with VitePress