Download OpenAPI specification:
The Momentco Platform API description
Tracks MOMENT_CLICKED or LIST_CLICKED event when user clicks on a moment or list. Requires either momentId or listId (exactly one). Requires user or guest authentication (click events require userId or guestId per Analytics API spec).
| momentId | string Moment ID (UUID) - required if listId not provided |
| listId | string List ID (UUID) - required if momentId not provided |
| campaignId | string Campaign ID (UUID) - optional, will use defaultCampaignId if not provided |
{- "momentId": "123e4567-e89b-12d3-a456-426614174000",
- "listId": "123e4567-e89b-12d3-a456-426614174000",
- "campaignId": "123e4567-e89b-12d3-a456-426614174000"
}{- "success": true,
- "message": "Event tracked successfully",
- "eventType": "MOMENT_CLICKED"
}Save user location and timezone information. Only inserts new record if location is different from last known location, otherwise updates timestamp.
| timezone required | string User timezone (e.g., America/New_York) |
| city | string City name |
| country | string Country name |
| latitude | number Latitude coordinate |
| longitude | number Longitude coordinate |
| source required | string Default: "manual" Enum: "manual" "geolocation" "browser" Source of the location data |
{- "timezone": "America/New_York",
- "city": "New York",
- "country": "United States",
- "latitude": 40.7128,
- "longitude": -74.006,
- "source": "manual"
}{- "success": true,
- "action": "inserted",
- "locationId": "123e4567-e89b-12d3-a456-426614174000"
}Get the most recent location data for the current user.
{- "id": "123e4567-e89b-12d3-a456-426614174000",
- "timezone": "America/New_York",
- "city": "New York",
- "country": "United States",
- "latitude": 40.7128,
- "longitude": -74.006,
- "source": "manual",
- "createdAt": "2024-01-15T10:30:00.000Z",
- "updatedAt": "2024-01-15T10:30:00.000Z"
}Get login, refresh, and logout activity history for a specific user.
| userId required | string <uuid> User ID to get activity for |
| startDate | string <date> Start date for filtering (ISO 8601) |
| endDate | string <date> End date for filtering (ISO 8601) |
| activityType | string Enum: "login" "refresh" "logout" Filter by activity type |
| limit | number Number of records to return |
| offset | number Number of records to skip |
Get location history for a specific user.
| userId required | string <uuid> User ID to get location for |
| startDate | string <date> Start date for filtering (ISO 8601) |
| endDate | string <date> End date for filtering (ISO 8601) |
| limit | number Number of records to return |
| offset | number Number of records to skip |
Update profile information for the logged-in user. All fields are optional.
| firstName | string User first name |
| lastName | string User last name |
| displayName | string User display name |
{- "firstName": "John",
- "lastName": "Doe",
- "displayName": "John Doe"
}{- "id": "string",
- "firebaseUid": "string",
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "displayName": "string",
- "photoURL": "string",
- "phoneNumber": "string",
- "isActive": true,
- "emailVerified": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Send an OTP to the specified phone number for verification. The returned session token must be used when verifying the OTP.
| phoneNumber required | string Phone number in E.164 format (e.g., +1234567890) |
{- "phoneNumber": "+1234567890"
}{- "message": "OTP sent successfully",
- "sessionInfo": "session-id-123"
}Verify the OTP code and update the user's phone number. Requires the session token from the request OTP endpoint.
| phoneNumber required | string Phone number in E.164 format (e.g., +1234567890) |
| code required | string OTP code received via SMS |
| sessionToken required | string Session token received from the request OTP endpoint |
{- "phoneNumber": "+1234567890",
- "code": "123456",
- "sessionToken": "dXNlcjoxMjM6KzEyMzQ1Njc4OTA="
}{- "message": "Phone number verified and updated successfully",
- "user": { }
}Generates a secure OAuth URL for Google Calendar integration. Accepts both authenticated users and guest users. Returns the URL that the frontend should redirect the user to. The state parameter is used for CSRF protection. Accepts optional redirect URL parameter.
| redirectUrl required | string Redirect URL for OAuth callback (required) |
{
}{- "state": "encrypted-state-token-here",
- "generatedAt": "2025-10-15T18:30:00.000Z",
- "expiresIn": 600
}Exchanges authorization code for tokens and stores encrypted tokens. For authenticated users: Updates existing user with calendar connection. For guest users: Creates full user account and migrates guest subscriptions. Returns app JWT and user information.
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Optional campaign ID for tracking sign-up/sign-in events. If not provided, events will be inserted without a campaignId. |
| code required | string Authorization code from OAuth provider |
| state required | string State parameter for CSRF protection |
| redirectUri required | string Redirect URI used in the authorization URL (must match) |
{- "code": "4/0AY0e-g7...",
- "state": "dXNlcklkOjE3MzQ0NTY3ODkwMDA6YWJjZGVmMTIzNDU2Nzg5MDphYmNkZWY=",
}{- "status": "success",
- "isNewUser": false,
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "user": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "email": "user@example.com",
- "name": "John Doe",
- "hasCalendarConnected": true,
}
}Returns whether the user has Google Calendar connected and when it was connected.
{- "connected": true,
- "connectedAt": "2025-10-15T18:45:00.000Z",
- "googleId": "123456789",
- "email": "user@example.com"
}Receives push notifications from Google when calendar changes occur. Note: This endpoint does not require authentication as it is called by Google.
| channelId | string Channel ID |
| resourceId | string Resource ID |
| state | string Resource state |
| resourceUri | string Resource URI |
{- "channelId": "string",
- "resourceId": "string",
- "state": "sync",
- "resourceUri": "string"
}{- "status": "received",
- "processedAt": "2025-10-15T18:45:00.000Z"
}DEPRECATED: Use process-sync-queue instead. This endpoint can create duplicate tasks. Internal API to sync all pending user calendar moments to Google Calendar. Updates sync status to "synced" on success or "failed" on error. No authentication required - internal use only.
| userId required | string |
{- "success": true,
- "totalMoments": 5,
- "syncedCount": 4,
- "failedCount": 1,
- "results": [
- {
- "momentId": "moment-123",
- "status": "synced",
- "calendarEventId": "event_abc123",
- "title": "Season Opener"
}, - {
- "momentId": "moment-456",
- "status": "failed",
- "error": "Invalid start time",
- "title": "Championship Game"
}
]
}Fetches latest moment data from Publisher API and updates all user-calendar-moments with the given momentId. All fields (title, description, dates, timezone, metadata) are fetched from Publisher API using the same logic as moment creation. The version field is automatically incremented for each updated record. Sync flags (needsSync, needsQueued, priority) are updated as usual. No request body required - all data comes from Publisher API. No authentication required - internal use only.
| momentId required | string |
{- "success": true,
- "updatedCount": 5000,
- "message": "Successfully updated 5000 moments and marked for sync"
}Deletes a moment from all user calendars. Only updates the database - task creation is handled by the sync queue. If softDelete=true (default), updates calendar event titles to "[CANCELED] {title}" and marks for sync (UPDATE tasks). If softDelete=false, marks moments as removed and marks for sync queue to create DELETE tasks. No authentication required - internal use only.
| momentId required | string |
| softDelete | boolean Example: softDelete=true If true, soft delete (update title). If false, hard delete (remove event). Default: true |
{- "success": true,
- "deletedCount": 5000,
- "message": "Successfully soft deleted 5000 moments"
}Fetches up to 100 calendar moments needing sync and creates cloud tasks. This endpoint should be called periodically by Cloud Scheduler (e.g., every minute). Handles CREATE (new moments), UPDATE (moment updates including soft-deleted), and DELETE (hard-deleted moments) operations. No authentication required - internal use only.
| batchSize required | string |
{- "success": true,
- "momentsFound": 100,
- "tasksCreated": 95,
- "usersProcessed": 15,
- "message": "Processed 100 moments across 15 users, created 95 tasks"
}Checks user responses to calendar events. Checks events 7 days after posting (if not ended) and after end date. This endpoint should be called periodically by Cloud Scheduler (e.g., daily). No authentication required - internal use only.
| batchSize | number Example: batchSize=100 Number of events to check (default: 100) |
{- "success": true,
- "momentsFound": 50,
- "checked": 48,
- "kept": 30,
- "deleted": 18,
- "message": "Checked 48 events across 5 users"
}TEMPORARY: Manually triggers response check for a specific user calendar moment. This endpoint is for testing and manual operations. No authentication required - internal use only.
| userCalendarMomentId required | string |
{- "success": true,
- "taskId": "task-abc123",
- "message": "Successfully queued response check for moment abc-123. Task ID: task-abc123"
}TEMPORARY: Scans Firestore user_tokens collection to detect tokens stored in plain text format (without encryption). This helps identify users affected by the token decryption issue. Results are logged for investigation. No authentication required - internal use only.
| limit | number Example: limit=1000 Maximum number of tokens to scan (default: 1000) |
{- "success": true,
- "totalScanned": 150,
- "legacyTokensFound": 5,
- "legacyUsers": [
- {
- "userId": "user-123",
- "accessTokenFormat": "plain_text",
- "refreshTokenFormat": "plain_text",
- "hasAccessToken": true,
- "hasRefreshToken": true
}
], - "message": "Scanned 150 tokens, found 5 with legacy format"
}TEMPORARY: Finds users with plain text tokens, refreshes them using Google API, and saves the new tokens in encrypted format. This fixes the token decryption issue. No authentication required - internal use only.
| limit | number Example: limit=50 Maximum number of users to process (default: 50) |
{- "success": true,
- "totalProcessed": 13,
- "successful": 10,
- "failed": 3,
- "results": [
- {
- "userId": "user-123",
- "success": true,
- "oldAccessTokenFormat": "plain_text",
- "oldRefreshTokenFormat": "plain_text",
- "newAccessTokenFormat": "encrypted",
- "newRefreshTokenFormat": "encrypted"
}
], - "message": "Processed 13 users, 10 successful, 3 failed"
}Receives Pub/Sub push messages for moment.version.published events. Fetches the published version from publisher-api, prepares calendar data, stores it in Redis cache, and bulk updates user_calendar_moments. No authentication required - internal use only.
{- "success": true
}Set the calendar used for new subscriptions when calendarId is not provided. Calendar must be in the user's bucket.
| calendarId required | string Calendar UUID to set as default. Must be in the current user's bucket. |
{- "calendarId": "123e4567-e89b-12d3-a456-426614174000"
}Authenticates user with Firebase ID token and returns JWT tokens
| campaignId required | string |
| idToken required | string Firebase ID token for authentication |
{- "idToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ..."
}{- "meta": { },
- "data": {
- "accessToken": "string",
- "refreshToken": "string",
- "user": { }
}
}Generate new access and refresh tokens using a valid refresh token
| refreshToken required | string JWT refresh token |
{- "refreshToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ..."
}{- "meta": { },
- "data": {
- "accessToken": "string",
- "refreshToken": "string",
- "user": { }
}
}Returns the current authenticated user's information from the JWT token
{- "meta": { },
- "data": {
- "id": "string",
- "firebaseUid": "string",
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "displayName": "string",
- "photoURL": "string",
- "phoneNumber": "string",
- "isActive": true,
- "emailVerified": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
}Logout the current authenticated user and log the logout activity in user_login_activities table
| reason | string Optional logout reason or note |
{- "reason": "User initiated logout"
}{- "success": true,
- "message": "Successfully logged out",
- "loggedOutAt": "2024-01-15T10:30:00.000Z"
}Creates a new guest user and returns access/refresh tokens. Optionally accepts momentId, listId, or teamId to track MOMENT_VIEWED, LIST_VIEWED, or TEAM_VIEWED events after guest user creation. Call this when a user first visits the app without logging in.
| momentId | string Optional moment ID to track MOMENT_VIEWED event after guest user creation |
| listId | string Optional list ID to track LIST_VIEWED event after guest user creation |
| teamId | string Optional team ID to track TEAM_VIEWED event after guest user creation |
| campaignId | string Optional campaign ID for tracking view events |
{- "momentId": "123e4567-e89b-12d3-a456-426614174000",
- "listId": "123e4567-e89b-12d3-a456-426614174000",
- "teamId": "123e4567-e89b-12d3-a456-426614174000",
- "campaignId": "123e4567-e89b-12d3-a456-426614174000"
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
}Generate new guest access and refresh tokens using a valid guest refresh token
| refreshToken required | string JWT refresh token |
{- "refreshToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ..."
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
} Check which list IDs from the provided comma-separated list are subscribed by the authenticated user.
Returns a map of list ID to boolean subscription status.
| ids required | string Example: ids=list-id-1,list-id-2,list-id-3 Comma-separated list of list IDs to check |
{- "list-id-1": true,
- "list-id-2": false,
- "list-id-3": true
}Check which moment IDs from the provided comma-separated list are subscribed by the authenticated user. Returns a map of moment ID to boolean subscription status.
| ids required | string Example: ids=moment-id-1,moment-id-2,moment-id-3 Comma-separated list of moment IDs to check |
{- "moment-id-1": true,
- "moment-id-2": false,
- "moment-id-3": true
}Create subscription to moments or lists for authenticated user. For list subscriptions, only the first resourceId will be used. Validates resources, creates subscriptions, generates calendar moments, and triggers async calendar sync.
| subscriptionType required | string Enum: "moment" "list" Type of subscription - either moment or list |
| resourceIds required | Array of strings Array of resource IDs (moment IDs or list IDs) being subscribed to. For list subscriptions, only the first item will be used. |
| calendarId | string Calendar to use for this subscription. Must be in the user's bucket. If omitted, the user's default calendar is used. |
| campaignId | string Campaign ID for tracking (optional). If not provided, defaultCampaignId from moment/list will be used. |
| metadata | object Additional metadata about the subscription preferences |
{- "subscriptionType": "moment",
- "resourceIds": [
- "f4c25fe7-f7c5-4246-b2c5-d18a23063169",
- "2067d63c-a429-4013-9123-00423a8dc163"
], - "calendarId": "123e4567-e89b-12d3-a456-426614174000",
- "campaignId": "123e4567-e89b-12d3-a456-426614174000",
- "metadata": {
- "reminderTime": "09:00",
- "frequency": "daily",
- "notificationEnabled": true,
- "timeZone": "America/New_York"
}
}{- "success": true,
- "message": "Subscription created successfully. Calendar sync in progress.",
- "data": {
- "subscriptionType": "moment",
- "resourceCount": 2,
- "calendarSyncStatus": "pending",
- "subscriptions": [
- {
- "id": "sub-123",
- "resourceId": "moment-123",
- "status": "active"
}, - {
- "id": null,
- "resourceId": "moment-456",
- "status": "failed",
- "error": "Resource validation failed"
}
]
}
}Generates a secure OAuth URL for Outlook Calendar integration. Accepts both authenticated users and guest users. Returns the URL that the frontend should redirect the user to. The state parameter is used for CSRF protection. Accepts optional redirect URL parameter.
| redirectUrl required | string Redirect URL for OAuth callback (required) |
{
}{- "state": "encrypted-state-token-here",
- "generatedAt": "2025-10-15T18:30:00.000Z",
- "expiresIn": 600
}Exchanges authorization code for tokens and stores encrypted tokens. For authenticated users: Updates existing user with calendar connection. For guest users: Creates full user account and migrates guest subscriptions. Returns app JWT and user information.
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Optional campaign ID for tracking sign-up/sign-in events. If not provided, events will be inserted without a campaignId. |
| code required | string Authorization code from OAuth provider |
| state required | string State parameter for CSRF protection |
| redirectUri required | string Redirect URI used in the authorization URL (must match) |
{- "code": "4/0AY0e-g7...",
- "state": "dXNlcklkOjE3MzQ0NTY3ODkwMDA6YWJjZGVmMTIzNDU2Nzg5MDphYmNkZWY=",
}{- "status": "success",
- "isNewUser": false,
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "user": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "email": "user@example.com",
- "name": "John Doe",
- "hasCalendarConnected": true,
}
}DEPRECATED: This endpoint is deprecated and may be removed in a future version. Returns suggested tags based on provided context and already-used tags.
| allContext required | Array of strings All available context tags |
object Options for suggestion generation | |
| usedTags required | Array of strings Already used tags |
{- "allContext": [
- "string"
], - "options": {
- "max_suggestions": 5
}, - "usedTags": [
- "string"
]
}{- "meta": { },
- "data": {
- "suggested_tags": [
- "string"
], - "metadata": {
- "model_used": "qwen/qwen-2.5-72b-instruct:free",
- "processing_time_ms": 4505,
- "req_id": "rt-34465592"
}
}
}Returns all filterable taxonomy tags that can be used for filtering moments and lists. This is a public endpoint and does not require authentication.
| entityType required | string Enum: "moment" "moment-list" Entity type to get filterable taxonomies for |
{- "meta": { },
- "data": {
- "taxonomies": [
- {
- "id": "event_type.game",
- "displayName": "Game",
- "namespace": "event_type",
- "tier": "T1",
- "parentId": null,
- "description": "Primary competitive match",
- "aliases": null,
- "intent": "filter",
- "filterExposed": true,
- "labelExposed": true,
- "isComputed": false,
- "conditions": null,
- "sortOrder": 0,
- "isMultiValue": false
}
]
}
}Fetches moment data by team slug and moment slug from the publisher API. Supports includes query parameter to fetch related resources like brand-kit, brand-info. MOMENT_VIEWED event is tracked only if user or guest is authenticated.
| teamSlug required | string Example: houston-rockets The team slug |
| momentSlug required | string Example: 2026-01-14-test-live-qa-session The moment slug |
| includes | string Example: includes=brand-kit,brand-info Comma-separated list of related resources to include (e.g., brand-kit,brand-info) |
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Campaign ID for tracking (optional). If not provided, defaultCampaignId from moment will be used. |
| ref | string Example: ref=aB3dE5fG User ref code for tracking who shared the moment (optional). If provided, sharedBy section will be included in response. |
{- "meta": { },
- "data": {
- "moment": {
- "id": "76f97ec4-1234-5678-9abc-def012345678",
- "title": "Lakers vs Warriors",
- "slug": "2025-12-03-lakers-vs-warriors-3582",
- "description": "Big game tonight!",
- "eventType": "Game",
- "startDate": "2025-12-03",
- "endDate": "2025-12-03",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "isRecurring": false,
- "reminders": [
- 30,
- 60
], - "images": [
- {
- "id": "daadd7cf-6b8d-40d1-a121-e25f66c28645",
}
], - "videos": [
- {
- "id": "e528959f-f7f7-438a-9be0-c1fc7325647d",
- "contentType": "video/mp4"
}
], - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "externalId": "external-123",
- "dataSource": "publisher",
- "status": "published",
- "teamId": "team-uuid-123",
- "teamSlug": "houston-rockets",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "createdBy": "user-uuid-123",
- "publishedBy": "user-uuid-123",
- "publishedAt": "2025-11-26T12:00:00.000Z",
- "publishDate": "2025-11-26",
- "isOfficial": false,
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z",
- "startDateTimeUtc": "2025-12-04T03:00:00.000Z",
- "endDateTimeUtc": "2025-12-04T06:00:00.000Z",
- "externalSource": null,
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": "team-uuid-warriors",
- "isHomeGame": true,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": [
- "youtube-uuid",
- "twitch-uuid"
], - "jerseyId": "jersey-uuid-123",
- "themeNightProfileId": "theme-uuid-123",
- "specialEntertainment": "Halftime show by local band",
- "demand": "HIGH",
- "teamName": "Los Angeles Lakers",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "needToKnows": "Please bring water bottle and comfortable shoes",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "$500 gift card and signed jersey",
- "winnerAnnouncedDate": "2024-02-15",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": "Must be within 50 miles of venue",
- "sponsorId": "sponsor-uuid-123",
- "sportId": "systemwide.sport.basketball",
- "sportDisplayName": "Basketball",
- "seasonId": "systemwide.season.summer",
- "seasonDisplayName": "Summer",
- "competitionStageIds": [
- "competition.regular_season",
- "competition.playoff"
], - "competitionStages": [
- {
- "id": "competition.regular_season",
- "displayName": "Regular Season"
}, - {
- "id": "competition.playoff",
- "displayName": "Playoff"
}
], - "genderId": "systemwide.gender.mens",
- "genderDisplayName": "Men's",
- "multiDayContextId": "multi_day_tournament.context.day_1",
- "multiDayContextDisplayName": "Day 1",
- "leagueContext": "league.context.home",
- "leagueContextDisplayName": "Home",
- "stage": "systemwide.stage.regular_season",
- "stageDisplayName": "Regular Season",
- "contextIds": [
- {
- "id": "liveent.context.free",
- "displayName": "Free"
}, - {
- "id": "liveent.context.ticketed",
- "displayName": "Ticketed"
}
], - "typeIds": [
- {
- "id": "liveent.type.music",
- "displayName": "Music"
}, - {
- "id": "liveent.type.comedy",
- "displayName": "Comedy"
}
], - "gameData": {
- "id": "904865c6-08e1-4ed3-aef0-ff1562afb12d",
- "momentId": "6a55110f-d510-42c2-a4d3-15d595a44647",
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": null,
- "isHomeGame": false,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": null,
- "jerseyId": null,
- "themeNightProfileId": null,
- "specialEntertainment": null,
- "demand": "Sell-Out",
- "createdAt": "2025-11-26T12:11:09.871Z",
- "updatedAt": "2025-11-26T12:11:10.182Z"
}, - "merchDropData": {
- "id": "59b73a5a-993c-4b1c-98b0-3507e91b55ae",
- "momentId": "b6e3b6fa-4ce4-468b-95af-8a4a0cacc658",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "createdAt": "2025-11-26T12:11:09.928Z",
- "updatedAt": "2025-11-26T12:11:09.928Z"
}, - "fanExperienceData": {
- "id": "17a27320-6546-4aa3-8dd6-d9e82abef13a",
- "momentId": "6e57e2b7-c234-47ee-baf1-a0a434428e97",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "createdAt": "2025-11-26T12:11:09.960Z",
- "updatedAt": "2025-11-26T12:11:10.211Z"
}, - "campData": {
- "id": "d6e50241-5ec2-415d-b298-85361390c3b5",
- "momentId": "7e608553-fd19-4641-a101-ec91715c217a",
- "price": 199.99,
- "needToKnows": "[UPDATED] Please bring water bottle, comfortable shoes, and a positive attitude!",
- "createdAt": "2025-11-26T12:11:10.024Z",
- "updatedAt": "2025-11-26T12:11:10.226Z"
}, - "contestData": {
- "id": "7a4e592e-905c-473d-b1bc-44120a59de1a",
- "momentId": "e2c943af-3430-46c1-9a49-f0f4b9777e28",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "[UPDATED] $1000 gift card, signed jersey, and VIP tickets",
- "winnerAnnouncedDate": "2026-01-10",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": null,
- "sponsorId": null,
- "createdAt": "2025-11-26T12:11:10.057Z",
- "updatedAt": "2025-11-26T12:11:10.242Z"
}, - "opposingTeam": null
}, - "brand-kit": {
- "id": "brand-kit-uuid-123",
- "name": "Lakers 2025 Brand Kit",
- "teamId": "team-uuid-123",
- "primaryColor": "#552583",
- "secondaryColor": "#FDB927",
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z"
}, - "brand-info": {
- "shortName": "Lakers",
- "longName": "Los Angeles Lakers",
- "abbreviation": "LAL",
- "customerSupportContact": "support@lakers.com",
- "currency": "USD",
- "defaultCalendarBoilerplate": "Join us for this exciting event!"
}, - "guestAuth": {
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
}, - "sharedBy": {
- "fullName": "John Doe"
}
}
}Fetches moment data by moment slug from the publisher API (without requiring team slug). Supports includes query parameter to fetch related resources like brand-kit, brand-info. MOMENT_VIEWED event is tracked only if user or guest is authenticated.
| momentSlug required | string Example: 2026-01-14-test-live-qa-session The moment slug |
| includes | string Example: includes=brand-kit,brand-info Comma-separated list of related resources to include (e.g., brand-kit,brand-info) |
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Campaign ID for tracking (optional). If not provided, defaultCampaignId from moment will be used. |
| ref | string Example: ref=aB3dE5fG User ref code for tracking who shared the moment (optional). If provided, sharedBy section will be included in response. |
{- "meta": { },
- "data": {
- "moment": {
- "id": "76f97ec4-1234-5678-9abc-def012345678",
- "title": "Lakers vs Warriors",
- "slug": "2025-12-03-lakers-vs-warriors-3582",
- "description": "Big game tonight!",
- "eventType": "Game",
- "startDate": "2025-12-03",
- "endDate": "2025-12-03",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "isRecurring": false,
- "reminders": [
- 30,
- 60
], - "images": [
- {
- "id": "daadd7cf-6b8d-40d1-a121-e25f66c28645",
}
], - "videos": [
- {
- "id": "e528959f-f7f7-438a-9be0-c1fc7325647d",
- "contentType": "video/mp4"
}
], - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "externalId": "external-123",
- "dataSource": "publisher",
- "status": "published",
- "teamId": "team-uuid-123",
- "teamSlug": "houston-rockets",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "createdBy": "user-uuid-123",
- "publishedBy": "user-uuid-123",
- "publishedAt": "2025-11-26T12:00:00.000Z",
- "publishDate": "2025-11-26",
- "isOfficial": false,
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z",
- "startDateTimeUtc": "2025-12-04T03:00:00.000Z",
- "endDateTimeUtc": "2025-12-04T06:00:00.000Z",
- "externalSource": null,
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": "team-uuid-warriors",
- "isHomeGame": true,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": [
- "youtube-uuid",
- "twitch-uuid"
], - "jerseyId": "jersey-uuid-123",
- "themeNightProfileId": "theme-uuid-123",
- "specialEntertainment": "Halftime show by local band",
- "demand": "HIGH",
- "teamName": "Los Angeles Lakers",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "needToKnows": "Please bring water bottle and comfortable shoes",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "$500 gift card and signed jersey",
- "winnerAnnouncedDate": "2024-02-15",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": "Must be within 50 miles of venue",
- "sponsorId": "sponsor-uuid-123",
- "sportId": "systemwide.sport.basketball",
- "sportDisplayName": "Basketball",
- "seasonId": "systemwide.season.summer",
- "seasonDisplayName": "Summer",
- "competitionStageIds": [
- "competition.regular_season",
- "competition.playoff"
], - "competitionStages": [
- {
- "id": "competition.regular_season",
- "displayName": "Regular Season"
}, - {
- "id": "competition.playoff",
- "displayName": "Playoff"
}
], - "genderId": "systemwide.gender.mens",
- "genderDisplayName": "Men's",
- "multiDayContextId": "multi_day_tournament.context.day_1",
- "multiDayContextDisplayName": "Day 1",
- "leagueContext": "league.context.home",
- "leagueContextDisplayName": "Home",
- "stage": "systemwide.stage.regular_season",
- "stageDisplayName": "Regular Season",
- "contextIds": [
- {
- "id": "liveent.context.free",
- "displayName": "Free"
}, - {
- "id": "liveent.context.ticketed",
- "displayName": "Ticketed"
}
], - "typeIds": [
- {
- "id": "liveent.type.music",
- "displayName": "Music"
}, - {
- "id": "liveent.type.comedy",
- "displayName": "Comedy"
}
], - "gameData": {
- "id": "904865c6-08e1-4ed3-aef0-ff1562afb12d",
- "momentId": "6a55110f-d510-42c2-a4d3-15d595a44647",
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": null,
- "isHomeGame": false,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": null,
- "jerseyId": null,
- "themeNightProfileId": null,
- "specialEntertainment": null,
- "demand": "Sell-Out",
- "createdAt": "2025-11-26T12:11:09.871Z",
- "updatedAt": "2025-11-26T12:11:10.182Z"
}, - "merchDropData": {
- "id": "59b73a5a-993c-4b1c-98b0-3507e91b55ae",
- "momentId": "b6e3b6fa-4ce4-468b-95af-8a4a0cacc658",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "createdAt": "2025-11-26T12:11:09.928Z",
- "updatedAt": "2025-11-26T12:11:09.928Z"
}, - "fanExperienceData": {
- "id": "17a27320-6546-4aa3-8dd6-d9e82abef13a",
- "momentId": "6e57e2b7-c234-47ee-baf1-a0a434428e97",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "createdAt": "2025-11-26T12:11:09.960Z",
- "updatedAt": "2025-11-26T12:11:10.211Z"
}, - "campData": {
- "id": "d6e50241-5ec2-415d-b298-85361390c3b5",
- "momentId": "7e608553-fd19-4641-a101-ec91715c217a",
- "price": 199.99,
- "needToKnows": "[UPDATED] Please bring water bottle, comfortable shoes, and a positive attitude!",
- "createdAt": "2025-11-26T12:11:10.024Z",
- "updatedAt": "2025-11-26T12:11:10.226Z"
}, - "contestData": {
- "id": "7a4e592e-905c-473d-b1bc-44120a59de1a",
- "momentId": "e2c943af-3430-46c1-9a49-f0f4b9777e28",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "[UPDATED] $1000 gift card, signed jersey, and VIP tickets",
- "winnerAnnouncedDate": "2026-01-10",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": null,
- "sponsorId": null,
- "createdAt": "2025-11-26T12:11:10.057Z",
- "updatedAt": "2025-11-26T12:11:10.242Z"
}, - "opposingTeam": null
}, - "brand-kit": {
- "id": "brand-kit-uuid-123",
- "name": "Lakers 2025 Brand Kit",
- "teamId": "team-uuid-123",
- "primaryColor": "#552583",
- "secondaryColor": "#FDB927",
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z"
}, - "brand-info": {
- "shortName": "Lakers",
- "longName": "Los Angeles Lakers",
- "abbreviation": "LAL",
- "customerSupportContact": "support@lakers.com",
- "currency": "USD",
- "defaultCalendarBoilerplate": "Join us for this exciting event!"
}, - "guestAuth": {
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
}, - "sharedBy": {
- "fullName": "John Doe"
}
}
}Fetches list data by global slug from the publisher API. Supports include query parameter to fetch related resources like moments, brand-kit, and brand-info. LIST_VIEWED event is tracked only if user or guest is authenticated.
| listSlug required | string Example: lakers-regular-season-2024 The global slug of the list (unique across all teams) |
| include | string Example: include=moments,brand-kit,brand-info Comma-separated list of related resources to include (e.g., moments,brand-kit,brand-info) |
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Campaign ID for tracking (optional). If not provided, defaultCampaignId from list will be used. |
{- "meta": { },
- "data": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "teamId": "team-uuid-123",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "title": "Regular Season 2024",
- "subTitle": "All regular season games",
- "description": "Complete schedule for the 2024 regular season",
- "slug": "lakers-regular-season-2024",
- "videos": [ ],
- "type": "schedule",
- "status": "published",
- "startDate": "2024-10-15T00:00:00.000Z",
- "endDate": "2024-12-31T00:00:00.000Z",
- "timezone": "America/Los_Angeles",
- "metadata": { },
- "publishedAt": "2024-09-01T00:00:00.000Z",
- "createdAt": "2024-08-15T00:00:00.000Z",
- "updatedAt": "2024-09-01T00:00:00.000Z",
- "tags": [
- "basketball",
- "nba",
- "regular-season"
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "moments": [
- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "title": "Lakers vs Warriors",
- "slug": "2024-10-15-lakers-vs-warriors",
- "description": "Regular season game",
- "eventType": "Game",
- "startDate": "2024-10-15",
- "endDate": "2024-10-15",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "startDateTimeUtc": "2024-10-15T19:30:00.000Z",
- "endDateTimeUtc": "2024-10-15T22:00:00.000Z",
- "status": "published",
- "teamId": "team-uuid-123",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venueName": "Madison Square Garden",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
]
}
], - "brand-kit": {
- "id": "brand-kit-uuid-123",
- "name": "Lakers 2025 Brand Kit",
- "teamId": "team-uuid-123",
- "primaryColor": "#552583",
- "secondaryColor": "#FDB927",
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z"
}, - "brand-info": {
- "shortName": "Lakers",
- "longName": "Los Angeles Lakers",
- "abbreviation": "LAL",
- "customerSupportContact": "support@lakers.com",
- "currency": "USD",
- "defaultCalendarBoilerplate": "Join us for this exciting event!"
}, - "guestAuth": {
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
}
}
}Fetches list data by team slug and list slug from the publisher API. Supports include query parameter to fetch related resources like moments, brand-kit, and brand-info. LIST_VIEWED event is tracked only if user or guest is authenticated.
| teamSlug required | string Example: lakers The slug of the team that owns the list |
| listSlug required | string Example: regular-season-2024 The team slug of the list (unique within the team) |
| include | string Example: include=moments,brand-kit,brand-info Comma-separated list of related resources to include (e.g., moments,brand-kit,brand-info) |
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Campaign ID for tracking (optional). If not provided, defaultCampaignId from list will be used. |
{- "meta": { },
- "data": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "teamId": "team-uuid-123",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "title": "Regular Season 2024",
- "subTitle": "All regular season games",
- "description": "Complete schedule for the 2024 regular season",
- "slug": "lakers-regular-season-2024",
- "videos": [ ],
- "type": "schedule",
- "status": "published",
- "startDate": "2024-10-15T00:00:00.000Z",
- "endDate": "2024-12-31T00:00:00.000Z",
- "timezone": "America/Los_Angeles",
- "metadata": { },
- "publishedAt": "2024-09-01T00:00:00.000Z",
- "createdAt": "2024-08-15T00:00:00.000Z",
- "updatedAt": "2024-09-01T00:00:00.000Z",
- "tags": [
- "basketball",
- "nba",
- "regular-season"
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "moments": [
- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "title": "Lakers vs Warriors",
- "slug": "2024-10-15-lakers-vs-warriors",
- "description": "Regular season game",
- "eventType": "Game",
- "startDate": "2024-10-15",
- "endDate": "2024-10-15",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "startDateTimeUtc": "2024-10-15T19:30:00.000Z",
- "endDateTimeUtc": "2024-10-15T22:00:00.000Z",
- "status": "published",
- "teamId": "team-uuid-123",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venueName": "Madison Square Garden",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
]
}
], - "brand-kit": {
- "id": "brand-kit-uuid-123",
- "name": "Lakers 2025 Brand Kit",
- "teamId": "team-uuid-123",
- "primaryColor": "#552583",
- "secondaryColor": "#FDB927",
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z"
}, - "brand-info": {
- "shortName": "Lakers",
- "longName": "Los Angeles Lakers",
- "abbreviation": "LAL",
- "customerSupportContact": "support@lakers.com",
- "currency": "USD",
- "defaultCalendarBoilerplate": "Join us for this exciting event!"
}, - "guestAuth": {
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "guestId": "550e8400-e29b-41d4-a716-446655440000",
- "guestToken": "guest_a1b2c3d4e5f6g7h8...",
- "isGuest": true
}
}
}Fetches team data by team slug from the publisher API. Supports includes query parameter to fetch related resources like brand-kit, brand-info, and moments. TEAM_VIEWED event is tracked only if user or guest is authenticated.
| teamSlug required | string Example: marketing-team The team slug |
| includes | string Example: includes=brand-kit,brand-info,moments Comma-separated list of related resources to include (e.g., brand-kit,brand-info,moments). Moments will return published moments for the team starting from today, along with availableTagIds showing all unique tag IDs in matching documents. |
| campaignId | string Example: campaignId=123e4567-e89b-12d3-a456-426614174000 Campaign ID for tracking (optional). If not provided, defaultCampaignId from team will be used. |
{- "meta": { },
- "data": {
- "team": {
- "id": "cb4b122f-41d0-4a79-9391-280d88f2c462",
- "team": "Marketing Team",
- "slug": "marketing-team",
- "externalId": null,
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "isActive": true,
- "createdAt": "2025-12-08T12:29:23.740Z",
- "updatedAt": "2025-12-08T12:29:26.210Z"
}, - "brand-kit": {
- "id": "brand-kit-uuid-123",
- "name": "Lakers 2025 Brand Kit",
- "teamId": "team-uuid-123",
- "primaryColor": "#552583",
- "secondaryColor": "#FDB927",
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z"
}, - "brand-info": {
- "shortName": "Lakers",
- "longName": "Los Angeles Lakers",
- "abbreviation": "LAL",
- "customerSupportContact": "support@lakers.com",
- "currency": "USD",
- "defaultCalendarBoilerplate": "Join us for this exciting event!"
}, - "moments": [
- {
- "id": "76f97ec4-1234-5678-9abc-def012345678",
- "title": "Lakers vs Warriors",
- "slug": "2025-12-03-lakers-vs-warriors-3582",
- "description": "Big game tonight!",
- "eventType": "Game",
- "startDate": "2025-12-03",
- "endDate": "2025-12-03",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "isRecurring": false,
- "reminders": [
- 30,
- 60
], - "images": [
- {
- "id": "daadd7cf-6b8d-40d1-a121-e25f66c28645",
}
], - "videos": [
- {
- "id": "e528959f-f7f7-438a-9be0-c1fc7325647d",
- "contentType": "video/mp4"
}
], - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "externalId": "external-123",
- "dataSource": "publisher",
- "status": "published",
- "teamId": "team-uuid-123",
- "teamSlug": "houston-rockets",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "createdBy": "user-uuid-123",
- "publishedBy": "user-uuid-123",
- "publishedAt": "2025-11-26T12:00:00.000Z",
- "publishDate": "2025-11-26",
- "isOfficial": false,
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z",
- "startDateTimeUtc": "2025-12-04T03:00:00.000Z",
- "endDateTimeUtc": "2025-12-04T06:00:00.000Z",
- "externalSource": null,
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": "team-uuid-warriors",
- "isHomeGame": true,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": [
- "youtube-uuid",
- "twitch-uuid"
], - "jerseyId": "jersey-uuid-123",
- "themeNightProfileId": "theme-uuid-123",
- "specialEntertainment": "Halftime show by local band",
- "demand": "HIGH",
- "teamName": "Los Angeles Lakers",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "needToKnows": "Please bring water bottle and comfortable shoes",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "$500 gift card and signed jersey",
- "winnerAnnouncedDate": "2024-02-15",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": "Must be within 50 miles of venue",
- "sponsorId": "sponsor-uuid-123",
- "sportId": "systemwide.sport.basketball",
- "sportDisplayName": "Basketball",
- "seasonId": "systemwide.season.summer",
- "seasonDisplayName": "Summer",
- "competitionStageIds": [
- "competition.regular_season",
- "competition.playoff"
], - "competitionStages": [
- {
- "id": "competition.regular_season",
- "displayName": "Regular Season"
}, - {
- "id": "competition.playoff",
- "displayName": "Playoff"
}
], - "genderId": "systemwide.gender.mens",
- "genderDisplayName": "Men's",
- "multiDayContextId": "multi_day_tournament.context.day_1",
- "multiDayContextDisplayName": "Day 1",
- "leagueContext": "league.context.home",
- "leagueContextDisplayName": "Home",
- "stage": "systemwide.stage.regular_season",
- "stageDisplayName": "Regular Season",
- "contextIds": [
- {
- "id": "liveent.context.free",
- "displayName": "Free"
}, - {
- "id": "liveent.context.ticketed",
- "displayName": "Ticketed"
}
], - "typeIds": [
- {
- "id": "liveent.type.music",
- "displayName": "Music"
}, - {
- "id": "liveent.type.comedy",
- "displayName": "Comedy"
}
], - "gameData": {
- "id": "904865c6-08e1-4ed3-aef0-ff1562afb12d",
- "momentId": "6a55110f-d510-42c2-a4d3-15d595a44647",
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": null,
- "isHomeGame": false,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": null,
- "jerseyId": null,
- "themeNightProfileId": null,
- "specialEntertainment": null,
- "demand": "Sell-Out",
- "createdAt": "2025-11-26T12:11:09.871Z",
- "updatedAt": "2025-11-26T12:11:10.182Z"
}, - "merchDropData": {
- "id": "59b73a5a-993c-4b1c-98b0-3507e91b55ae",
- "momentId": "b6e3b6fa-4ce4-468b-95af-8a4a0cacc658",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "createdAt": "2025-11-26T12:11:09.928Z",
- "updatedAt": "2025-11-26T12:11:09.928Z"
}, - "fanExperienceData": {
- "id": "17a27320-6546-4aa3-8dd6-d9e82abef13a",
- "momentId": "6e57e2b7-c234-47ee-baf1-a0a434428e97",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "createdAt": "2025-11-26T12:11:09.960Z",
- "updatedAt": "2025-11-26T12:11:10.211Z"
}, - "campData": {
- "id": "d6e50241-5ec2-415d-b298-85361390c3b5",
- "momentId": "7e608553-fd19-4641-a101-ec91715c217a",
- "price": 199.99,
- "needToKnows": "[UPDATED] Please bring water bottle, comfortable shoes, and a positive attitude!",
- "createdAt": "2025-11-26T12:11:10.024Z",
- "updatedAt": "2025-11-26T12:11:10.226Z"
}, - "contestData": {
- "id": "7a4e592e-905c-473d-b1bc-44120a59de1a",
- "momentId": "e2c943af-3430-46c1-9a49-f0f4b9777e28",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "[UPDATED] $1000 gift card, signed jersey, and VIP tickets",
- "winnerAnnouncedDate": "2026-01-10",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": null,
- "sponsorId": null,
- "createdAt": "2025-11-26T12:11:10.057Z",
- "updatedAt": "2025-11-26T12:11:10.242Z"
}, - "opposingTeam": null
}
], - "momentsPagination": {
- "total": 150,
- "limit": 20,
- "hasNext": true,
- "hasPrev": false,
- "nextCursor": "eyJzdGFydERhdGVUaW1lIjoiMjAyNS0xMi0xNlQwODowMDowMC4wMDBaIiwiaWQiOiJjMDZmOWEzZS1kMTIzLTRmMDAtYWU2Yi00MTU2NmMyZjZiOWIifQ=="
}, - "availableTagIds": [
- "event_type.practice",
- "event_type.game",
- "theme.premium.on_court",
- "time.weekdays"
], - "availableTimeFilters": [
- "time.evening",
- "time.morning",
- "time.upcoming_soon",
- "time.weekdays",
- "time.weekend"
]
}
}Fetches published moments for a team with cursor-based pagination. Use the nextCursor from the team by slug response (or previous moments response) to fetch the next page. Returns moments starting from today when cursor is not provided. Supports filtering by tags (comma-separated, AND logic). Supports timezone parameter for time-based tag conversions (e.g., time.today, time.tomorrow).
| teamId required | string Example: cb4b122f-41d0-4a79-9391-280d88f2c462 The team ID (UUID) |
| cursor | string Example: cursor=eyJzdGFydERhdGVUaW1lIjoiMjAyNS0xMi0xNlQwODowMDowMC4wMDBaIiwiaWQiOiJjMDZmOWEzZS1kMTIzLTRmMDAtYWU2Yi00MTU2NmMyZjZiOWIifQ== Cursor for pagination. Use the nextCursor from the previous response to fetch the next page. |
| limit | number [ 1 .. 100 ] Default: 20 Example: limit=20 Number of items per page |
| tags | string Example: tags=event_type.merch_drop,event_type.game Comma-separated list of tags to filter moments. All specified tags must match. |
| timezone | string Example: timezone=America/New_York IANA timezone name for time-based tag conversions (e.g., "America/New_York", "Europe/London") |
{- "meta": { },
- "data": {
- "moments": [
- {
- "id": "76f97ec4-1234-5678-9abc-def012345678",
- "title": "Lakers vs Warriors",
- "slug": "2025-12-03-lakers-vs-warriors-3582",
- "description": "Big game tonight!",
- "eventType": "Game",
- "startDate": "2025-12-03",
- "endDate": "2025-12-03",
- "isAllDay": false,
- "startTime": "19:30",
- "endTime": "22:00",
- "timezone": "America/Los_Angeles",
- "isOnlineEvent": false,
- "venueId": "venue-uuid-123",
- "venue": {
- "id": "dcd68e90-b4e0-4a8e-a35d-ba9154527276",
- "officialName": "Test Main Arena",
- "shortName": "Main Arena",
- "aliases": [
- "The Garden",
- "MSG"
], - "latitude": 34.0522,
- "longitude": -118.2437,
- "location": "Downtown Manhattan",
- "address": "123 Main Street",
- "city": "Los Angeles",
- "state": "CA",
- "zipCode": "90015",
- "doorsOpenOffset": 90,
- "parkingOptions": [
- {
- "name": "Main Parking Lot",
- "price": "$25",
- "distance": "0.2 miles"
}, - {
- "name": "VIP Parking",
- "price": "$50",
- "distance": "0.1 miles"
}
], - "bagPolicy": "Bags must be smaller than 12\" x 12\" x 6\"",
- "prohibitedItems": "Weapons, outside food and beverages, large bags",
- "reentryAllowed": "Not allowed",
- "reentryDetails": "Re-entry allowed with valid ticket stub",
- "adaAvailable": true,
- "wheelchairAccess": "Full wheelchair access available at all entrances",
- "teamId": "fd82380a-f9d7-45bf-aed8-7344f0d4d638",
- "externalId": null,
- "dataSource": "publisher",
- "parentId": null,
- "createdAt": "2025-11-24T12:18:56.868Z",
- "updatedAt": "2025-11-24T12:18:56.868Z"
}, - "isRecurring": false,
- "reminders": [
- 30,
- 60
], - "images": [
- {
- "id": "daadd7cf-6b8d-40d1-a121-e25f66c28645",
}
], - "videos": [
- {
- "id": "e528959f-f7f7-438a-9be0-c1fc7325647d",
- "contentType": "video/mp4"
}
], - "tags": [
- {
- "id": "event_type.game",
- "displayName": "Game"
}, - {
- "id": "theme.vip",
- "displayName": "VIP / Premium"
}
], - "widgets": [
- {
- "widgetType": "SPONSOR",
- "category": "MOMENT_OPTIONAL",
- "widgetData": {
- "sponsorId": "550e8400-e29b-41d4-a716-446655440000"
}, - "data": {
- "sponsor": {
- "id": "sponsor-uuid-123",
- "name": "Nike",
- "sponsorType": "Equipment Sponsor",
- "businessCategories": [
- "Sports",
- "Equipment"
]
}
}
}
], - "externalId": "external-123",
- "dataSource": "publisher",
- "status": "published",
- "teamId": "team-uuid-123",
- "teamSlug": "houston-rockets",
- "defaultCampaignId": "123e4567-e89b-12d3-a456-426614174000",
- "createdBy": "user-uuid-123",
- "publishedBy": "user-uuid-123",
- "publishedAt": "2025-11-26T12:00:00.000Z",
- "publishDate": "2025-11-26",
- "isOfficial": false,
- "createdAt": "2025-11-26T10:00:00.000Z",
- "updatedAt": "2025-11-26T12:00:00.000Z",
- "startDateTimeUtc": "2025-12-04T03:00:00.000Z",
- "endDateTimeUtc": "2025-12-04T06:00:00.000Z",
- "externalSource": null,
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": "team-uuid-warriors",
- "isHomeGame": true,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": [
- "youtube-uuid",
- "twitch-uuid"
], - "jerseyId": "jersey-uuid-123",
- "themeNightProfileId": "theme-uuid-123",
- "specialEntertainment": "Halftime show by local band",
- "demand": "HIGH",
- "teamName": "Los Angeles Lakers",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "needToKnows": "Please bring water bottle and comfortable shoes",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "$500 gift card and signed jersey",
- "winnerAnnouncedDate": "2024-02-15",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": "Must be within 50 miles of venue",
- "sponsorId": "sponsor-uuid-123",
- "sportId": "systemwide.sport.basketball",
- "sportDisplayName": "Basketball",
- "seasonId": "systemwide.season.summer",
- "seasonDisplayName": "Summer",
- "competitionStageIds": [
- "competition.regular_season",
- "competition.playoff"
], - "competitionStages": [
- {
- "id": "competition.regular_season",
- "displayName": "Regular Season"
}, - {
- "id": "competition.playoff",
- "displayName": "Playoff"
}
], - "genderId": "systemwide.gender.mens",
- "genderDisplayName": "Men's",
- "multiDayContextId": "multi_day_tournament.context.day_1",
- "multiDayContextDisplayName": "Day 1",
- "leagueContext": "league.context.home",
- "leagueContextDisplayName": "Home",
- "stage": "systemwide.stage.regular_season",
- "stageDisplayName": "Regular Season",
- "contextIds": [
- {
- "id": "liveent.context.free",
- "displayName": "Free"
}, - {
- "id": "liveent.context.ticketed",
- "displayName": "Ticketed"
}
], - "typeIds": [
- {
- "id": "liveent.type.music",
- "displayName": "Music"
}, - {
- "id": "liveent.type.comedy",
- "displayName": "Comedy"
}
], - "gameData": {
- "id": "904865c6-08e1-4ed3-aef0-ff1562afb12d",
- "momentId": "6a55110f-d510-42c2-a4d3-15d595a44647",
- "opponent": "Golden State Warriors",
- "opponentAbbreviation": "GSW",
- "opponentTeamId": null,
- "isHomeGame": false,
- "seasonStage": "Regular-Season",
- "streamingProviderIds": null,
- "jerseyId": null,
- "themeNightProfileId": null,
- "specialEntertainment": null,
- "demand": "Sell-Out",
- "createdAt": "2025-11-26T12:11:09.871Z",
- "updatedAt": "2025-11-26T12:11:10.182Z"
}, - "merchDropData": {
- "id": "59b73a5a-993c-4b1c-98b0-3507e91b55ae",
- "momentId": "b6e3b6fa-4ce4-468b-95af-8a4a0cacc658",
- "returnPolicy": "Returns accepted within 30 days of purchase",
- "createdAt": "2025-11-26T12:11:09.928Z",
- "updatedAt": "2025-11-26T12:11:09.928Z"
}, - "fanExperienceData": {
- "id": "17a27320-6546-4aa3-8dd6-d9e82abef13a",
- "momentId": "6e57e2b7-c234-47ee-baf1-a0a434428e97",
- "price": 149.99,
- "isRefundable": true,
- "is21Plus": false,
- "createdAt": "2025-11-26T12:11:09.960Z",
- "updatedAt": "2025-11-26T12:11:10.211Z"
}, - "campData": {
- "id": "d6e50241-5ec2-415d-b298-85361390c3b5",
- "momentId": "7e608553-fd19-4641-a101-ec91715c217a",
- "price": 199.99,
- "needToKnows": "[UPDATED] Please bring water bottle, comfortable shoes, and a positive attitude!",
- "createdAt": "2025-11-26T12:11:10.024Z",
- "updatedAt": "2025-11-26T12:11:10.226Z"
}, - "contestData": {
- "id": "7a4e592e-905c-473d-b1bc-44120a59de1a",
- "momentId": "e2c943af-3430-46c1-9a49-f0f4b9777e28",
- "frequency": "Once per day",
- "needToKnowsType": "Custom",
- "needToKnowsCustom": "Must be 18+ and located in the US",
- "rulesDisclaimersType": "Custom",
- "rulesDisclaimersCustom": "No purchase necessary. Void where prohibited.",
- "prize": "[UPDATED] $1000 gift card, signed jersey, and VIP tickets",
- "winnerAnnouncedDate": "2026-01-10",
- "winnerAnnouncedChannel": "Social media and email",
- "ageRestriction": "18+",
- "radiusLocationRequirements": null,
- "sponsorId": null,
- "createdAt": "2025-11-26T12:11:10.057Z",
- "updatedAt": "2025-11-26T12:11:10.242Z"
}, - "opposingTeam": null
}
], - "pagination": {
- "total": 150,
- "limit": 20,
- "hasNext": true,
- "hasPrev": false,
- "nextCursor": "eyJzdGFydERhdGVUaW1lIjoiMjAyNS0xMi0xNlQwODowMDowMC4wMDBaIiwiaWQiOiJjMDZmOWEzZS1kMTIzLTRmMDAtYWU2Yi00MTU2NmMyZjZiOWIifQ=="
}, - "availableTagIds": [
- "event_type.practice",
- "event_type.game",
- "theme.premium.on_court",
- "time.weekdays"
], - "availableTimeFilters": [
- "time.evening",
- "time.morning",
- "time.upcoming_soon",
- "time.weekdays",
- "time.weekend"
]
}
} Migrates `user_tokens` from old format (document ID = `userId`) to new format (document ID = `userId_provider`, e.g. `userId_google`) in three phases.
**Parameters:**
- **`dryRun`** (default: false): When `true`, no writes. Response shows how many would be copied and/or deleted. **Phase 1** – run first to validate.
- **`copyToNewFormat`** (default: false): When `true`, for each old-format doc creates a new doc with ID `userId_google` and data + `provider: 'google'`. Old docs are **not** deleted, so both old and new exist. **Phase 2** – run after dry run, then verify the app works with new format.
- **`deleteOldFormat`** (default: false): When `true`, deletes every document whose ID is old format (no `_google`/`_outlook` suffix). **Phase 3** – run only after confirming everything works with new format.
**Recommended flow:**
1. `dryRun: true` (copyToNewFormat + deleteOldFormat false) → check counts.
2. `copyToNewFormat: true`, `deleteOldFormat: false` → both formats exist; verify app with new format.
3. `deleteOldFormat: true` (copyToNewFormat false) → remove old-format docs only.
⚠️ **WARNING**: Data migration. Backup before Phase 2/3. Run Phase 3 only after verification.
| dryRun | boolean Default: false When true, no writes are performed; response shows what would be copied and/or deleted. Use first to validate (Phase 1). |
| copyToNewFormat | boolean Default: false When true, creates new-format documents (userId_provider) with copied data + provider field. Old documents are left in place so both exist (Phase 2). |
| deleteOldFormat | boolean Default: false When true, deletes old-format documents (document ID = userId only). Run only after verifying app works with new format (Phase 3). |
{- "dryRun": true,
- "copyToNewFormat": false,
- "deleteOldFormat": false
}{- "totalDocuments": 150,
- "copiedCount": 145,
- "deletedCount": 0,
- "skippedCount": 5,
- "errorCount": 0,
- "errors": [ ],
- "dryRun": false,
- "message": "Copied 145 to new format; deleted 0 old format"
} For each user_calendars row, reads token doc `userId_provider` and writes to `cal_<calendarId>`.
Run after DB migrations 19–22 (users provider/providerId, calendars, user_calendars, backfill).
**dryRun** (default: false): when true, no writes; response shows counts.
| dryRun | boolean Default: false When true, no writes; response shows what would be copied |
{- "dryRun": false
}{- "totalLinks": 0,
- "copiedCount": 0,
- "skippedCount": 0,
- "errorCount": 0,
- "errors": [
- "string"
], - "dryRun": true,
- "message": "string"
}