Skip to content

Mantle2 Activities Endpoints

Core activity catalogue (global) plus user activity management (see users.md). Parameter name in spec: activityId.

Global Catalogue Endpoints

  • GET /v2/activities — list activities
  • POST /v2/activities — create activity (Admin Only)
  • GET /v2/activities/random — random selection
  • GET /v2/activities/{activityId} — retrieve by ID
  • PATCH /v2/activities/{activityId} — update (Admin Only)
  • DELETE /v2/activities/{activityId} — delete (Admin Only)
  • GET /v2/activities/list — array of activity IDs (lightweight)

User-Scoped Activity Operations (cross-reference)

Documented in users.md under:

  • /v2/users/{id|username|current}/activities (GET/PATCH/PUT/DELETE)
  • /v2/users/{id|username|current}/activities/recommend (GET)

Activity Schema

Activities represent global catalog items that users can add to their profiles. Each activity contains:

FieldTypeDescriptionConstraints
idstringUnique activity identifier (24-digit zero-padded)Required
namestringActivity nameRequired, max 255
descriptionstring | nullActivity descriptionOptional, max 500
typesarrayArray of ActivityType enum valuesMax 5 types
aliasesarrayAlternative names for the activityOptional
fieldsobjectCustom metadata key-value pairsOptional
created_atstringISO 8601 timestampAuto-generated
updated_atstringISO 8601 timestampAuto-updated

ActivityType Enum

Activities can be tagged with up to 5 types from the following list:

HOBBY, SPORT, WORK, STUDY, TRAVEL, SOCIAL, RELAXATION, HEALTH, PROJECT, PERSONAL_GOAL, COMMUNITY_SERVICE, CREATIVE, FAMILY, HOLIDAY, ENTERTAINMENT, LEARNING, NATURE, TECHNOLOGY, ART, SPIRITUALITY, FINANCE, HOME_IMPROVEMENT, PETS, FASHION, OTHER

Endpoints and Responses

GET /v2/activities

Retrieve paginated list of activities.

Query Parameters

NameTypeDescription
limitintPage size
pageintPage index
searchstringFree-text search
sortstringSort expression

Responses

200 OK:

json
{
	"items": [
		{
			"id": "000000000000001234567890",
			"name": "Hiking",
			"description": "Outdoor walking activity in natural environments",
			"types": ["SPORT", "NATURE", "HEALTH"],
			"aliases": ["trekking", "trail walking"],
			"fields": {
				"difficulty": "moderate",
				"equipment": "hiking boots"
			},
			"created_at": "2025-01-09T14:48:00Z",
			"updated_at": "2025-01-09T14:48:00Z"
		}
	],
	"page": 1,
	"limit": 20,
	"total": 1
}

400 Bad Request — invalid query parameters

POST /v2/activities

Create new activity (Admin Only).

Request Body

json
{
	"name": "Yoga",
	"description": "Mind-body practice combining physical postures and breathing",
	"types": ["HEALTH", "RELAXATION", "SPORT"],
	"aliases": ["yoga practice"],
	"fields": {
		"style": "hatha",
		"level": "beginner"
	}
}

Responses

201 Created:

json
{
	"id": "000000000000001234567891",
	"name": "Yoga",
	"description": "Mind-body practice combining physical postures and breathing",
	"types": ["HEALTH", "RELAXATION", "SPORT"],
	"aliases": ["yoga practice"],
	"fields": {
		"style": "hatha",
		"level": "beginner"
	},
	"created_at": "2025-01-10T10:30:00Z",
	"updated_at": "2025-01-10T10:30:00Z"
}

400 Bad Request — validation error (e.g., more than 5 types, missing required fields)

401 Unauthorized — authentication required

403 Forbidden — admin permission required

GET /v2/activities/random

Retrieve random activity selection.

Query Parameters

NameTypeDescription
limitintNumber of random activities to get

Responses

200 OK:

json
{
	"items": [
		{
			"id": "000000000000001234567892",
			"name": "Rock Climbing",
			"description": "Ascending rock formations using hands and feet",
			"types": ["SPORT", "NATURE", "HEALTH"],
			"aliases": ["climbing", "bouldering"],
			"fields": {},
			"created_at": "2025-01-08T09:15:00Z",
			"updated_at": "2025-01-08T09:15:00Z"
		}
	],
	"page": 1,
	"limit": 1,
	"total": 1
}

GET /v2/activities/

Retrieve single activity by ID.

Path Parameters

NameTypeDescription
activityIdstringActivity identifier (24-digit string)

Responses

200 OK:

json
{
	"id": "000000000000001234567890",
	"name": "Hiking",
	"description": "Outdoor walking activity in natural environments",
	"types": ["SPORT", "NATURE", "HEALTH"],
	"aliases": ["trekking", "trail walking"],
	"fields": {
		"difficulty": "moderate",
		"equipment": "hiking boots"
	},
	"created_at": "2025-01-09T14:48:00Z",
	"updated_at": "2025-01-09T14:48:00Z"
}

404 Not Found:

json
{
	"error": {
		"code": "E404",
		"message": "Activity not found"
	}
}

PATCH /v2/activities/

Update activity (Admin Only).

Path Parameters

NameTypeDescription
activityIdstringActivity identifier (24-digit string)

Request Body

Any subset of activity fields:

json
{
	"name": "Updated Hiking",
	"types": ["SPORT", "NATURE"],
	"fields": {
		"difficulty": "hard"
	}
}

Responses

200 OK — returns updated activity object

400 Bad Request — validation error

401 Unauthorized — authentication required

403 Forbidden — admin permission required

404 Not Found

DELETE /v2/activities/

Delete activity (Admin Only).

Path Parameters

NameTypeDescription
activityIdstringActivity identifier (24-digit string)

Responses

204 No Content — deleted successfully

401 Unauthorized — authentication required

403 Forbidden — admin permission required

404 Not Found

GET /v2/activities/list

Get lightweight array of activity IDs only.

Responses

200 OK:

json
["000000000000001234567890", "000000000000001234567891", "000000000000001234567892"]

Notes

  • Activities support up to 5 types from the ActivityType enum
  • The fields object allows custom metadata storage for domain-specific properties
  • User-scoped activity operations (adding activities to user profiles) are documented in users.md
  • Recommendation endpoints use activity types and user preferences to suggest relevant activities

Error Format

json
{
	"error": {
		"code": "E404",
		"message": "Not found"
	}
}