API Documentation
Everything you need to integrate with the Tampa.dev platform.
Management
Management endpoints allow group owners and managers to administer their groups, events, badges, and checkin codes programmatically. All endpoints accept three authentication methods: session cookies, Personal Access Tokens (PATs), and OAuth Bearer tokens.
When using PATs or OAuth, the appropriate manage:* scope is required. Role hierarchy: owner > manager > volunteer > member. Platform admins bypass all role checks.
Group Management
Scope: manage:groups
GET /v1/manage/groups
List groups the authenticated user can manage. Platform admins see all groups.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups
{
"data": [
{
"id": "grp_react",
"name": "React Tampa",
"urlname": "react-tampa",
"description": "Tampa's React developer community",
"memberCount": 450,
"photoUrl": "https://cdn.tampa.dev/groups/react-tampa.jpg",
"role": "owner"
}
],
"pagination": {
"total": 2,
"limit": 20,
"offset": 0,
"hasMore": false
}
}
GET /v1/manage/groups/:groupId
Get managed group details including your role and permissions.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react
{
"data": {
"id": "grp_react",
"name": "React Tampa",
"urlname": "react-tampa",
"description": "Tampa's React developer community",
"memberCount": 450,
"photoUrl": "https://cdn.tampa.dev/groups/react-tampa.jpg",
"role": "owner",
"permissions": {
"canManageMembers": true,
"canManageEvents": true,
"canManageBadges": true,
"canManageSettings": true
}
}
}
PUT /v1/manage/groups/:groupId
Update group settings. Requires manager role or higher.
curl -X PUT \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{
"name": "React Tampa Bay",
"description": "Updated description",
"website": "https://react-tampa.dev"
}' \
https://api.tampa.dev/v1/manage/groups/grp_react
{
"data": {
"success": true
}
}
GET /v1/manage/groups/:groupId/members
List group members. Requires volunteer role or higher.
curl -H "Authorization: Bearer td_pat_abc123..." \
"https://api.tampa.dev/v1/manage/groups/grp_react/members?limit=10"
{
"data": [
{
"id": "mem_abc123",
"userId": "usr_abc123",
"name": "Jane Developer",
"username": "janedev",
"avatarUrl": "https://avatars.githubusercontent.com/u/12345",
"role": "owner",
"joinedAt": "2025-06-15T10:30:00Z"
}
],
"pagination": {
"total": 12,
"limit": 10,
"offset": 0,
"hasMore": true
}
}
POST /v1/manage/groups/:groupId/members
Invite a member. Requires manager role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"userId": "usr_def456", "role": "member"}' \
https://api.tampa.dev/v1/manage/groups/grp_react/members
{
"data": {
"success": true
}
}
PATCH /v1/manage/groups/:groupId/members/:memberId
Update a member's role. Requires owner or manager role.
curl -X PATCH \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"role": "volunteer"}' \
https://api.tampa.dev/v1/manage/groups/grp_react/members/mem_def456
{
"data": {
"success": true
}
}
DELETE /v1/manage/groups/:groupId/members/:memberId
Remove a member. Requires manager role or higher.
curl -X DELETE \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/members/mem_def456
{
"data": {
"success": true
}
}
POST /v1/manage/groups/:groupId/leave
Leave a group.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/leave
{
"data": {
"success": true
}
}
Event Management
Scope: manage:events
GET /v1/manage/groups/:groupId/events
List events for a managed group.
curl -H "Authorization: Bearer td_pat_abc123..." \
"https://api.tampa.dev/v1/manage/groups/grp_react/events?limit=10"
{
"data": [
{
"id": "evt_abc123",
"title": "React Tampa Monthly Meetup",
"startTime": "2026-02-15T18:30:00-05:00",
"endTime": "2026-02-15T20:30:00-05:00",
"eventType": "in_person",
"rsvpCount": 24,
"maxAttendees": 30,
"status": "published"
}
],
"pagination": {
"total": 5,
"limit": 10,
"offset": 0,
"hasMore": false
}
}
GET /v1/manage/groups/:groupId/events/:eventId
Get event details with attendee statistics.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_abc123
{
"data": {
"id": "evt_abc123",
"title": "React Tampa Monthly Meetup",
"description": "Join us for talks on React Server Components...",
"startTime": "2026-02-15T18:30:00-05:00",
"endTime": "2026-02-15T20:30:00-05:00",
"timezone": "America/New_York",
"location": "Tampa Innovation Hub",
"eventType": "in_person",
"rsvpSummary": {
"confirmed": 24,
"waitlisted": 3,
"capacity": 30
},
"checkinCount": 18
}
}
POST /v1/manage/groups/:groupId/events
Create a native event. Requires manager role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{
"title": "TypeScript Workshop",
"description": "Hands-on TypeScript workshop for beginners",
"startTime": "2026-03-01T14:00:00-05:00",
"endTime": "2026-03-01T17:00:00-05:00",
"timezone": "America/New_York",
"location": "Tampa Innovation Hub",
"eventType": "in_person",
"maxAttendees": 25
}' \
https://api.tampa.dev/v1/manage/groups/grp_react/events
{
"data": {
"id": "evt_new123",
"title": "TypeScript Workshop",
"startTime": "2026-03-01T14:00:00-05:00",
"status": "published"
}
}
PUT /v1/manage/groups/:groupId/events/:eventId
Update an event. Requires manager role or higher.
curl -X PUT \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"title": "TypeScript Workshop (Updated)", "maxAttendees": 30}' \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_new123
{
"data": {
"success": true
}
}
POST /v1/manage/groups/:groupId/events/:eventId/cancel
Cancel an event. Requires manager role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_new123/cancel
{
"data": {
"success": true
}
}
Checkin Code Management
Scope: manage:checkins
POST /v1/manage/groups/:groupId/events/:eventId/checkin-codes
Generate a checkin code. Requires volunteer role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"expiresInMinutes": 120}' \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_abc123/checkin-codes
{
"data": {
"id": "chkcode_abc123",
"code": "ABC123",
"eventId": "evt_abc123",
"expiresAt": "2026-02-15T20:30:00Z",
"createdBy": "usr_abc123"
}
}
GET /v1/manage/groups/:groupId/events/:eventId/checkin-codes
List checkin codes for an event. Requires volunteer role or higher.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_abc123/checkin-codes
{
"data": [
{
"id": "chkcode_abc123",
"code": "ABC123",
"expiresAt": "2026-02-15T20:30:00Z",
"createdBy": "usr_abc123",
"usageCount": 15
}
]
}
DELETE /v1/manage/groups/:groupId/checkin-codes/:codeId
Delete a checkin code. Requires manager role or higher.
curl -X DELETE \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/checkin-codes/chkcode_abc123
{
"data": {
"success": true
}
}
GET /v1/manage/groups/:groupId/events/:eventId/attendees
Get the attendee list for an event. Requires volunteer role or higher.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/events/evt_abc123/attendees
{
"data": {
"rsvps": [
{
"userId": "usr_abc123",
"name": "Jane Developer",
"username": "janedev",
"status": "confirmed",
"rsvpAt": "2026-02-01T10:00:00Z"
}
],
"checkins": [
{
"userId": "usr_abc123",
"name": "Jane Developer",
"username": "janedev",
"checkedInAt": "2026-02-15T18:45:00Z",
"method": "qr"
}
],
"totalConfirmed": 24,
"totalWaitlisted": 3,
"totalCheckedIn": 18
}
}
Group Badge Management
Scope: manage:badges
GET /v1/manage/groups/:groupId/badges
List badges for a group. Requires volunteer role or higher.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/badges
{
"data": [
{
"id": "bdg_abc123",
"name": "Workshop Attendee",
"slug": "workshop-attendee",
"description": "Attended a React Tampa workshop",
"icon": "award",
"iconUrl": "https://td-uploads-public.tampa.dev/emoji/1f3c6.webp",
"color": "#FF6B6B",
"points": 50,
"awardedCount": 23
}
]
}
POST /v1/manage/groups/:groupId/badges
Create a badge. Requires manager role or higher and the badge_issuer entitlement.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{
"name": "Lightning Talk Speaker",
"slug": "lightning-talk-speaker",
"description": "Gave a lightning talk at React Tampa",
"icon": "zap",
"color": "#FFD700",
"points": 100
}' \
https://api.tampa.dev/v1/manage/groups/grp_react/badges
{
"data": {
"id": "bdg_new123",
"name": "Lightning Talk Speaker",
"slug": "lightning-talk-speaker",
"points": 100
}
}
PATCH /v1/manage/groups/:groupId/badges/:badgeId
Update a badge. Requires manager role or higher.
curl -X PATCH \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"description": "Updated description", "points": 75}' \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123
{
"data": {
"success": true
}
}
DELETE /v1/manage/groups/:groupId/badges/:badgeId
Delete a badge. Requires owner role.
curl -X DELETE \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123
{
"data": {
"success": true
}
}
POST /v1/manage/groups/:groupId/badges/:badgeId/award/:userId
Award a badge to a user. Requires manager role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123/award/usr_def456
{
"data": {
"success": true
}
}
DELETE /v1/manage/groups/:groupId/badges/:badgeId/revoke/:userId
Revoke a badge from a user. Requires manager role or higher.
curl -X DELETE \
-H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123/revoke/usr_def456
{
"data": {
"success": true
}
}
POST /v1/manage/groups/:groupId/badges/:badgeId/claim-links
Create a badge claim link. Requires manager role or higher.
curl -X POST \
-H "Authorization: Bearer td_pat_abc123..." \
-H "Content-Type: application/json" \
-d '{"maxUses": 50, "expiresInDays": 7}' \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123/claim-links
{
"data": {
"id": "cl_abc123",
"code": "REACT-WORKSHOP-2026",
"badgeId": "bdg_abc123",
"maxUses": 50,
"currentUses": 0,
"expiresAt": "2026-02-07T00:00:00Z",
"claimUrl": "https://tampa.dev/claim/REACT-WORKSHOP-2026"
}
}
GET /v1/manage/groups/:groupId/badges/:badgeId/claim-links
List claim links for a badge. Requires manager role or higher.
curl -H "Authorization: Bearer td_pat_abc123..." \
https://api.tampa.dev/v1/manage/groups/grp_react/badges/bdg_abc123/claim-links
{
"data": [
{
"id": "cl_abc123",
"code": "REACT-WORKSHOP-2026",
"maxUses": 50,
"currentUses": 23,
"expiresAt": "2026-02-07T00:00:00Z",
"createdAt": "2026-01-31T10:00:00Z"
}
]
}