Cross-Chapter Activity Query
API Contract
REST
/api/v1/activities
7 endpoints
GET
/api/v1/activities/api/v1/activities
List all activities across chapters
Public
Response Example
{
"data": [
{
"activity_id": "act-4411",
"contact_id": "contact-8821",
"chapter_id": "chapter-oslo",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-25T10:00:00Z",
"hours": 4,
"description": "Community garden cleanup"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 312
}
}
GET
/api/v1/activities/api/v1/activities/:id
Get a specific activity by ID
Public
Response Example
{
"activity_id": "act-4411",
"contact_id": "contact-8821",
"chapter_id": "chapter-oslo",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-25T10:00:00Z",
"hours": 4,
"description": "Community garden cleanup"
}
POST
/api/v1/activities/api/v1/activities
Create a new activity record
Public
Request Example
{
"contact_id": "contact-8821",
"chapter_id": "chapter-bergen",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-26T11:15:00Z",
"hours": 3,
"description": "Library book sorting"
}
Response Example
{
"activity_id": "act-4500",
"contact_id": "contact-8821",
"chapter_id": "chapter-bergen",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-26T11:15:00Z",
"hours": 3,
"description": "Library book sorting",
"created_at": "2026-03-26T11:15:00Z"
}
PUT
/api/v1/activities/api/v1/activities/:id
Update an activity record
Public
Request Example
{
"hours": 5,
"description": "Library book sorting and cataloguing"
}
Response Example
{
"activity_id": "act-4500",
"contact_id": "contact-8821",
"chapter_id": "chapter-bergen",
"activity_type": "volunteer_hours",
"hours": 5,
"description": "Library book sorting and cataloguing",
"updated_at": "2026-03-26T14:00:00Z"
}
DELETE
/api/v1/activities/api/v1/activities/:id
Delete an activity record
Public
Response Example
{
"deleted": true,
"activity_id": "act-4500"
}
GET
/api/v1/activities/api/v1/activities/contact/:contactId/across-chapters
Fetch all activities for a contact across all chapters, with optional date range
Public
Response Example
{
"data": [
{
"activity_id": "act-4411",
"contact_id": "contact-8821",
"chapter_id": "chapter-oslo",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-25T10:00:00Z",
"hours": 4
},
{
"activity_id": "act-4298",
"contact_id": "contact-8821",
"chapter_id": "chapter-stavanger",
"activity_type": "training_session",
"submitted_at": "2026-03-20T14:00:00Z",
"hours": 2
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 18
}
}
GET
/api/v1/activities/api/v1/activities/contact/:contactId/by-type
Fetch activities for a contact filtered by type and date (duplicate detection query)
Public
Response Example
{
"data": [
{
"activity_id": "act-4411",
"contact_id": "contact-8821",
"chapter_id": "chapter-oslo",
"activity_type": "volunteer_hours",
"submitted_at": "2026-03-25T10:00:00Z",
"hours": 4,
"description": "Community garden cleanup"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1
}
}