REST /api/v1/duplicate-activity-matches 6 endpoints
GET /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches

List all duplicate activity matches (pending review)

Public

Response Example

{
  "data": [
    {
      "match_id": "dam-0091",
      "contact_id": "contact-8821",
      "existing_activity_id": "act-4411",
      "pending_activity_type": "volunteer_hours",
      "similarity_score": 0.97,
      "detected_at": "2026-03-26T11:20:00Z",
      "status": "pending"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 3
  }
}
GET /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches/:id

Get a specific duplicate match by ID

Public

Response Example

{
  "match_id": "dam-0091",
  "contact_id": "contact-8821",
  "existing_activity_id": "act-4411",
  "existing_activity": {
    "activity_id": "act-4411",
    "activity_type": "volunteer_hours",
    "chapter_id": "chapter-oslo",
    "submitted_at": "2026-03-25T10:00:00Z",
    "hours": 4
  },
  "pending_activity": {
    "activity_type": "volunteer_hours",
    "chapter_id": "chapter-bergen",
    "submitted_at": "2026-03-26T11:15:00Z",
    "hours": 4
  },
  "similarity_score": 0.97,
  "detected_at": "2026-03-26T11:20:00Z",
  "status": "pending"
}
POST /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches/check

Check a pending activity submission for duplicates across all chapters

Public

Request Example

{
  "contact_id": "contact-8821",
  "activity_type": "volunteer_hours",
  "chapter_id": "chapter-bergen",
  "submitted_at": "2026-03-26T11:15:00Z",
  "hours": 4,
  "description": "Community garden cleanup"
}

Response Example

{
  "is_duplicate": true,
  "match": {
    "match_id": "dam-0091",
    "existing_activity_id": "act-4411",
    "similarity_score": 0.97,
    "detected_at": "2026-03-26T11:20:00Z",
    "status": "pending"
  }
}
PUT /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches/:id

Update a duplicate match status (dismiss or cancel warning)

Public

Request Example

{
  "status": "dismissed",
  "coordinator_id": "user-coord-55",
  "resolution_note": "Verified distinct events across chapters"
}

Response Example

{
  "match_id": "dam-0091",
  "status": "dismissed",
  "coordinator_id": "user-coord-55",
  "resolved_at": "2026-03-26T13:00:00Z"
}
DELETE /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches/:id

Remove a duplicate match record

Public

Response Example

{
  "deleted": true,
  "match_id": "dam-0091"
}
GET /api/v1/duplicate-activity-matches/api/v1/duplicate-activity-matches/contact/:contactId/activities

Get all activities for a contact across all 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
    },
    {
      "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
  }
}

Additional Metadata

{
  "contract_summary": {
    "total_contracts": 410,
    "total_endpoints": 2416,
    "api_styles_used": [
      "rest"
    ]
  },
  "generated_at": "2026-03-26T06:55:53.316Z"
}