@vertikalx/vtx-backend-client 3.0.0-dev.8 → 3.0.1-dev-max.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/package.json +16 -3
  2. package/src/api/api-call-headers.ts +35 -0
  3. package/src/api/backend-response.ts +14 -0
  4. package/src/api/domains.ts +6 -0
  5. package/src/api/response-builder.ts +165 -0
  6. package/src/api/types.ts +9 -0
  7. package/src/api/vtx-apikey-api.ts +23 -0
  8. package/src/api/vtx-base-api.ts +2253 -0
  9. package/src/api/vtx-mobile-api.ts +43 -0
  10. package/src/api/vtx-web-browser-api.ts +46 -0
  11. package/src/api/vtx-web-server-api.ts +41 -0
  12. package/src/client/index.ts +65 -0
  13. package/src/client/runtime/batcher.ts +275 -0
  14. package/src/client/runtime/createClient.ts +68 -0
  15. package/src/client/runtime/error.ts +29 -0
  16. package/src/client/runtime/fetcher.ts +97 -0
  17. package/src/client/runtime/generateGraphqlOperation.ts +225 -0
  18. package/src/client/runtime/index.ts +13 -0
  19. package/src/client/runtime/linkTypeMap.ts +156 -0
  20. package/src/client/runtime/typeSelection.ts +95 -0
  21. package/src/client/runtime/types.ts +69 -0
  22. package/src/client/schema.graphql +4256 -0
  23. package/src/client/schema.ts +8329 -0
  24. package/src/client/{types.js → types.ts} +6016 -2230
  25. package/src/generated/graphql.ts +12445 -0
  26. package/src/{index.d.ts → index.ts} +7 -2
  27. package/src/operations/admin.graphql +19 -0
  28. package/src/operations/ai-coach.graphql +117 -0
  29. package/src/operations/athlete.graphql +1764 -0
  30. package/src/operations/auth.graphql +301 -0
  31. package/src/operations/campaign.graphql +775 -0
  32. package/src/operations/email-campaign.graphql +160 -0
  33. package/src/operations/followers.graphql +45 -0
  34. package/src/operations/integrations.graphql +216 -0
  35. package/src/operations/leaderboard.graphql +54 -0
  36. package/src/operations/media.graphql +179 -0
  37. package/src/operations/notifications.graphql +93 -0
  38. package/src/operations/offers.graphql +368 -0
  39. package/src/operations/onboarding.graphql +29 -0
  40. package/src/operations/sponsor.graphql +368 -0
  41. package/src/operations/sport.graphql +132 -0
  42. package/src/operations/user.graphql +446 -0
  43. package/tsconfig.lib.json +10 -0
  44. package/src/api/api-call-headers.d.ts +0 -12
  45. package/src/api/api-call-headers.js +0 -16
  46. package/src/api/api-call-headers.js.map +0 -1
  47. package/src/api/backend-response.d.ts +0 -10
  48. package/src/api/backend-response.js +0 -3
  49. package/src/api/backend-response.js.map +0 -1
  50. package/src/api/domains.d.ts +0 -4
  51. package/src/api/domains.js +0 -8
  52. package/src/api/domains.js.map +0 -1
  53. package/src/api/response-builder.d.ts +0 -4
  54. package/src/api/response-builder.js +0 -123
  55. package/src/api/response-builder.js.map +0 -1
  56. package/src/api/types.d.ts +0 -2
  57. package/src/api/types.js +0 -3
  58. package/src/api/types.js.map +0 -1
  59. package/src/api/vtx-apikey-api.d.ts +0 -6
  60. package/src/api/vtx-apikey-api.js +0 -19
  61. package/src/api/vtx-apikey-api.js.map +0 -1
  62. package/src/api/vtx-base-api.d.ts +0 -134
  63. package/src/api/vtx-base-api.js +0 -8586
  64. package/src/api/vtx-base-api.js.map +0 -1
  65. package/src/api/vtx-mobile-api.d.ts +0 -9
  66. package/src/api/vtx-mobile-api.js +0 -62
  67. package/src/api/vtx-mobile-api.js.map +0 -1
  68. package/src/api/vtx-web-browser-api.d.ts +0 -7
  69. package/src/api/vtx-web-browser-api.js +0 -36
  70. package/src/api/vtx-web-browser-api.js.map +0 -1
  71. package/src/api/vtx-web-server-api.d.ts +0 -7
  72. package/src/api/vtx-web-server-api.js +0 -33
  73. package/src/api/vtx-web-server-api.js.map +0 -1
  74. package/src/client/index.d.ts +0 -25
  75. package/src/client/index.js +0 -44
  76. package/src/client/index.js.map +0 -1
  77. package/src/client/runtime/batcher.d.ts +0 -36
  78. package/src/client/runtime/batcher.js +0 -123
  79. package/src/client/runtime/batcher.js.map +0 -1
  80. package/src/client/runtime/createClient.d.ts +0 -17
  81. package/src/client/runtime/createClient.js +0 -28
  82. package/src/client/runtime/createClient.js.map +0 -1
  83. package/src/client/runtime/error.d.ts +0 -15
  84. package/src/client/runtime/error.js +0 -19
  85. package/src/client/runtime/error.js.map +0 -1
  86. package/src/client/runtime/fetcher.d.ts +0 -10
  87. package/src/client/runtime/fetcher.js +0 -68
  88. package/src/client/runtime/fetcher.js.map +0 -1
  89. package/src/client/runtime/generateGraphqlOperation.d.ts +0 -30
  90. package/src/client/runtime/generateGraphqlOperation.js +0 -134
  91. package/src/client/runtime/generateGraphqlOperation.js.map +0 -1
  92. package/src/client/runtime/index.d.ts +0 -11
  93. package/src/client/runtime/index.js +0 -17
  94. package/src/client/runtime/index.js.map +0 -1
  95. package/src/client/runtime/linkTypeMap.d.ts +0 -9
  96. package/src/client/runtime/linkTypeMap.js +0 -95
  97. package/src/client/runtime/linkTypeMap.js.map +0 -1
  98. package/src/client/runtime/typeSelection.d.ts +0 -28
  99. package/src/client/runtime/typeSelection.js +0 -3
  100. package/src/client/runtime/typeSelection.js.map +0 -1
  101. package/src/client/runtime/types.d.ts +0 -55
  102. package/src/client/runtime/types.js +0 -3
  103. package/src/client/runtime/types.js.map +0 -1
  104. package/src/client/schema.d.ts +0 -4886
  105. package/src/client/schema.js +0 -1051
  106. package/src/client/schema.js.map +0 -1
  107. package/src/client/types.d.ts +0 -2601
  108. package/src/client/types.js.map +0 -1
  109. package/src/index.js +0 -28
  110. package/src/index.js.map +0 -1
  111. package/tsconfig.lib.tsbuildinfo +0 -1
@@ -0,0 +1,4256 @@
1
+ type User {
2
+ _id: String!
3
+ loginEmail: String!
4
+ suspended: Boolean!
5
+ domains: [DomainCredential!]
6
+ loginMethods: [String!]
7
+ }
8
+
9
+ type UserWithToken {
10
+ _id: String!
11
+ loginEmail: String!
12
+ suspended: Boolean!
13
+ domains: [DomainCredential!]
14
+ loginMethods: [String!]
15
+ token: UserToken!
16
+ }
17
+
18
+ type BaseTenant {
19
+ _id: String!
20
+ name: String!
21
+ tenant_uri: String!
22
+ domain: Domain!
23
+ }
24
+
25
+ type Tenant {
26
+ _id: String!
27
+ name: String!
28
+ tenant_uri: String!
29
+ domain: Domain!
30
+ email: String!
31
+ owner: User
32
+ }
33
+
34
+ type Domain {
35
+ _id: String!
36
+ name: String!
37
+ description: String
38
+ }
39
+
40
+ type DomainCredential {
41
+ _id: String!
42
+ name: String!
43
+ description: String
44
+ tenant: BaseTenant
45
+ }
46
+
47
+ type UserToken {
48
+ actualToken: String!
49
+ refreshToken: String!
50
+ }
51
+
52
+ type DecodedToken {
53
+ tokenId: String!
54
+ systemId: String!
55
+ userId: String!
56
+ email: String!
57
+ refreshTokenId: String!
58
+ domains: [DomainCredential!]!
59
+ clientType: String
60
+ }
61
+
62
+ type DecodedRefreshToken {
63
+ userId: String!
64
+ email: String!
65
+ originalTokenId: String!
66
+ }
67
+
68
+ type TenantWithUserLogin {
69
+ _id: String!
70
+ name: String!
71
+ tenant_uri: String!
72
+ domain: Domain!
73
+ email: String!
74
+ owner: User
75
+ user: UserWithToken!
76
+ }
77
+
78
+ type UriAvailableType {
79
+ available: Boolean!
80
+ valid: Boolean!
81
+ }
82
+
83
+ type Agreement {
84
+ _id: String!
85
+ kind: String!
86
+ domain: String!
87
+ isActiveAgreement: Boolean!
88
+ encoding: String!
89
+ version: String!
90
+ publishedDate: DateTime
91
+ unPublishedDate: DateTime
92
+ locked: Boolean!
93
+ name: String!
94
+ description: String
95
+ content: String
96
+ httpContentType: String
97
+ createdDate: DateTime!
98
+ updatedDate: DateTime!
99
+ }
100
+
101
+ """
102
+ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
103
+ """
104
+ scalar DateTime
105
+
106
+ type SignedAgreement {
107
+ _id: String!
108
+ agreement: Agreement!
109
+ createdDate: DateTime!
110
+ signerReference: String
111
+ json: String
112
+ signedDate: DateTime!
113
+ ipAddress: String
114
+ userAgent: String
115
+ signedFromLocation: String
116
+ comments: String
117
+ updatedDate: DateTime!
118
+ }
119
+
120
+ type BillEntity {
121
+ name: String!
122
+ taxId: String
123
+ line1: String
124
+ line2: String
125
+ line3: String
126
+ city: String
127
+ state: String
128
+ country: String
129
+ zip: String
130
+ }
131
+
132
+ type InvoiceItem {
133
+ _id: String!
134
+ unitPrice: Float!
135
+ unitTax: Float!
136
+ quantity: Float!
137
+ unit: String!
138
+ itemPrice: Float!
139
+ itemTotal: Float!
140
+ }
141
+
142
+ type Payment {
143
+ _id: String!
144
+ amount: Float!
145
+ currency: String!
146
+ datePaid: DateTime!
147
+ paymentComment: String
148
+ transactionId: String
149
+ processorType: String
150
+ processorReference: String
151
+ paidItemReference: String
152
+ payeeReference: String
153
+ payorReference: String
154
+ paymentMethodType: String
155
+ paymentMethodReference: String
156
+ }
157
+
158
+ type PlaFeature {
159
+ _id: String!
160
+ title: String!
161
+ description: String
162
+ quantity: Float
163
+ quantityUnit: String
164
+ }
165
+
166
+ type Plan {
167
+ _id: String!
168
+ name: String
169
+ description: String
170
+ prices: [PlanPrice!]!
171
+ features: [PlaFeature!]!
172
+ isPublic: Boolean!
173
+ active: Boolean!
174
+ startOfferingDate: DateTime
175
+ endOfferingDate: DateTime
176
+ termsAndConditions: String
177
+ }
178
+
179
+ type PlanPrice {
180
+ _id: String!
181
+ currency: String!
182
+ price: Float!
183
+ taxMode: String!
184
+ period: String!
185
+ customDays: Float
186
+ plan: Plan
187
+ }
188
+
189
+ type Invoice {
190
+ _id: String!
191
+ invoiceDate: DateTime!
192
+ billedEntity: BillEntity!
193
+ dueDate: DateTime!
194
+ billAmount: Float!
195
+ tax: Float!
196
+ total: Float!
197
+ currency: String!
198
+ items: [InvoiceItem!]
199
+ payments: [Payment!]
200
+ }
201
+
202
+ type SubscriptionInvoice {
203
+ _id: String!
204
+ invoice: Invoice!
205
+ billedPlan: PlanPrice!
206
+ subscriber: PlanSubscription!
207
+ }
208
+
209
+ type PlanSubscription {
210
+ _id: String!
211
+ currentPlan: PlanPrice!
212
+ billPrice: Float!
213
+ billCurrency: String!
214
+ billPriceComment: String
215
+ lastBillDate: DateTime!
216
+ endAccessDate: DateTime!
217
+ autoRenew: Boolean!
218
+ autoRenewPlan: PlanPrice
219
+ autoRenewDate: DateTime!
220
+ payments: [SubscriptionPayment!]!
221
+ invoices: [SubscriptionInvoice!]!
222
+ }
223
+
224
+ type SubscriptionPayment {
225
+ _id: String!
226
+ payment: Payment!
227
+ subscriber: PlanSubscription!
228
+ }
229
+
230
+ type AWSS3File {
231
+ _id: String!
232
+ name: String
233
+ contentType: String
234
+ size: Float
235
+ useType: String
236
+ url: String!
237
+ key: String!
238
+ pendingDelete: Boolean!
239
+ }
240
+
241
+ type MagicLink {
242
+ _id: String!
243
+ code: String!
244
+ type: String!
245
+ url: String!
246
+ expires: DateTime
247
+ data: String
248
+ isExpired: Boolean!
249
+ }
250
+
251
+ type VerificationCode {
252
+ _id: String!
253
+ type: String
254
+ recipient: String
255
+ expires: DateTime
256
+ data: String
257
+ isExpired: Boolean!
258
+ createdDate: DateTime!
259
+ }
260
+
261
+ type ErrorInfo {
262
+ errorCode: Float!
263
+ errorMessage: String!
264
+ }
265
+
266
+ type HttpRequestField {
267
+ key: String!
268
+ value: String!
269
+ }
270
+
271
+ type AWSS3UploadUrl {
272
+ uploadUrl: String!
273
+ fields: [HttpRequestField!]!
274
+ downloadUrl: String!
275
+ bucket: String!
276
+ key: String!
277
+ }
278
+
279
+ type AWSS3CallResult {
280
+ httpStatus: Float!
281
+ result: String!
282
+ message: String!
283
+ errors: [String!]
284
+ }
285
+
286
+ type DatabaseFile {
287
+ _id: String!
288
+ identifier: String!
289
+ version: String!
290
+ contentType: String!
291
+ updated: DateTime!
292
+ created: DateTime!
293
+ }
294
+
295
+ type TextDatabaseFile {
296
+ _id: String!
297
+ identifier: String!
298
+ version: String!
299
+ contentType: String!
300
+ updated: DateTime!
301
+ created: DateTime!
302
+ content: String!
303
+ }
304
+
305
+ type CodeVerificationResponse {
306
+ result: String!
307
+ code: VerificationCode
308
+ error: ErrorInfo
309
+ }
310
+
311
+ type Industry {
312
+ _id: String!
313
+ name: String!
314
+ }
315
+
316
+ type SponsorStats {
317
+ sponsoredAthletes: Float!
318
+ totalBrands: Float!
319
+ activeCampaigns: Float!
320
+ activeSponsorships: Float!
321
+ }
322
+
323
+ type City {
324
+ _id: String!
325
+ name: String!
326
+ localizedName: String!
327
+ state: State
328
+ latitude: Float
329
+ longitude: Float
330
+ timezone: String
331
+ }
332
+
333
+ type State {
334
+ _id: String!
335
+ name: String!
336
+ country: Country
337
+ cities: [City!]
338
+ }
339
+
340
+ type Country {
341
+ _id: String!
342
+ name: String!
343
+ states: [State!]
344
+ }
345
+
346
+ type AgeQualification {
347
+ type: String!
348
+ value: Float!
349
+ operator: String!
350
+ }
351
+
352
+ type GenderQualification {
353
+ type: String!
354
+ operator: String!
355
+ values: [String!]!
356
+ }
357
+
358
+ type ScoreQualification {
359
+ type: String!
360
+ scoreType: String!
361
+ operator: String!
362
+ value: Float!
363
+ }
364
+
365
+ type LocationQualification {
366
+ type: String!
367
+ operator: String!
368
+ countries: [Country!]!
369
+ states: [State!]!
370
+ cities: [City!]!
371
+ }
372
+
373
+ type NationalityQualification {
374
+ type: String!
375
+ operator: String!
376
+ countries: [Country!]!
377
+ }
378
+
379
+ type DistanceQualification {
380
+ type: String!
381
+ maxDistance: Float!
382
+ latitude: Float
383
+ longitude: Float
384
+ cityId: String
385
+ }
386
+
387
+ type SportsQualification {
388
+ type: String!
389
+ sports: [String!]!
390
+ operator: String!
391
+ }
392
+
393
+ type SportsLevelQualification {
394
+ type: String!
395
+ operator: String!
396
+ level: String!
397
+ }
398
+
399
+ type AthleteCriteria {
400
+ _id: String!
401
+ label: String
402
+ qualifications: [QualificationTypeUnion!]
403
+
404
+ """Minimum age requirement"""
405
+ minAge: Int
406
+
407
+ """Maximum age requirement"""
408
+ maxAge: Int
409
+
410
+ """Allowed genders (male, female, other)"""
411
+ allowedGenders: [String!]
412
+ }
413
+
414
+ union QualificationTypeUnion = AgeQualification | GenderQualification | ScoreQualification | LocationQualification | NationalityQualification | DistanceQualification | SportsQualification | SportsLevelQualification
415
+
416
+ type SponsorshipItem {
417
+ _id: String!
418
+ quantity: Float!
419
+ title: String!
420
+ value: Float!
421
+ type: String!
422
+ }
423
+
424
+ type SponsorshipCommitment {
425
+ _id: String!
426
+ title: String!
427
+ details: String
428
+ hashTags: String!
429
+ media: String!
430
+ actionType: String!
431
+ frequency: Float
432
+ periodicity: String!
433
+ autoMeasurable: Boolean!
434
+ }
435
+
436
+ type Duration {
437
+ length: Float!
438
+ unit: String!
439
+ }
440
+
441
+ type SponsorshipStats {
442
+ totalSponsorships: Float
443
+ totalApplications: Float
444
+ newApplications: Float
445
+ discardedApplications: Float
446
+ selectedApplications: Float
447
+ approvedApplications: Float
448
+ grantedSponsorships: Float
449
+ remainingSponsorships: Float
450
+ }
451
+
452
+ type SponsorshipTranslation {
453
+ _id: String!
454
+ sponsorshipId: String!
455
+ language: String!
456
+ title: String
457
+ description: String
458
+ terms: String
459
+ banner: AWSS3File
460
+ }
461
+
462
+ type Sponsorship {
463
+ _id: String!
464
+ title: String!
465
+ description: String
466
+ cashValue: Float!
467
+ otherValue: Float!
468
+ brand: Brand
469
+ banner: AWSS3File
470
+ criteria: AthleteCriteria
471
+ deadline: DateTime
472
+ startDate: DateTime
473
+ duration: Duration!
474
+ sponsor: Sponsor
475
+ sponsorshipItems: [SponsorshipItem!]
476
+ commitments: [SponsorshipCommitment!]
477
+ terms: String
478
+ stats: SponsorshipStats
479
+ isPrivate: Boolean!
480
+ approved: Boolean!
481
+ published: Boolean!
482
+ translations: [SponsorshipTranslation!]
483
+ }
484
+
485
+ type Sponsor {
486
+ _id: String!
487
+ name: String!
488
+ description: String
489
+ tenant: Tenant
490
+ industry: Industry
491
+ stats: SponsorStats
492
+ brands: [SponsorBrand!]
493
+ sponsorships: [Sponsorship!]
494
+ approved: Boolean!
495
+ }
496
+
497
+ type SponsorBrand {
498
+ _id: String!
499
+ sponsor: Sponsor
500
+ authorizedUse: Boolean!
501
+ isAuthorizer: Boolean!
502
+ }
503
+
504
+ type BrandStats {
505
+ campaigns: Float
506
+ sponsorships: Float
507
+ sports: Float
508
+ athletes: Float
509
+ }
510
+
511
+ type BrandTranslation {
512
+ _id: String!
513
+ brandId: String!
514
+ language: String!
515
+ name: String
516
+ slogan: String
517
+ description: String
518
+ logo: AWSS3File
519
+ banner: AWSS3File
520
+ }
521
+
522
+ type Brand {
523
+ _id: String!
524
+ name: String!
525
+ slogan: String
526
+ website: String
527
+ affiliateLink: String
528
+ description: String
529
+ approved: Boolean!
530
+ published: Boolean!
531
+ logo: AWSS3File
532
+ banner: AWSS3File
533
+ stats: BrandStats
534
+ operatorIds: [String!]
535
+ translations: [BrandTranslation!]
536
+ sponsors: [SponsorBrand!]
537
+ }
538
+
539
+ type StravaTpiRideDto {
540
+ distanceKm: Float!
541
+ distanceKmLast: Float!
542
+ elapsedTimeMin: Float!
543
+ elapsedTimeMinLast: Float!
544
+ averageSpeedKmh: Float!
545
+ averageSpeedKmhLast: Float!
546
+ maxSpeedKmh: Float!
547
+ maxSpeedKmhLast: Float!
548
+ averageHeartRateBpm: Float!
549
+ averageHeartRateBpmLast: Float!
550
+ maxHeartRateBpm: Float!
551
+ maxHeartRateBpmLast: Float!
552
+ averageCadenceStm: Float!
553
+ averageCadenceStmLast: Float!
554
+ lastDate: DateTime
555
+ country: String
556
+ state: String
557
+ city: String
558
+ tpi: Float!
559
+ }
560
+
561
+ type StravaTpiRunDto {
562
+ distanceKm: Float!
563
+ distanceKmLast: Float!
564
+ elapsedTimeMin: Float!
565
+ elapsedTimeMinLast: Float!
566
+ averageSpeedKmh: Float!
567
+ averageSpeedKmhLast: Float!
568
+ maxSpeedKmh: Float!
569
+ maxSpeedKmhLast: Float!
570
+ averageHeartRateBpm: Float!
571
+ averageHeartRateBpmLast: Float!
572
+ maxHeartRateBpm: Float!
573
+ maxHeartRateBpmLast: Float!
574
+ averageCadenceStm: Float!
575
+ averageCadenceStmLast: Float!
576
+ elevHigh: Float!
577
+ elevHighLast: Float!
578
+ elevLow: Float!
579
+ elevLowLast: Float!
580
+ lastDate: DateTime
581
+ country: String
582
+ state: String
583
+ city: String
584
+ tpi: Float!
585
+ }
586
+
587
+ type StravaTpiSwimDto {
588
+ distanceKm: Float!
589
+ distanceKmLast: Float!
590
+ elapsedTimeMin: Float!
591
+ elapsedTimeMinLast: Float!
592
+ averageSpeedKmh: Float!
593
+ averageSpeedKmhLast: Float!
594
+ maxSpeedKmh: Float!
595
+ maxSpeedKmhLast: Float!
596
+ averageHeartRateBpm: Float!
597
+ averageHeartRateBpmLast: Float!
598
+ maxHeartRateBpm: Float!
599
+ maxHeartRateBpmLast: Float!
600
+ averageCadenceStm: Float!
601
+ averageCadenceStmLast: Float!
602
+ lastDate: DateTime
603
+ country: String
604
+ state: String
605
+ city: String
606
+ tpi: Float!
607
+ }
608
+
609
+ type FollowStats {
610
+ followers: Float!
611
+ followed: Float!
612
+ raves: Float!
613
+ favorites: Float!
614
+ }
615
+
616
+ type Sport {
617
+ _id: String!
618
+ name: String!
619
+ resultType: String!
620
+ verified: Boolean
621
+ priority: Float
622
+ }
623
+
624
+ type VtxScores {
625
+ vtxScore: Float!
626
+ socialScore: Float!
627
+ trainingScore: Float!
628
+ competitionScore: Float!
629
+ }
630
+
631
+ type SportLevelTranslation {
632
+ _id: String!
633
+ language: String!
634
+ label: String!
635
+ }
636
+
637
+ type SportLevel {
638
+ _id: String!
639
+ label: String!
640
+ index: Float!
641
+ translations: [SportLevelTranslation!]
642
+ }
643
+
644
+ type Ranking {
645
+ scope: String!
646
+ scopeId: String!
647
+ scopeName: String!
648
+ position: Float!
649
+ total: Float!
650
+ }
651
+
652
+ type AthleteRankings {
653
+ worldRanking: Ranking
654
+ countryRanking: Ranking
655
+ stateRanking: Ranking
656
+ cityRanking: Ranking
657
+ }
658
+
659
+ type Team {
660
+ _id: String!
661
+ name: String!
662
+ description: String
663
+ sports: [Sport!]
664
+ approved: Boolean
665
+ logo: AWSS3File
666
+ banner: AWSS3File
667
+ }
668
+
669
+ type WorldLocation {
670
+ _id: String!
671
+ userProvidedLatitude: Float
672
+ userProvidedLongitude: Float
673
+ cityNameGeocode: String
674
+ stateNameGeocode: String
675
+ countryIso2CodeGeocode: String
676
+ timeZoneGeocode: String
677
+ latitudeGeocode: Float
678
+ longitudeGeocode: Float
679
+ city: City
680
+ }
681
+
682
+ type SportsEvent {
683
+ _id: String!
684
+ name: String!
685
+ mainSport: Sport
686
+ eventWebSite: String
687
+ startDate: DateTime!
688
+ endDate: DateTime
689
+ verified: Boolean!
690
+ banner: AWSS3File
691
+ location: WorldLocation
692
+ eventLevel: String
693
+ registeredAthletesCount: Float
694
+ }
695
+
696
+ type AthleteCompetitionResult {
697
+ _id: String!
698
+ resultType: String!
699
+ position: Float
700
+ totalParticipants: Float
701
+ score: String
702
+ finishTimeMS: Float
703
+ resultWebLink: String
704
+ outcome: String!
705
+ adversary: String
706
+ genderPosition: Float
707
+ genderParticipants: Float
708
+ categoryPosition: Float
709
+ categoryParticipants: Float
710
+ categoryName: String
711
+ pointsEarned: Float
712
+ }
713
+
714
+ type BudgetItem {
715
+ _id: String!
716
+ quantity: Float!
717
+ concept: String!
718
+ itemCost: Float!
719
+ unit: String
720
+ }
721
+
722
+ type Budget {
723
+ _id: String!
724
+ initialFunds: Float!
725
+ totalRequired: Float!
726
+ items: [BudgetItem!]
727
+ }
728
+
729
+ type PhotoAlbum {
730
+ _id: String!
731
+ photo: AWSS3File
732
+ }
733
+
734
+ type Album {
735
+ _id: String!
736
+ label: String!
737
+ description: String
738
+ photos: [PhotoAlbum!]
739
+ displayIndex: Float!
740
+ competitionId: String
741
+ visibility: String!
742
+ }
743
+
744
+ type AthleteCompetition {
745
+ _id: String!
746
+ event: SportsEvent!
747
+ participationDate: DateTime
748
+ competitionNumber: String
749
+ result: AthleteCompetitionResult
750
+ fundRaisingCampaignIds: [String!]
751
+ budget: Budget
752
+ albums: [Album!]
753
+ }
754
+
755
+ type MembershipOrganizationReference {
756
+ _id: String!
757
+ shortName: String
758
+ acronym: String
759
+ fullName: String!
760
+ website: String
761
+ verified: Boolean!
762
+ logo: AWSS3File
763
+ country: Country
764
+ sport: Sport
765
+ }
766
+
767
+ type MembershipOrganization {
768
+ _id: String!
769
+ shortName: String
770
+ acronym: String
771
+ fullName: String!
772
+ website: String
773
+ verified: Boolean!
774
+ logo: AWSS3File
775
+ country: Country
776
+ sport: Sport
777
+ memberships: [AthleteMembership!]
778
+ }
779
+
780
+ type AthleteMembership {
781
+ _id: String!
782
+ organization: MembershipOrganizationReference!
783
+ athlete: AthleteReference!
784
+ membershipNumber: String
785
+ membershipType: String
786
+ issueDate: DateTime
787
+ expirationDate: DateTime
788
+ }
789
+
790
+ type NewsLink {
791
+ _id: String!
792
+ title: String!
793
+ url: String!
794
+ abstract: String
795
+ }
796
+
797
+ type Channel {
798
+ _id: String!
799
+ type: String!
800
+ handle: String
801
+ url: String!
802
+ linked: Boolean!
803
+ }
804
+
805
+ type AthletePreferences {
806
+ _id: String!
807
+ showProfileHelper: Boolean!
808
+ defaultAlbum: Album
809
+ }
810
+
811
+ type Video {
812
+ _id: String!
813
+ source: String!
814
+ url: String!
815
+ sourceData: String!
816
+ }
817
+
818
+ type FundRaisingCampaign {
819
+ _id: String!
820
+ athlete: AthleteReference!
821
+ budgetMode: String!
822
+ status: String!
823
+ title: String!
824
+ slug: String
825
+ motivation: String
826
+ website: String
827
+ fundsRequired: Float!
828
+ initialFundsObtained: Float!
829
+ fundsObtained: Float!
830
+ location: WorldLocation
831
+ createdDate: DateTime!
832
+ endingDate: DateTime!
833
+ budget: Budget
834
+ competitions: [AthleteCompetition!]
835
+ vtxComissionPct: Float!
836
+ video: Video
837
+ coverImage: AWSS3File
838
+ }
839
+
840
+ type StripeCapabilityType {
841
+ acss_debit_payments: String
842
+ affirm_payments: String
843
+ afterpay_clearpay_payments: String
844
+ alma_payments: String
845
+ amazon_pay_payments: String
846
+ au_becs_debit_payments: String
847
+ bacs_debit_payments: String
848
+ bancontact_payments: String
849
+ bank_transfer_payments: String
850
+ blik_payments: String
851
+ boleto_payments: String
852
+ card_issuing: String
853
+ card_payments: String
854
+ cartes_bancaires_payments: String
855
+ cashapp_payments: String
856
+ eps_payments: String
857
+ fpx_payments: String
858
+ gb_bank_transfer_payments: String
859
+ giropay_payments: String
860
+ grabpay_payments: String
861
+ ideal_payments: String
862
+ india_international_payments: String
863
+ jcb_payments: String
864
+ jp_bank_transfer_payments: String
865
+ kakao_pay_payments: String
866
+ klarna_payments: String
867
+ konbini_payments: String
868
+ kr_card_payments: String
869
+ legacy_payments: String
870
+ link_payments: String
871
+ mobilepay_payments: String
872
+ multibanco_payments: String
873
+ mx_bank_transfer_payments: String
874
+ naver_pay_payments: String
875
+ oxxo_payments: String
876
+ p24_payments: String
877
+ pay_by_bank_payments: String
878
+ payco_payments: String
879
+ paynow_payments: String
880
+ promptpay_payments: String
881
+ revolut_pay_payments: String
882
+ samsung_pay_payments: String
883
+ sepa_bank_transfer_payments: String
884
+ sepa_debit_payments: String
885
+ sofort_payments: String
886
+ swish_payments: String
887
+ tax_reporting_us_1099_k: String
888
+ tax_reporting_us_1099_misc: String
889
+ transfers: String
890
+ treasury: String
891
+ twint_payments: String
892
+ us_bank_account_ach_payments: String
893
+ us_bank_transfer_payments: String
894
+ zip_payments: String
895
+ }
896
+
897
+ type StripeRequirementAlternativeType {
898
+ alternative_fields_due: [String!]!
899
+ original_fields_due: [String!]!
900
+ }
901
+
902
+ type StripeFutureRequirementAlternativeType {
903
+ alternative_fields_due: [String!]!
904
+ original_fields_due: [String!]!
905
+ }
906
+
907
+ type StripeErrorType {
908
+ code: String!
909
+ reason: String!
910
+ requirement: String!
911
+ }
912
+
913
+ type StripeRequirementType {
914
+ alternatives: [StripeRequirementAlternativeType!]
915
+ current_deadline: DateTime
916
+ currently_due: [String!]
917
+ disabled_reason: String
918
+ errors: [StripeErrorType!]
919
+ eventually_due: [String!]
920
+ past_due: [String!]
921
+ pending_verification: [String!]
922
+ }
923
+
924
+ type StripeFutureRequirementType {
925
+ alternatives: [StripeFutureRequirementAlternativeType!]
926
+ current_deadline: DateTime
927
+ currently_due: [String!]
928
+ disabled_reason: String
929
+ errors: [StripeErrorType!]
930
+ eventually_due: [String!]
931
+ past_due: [String!]
932
+ pending_verification: [String!]
933
+ }
934
+
935
+ type StripeAccount {
936
+ id: String!
937
+ object: String!
938
+ business_type: String
939
+ country: String!
940
+ email: String
941
+ capabilities: StripeCapabilityType
942
+ requirements: StripeRequirementType
943
+ future_requirements: StripeFutureRequirementType
944
+ type: String!
945
+ charges_enabled: Boolean!
946
+ payouts_enabled: Boolean!
947
+ created: DateTime
948
+ default_currency: String
949
+ }
950
+
951
+ type StripeAccountReference {
952
+ _id: String!
953
+ stripeAccountId: String!
954
+ account: StripeAccount
955
+ }
956
+
957
+ type HistoricalScore {
958
+ _id: String!
959
+ scoreType: String!
960
+ score: Float!
961
+ date: DateTime!
962
+ athleteId: String!
963
+ }
964
+
965
+ type AthleteReference {
966
+ _id: String!
967
+ firstName: String!
968
+ lastName: String!
969
+ screenName: String
970
+ dob: DateTime
971
+ lgbt: Boolean
972
+ competitionGender: String
973
+ country: Country
974
+ location: WorldLocation
975
+ trainer: String
976
+ trainerUrl: String
977
+ followStats: FollowStats
978
+ mainSport: Sport!
979
+ mainSportLevel: SportLevel!
980
+ scores: VtxScores!
981
+ rankings: AthleteRankings
982
+ totalUpcomingCompetitions: Float
983
+ totalPastCompetitions: Float
984
+ profilePicture: AWSS3File
985
+ cardPicture: AWSS3File
986
+ bannerPicture: AWSS3File
987
+ aboutMe: String
988
+ biography: String
989
+ preferences: AthletePreferences!
990
+ suspended: Boolean!
991
+ onboardingComplete: Boolean
992
+ onboardingStep: Float
993
+ }
994
+
995
+ type Athlete {
996
+ _id: String!
997
+ firstName: String!
998
+ lastName: String!
999
+ screenName: String
1000
+ dob: DateTime
1001
+ lgbt: Boolean
1002
+ competitionGender: String
1003
+ country: Country
1004
+ location: WorldLocation
1005
+ trainer: String
1006
+ trainerUrl: String
1007
+ followStats: FollowStats
1008
+ mainSport: Sport!
1009
+ mainSportLevel: SportLevel!
1010
+ scores: VtxScores!
1011
+ rankings: AthleteRankings
1012
+ totalUpcomingCompetitions: Float
1013
+ totalPastCompetitions: Float
1014
+ profilePicture: AWSS3File
1015
+ cardPicture: AWSS3File
1016
+ bannerPicture: AWSS3File
1017
+ aboutMe: String
1018
+ biography: String
1019
+ preferences: AthletePreferences!
1020
+ suspended: Boolean!
1021
+ onboardingComplete: Boolean
1022
+ onboardingStep: Float
1023
+ allSports: [Sport!]
1024
+ teams: [Team!]
1025
+ sponsorBrands: [Brand!]
1026
+ competitions: [AthleteCompetition!]
1027
+ affiliations: [AthleteMembership!]
1028
+ newsLinks: [NewsLink!]
1029
+ channels: [Channel!]
1030
+ currentCampaign: FundRaisingCampaign
1031
+ fundingCampaigns: [FundRaisingCampaign!]
1032
+ stripeAccountReference: StripeAccountReference
1033
+ albums: [Album!]
1034
+ historicalScores: [HistoricalScore!]
1035
+ signedAgreements: [SignedAgreement!]
1036
+ }
1037
+
1038
+ type CheckoutSession {
1039
+ _id: ID!
1040
+ type: String
1041
+ estimatedStripeComission: Float
1042
+ stripeSessionId: String!
1043
+ stripeAccountId: String!
1044
+ donationAmount: Float!
1045
+ fromEmail: String
1046
+ confirmed: Boolean!
1047
+ completed: Boolean!
1048
+ completedDate: DateTime
1049
+ createdDate: DateTime!
1050
+ }
1051
+
1052
+ type FundingCheckoutSessionData {
1053
+ _id: ID!
1054
+ session: CheckoutSession
1055
+ fromName: String
1056
+ paidToAthlete: Float
1057
+ paidToVtx: Float
1058
+ fundingCampaign: FundRaisingCampaign
1059
+ mode: DonationMode!
1060
+ athleteId: String!
1061
+ athleteName: String!
1062
+ fromPhone: String
1063
+ message: String
1064
+ }
1065
+
1066
+ type SponsorAthleteInvitation {
1067
+ _id: String!
1068
+ name: String
1069
+ email: String!
1070
+ dateSent: DateTime!
1071
+ sponsor: Sponsor!
1072
+ magicLink: MagicLink!
1073
+ brand: Brand
1074
+ status: String!
1075
+ }
1076
+
1077
+ type StripeSession {
1078
+ account: String!
1079
+ client_secret: String!
1080
+ expires_at: Float!
1081
+ livemode: Boolean!
1082
+ }
1083
+
1084
+ type StripeCheckoutSession {
1085
+ id: String!
1086
+ vtxCheckoutSessionId: String!
1087
+ client_secret: String!
1088
+ expires_at: Float!
1089
+ livemode: Boolean!
1090
+ url: String!
1091
+ }
1092
+
1093
+ type StravaAthleteData {
1094
+ id: Float!
1095
+ username: String
1096
+ firstname: String!
1097
+ lastname: String!
1098
+ bio: String
1099
+ city: String
1100
+ state: String
1101
+ country: String
1102
+ sex: String
1103
+ premium: Boolean!
1104
+ profile: String
1105
+ created_at: String
1106
+ updated_at: String
1107
+ weight: Float
1108
+ }
1109
+
1110
+ type InstagramCursors {
1111
+ before: String
1112
+ after: String
1113
+ }
1114
+
1115
+ type InstagramPaging {
1116
+ cursors: InstagramCursors
1117
+ next: String
1118
+ }
1119
+
1120
+ type InstagramMetric {
1121
+ name: String!
1122
+ period: String!
1123
+ values: String!
1124
+ }
1125
+
1126
+ type InstagramInsights {
1127
+ data: [InstagramMetric!]
1128
+ }
1129
+
1130
+ type InstagramMediaItem {
1131
+ id: String!
1132
+ caption: String
1133
+ media_type: String!
1134
+ media_url: String
1135
+ permalink: String!
1136
+ thumbnail_url: String
1137
+ timestamp: String!
1138
+ username: String!
1139
+ like_count: Float
1140
+ comments_count: Float
1141
+ insights: InstagramInsights
1142
+ }
1143
+
1144
+ type InstagramMediaData {
1145
+ data: [InstagramMediaItem!]
1146
+ paging: InstagramPaging
1147
+ }
1148
+
1149
+ type InstagramUserData {
1150
+ user_id: String!
1151
+ username: String!
1152
+ name: String
1153
+ account_type: String
1154
+ followers_count: String
1155
+ media_count: Float
1156
+ }
1157
+
1158
+ type AthleteIntegrationReference {
1159
+ _id: String!
1160
+ athlete: AthleteReference!
1161
+ hasStravaIntegration: Boolean
1162
+ stravaTokenExpires: DateTime
1163
+ stravaAthleteData: StravaAthleteData
1164
+ hasInstagramIntegration: Boolean
1165
+ instagramTokenExpires: DateTime
1166
+ instagramUserData: InstagramUserData
1167
+ instagramMediaData: InstagramMediaData
1168
+ }
1169
+
1170
+ type Receipt {
1171
+ receiptId: String!
1172
+ campaignName: String
1173
+ athleteName: String
1174
+ donorName: String!
1175
+ amount: Float!
1176
+ currency: String!
1177
+ dateIssued: DateTime!
1178
+ confirmed: Boolean!
1179
+ message: String
1180
+ }
1181
+
1182
+ type ReceiptUrl {
1183
+ receiptId: String!
1184
+ }
1185
+
1186
+ type BudgetItemReference {
1187
+ _id: String!
1188
+ concept: String!
1189
+ quantity: Float!
1190
+ itemCost: Float!
1191
+ unit: String
1192
+ totalCost: Float!
1193
+ }
1194
+
1195
+ type BudgetReference {
1196
+ _id: String!
1197
+ items: [BudgetItemReference!]!
1198
+ totalAmount: Float!
1199
+ }
1200
+
1201
+ type CompetitionBudgetReference {
1202
+ competitionId: String!
1203
+ eventName: String!
1204
+ budget: BudgetReference!
1205
+ }
1206
+
1207
+ type BaseBudgetData {
1208
+ id: String!
1209
+ dateCreated: String!
1210
+ type: String!
1211
+ name: String!
1212
+ budget: Float!
1213
+ }
1214
+
1215
+ type CompetitionBudgetData {
1216
+ id: String!
1217
+ dateCreated: String!
1218
+ type: String!
1219
+ name: String!
1220
+ budget: Float!
1221
+ eventDate: String!
1222
+ campaign: String
1223
+ items: [BudgetItemReference!]!
1224
+ }
1225
+
1226
+ type CampaignBudgetData {
1227
+ id: String!
1228
+ dateCreated: String!
1229
+ type: String!
1230
+ name: String!
1231
+ budget: Float!
1232
+ endingDate: String!
1233
+ competitions: Float
1234
+ fundsRequired: Float!
1235
+ initialFundsObtained: Float!
1236
+ status: FundingStatus!
1237
+ budgetMode: FundingMode!
1238
+ items: [BudgetItemReference!]
1239
+ competitionBudgets: [CompetitionBudgetReference!]
1240
+ }
1241
+
1242
+ enum FundingStatus {
1243
+ CREATED
1244
+ ACTIVE
1245
+ PAUSED
1246
+ COMPLETED
1247
+ CANCELLED
1248
+ }
1249
+
1250
+ enum FundingMode {
1251
+ FIXED_AMOUNT
1252
+ SINGLE_BUDGET
1253
+ COMPETITION_BUDGETS
1254
+ }
1255
+
1256
+ type BudgetData {
1257
+ competitions: [CompetitionBudgetData!]!
1258
+ campaigns: [CampaignBudgetData!]!
1259
+ }
1260
+
1261
+ type MergeEventsResponse {
1262
+ success: Boolean!
1263
+ mergedEvent: SportsEvent
1264
+ }
1265
+
1266
+ type BudgetItemUnit {
1267
+ _id: String!
1268
+ label: String!
1269
+ }
1270
+
1271
+ type BudgetConcept {
1272
+ _id: String!
1273
+ label: String
1274
+ }
1275
+
1276
+ type Donation {
1277
+ checkoutSessionId: String!
1278
+ fundingCheckoutSessionDataId: String!
1279
+ donationMode: String!
1280
+ donorName: String!
1281
+ donorEmail: String
1282
+ completed: Boolean!
1283
+ confirmed: Boolean!
1284
+ donationAmount: Float!
1285
+ completedDate: DateTime
1286
+ createdDate: DateTime
1287
+ athleteId: String!
1288
+ athleteName: String!
1289
+ message: String
1290
+ athleteReference: AthleteReference
1291
+ campaignReference: FundRaisingCampaign
1292
+ }
1293
+
1294
+ type Member {
1295
+ _id: String!
1296
+ fullName: String!
1297
+ screenName: String
1298
+ memberPicture: AWSS3File
1299
+ donations: [Donation!]!
1300
+ }
1301
+
1302
+ type AdminUserView {
1303
+ _id: String!
1304
+ loginEmail: String!
1305
+ firstName: String!
1306
+ lastName: String!
1307
+ screenName: String!
1308
+ domains: [DomainCredential!]
1309
+ athlete: Athlete
1310
+ member: Member
1311
+ suspended: Boolean!
1312
+ }
1313
+
1314
+ type AdminTransactionFundingDetails {
1315
+ paidToVtx: Float
1316
+ paidToAthlete: Float
1317
+ athleteId: String!
1318
+ athleteName: String!
1319
+ fromName: String
1320
+ fromPhone: String
1321
+ message: String
1322
+ mode: String
1323
+ }
1324
+
1325
+ type AdminTransactionView {
1326
+ _id: ID!
1327
+ createdDate: DateTime!
1328
+ stripeSessionId: String!
1329
+ concept: String
1330
+ donationAmount: Float!
1331
+ fromEmail: String
1332
+ type: String!
1333
+ confirmed: Boolean!
1334
+ completed: Boolean!
1335
+ completedDate: DateTime
1336
+ stripeAccountId: String!
1337
+ fundingDetails: AdminTransactionFundingDetails
1338
+ }
1339
+
1340
+ type Offer {
1341
+ _id: String!
1342
+ name: String
1343
+ label: String!
1344
+ decription: String
1345
+ offerImage: AWSS3File
1346
+ type: String!
1347
+ status: String!
1348
+ discountType: String!
1349
+ discountTypeData: String!
1350
+ conditions: [String!]
1351
+ brand: Brand!
1352
+ sponsor: Sponsor!
1353
+ criteria: AthleteCriteria
1354
+ dateStart: DateTime
1355
+ dateEnd: DateTime
1356
+ dateCreated: DateTime!
1357
+ totalCodes: Int!
1358
+ availableCodes: Int!
1359
+ availableCountries: [Country!]
1360
+ disclaimer: String
1361
+ genericCode: String
1362
+ featured: Boolean!
1363
+ }
1364
+
1365
+ type Promotion {
1366
+ _id: String!
1367
+ name: String
1368
+ label: String!
1369
+ decription: String
1370
+ offerImage: AWSS3File
1371
+ type: String!
1372
+ status: String!
1373
+ discountType: String!
1374
+ discountTypeData: String!
1375
+ conditions: [String!]
1376
+ brand: Brand!
1377
+ sponsor: Sponsor!
1378
+ criteria: AthleteCriteria
1379
+ dateStart: DateTime
1380
+ dateEnd: DateTime
1381
+ dateCreated: DateTime!
1382
+ totalCodes: Int!
1383
+ availableCodes: Int!
1384
+ availableCountries: [Country!]
1385
+ disclaimer: String
1386
+ genericCode: String!
1387
+ featured: Boolean!
1388
+ }
1389
+
1390
+ type CouponCode {
1391
+ _id: String!
1392
+ couponId: String!
1393
+ code: String!
1394
+ expires: DateTime
1395
+ dateCreated: DateTime!
1396
+ }
1397
+
1398
+ type Coupon {
1399
+ _id: String!
1400
+ name: String
1401
+ label: String!
1402
+ decription: String
1403
+ offerImage: AWSS3File
1404
+ type: String!
1405
+ status: String!
1406
+ discountType: String!
1407
+ discountTypeData: String!
1408
+ conditions: [String!]
1409
+ brand: Brand!
1410
+ sponsor: Sponsor!
1411
+ criteria: AthleteCriteria
1412
+ dateStart: DateTime
1413
+ dateEnd: DateTime
1414
+ dateCreated: DateTime!
1415
+ totalCodes: Int!
1416
+ availableCodes: Int!
1417
+ availableCountries: [Country!]
1418
+ disclaimer: String
1419
+ genericCode: String
1420
+ featured: Boolean!
1421
+ couponCodes: [CouponCode!]
1422
+ }
1423
+
1424
+ type OfferClaim {
1425
+ _id: String!
1426
+ offer: Offer!
1427
+ athlete: Athlete!
1428
+ claimedAt: DateTime!
1429
+ code: String
1430
+ }
1431
+
1432
+ type EligibilityResult {
1433
+ status: EligibilityStatus!
1434
+
1435
+ """Keys of criteria that failed (e.g., age, gender, location)"""
1436
+ failedCriteria: [String!]!
1437
+
1438
+ """Keys of criteria with missing athlete data"""
1439
+ missingFields: [String!]!
1440
+
1441
+ """User-facing messages for UI display"""
1442
+ messages: [String!]!
1443
+ }
1444
+
1445
+ """Status of athlete eligibility for an offer"""
1446
+ enum EligibilityStatus {
1447
+ ELIGIBLE
1448
+ NOT_ELIGIBLE
1449
+ UNKNOWN
1450
+ }
1451
+
1452
+ type EnhancedPaginationInfoType {
1453
+ """Current page number (0-based)"""
1454
+ currentPage: Int!
1455
+
1456
+ """Total number of pages"""
1457
+ totalPages: Int!
1458
+
1459
+ """Total number of items across all pages"""
1460
+ totalItems: Int!
1461
+
1462
+ """Number of items per page"""
1463
+ itemsPerPage: Int!
1464
+
1465
+ """Whether there is a next page available"""
1466
+ hasNextPage: Boolean!
1467
+
1468
+ """Whether there is a previous page available"""
1469
+ hasPreviousPage: Boolean!
1470
+
1471
+ """Starting index of items on current page (1-based for display)"""
1472
+ startIndex: Int!
1473
+
1474
+ """Ending index of items on current page (1-based for display)"""
1475
+ endIndex: Int!
1476
+ }
1477
+
1478
+ type OfferWithEligibility {
1479
+ _id: String!
1480
+ name: String
1481
+ label: String!
1482
+ decription: String
1483
+ offerImage: AWSS3File
1484
+ type: String!
1485
+ status: String!
1486
+ discountType: String!
1487
+ discountTypeData: String!
1488
+ conditions: [String!]
1489
+ brand: Brand!
1490
+ sponsor: Sponsor!
1491
+ criteria: AthleteCriteria
1492
+ dateStart: DateTime
1493
+ dateEnd: DateTime
1494
+ dateCreated: DateTime!
1495
+ totalCodes: Int!
1496
+ availableCodes: Int!
1497
+ availableCountries: [Country!]
1498
+ disclaimer: String
1499
+ featured: Boolean!
1500
+
1501
+ """Athlete eligibility status for this offer"""
1502
+ eligibility: EligibilityResult!
1503
+ }
1504
+
1505
+ type PaginatedOffersWithEligibility {
1506
+ items: [OfferWithEligibility!]!
1507
+ pagination: EnhancedPaginationInfoType!
1508
+ }
1509
+
1510
+ type PaginatedBrands {
1511
+ items: [Brand!]!
1512
+ pagination: EnhancedPaginationInfoType!
1513
+ }
1514
+
1515
+ type PaginatedSponsors {
1516
+ items: [Sponsor!]!
1517
+ pagination: EnhancedPaginationInfoType!
1518
+ }
1519
+
1520
+ type EditValueResponse {
1521
+ field: String!
1522
+ oldValue: String
1523
+ newValue: String
1524
+ changed: Boolean!
1525
+ }
1526
+
1527
+ type ErrorType {
1528
+ code: Float!
1529
+ message: String!
1530
+ }
1531
+
1532
+ type DeleteValuesResponse {
1533
+ deleted: [String!]!
1534
+ failedToDelete: [String!]!
1535
+ failureReason: [ErrorType!]!
1536
+ result: String!
1537
+ }
1538
+
1539
+ type DeleteSingleValueResponse {
1540
+ idToDelete: String!
1541
+ deleted: Boolean!
1542
+ failureReason: ErrorType
1543
+ }
1544
+
1545
+ type ScoreRefreshDetail {
1546
+ status: ForceScoreRefreshStatus!
1547
+ message: String
1548
+ }
1549
+
1550
+ enum ForceScoreRefreshStatus {
1551
+ success
1552
+ failed
1553
+ skipped
1554
+ }
1555
+
1556
+ type RefreshDiagnostics {
1557
+ activitiesDeleted: Int
1558
+ activitiesFetched: Int
1559
+ activitiesDateRange: String
1560
+ activityRefsSaved: Int
1561
+ historicalDatesProcessed: Int
1562
+ historicalRebuildStatus: String
1563
+ }
1564
+
1565
+ type ForceScoreRefreshResult {
1566
+ athleteId: String!
1567
+ athleteName: String
1568
+ status: ForceScoreRefreshStatus!
1569
+ message: String
1570
+ tpi: ScoreRefreshDetail
1571
+ spi: ScoreRefreshDetail
1572
+ api: ScoreRefreshDetail
1573
+ diagnostics: RefreshDiagnostics
1574
+ }
1575
+
1576
+ type ForceScoreRefreshResponse {
1577
+ results: [ForceScoreRefreshResult!]!
1578
+ successCount: Float!
1579
+ failureCount: Float!
1580
+ skippedCount: Float!
1581
+ }
1582
+
1583
+ type SortOrder {
1584
+ sortField: String!
1585
+ order: String!
1586
+ }
1587
+
1588
+ type CursorPaginationResponse {
1589
+ sort: SortOrder
1590
+ initialCursorId: String
1591
+ nextCursorId: String
1592
+ initialCursorValue: String
1593
+ nextCursorValue: String
1594
+ limit: Float!
1595
+ retrieved: Float!
1596
+ isLastPage: Boolean!
1597
+ }
1598
+
1599
+ type AthleteQueryResponse {
1600
+ athletes: [Athlete!]!
1601
+ cursor: CursorPaginationResponse!
1602
+ }
1603
+
1604
+ type EditPictureResponse {
1605
+ field: String!
1606
+ oldValue: AWSS3File
1607
+ newValue: AWSS3File
1608
+ changed: Boolean!
1609
+ }
1610
+
1611
+ type AddValuesResponse {
1612
+ added: [String!]!
1613
+ failedToAdd: [String!]
1614
+ failureReason: [ErrorType!]
1615
+ result: String!
1616
+ }
1617
+
1618
+ type ExistValueResponse {
1619
+ exist: Boolean!
1620
+ }
1621
+
1622
+ type DeleteOnboardingAthleteResponse {
1623
+ success: Boolean!
1624
+ athleteId: String
1625
+ error: String
1626
+ }
1627
+
1628
+ type CompetitionDeleteVerificationReason {
1629
+ code: String!
1630
+ message: String!
1631
+ details: String
1632
+ }
1633
+
1634
+ type CompetitionDeleteVerificationResponse {
1635
+ reasons: [CompetitionDeleteVerificationReason!]!
1636
+ }
1637
+
1638
+ type HistoricalScoresPeriod {
1639
+ athleteId: String!
1640
+ athleteFirstName: String!
1641
+ athleteLastName: String!
1642
+ screenName: String!
1643
+ minTimestampInclusive: DateTime!
1644
+ maxTimestampExclusive: DateTime!
1645
+ vtxScores: [HistoricalScore!]
1646
+ tpiScores: [HistoricalScore!]
1647
+ spiScores: [HistoricalScore!]
1648
+ apiScores: [HistoricalScore!]
1649
+ }
1650
+
1651
+ type StripeObject {
1652
+ type: String!
1653
+ json: JSONObject!
1654
+ }
1655
+
1656
+ """
1657
+ The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
1658
+ """
1659
+ scalar JSONObject
1660
+
1661
+ type BrowseCampaignsResult {
1662
+ campaigns: [FundRaisingCampaign!]!
1663
+ featuredPopular: [FundRaisingCampaign!]!
1664
+ featuredEndingSoon: [FundRaisingCampaign!]!
1665
+ total: Int!
1666
+ page: Int!
1667
+ limit: Int!
1668
+ hasMore: Boolean!
1669
+ }
1670
+
1671
+ type ScoreRefreshCapability {
1672
+ athleteId: String!
1673
+ athleteName: String
1674
+ canRefreshTpi: Boolean!
1675
+ canRefreshSpi: Boolean!
1676
+ canRefreshApi: Boolean!
1677
+ tpiReason: String
1678
+ spiReason: String
1679
+ apiReason: String
1680
+ }
1681
+
1682
+ type CheckScoreRefreshCapabilityResponse {
1683
+ capabilities: [ScoreRefreshCapability!]!
1684
+ }
1685
+
1686
+ type OnboardingProgressResponse {
1687
+ success: Boolean!
1688
+ step: Int
1689
+ complete: Boolean
1690
+ athleteId: String
1691
+ error: String
1692
+ }
1693
+
1694
+ type PublicIntegrationStatus {
1695
+ hasStravaIntegration: Boolean!
1696
+ stravaAthleteId: String
1697
+ hasInstagramIntegration: Boolean!
1698
+ instagramUsername: String
1699
+ }
1700
+
1701
+ type PaginatedSports {
1702
+ items: [Sport!]!
1703
+ pagination: EnhancedPaginationInfoType!
1704
+ }
1705
+
1706
+ type UserImages {
1707
+ profilePictureUrl: String
1708
+ cardPictureUrl: String
1709
+ bannerPictureUrl: String
1710
+ }
1711
+
1712
+ type ValidatedToken {
1713
+ accessToken: String!
1714
+ refreshToken: String!
1715
+ expiresAt: Float!
1716
+ refreshExpiresAt: Float!
1717
+ }
1718
+
1719
+ type DeleteVtxUserResponse {
1720
+ success: Boolean!
1721
+ deletedUserId: String
1722
+ deletedUserEmail: String
1723
+ deletedUserType: String
1724
+ servicesDeleted: [String!]
1725
+ cognitoDeleted: Boolean
1726
+ dbDeleted: Boolean
1727
+ errorMessage: String
1728
+ }
1729
+
1730
+ type PaginatedUsers {
1731
+ items: [AdminUserView!]!
1732
+ pagination: EnhancedPaginationInfoType!
1733
+ }
1734
+
1735
+ type TransactionDetails {
1736
+ stripeCheckoutSessionId: String!
1737
+ vtxCheckoutSessionId: String!
1738
+ checkoutSessionType: String!
1739
+ transactionType: String!
1740
+ confirmed: Boolean!
1741
+ completed: Boolean!
1742
+ currency: String!
1743
+ createdDate: DateTime!
1744
+ email: String
1745
+ name: String
1746
+ phone: String
1747
+ payment_status: String
1748
+ status: String
1749
+ amount_subtotal: Float
1750
+ amount_total: Float
1751
+ completedDate: DateTime
1752
+ athleteDonationReceipt: Receipt
1753
+ }
1754
+
1755
+ type PaginatedEvents {
1756
+ items: [SportsEvent!]!
1757
+ pagination: EnhancedPaginationInfoType!
1758
+ }
1759
+
1760
+ type DonationDates {
1761
+ """Array of unique ISO date strings (YYYY-MM-DD) that have donations"""
1762
+ dates: [String!]!
1763
+
1764
+ """Total number of donations across all dates"""
1765
+ totalDonations: Int!
1766
+ }
1767
+
1768
+ type PaginatedDonations {
1769
+ """Array of donation records"""
1770
+ donations: [Donation!]!
1771
+
1772
+ """Pagination metadata"""
1773
+ pagination: EnhancedPaginationInfoType!
1774
+ }
1775
+
1776
+ type CurrencyAmountType {
1777
+ amount: Float!
1778
+ currency: String!
1779
+ }
1780
+
1781
+ type StripeBalance {
1782
+ availableUSD: Float!
1783
+ pendingUSD: Float!
1784
+ currency: String!
1785
+ availableBalances: [CurrencyAmountType!]!
1786
+ pendingBalances: [CurrencyAmountType!]!
1787
+ }
1788
+
1789
+ type StripeTransfer {
1790
+ _id: ID!
1791
+ stripeId: String
1792
+ amount: Float!
1793
+ amount_reversed: Float!
1794
+ currency: String!
1795
+ destination: String
1796
+ description: String
1797
+ reversed: Boolean!
1798
+ livemode: Boolean!
1799
+ transfer_group: String
1800
+ status: StripeTransferStatus!
1801
+ lastError: String
1802
+ json: String!
1803
+ }
1804
+
1805
+ """Status of the Stripe transfer"""
1806
+ enum StripeTransferStatus {
1807
+ not_applicable
1808
+ pending
1809
+ failed
1810
+ completed
1811
+ }
1812
+
1813
+ type UserDomain {
1814
+ _id: String!
1815
+ user: User
1816
+ }
1817
+
1818
+ type PaginatedTransactions {
1819
+ items: [AdminTransactionView!]!
1820
+ pagination: EnhancedPaginationInfoType!
1821
+ }
1822
+
1823
+ type PaginatedOffers {
1824
+ items: [Offer!]!
1825
+ pagination: EnhancedPaginationInfoType!
1826
+ }
1827
+
1828
+ type UploadResult {
1829
+ addedCodes: Int!
1830
+ duplicateCodes: Int!
1831
+ invalidRows: [String!]!
1832
+ }
1833
+
1834
+ type OfferAvailability {
1835
+ available: Boolean!
1836
+ reason: String
1837
+ }
1838
+
1839
+ type LeaderboardEntry {
1840
+ rank: Int!
1841
+
1842
+ """
1843
+ Rank change since yesterday. Positive = moved up, negative = moved down, null = new/no history
1844
+ """
1845
+ rankChange: Int
1846
+ athleteId: String!
1847
+ screenName: String
1848
+ firstName: String
1849
+ lastName: String
1850
+ profilePicture: String
1851
+ score: Float!
1852
+ countryCode: String
1853
+ nationalityCode: String
1854
+ cityName: String
1855
+ countryRank: Int
1856
+ sportId: String
1857
+ vtxScore: Float
1858
+ trainingScore: Float
1859
+ socialScore: Float
1860
+ competitionScore: Float
1861
+ mainSport: String
1862
+ mainSportLevel: String
1863
+ }
1864
+
1865
+ type LeaderboardPagination {
1866
+ page: Int!
1867
+ limit: Int!
1868
+ total: Int!
1869
+ totalPages: Int!
1870
+ }
1871
+
1872
+ type LeaderboardFilters {
1873
+ scoreType: String!
1874
+ sportId: String
1875
+ countryCode: String
1876
+ sportLevelId: String
1877
+ }
1878
+
1879
+ type LeaderboardResponse {
1880
+ entries: [LeaderboardEntry!]!
1881
+ pagination: LeaderboardPagination!
1882
+ filters: LeaderboardFilters!
1883
+ }
1884
+
1885
+ type UserRank {
1886
+ globalRank: Int!
1887
+ countryRank: Int
1888
+ score: Float!
1889
+ scoreType: String!
1890
+ }
1891
+
1892
+ type DashboardSummary {
1893
+ vtxScore: Float!
1894
+ socialScore: Float!
1895
+ trainingScore: Float!
1896
+ competitionScore: Float!
1897
+ lastUpdated: DateTime!
1898
+ }
1899
+
1900
+ type ScoreHistoryEntry {
1901
+ date: DateTime!
1902
+ vtxScore: Float
1903
+ socialScore: Float
1904
+ trainingScore: Float
1905
+ competitionScore: Float
1906
+ }
1907
+
1908
+ type RankHistoryEntry {
1909
+ date: DateTime!
1910
+ globalRank: Int
1911
+ countryRank: Int
1912
+ }
1913
+
1914
+ type RankContext {
1915
+ globalRank: Int
1916
+ countryRank: Int
1917
+
1918
+ """Rank change since previous snapshot"""
1919
+ rankChange: Int
1920
+
1921
+ """
1922
+ e.g., "Top 8%"
1923
+ """
1924
+ percentile: String
1925
+
1926
+ """Points needed to reach next rank"""
1927
+ gapToNext: Float
1928
+
1929
+ """Points buffer above rank below"""
1930
+ gapFromPrevious: Float
1931
+
1932
+ """Total athletes in scope"""
1933
+ totalAthletes: Int
1934
+ }
1935
+
1936
+ type ActivityEntry {
1937
+ id: String!
1938
+ date: DateTime!
1939
+
1940
+ """Activity type (e.g., running, post, competition)"""
1941
+ type: String!
1942
+
1943
+ """Activity-specific metrics"""
1944
+ metrics: JSONObject
1945
+ pointsEarned: Float!
1946
+ counted: Boolean!
1947
+
1948
+ """Reason if not counted"""
1949
+ notCountedReason: String
1950
+
1951
+ """Metric keys where this activity set a new personal record"""
1952
+ prMetrics: [String!]
1953
+ }
1954
+
1955
+ type ActivitiesResponse {
1956
+ items: [ActivityEntry!]!
1957
+ total: Int!
1958
+ hasMore: Boolean!
1959
+ }
1960
+
1961
+ type MetricComparison {
1962
+ name: String!
1963
+ value: Float
1964
+ unit: String
1965
+ athleteAverage: Float
1966
+
1967
+ """Athlete personal best for this metric"""
1968
+ athleteMax: Float
1969
+
1970
+ """Percentage difference from average: ((value - avg) / avg) * 100"""
1971
+ comparisonPercent: Float
1972
+ }
1973
+
1974
+ type ScoreInfo {
1975
+ earned: Float!
1976
+ maxPossible: Float!
1977
+ componentAverage: Float
1978
+ }
1979
+
1980
+ type ActivityDetail {
1981
+ id: String!
1982
+ date: DateTime!
1983
+ type: String!
1984
+
1985
+ """training or social"""
1986
+ category: String!
1987
+ metrics: [MetricComparison!]!
1988
+ scoreInfo: ScoreInfo!
1989
+
1990
+ """Metric keys where this activity set a new personal record"""
1991
+ prMetrics: [String!]
1992
+
1993
+ """Caption/description for social posts"""
1994
+ caption: String
1995
+ }
1996
+
1997
+ type TopMetric {
1998
+ name: String!
1999
+
2000
+ """strong, weak, or average"""
2001
+ status: String!
2002
+ }
2003
+
2004
+ type ComponentSummary {
2005
+ name: String!
2006
+ score: Float!
2007
+ maxScore: Float!
2008
+
2009
+ """Score change from 7 days ago"""
2010
+ trend: Float
2011
+ trendPeriod: String!
2012
+ activityCount: Int!
2013
+ avgScorePerActivity: Float
2014
+ topMetrics: [TopMetric!]!
2015
+
2016
+ """Activity IDs that set a new max for any metric"""
2017
+ newMaxActivityIds: [String!]
2018
+
2019
+ """
2020
+ All-time max values for each metric (e.g., { distance: 42195, duration: 14400 })
2021
+ """
2022
+ metricMaxes: JSONObject
2023
+ }
2024
+
2025
+ type ActivityDateEntry {
2026
+ date: DateTime!
2027
+ category: ActivityCategory!
2028
+ count: Int!
2029
+ types: [String!]!
2030
+ }
2031
+
2032
+ """Category of athlete activity"""
2033
+ enum ActivityCategory {
2034
+ TRAINING
2035
+ SOCIAL
2036
+ COMPETITION
2037
+ }
2038
+
2039
+ type ActivityDatesResponse {
2040
+ dates: [ActivityDateEntry!]!
2041
+ }
2042
+
2043
+ type SocialAggregateType {
2044
+ _id: ID!
2045
+ athleteId: String!
2046
+ platform: Platform!
2047
+ contentType: ContentType
2048
+ periodType: PeriodType!
2049
+ periodLabel: String!
2050
+ periodStart: DateTime!
2051
+ periodEnd: DateTime!
2052
+ totalLikes: Int!
2053
+ totalComments: Int!
2054
+ totalShares: Int!
2055
+ totalSaves: Int!
2056
+ totalReach: Int!
2057
+ totalViews: Int!
2058
+ totalImpressions: Int!
2059
+ postCount: Int!
2060
+ followerCount: Int!
2061
+ avgEngagementRate: Float!
2062
+ avgPostEngagement: Float!
2063
+ }
2064
+
2065
+ """Social media platform"""
2066
+ enum Platform {
2067
+ INSTAGRAM
2068
+ TIKTOK
2069
+ YOUTUBE
2070
+ }
2071
+
2072
+ """Type of social media content"""
2073
+ enum ContentType {
2074
+ POST
2075
+ REEL
2076
+ LIVE
2077
+ SHORT
2078
+ VIDEO
2079
+ }
2080
+
2081
+ """Aggregation period type"""
2082
+ enum PeriodType {
2083
+ DAILY
2084
+ WEEKLY
2085
+ }
2086
+
2087
+ type PostMetricType {
2088
+ id: ID!
2089
+ postId: String!
2090
+ permalink: String
2091
+ thumbnailUrl: String
2092
+ contentType: ContentType
2093
+ caption: String
2094
+ postedAt: DateTime!
2095
+ likes: Int!
2096
+ comments: Int!
2097
+ shares: Int!
2098
+ saves: Int!
2099
+ reach: Int
2100
+ vsAvgPercent: Float!
2101
+ }
2102
+
2103
+ type AveragesType {
2104
+ likes: Float!
2105
+ comments: Float!
2106
+ reach: Float
2107
+ engagementRate: Float!
2108
+ }
2109
+
2110
+ type PostComparisonResultType {
2111
+ posts: [PostMetricType!]!
2112
+ averages: AveragesType!
2113
+ total: Int!
2114
+ hasMore: Boolean!
2115
+ }
2116
+
2117
+ type Notification {
2118
+ id: ID!
2119
+ recipientId: String!
2120
+
2121
+ """Notification type from NotificationType enum"""
2122
+ type: String!
2123
+ title: String!
2124
+ message: String!
2125
+
2126
+ """Icon type identifier (e.g., "trophy", "bell")"""
2127
+ iconType: String
2128
+
2129
+ """URL to a custom icon image"""
2130
+ iconUrl: String
2131
+
2132
+ """Route to navigate when notification is clicked"""
2133
+ actionRoute: String
2134
+
2135
+ """Parameters for the action route"""
2136
+ actionParams: JSON
2137
+
2138
+ """Label for the action button"""
2139
+ actionLabel: String
2140
+ read: Boolean!
2141
+ dismissed: Boolean!
2142
+ createdAt: DateTime!
2143
+ }
2144
+
2145
+ """
2146
+ The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
2147
+ """
2148
+ scalar JSON
2149
+
2150
+ type NotificationListResponse {
2151
+ notifications: [Notification!]!
2152
+ total: Int!
2153
+
2154
+ """Whether there are more notifications to load"""
2155
+ hasMore: Boolean!
2156
+ }
2157
+
2158
+ type UnreadCountResponse {
2159
+ count: Int!
2160
+ }
2161
+
2162
+ type NotificationPreference {
2163
+ id: ID!
2164
+ userId: String!
2165
+
2166
+ """Whether email notifications are enabled"""
2167
+ emailEnabled: Boolean!
2168
+
2169
+ """Whether in-app notifications are enabled"""
2170
+ inAppEnabled: Boolean!
2171
+
2172
+ """Whether push notifications are enabled"""
2173
+ pushEnabled: Boolean!
2174
+
2175
+ """Array of muted notification type keys"""
2176
+ mutedTypes: [String!]
2177
+ }
2178
+
2179
+ type DeviceTokenType {
2180
+ id: ID!
2181
+ userId: String!
2182
+ token: String!
2183
+ platform: String!
2184
+ deviceName: String
2185
+ active: Boolean!
2186
+ createdAt: DateTime!
2187
+ updatedAt: DateTime!
2188
+ }
2189
+
2190
+ type FollowedAthleteInfo {
2191
+ """Athlete ID"""
2192
+ id: String!
2193
+
2194
+ """First name"""
2195
+ firstName: String
2196
+
2197
+ """Last name"""
2198
+ lastName: String
2199
+
2200
+ """Screen name / display name"""
2201
+ screenName: String
2202
+
2203
+ """Profile picture"""
2204
+ profilePicture: AWSS3File
2205
+
2206
+ """Main sport name"""
2207
+ sportName: String
2208
+
2209
+ """VTX Score"""
2210
+ vtxScore: Float
2211
+ }
2212
+
2213
+ type FollowedAthletesListResponse {
2214
+ """List of followed athletes"""
2215
+ athletes: [FollowedAthleteInfo!]!
2216
+
2217
+ """Total count of followed athletes"""
2218
+ total: Int!
2219
+
2220
+ """Whether there are more athletes to load"""
2221
+ hasMore: Boolean!
2222
+ }
2223
+
2224
+ type IsFollowingResponse {
2225
+ """Whether the current user is following the athlete"""
2226
+ isFollowing: Boolean!
2227
+ }
2228
+
2229
+ type EmailCampaignDelivery {
2230
+ """Number of emails successfully delivered"""
2231
+ delivered: Int!
2232
+
2233
+ """Total number of email opens"""
2234
+ opens: Int!
2235
+
2236
+ """Number of unique opens"""
2237
+ uniqueOpens: Int!
2238
+
2239
+ """Total number of link clicks"""
2240
+ clicks: Int!
2241
+
2242
+ """Number of unique clicks"""
2243
+ uniqueClicks: Int!
2244
+
2245
+ """Number of bounced emails"""
2246
+ bounces: Int!
2247
+
2248
+ """Number of spam reports"""
2249
+ spamReports: Int!
2250
+
2251
+ """Timestamp of last stats update from SendGrid"""
2252
+ lastUpdated: DateTime!
2253
+ }
2254
+
2255
+ type EmailSegment {
2256
+ """Segment ID"""
2257
+ _id: String!
2258
+
2259
+ """Segment name"""
2260
+ name: String!
2261
+
2262
+ """Audience filter criteria as JSON"""
2263
+ filters: JSONObject!
2264
+
2265
+ """Admin email who created this segment"""
2266
+ createdBy: String!
2267
+
2268
+ """Creation timestamp"""
2269
+ createdAt: DateTime!
2270
+ }
2271
+
2272
+ type EmailCampaign {
2273
+ """Campaign ID"""
2274
+ _id: String!
2275
+
2276
+ """Email subject line"""
2277
+ subject: String!
2278
+
2279
+ """SendGrid template ID (if using template)"""
2280
+ templateId: String
2281
+
2282
+ """Template name (for audit trail)"""
2283
+ templateName: String
2284
+
2285
+ """Raw HTML content (from rich text editor)"""
2286
+ htmlContent: String
2287
+
2288
+ """Audience filter criteria as JSON"""
2289
+ audienceFilters: JSONObject!
2290
+
2291
+ """Saved segment ID (if using preset)"""
2292
+ segmentId: String
2293
+
2294
+ """Campaign status (draft, scheduled, sending, sent, failed)"""
2295
+ status: String!
2296
+
2297
+ """Scheduled send date/time"""
2298
+ scheduledFor: DateTime
2299
+
2300
+ """Actual sent timestamp"""
2301
+ sentAt: DateTime
2302
+
2303
+ """Total number of recipients"""
2304
+ recipientCount: Int
2305
+
2306
+ """Admin email who created this campaign"""
2307
+ createdBy: String!
2308
+
2309
+ """Creation timestamp"""
2310
+ createdAt: DateTime!
2311
+
2312
+ """Last update timestamp"""
2313
+ updatedAt: DateTime
2314
+
2315
+ """Test email sent timestamp"""
2316
+ testSentAt: DateTime
2317
+
2318
+ """Delivery statistics from SendGrid"""
2319
+ deliveryStats: EmailCampaignDelivery
2320
+
2321
+ """Associated segment (if using saved segment)"""
2322
+ segment: EmailSegment
2323
+ }
2324
+
2325
+ type EmailCampaignPage {
2326
+ """List of campaigns for current page"""
2327
+ campaigns: [EmailCampaign!]!
2328
+
2329
+ """Total count of campaigns matching query"""
2330
+ total: Int!
2331
+ }
2332
+
2333
+ type SendGridTemplate {
2334
+ """Template ID from SendGrid"""
2335
+ id: String!
2336
+
2337
+ """Template name"""
2338
+ name: String!
2339
+
2340
+ """Subject line from the active template version"""
2341
+ subject: String
2342
+
2343
+ """Last update timestamp from SendGrid"""
2344
+ updatedAt: String
2345
+ }
2346
+
2347
+ type AudiencePreviewUser {
2348
+ """User first name"""
2349
+ firstName: String
2350
+
2351
+ """User last name"""
2352
+ lastName: String
2353
+
2354
+ """User email address"""
2355
+ email: String!
2356
+
2357
+ """User type (Athlete, Influencer, etc.)"""
2358
+ userType: String!
2359
+ }
2360
+
2361
+ type AudiencePreview {
2362
+ """Total count of users matching filters"""
2363
+ total: Int!
2364
+
2365
+ """Sample of matching users (~10)"""
2366
+ users: [AudiencePreviewUser!]!
2367
+ }
2368
+
2369
+ type AiCoachMessage {
2370
+ _id: ID!
2371
+
2372
+ """Thread this message belongs to"""
2373
+ threadId: String!
2374
+
2375
+ """Message sender: ASSISTANT or USER"""
2376
+ role: String!
2377
+
2378
+ """Message type: WEEKLY_DIGEST or CHAT"""
2379
+ messageType: String!
2380
+
2381
+ """Message content text"""
2382
+ content: String!
2383
+
2384
+ """Estimated token count for this message"""
2385
+ tokenCount: Int!
2386
+ createdAt: DateTime!
2387
+
2388
+ """Position index within the thread"""
2389
+ index: Int!
2390
+ }
2391
+
2392
+ type AiCoachThread {
2393
+ _id: ID!
2394
+
2395
+ """Athlete who owns this thread"""
2396
+ athleteId: String!
2397
+
2398
+ """Monday of the week this thread covers"""
2399
+ weekStart: String!
2400
+
2401
+ """Thread status: ACTIVE or ARCHIVED"""
2402
+ status: String!
2403
+
2404
+ """AI-generated summary when thread is archived"""
2405
+ summary: String
2406
+
2407
+ """AiCoachContext snapshot for chip selection"""
2408
+ contextSnapshot: JSON
2409
+ createdAt: DateTime!
2410
+ updatedAt: DateTime!
2411
+
2412
+ """Messages in this thread"""
2413
+ messages: [AiCoachMessage!]
2414
+ }
2415
+
2416
+ type AiCoachConfig {
2417
+ """Athlete this config belongs to"""
2418
+ athleteId: String!
2419
+
2420
+ """Whether AI Coach is enabled for this athlete"""
2421
+ enabled: Boolean!
2422
+
2423
+ """Whether nudge notifications are enabled"""
2424
+ nudgesEnabled: Boolean!
2425
+
2426
+ """Preferred coaching focus: BALANCED, TRAINING, SOCIAL, or COMPETITION"""
2427
+ preferredFocus: String!
2428
+ updatedAt: DateTime!
2429
+ }
2430
+
2431
+ type AiCoachNudge {
2432
+ _id: ID!
2433
+
2434
+ """Athlete who owns this nudge"""
2435
+ athleteId: String!
2436
+
2437
+ """Nudge type: PR, MILESTONE, STREAK, INACTIVITY, SPI_SPIKE"""
2438
+ nudgeType: String!
2439
+
2440
+ """Short title for the nudge"""
2441
+ title: String!
2442
+
2443
+ """Nudge body text with details"""
2444
+ body: String!
2445
+
2446
+ """Structured data payload (metrics, scores, etc.)"""
2447
+ data: JSON
2448
+
2449
+ """Whether the athlete has read this nudge"""
2450
+ read: Boolean!
2451
+
2452
+ """When this nudge was created"""
2453
+ createdAt: DateTime!
2454
+
2455
+ """When this nudge expires (null = never)"""
2456
+ expiresAt: DateTime
2457
+ }
2458
+
2459
+ type AiCoachNudgeListResponse {
2460
+ nudges: [AiCoachNudge!]!
2461
+
2462
+ """Total number of matching nudges"""
2463
+ total: Int!
2464
+ }
2465
+
2466
+ type AiCoachUnreadNudgeCountResponse {
2467
+ count: Int!
2468
+ }
2469
+
2470
+ input CreateDatabaseFileDto {
2471
+ identifier: String!
2472
+ version: String! = "1.0.0"
2473
+ contentType: String!
2474
+ }
2475
+
2476
+ input CreateTextDatabaseFileDto {
2477
+ identifier: String!
2478
+ version: String! = "1.0.0"
2479
+ contentType: String!
2480
+ content: String! = ""
2481
+ }
2482
+
2483
+ input UpdateDatabaseFileDto {
2484
+ _id: String!
2485
+ identifier: String
2486
+ version: String
2487
+ contentType: String
2488
+ }
2489
+
2490
+ input UpdateTextDatabaseFileDto {
2491
+ _id: String!
2492
+ identifier: String
2493
+ version: String
2494
+ contentType: String
2495
+ content: String
2496
+ }
2497
+
2498
+ input CloneDatabaseFileDto {
2499
+ _id: String!
2500
+ version: String
2501
+ }
2502
+
2503
+ input FindDatabaseFilesDto {
2504
+ _id: String
2505
+ identifier: String
2506
+ version: String
2507
+ }
2508
+
2509
+ input GetDatabaseFileDto {
2510
+ identifier: String!
2511
+ version: String!
2512
+ }
2513
+
2514
+ input CreateVerificationCodeDto {
2515
+ type: String
2516
+ recipient: String
2517
+ expiresTime: Float = 10
2518
+ expiresUnit: String = "MINUTES"
2519
+ data: String
2520
+ }
2521
+
2522
+ input VerifyCodeDto {
2523
+ codeId: String!
2524
+ enteredCodeValue: String!
2525
+ type: String
2526
+ }
2527
+
2528
+ input DonationCheckoutDto {
2529
+ fundingCampaignId: String!
2530
+ donationAmount: Float!
2531
+ mode: String! = "private"
2532
+ fromName: String
2533
+ fromEmail: String
2534
+ fromPhone: String
2535
+ message: String
2536
+ clientType: String = "WEB"
2537
+ }
2538
+
2539
+ input CreateBrandDto {
2540
+ name: String!
2541
+ description: String
2542
+ slogan: String
2543
+ website: String
2544
+ affiliateLink: String
2545
+ logo: AWSS3UploadedFileDto
2546
+ banner: AWSS3UploadedFileDto
2547
+ translations: [BrandTranslationDto!]
2548
+ sponsorId: String
2549
+ approved: Boolean
2550
+ published: Boolean
2551
+ }
2552
+
2553
+ input AWSS3UploadedFileDto {
2554
+ key: String!
2555
+ useType: String!
2556
+ contentType: String!
2557
+ originalFileName: String
2558
+ fileSize: Float
2559
+ }
2560
+
2561
+ input BrandTranslationDto {
2562
+ brandId: String!
2563
+ language: String!
2564
+ name: String
2565
+ description: String
2566
+ slogan: String
2567
+ logo: AWSS3UploadedFileDto
2568
+ banner: AWSS3UploadedFileDto
2569
+ }
2570
+
2571
+ input BrandQueryDto {
2572
+ """Page number (0-based)"""
2573
+ page: Int = 0
2574
+
2575
+ """Number of items per page"""
2576
+ limit: Int = 25
2577
+
2578
+ """Search query for brand name, slogan, or website"""
2579
+ search: String
2580
+
2581
+ """Filter by approved status"""
2582
+ approved: String
2583
+
2584
+ """Filter by published status"""
2585
+ published: String
2586
+
2587
+ """Sort field"""
2588
+ sortField: String = "name"
2589
+
2590
+ """Sort order"""
2591
+ sortOrder: String = "asc"
2592
+ }
2593
+
2594
+ input CreateSponsorDto {
2595
+ name: String!
2596
+ description: String
2597
+ email: String!
2598
+ }
2599
+
2600
+ input AthleteInvitationDto {
2601
+ email: String!
2602
+ name: String
2603
+ sender: String
2604
+ brandId: String
2605
+ }
2606
+
2607
+ input InviteAthletesDto {
2608
+ language: String = "en"
2609
+ invitations: [AthleteInvitationDto!]!
2610
+ }
2611
+
2612
+ input SponsorQueryDto {
2613
+ """Page number (0-based)"""
2614
+ page: Int = 0
2615
+
2616
+ """Number of items per page"""
2617
+ limit: Int = 25
2618
+
2619
+ """Search query for sponsor name or description"""
2620
+ search: String
2621
+
2622
+ """Filter by approved status"""
2623
+ approved: String
2624
+
2625
+ """Filter by published status"""
2626
+ published: String
2627
+
2628
+ """Sort field"""
2629
+ sortField: String = "name"
2630
+
2631
+ """Sort order"""
2632
+ sortOrder: String = "asc"
2633
+ }
2634
+
2635
+ input CompetitionResultDto {
2636
+ resultType: String!
2637
+ position: Float
2638
+ score: String
2639
+ finishTimeMS: Float
2640
+ resultWebLink: String
2641
+ totalParticipants: Float
2642
+ outcome: String!
2643
+ adversary: String
2644
+ genderPosition: Float
2645
+ genderParticipants: Float
2646
+ categoryPosition: Float
2647
+ categoryParticipants: Float
2648
+ categoryName: String
2649
+ }
2650
+
2651
+ input SetCompetitionResultDto {
2652
+ resultType: String!
2653
+ position: Float
2654
+ score: String
2655
+ finishTimeMS: Float
2656
+ resultWebLink: String
2657
+ totalParticipants: Float
2658
+ outcome: String!
2659
+ adversary: String
2660
+ genderPosition: Float
2661
+ genderParticipants: Float
2662
+ categoryPosition: Float
2663
+ categoryParticipants: Float
2664
+ categoryName: String
2665
+ competitionId: String!
2666
+ }
2667
+
2668
+ input CreateAthleteCompetitionDto {
2669
+ event: String!
2670
+ date: DateTime!
2671
+ eventWebsite: String
2672
+ competitionNumber: String
2673
+ result: CompetitionResultDto
2674
+ cityId: String
2675
+ }
2676
+
2677
+ input CreateAthleteCompetitionForDto {
2678
+ event: String!
2679
+ date: DateTime!
2680
+ eventWebsite: String
2681
+ competitionNumber: String
2682
+ result: CompetitionResultDto
2683
+ cityId: String
2684
+ loginEmail: String!
2685
+ }
2686
+
2687
+ input SortCriteriaDto {
2688
+ sortField: String!
2689
+ order: String! = "ASC"
2690
+ }
2691
+
2692
+ input CursorPositionDto {
2693
+ cursorId: String!
2694
+ cursorFieldValue: String!
2695
+ }
2696
+
2697
+ input CursorPaginationDto {
2698
+ sortCriteria: SortCriteriaDto
2699
+ limit: Float = 25
2700
+ cursorPosition: CursorPositionDto
2701
+ }
2702
+
2703
+ input DeleteSingleValueDto {
2704
+ idToDelete: String!
2705
+ }
2706
+
2707
+ input FundCampaignFilterDto {
2708
+ campaignTitle: String
2709
+ status: String
2710
+ minCompletion: Float
2711
+ maxCompletion: Float
2712
+ minFundsRequired: Float
2713
+ maxFundsRequired: Float
2714
+ minEndingDate: DateTime
2715
+ maxEndingDate: DateTime
2716
+ competitions: [String!]
2717
+ cities: [String!]
2718
+ states: [String!]
2719
+ countries: [String!]
2720
+ }
2721
+
2722
+ input AthleteFilterDto {
2723
+ name: String
2724
+ cities: [String!]
2725
+ states: [String!]
2726
+ countries: [String!]
2727
+ nacionalities: [String!]
2728
+ teams: [String!]
2729
+ currentCampaign: FundCampaignFilterDto
2730
+ sports: [String!]
2731
+ sportLevels: [String!]
2732
+ mainSportOnly: Boolean = true
2733
+ gender: String
2734
+ minAge: Float
2735
+ maxAge: Float
2736
+ minDob: DateTime
2737
+ maxDob: DateTime
2738
+ minVTXScore: Float
2739
+ maxVTXScore: Float
2740
+ minSocialScore: Float
2741
+ maxSocialScore: Float
2742
+ minTrainingScore: Float
2743
+ maxTrainingScore: Float
2744
+ minPerformanceScore: Float
2745
+ maxPerformanceScore: Float
2746
+ futureEventIds: [String!]
2747
+ pastEventIds: [String!]
2748
+ }
2749
+
2750
+ input AthleteQueryDto {
2751
+ cursor: CursorPaginationDto
2752
+ filters: AthleteFilterDto
2753
+ }
2754
+
2755
+ input EditPictureDto {
2756
+ field: String!
2757
+ newPicture: AWSS3UploadedFileDto
2758
+ }
2759
+
2760
+ input UploadAlbumsPicturesDto {
2761
+ label: String!
2762
+ description: String
2763
+ pictures: [AWSS3UploadedFileDto!]
2764
+ albumId: String
2765
+ visibility: String
2766
+ competitionId: String
2767
+ }
2768
+
2769
+ input DeleteValuesDto {
2770
+ idsToDelete: [String!]!
2771
+ allOrNone: Boolean = true
2772
+ }
2773
+
2774
+ input existValueDto {
2775
+ Value: String!
2776
+ }
2777
+
2778
+ input GetMyHistoricalScoresDto {
2779
+ minTimestampInclusive: DateTime!
2780
+ maxTimestampExclusive: DateTime!
2781
+ scoreTypes: [String!]!
2782
+ }
2783
+
2784
+ input GetHistoricalScoresDto {
2785
+ minTimestampInclusive: DateTime!
2786
+ maxTimestampExclusive: DateTime!
2787
+ scoreTypes: [String!]!
2788
+ athleteIdOrEmail: String!
2789
+ }
2790
+
2791
+ input GetAthleteCampaignsDto {
2792
+ athleteId: String!
2793
+ }
2794
+
2795
+ input BrowseCampaignsDto {
2796
+ campaignId: String
2797
+ slug: String
2798
+ searchTerm: String
2799
+ sportId: String
2800
+ sportLevelId: String
2801
+ countryId: String
2802
+ sortBy: String
2803
+ sortOrder: String
2804
+ page: Int = 1
2805
+ limit: Int = 20
2806
+ includeFeatured: Boolean = true
2807
+ }
2808
+
2809
+ input ForceScoreRefreshDto {
2810
+ athleteIds: [String!]!
2811
+ rebuildHistorical: Boolean
2812
+ historicalDays: Int
2813
+ }
2814
+
2815
+ input CheckScoreRefreshCapabilityDto {
2816
+ athleteIds: [String!]!
2817
+ }
2818
+
2819
+ input UpdateOnboardingProgressDto {
2820
+ step: Int!
2821
+ complete: Boolean
2822
+ }
2823
+
2824
+ input SportQueryDto {
2825
+ """Page number (0-based)"""
2826
+ page: Int = 0
2827
+
2828
+ """Number of items per page"""
2829
+ limit: Int = 25
2830
+
2831
+ """Search query for sport name"""
2832
+ search: String
2833
+
2834
+ """Filter by result type (POSITION, TIME, etc.)"""
2835
+ resultType: String
2836
+
2837
+ """Filter by verified status"""
2838
+ verified: String
2839
+
2840
+ """Sort field"""
2841
+ sortField: String = "name"
2842
+
2843
+ """Sort order"""
2844
+ sortOrder: String = "asc"
2845
+ }
2846
+
2847
+ input QualificationDto {
2848
+ type: String!
2849
+ }
2850
+
2851
+ input AgeQualificationDto {
2852
+ type: String!
2853
+ value: Float!
2854
+ operator: String!
2855
+ }
2856
+
2857
+ input GenderQualificationDto {
2858
+ type: String!
2859
+ operator: String!
2860
+ values: [String!]!
2861
+ }
2862
+
2863
+ input NationalityQualificationDto {
2864
+ type: String!
2865
+ operator: String!
2866
+ countries: [String!]!
2867
+ }
2868
+
2869
+ input ScoreQualificationDto {
2870
+ type: String!
2871
+ scoreType: String!
2872
+ operator: String!
2873
+ value: Float!
2874
+ }
2875
+
2876
+ input LocationQualificationDto {
2877
+ type: String!
2878
+ operator: String!
2879
+ countries: [String!]!
2880
+ states: [String!]!
2881
+ cities: [String!]!
2882
+ }
2883
+
2884
+ input DistanceQualificationDto {
2885
+ type: String!
2886
+ maxDistance: Float!
2887
+ latitude: Float
2888
+ longitude: Float
2889
+ cityId: String
2890
+ }
2891
+
2892
+ input SportsQualificationDto {
2893
+ type: String!
2894
+ sports: [String!]!
2895
+ operator: String!
2896
+ }
2897
+
2898
+ input SportsLevelQualificationDto {
2899
+ type: String!
2900
+ operator: String!
2901
+ level: String!
2902
+ }
2903
+
2904
+ input RegisterUserDto {
2905
+ email: String!
2906
+ password: String!
2907
+ inviteCode: String
2908
+ }
2909
+
2910
+ input DeleteAthleteDto {
2911
+ userIdentifier: String!
2912
+ }
2913
+
2914
+ input resetPasswordDto {
2915
+ code: VerifyCodeDto!
2916
+ newPassword: String
2917
+ }
2918
+
2919
+ input UpdateUserSuspendedStatusDto {
2920
+ userId: String!
2921
+ suspended: Boolean!
2922
+ }
2923
+
2924
+ input UserQueryDto {
2925
+ """Page number (0-based)"""
2926
+ page: Int = 0
2927
+
2928
+ """Number of items per page"""
2929
+ limit: Int = 25
2930
+
2931
+ """Search query for user info"""
2932
+ search: String
2933
+
2934
+ """Filter by user type (athlete, member, sponsor)"""
2935
+ userType: String
2936
+
2937
+ """Filter by suspension status"""
2938
+ suspended: String
2939
+
2940
+ """Filter by sport (athlete-specific)"""
2941
+ sport: String
2942
+
2943
+ """Filter by sport level (athlete-specific)"""
2944
+ sportLevel: String
2945
+
2946
+ """Filter by gender (athlete-specific)"""
2947
+ gender: String
2948
+
2949
+ """Filter by location (athlete-specific)"""
2950
+ location: String
2951
+
2952
+ """Filter by nationality (athlete-specific)"""
2953
+ nationality: String
2954
+
2955
+ """Filter by minimum age (athlete-specific)"""
2956
+ ageMin: String
2957
+
2958
+ """Filter by maximum age (athlete-specific)"""
2959
+ ageMax: String
2960
+
2961
+ """Sort field"""
2962
+ sortField: String = "loginEmail"
2963
+
2964
+ """Sort order"""
2965
+ sortOrder: String = "asc"
2966
+ }
2967
+
2968
+ input DeleteVtxUserDto {
2969
+ userIdentifier: String!
2970
+ }
2971
+
2972
+ input GetReceiptDto {
2973
+ _id: String!
2974
+ }
2975
+
2976
+ input StripeQueryDto {
2977
+ operation: String!
2978
+ id: String!
2979
+ params: String
2980
+ }
2981
+
2982
+ input GetTransactionDetailsDto {
2983
+ vtxSessionId: String
2984
+ stripeSessionId: String
2985
+ }
2986
+
2987
+ input UpdateSportEventDto {
2988
+ _id: String!
2989
+ name: String
2990
+ cityId: String
2991
+ sportId: String
2992
+ startDate: DateTime
2993
+ endDate: DateTime
2994
+ website: String
2995
+ banner: AWSS3UploadedFileDto
2996
+ eventLevel: String
2997
+ }
2998
+
2999
+ input MergeSportsEventsDto {
3000
+ mergeTo: String!
3001
+ mergeName: String
3002
+ mergeStartDate: DateTime
3003
+ mergeEndDate: DateTime
3004
+ mergeWebsite: String
3005
+ mergeIds: [String!]!
3006
+ }
3007
+
3008
+ input EventQueryDto {
3009
+ """Page number (0-based)"""
3010
+ page: Int = 0
3011
+
3012
+ """Number of items per page"""
3013
+ limit: Int = 25
3014
+
3015
+ """Search query for event name or location"""
3016
+ search: String
3017
+
3018
+ """Filter by verified status"""
3019
+ verified: String
3020
+
3021
+ """Filter by sport name"""
3022
+ sport: String
3023
+
3024
+ """Filter by location (city, state, or country)"""
3025
+ location: String
3026
+
3027
+ """Filter by start date from (ISO string)"""
3028
+ dateFrom: String
3029
+
3030
+ """Filter by end date to (ISO string)"""
3031
+ dateTo: String
3032
+
3033
+ """Sort field"""
3034
+ sortField: String = "name"
3035
+
3036
+ """Sort order"""
3037
+ sortOrder: String = "asc"
3038
+ }
3039
+
3040
+ input BudgetItemDto {
3041
+ quantity: Float!
3042
+ concept: String!
3043
+ itemCost: Float!
3044
+ unit: String = ""
3045
+ }
3046
+
3047
+ input CreateBudgetItemDto {
3048
+ quantity: Float!
3049
+ concept: String!
3050
+ itemCost: Float!
3051
+ unit: String = ""
3052
+ budgetId: String!
3053
+ }
3054
+
3055
+ input CreateBudgetDto {
3056
+ initialFunds: Float = 0
3057
+ items: [BudgetItemDto!]
3058
+ }
3059
+
3060
+ input CreateCompetitionBudgetDto {
3061
+ initialFunds: Float = 0
3062
+ items: [BudgetItemDto!]
3063
+ athleteCompetitionId: String!
3064
+ }
3065
+
3066
+ input CreateVideoDto {
3067
+ source: String!
3068
+ url: String!
3069
+ sourceData: String! = "{}"
3070
+ }
3071
+
3072
+ input CreateFundingCampaignDto {
3073
+ budgetMode: String!
3074
+ title: String!
3075
+ motivation: String!
3076
+ website: String
3077
+ fundsRequired: Float!
3078
+ initialFundsObtained: Float! = 0
3079
+ cityId: String
3080
+ endingDate: DateTime!
3081
+ budget: CreateBudgetDto
3082
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3083
+ competitionIds: [String!]
3084
+ video: CreateVideoDto
3085
+ coverImageId: String
3086
+ }
3087
+
3088
+ input CreateFundingCampaignForDto {
3089
+ budgetMode: String!
3090
+ title: String!
3091
+ motivation: String!
3092
+ website: String
3093
+ fundsRequired: Float!
3094
+ initialFundsObtained: Float! = 0
3095
+ cityId: String
3096
+ endingDate: DateTime!
3097
+ budget: CreateBudgetDto
3098
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3099
+ competitionIds: [String!]
3100
+ video: CreateVideoDto
3101
+ coverImageId: String
3102
+ loginEmail: String!
3103
+ }
3104
+
3105
+ input UpdateFundingCampaignDto {
3106
+ budgetMode: String!
3107
+ title: String!
3108
+ motivation: String!
3109
+ website: String
3110
+ fundsRequired: Float!
3111
+ initialFundsObtained: Float! = 0
3112
+ cityId: String
3113
+ endingDate: DateTime!
3114
+ budget: CreateBudgetDto
3115
+ competitionBudgets: [CreateCompetitionBudgetDto!]
3116
+ competitionIds: [String!]
3117
+ video: CreateVideoDto
3118
+ coverImageId: String
3119
+ _id: String!
3120
+ }
3121
+
3122
+ input SetFundingStatusDto {
3123
+ fundingCampaignId: String!
3124
+ newStatus: String!
3125
+ }
3126
+
3127
+ input BudgetDto {
3128
+ items: [BudgetItemDto!]!
3129
+ fundingMode: String
3130
+ }
3131
+
3132
+ input AddCompetitionBudgetDto {
3133
+ competitionId: String!
3134
+ budget: BudgetDto!
3135
+ }
3136
+
3137
+ input EditCompetitionBudgetDto {
3138
+ competitionId: String!
3139
+ budget: BudgetDto!
3140
+ }
3141
+
3142
+ input EditCampaignBudgetDto {
3143
+ campaignId: String!
3144
+ competitionId: String
3145
+ fundsRequired: Float
3146
+ initialFundsObtained: Float
3147
+ budget: BudgetDto
3148
+ }
3149
+
3150
+ input DonationFiltersInput {
3151
+ """Filter by date from (ISO date YYYY-MM-DD)"""
3152
+ dateFrom: String
3153
+
3154
+ """Filter by date to (ISO date YYYY-MM-DD)"""
3155
+ dateTo: String
3156
+
3157
+ """Minimum donation amount"""
3158
+ amountMin: Float
3159
+
3160
+ """Maximum donation amount"""
3161
+ amountMax: Float
3162
+
3163
+ """Filter by campaign ID"""
3164
+ campaignId: String
3165
+ }
3166
+
3167
+ input DonationQueryDto {
3168
+ """Page number (0-based)"""
3169
+ page: Int = 0
3170
+
3171
+ """Number of items per page"""
3172
+ limit: Int = 20
3173
+
3174
+ """Search query for donorName, donorEmail"""
3175
+ search: String
3176
+
3177
+ """Additional filters"""
3178
+ filters: DonationFiltersInput
3179
+
3180
+ """Sort field"""
3181
+ sortField: String = "createdDate"
3182
+
3183
+ """Sort order (asc or desc)"""
3184
+ sortOrder: String = "desc"
3185
+ }
3186
+
3187
+ input CreateMembershipOrganizationDto {
3188
+ shortName: String!
3189
+ acronym: String
3190
+ fullName: String!
3191
+ website: String
3192
+ logo: AWSS3UploadedFileDto
3193
+ countryId: String
3194
+ sportId: String
3195
+ }
3196
+
3197
+ input CreateAthleteMembershipDto {
3198
+ organizationId: String!
3199
+ membershipNumber: String
3200
+ membershipType: String
3201
+ issueDate: DateTime
3202
+ expirationDate: DateTime
3203
+ }
3204
+
3205
+ input CreateAthleteIntegrationDto {
3206
+ athleteId: String!
3207
+ accessToken: String!
3208
+ refreshToken: String!
3209
+ expiresIn: Float!
3210
+ refreshExpiresIn: Float
3211
+ }
3212
+
3213
+ input GetFundingCheckoutSessionDataDto {
3214
+ _id: String!
3215
+ }
3216
+
3217
+ input SocialState {
3218
+ systemId: String!
3219
+ loginEmail: String!
3220
+ client: String
3221
+ }
3222
+
3223
+ input RegisterMemberDto {
3224
+ email: String!
3225
+ firstName: String!
3226
+ lastName: String!
3227
+ screenName: String
3228
+ profilePicture: AWSS3UploadedFileDto
3229
+ }
3230
+
3231
+ input TransactionQueryDto {
3232
+ """Page number (0-based)"""
3233
+ page: Int = 0
3234
+
3235
+ """Number of items per page"""
3236
+ limit: Int = 25
3237
+
3238
+ """Search query for payer info, session ID, or checkout ID"""
3239
+ search: String
3240
+
3241
+ """Filter by transaction type"""
3242
+ type: String
3243
+
3244
+ """Filter by completion status"""
3245
+ completed: String
3246
+
3247
+ """Filter by athlete stripe account ID"""
3248
+ athleteStripeAccount: String
3249
+
3250
+ """Filter by athlete ID"""
3251
+ athleteId: String
3252
+
3253
+ """Filter by date from (ISO string)"""
3254
+ dateFrom: String
3255
+
3256
+ """Filter by date to (ISO string)"""
3257
+ dateTo: String
3258
+
3259
+ """Sort field"""
3260
+ sortField: String = "createdDate"
3261
+
3262
+ """Sort order"""
3263
+ sortOrder: String = "desc"
3264
+ }
3265
+
3266
+ input OffsetPaginationDto {
3267
+ pageNumber: Float! = 1
3268
+ pageSize: Float! = 25
3269
+ sortCriteria: SortCriteriaDto
3270
+ }
3271
+
3272
+ input CreateOfferDto {
3273
+ name: String
3274
+ label: String!
3275
+ decription: String
3276
+ offerImage: AWSS3UploadedFileDto
3277
+ type: String!
3278
+ status: String! = "INACTIVE"
3279
+ discountType: String! = "OTHER"
3280
+ discountTypeData: String = "{}"
3281
+ conditions: [String!] = []
3282
+ brandId: String!
3283
+ sponsorId: String!
3284
+ criteria: AthleteCriteriaDto
3285
+ dateStart: DateTime
3286
+ dateEnd: DateTime
3287
+ totalCodes: Int
3288
+ disclaimer: String
3289
+ availableCountryIds: [String!]
3290
+ genericCode: String
3291
+ featured: Boolean = false
3292
+ }
3293
+
3294
+ input AthleteCriteriaDto {
3295
+ _id: String!
3296
+ label: String
3297
+ qualificationsBag: QualificationsBagDto
3298
+ }
3299
+
3300
+ input QualificationsBagDto {
3301
+ ageQualifications: [AgeQualificationDto!]
3302
+ genderQualifications: [GenderQualificationDto!]
3303
+ scoreQualifications: [ScoreQualificationDto!]
3304
+ locationQualifications: [LocationQualificationDto!]
3305
+ nationalityQualifications: [NationalityQualificationDto!]
3306
+ distanceQualifications: [DistanceQualificationDto!]
3307
+ sportsQualifications: [SportsQualificationDto!]
3308
+ levelQualifications: [SportsLevelQualificationDto!]
3309
+ }
3310
+
3311
+ input OfferQueryDto {
3312
+ """Page number (0-based)"""
3313
+ page: Int = 0
3314
+
3315
+ """Number of items per page"""
3316
+ limit: Int = 25
3317
+
3318
+ """Search query for offer name or description"""
3319
+ search: String
3320
+
3321
+ """Filter by active status"""
3322
+ active: String
3323
+
3324
+ """Filter by offer type"""
3325
+ offerType: String
3326
+
3327
+ """Filter by featured status"""
3328
+ featured: String
3329
+
3330
+ """Filter by brand ID"""
3331
+ brandId: String
3332
+
3333
+ """Sort field"""
3334
+ sortField: String = "name"
3335
+
3336
+ """Sort order"""
3337
+ sortOrder: String = "asc"
3338
+
3339
+ """Filter to only show offers the athlete is eligible for"""
3340
+ filterEligibleOnly: Boolean = false
3341
+
3342
+ """Athlete ID to check eligibility against"""
3343
+ athleteId: String
3344
+ }
3345
+
3346
+ input OfferClaimQueryDto {
3347
+ status: OfferClaimStatus = ALL
3348
+ }
3349
+
3350
+ input LeaderboardQueryDto {
3351
+ """
3352
+ Score type: VTX_SCORE, SOCIAL_SCORE, TRANING_SCORE, or COMPETITION_SCORE
3353
+ """
3354
+ scoreType: String
3355
+
3356
+ """Filter by sport ID"""
3357
+ sportId: String
3358
+
3359
+ """Filter by sport level ID"""
3360
+ sportLevelId: String
3361
+
3362
+ """Filter by country code (ISO 2-letter)"""
3363
+ countryCode: String
3364
+
3365
+ """Page number (1-based)"""
3366
+ page: Int = 1
3367
+
3368
+ """Number of entries per page (max 100)"""
3369
+ limit: Int = 20
3370
+ }
3371
+
3372
+ input UserRankQueryDto {
3373
+ """Athlete ID"""
3374
+ athleteId: String!
3375
+
3376
+ """
3377
+ Score type: VTX_SCORE, SOCIAL_SCORE, TRANING_SCORE, or COMPETITION_SCORE
3378
+ """
3379
+ scoreType: String
3380
+
3381
+ """Filter by sport ID"""
3382
+ sportId: String
3383
+
3384
+ """Filter by sport level ID"""
3385
+ sportLevelId: String
3386
+
3387
+ """Filter by country code (ISO2)"""
3388
+ countryCode: String
3389
+ }
3390
+
3391
+ input ScoreHistoryQueryDto {
3392
+ athleteId: String!
3393
+ timeRange: TimeRange!
3394
+ }
3395
+
3396
+ """Time range for historical data queries"""
3397
+ enum TimeRange {
3398
+ SEVEN_DAYS
3399
+ THIRTY_DAYS
3400
+ NINETY_DAYS
3401
+ ONE_YEAR
3402
+ ALL_TIME
3403
+ }
3404
+
3405
+ input RankHistoryQueryDto {
3406
+ athleteId: String!
3407
+ timeRange: TimeRange!
3408
+ sportId: String
3409
+ countryCode: String
3410
+ }
3411
+
3412
+ input RankContextQueryDto {
3413
+ athleteId: String!
3414
+ sportId: String
3415
+ sportLevelId: String
3416
+ countryCode: String
3417
+ }
3418
+
3419
+ input MetricRangeInput {
3420
+ """Name of the metric to filter (e.g., "distance", "elevation_gain")"""
3421
+ metricName: String!
3422
+
3423
+ """Minimum value for the metric (inclusive)"""
3424
+ min: Float
3425
+
3426
+ """Maximum value for the metric (inclusive)"""
3427
+ max: Float
3428
+ }
3429
+
3430
+ input ActivityFiltersInput {
3431
+ """Filter to a specific date (ISO format YYYY-MM-DD)"""
3432
+ dateFilter: String
3433
+
3434
+ """Filter by date range start (ISO format YYYY-MM-DD)"""
3435
+ dateFrom: String
3436
+
3437
+ """Filter by date range end (ISO format YYYY-MM-DD)"""
3438
+ dateTo: String
3439
+
3440
+ """
3441
+ Filter by activity types (e.g., ["Run", "Ride", "Swim"]). Schema placeholder - not yet implemented.
3442
+ """
3443
+ activityTypes: [String!]
3444
+
3445
+ """Filter by metric ranges. Schema placeholder - not yet implemented."""
3446
+ metricRanges: [MetricRangeInput!]
3447
+ }
3448
+
3449
+ input ActivitiesQueryDto {
3450
+ athleteId: String!
3451
+ category: ActivityCategory!
3452
+ timeRange: TimeRange!
3453
+ page: Int = 1
3454
+ limit: Int = 20
3455
+
3456
+ """Optional filters for activities"""
3457
+ filters: ActivityFiltersInput
3458
+ }
3459
+
3460
+ input ActivityDetailQueryDto {
3461
+ athleteId: String!
3462
+ activityId: String!
3463
+
3464
+ """Category: training or social"""
3465
+ category: String!
3466
+ }
3467
+
3468
+ input ComponentSummaryQueryDto {
3469
+ athleteId: String!
3470
+
3471
+ """Component: training or social"""
3472
+ component: String!
3473
+ }
3474
+
3475
+ input ActivityDatesQueryDto {
3476
+ athleteId: String!
3477
+ }
3478
+
3479
+ input DateRangeInput {
3480
+ start: DateTime!
3481
+ end: DateTime!
3482
+ }
3483
+
3484
+ input PostComparisonInput {
3485
+ comparisonWindowDays: Int = 90
3486
+ sortBy: PostSortOption = RECENT
3487
+ contentType: ContentType
3488
+ limit: Int = 10
3489
+ offset: Int = 0
3490
+ }
3491
+
3492
+ input NotificationQueryDto {
3493
+ """Maximum number of notifications to return"""
3494
+ limit: Int = 20
3495
+
3496
+ """Number of notifications to skip"""
3497
+ offset: Int = 0
3498
+
3499
+ """Whether to include read notifications"""
3500
+ includeRead: Boolean = true
3501
+
3502
+ """Whether to include dismissed notifications"""
3503
+ includeDismissed: Boolean = false
3504
+
3505
+ """Filter by notification types"""
3506
+ types: [String!]
3507
+ }
3508
+
3509
+ input MarkNotificationReadDto {
3510
+ """The notification ID to mark as read"""
3511
+ notificationId: String!
3512
+ }
3513
+
3514
+ input DismissNotificationDto {
3515
+ """The notification ID to dismiss"""
3516
+ notificationId: String!
3517
+ }
3518
+
3519
+ input UpdateNotificationPreferenceDto {
3520
+ """Whether to enable email notifications"""
3521
+ emailEnabled: Boolean
3522
+
3523
+ """Whether to enable in-app notifications"""
3524
+ inAppEnabled: Boolean
3525
+
3526
+ """Whether to enable push notifications"""
3527
+ pushEnabled: Boolean
3528
+
3529
+ """Array of notification type keys to mute"""
3530
+ mutedTypes: [String!]
3531
+ }
3532
+
3533
+ input RegisterDeviceTokenDto {
3534
+ token: String!
3535
+ platform: String!
3536
+ deviceName: String
3537
+ }
3538
+
3539
+ input UnregisterDeviceTokenDto {
3540
+ token: String!
3541
+ }
3542
+
3543
+ input FollowAthleteInput {
3544
+ """The athlete ID to follow"""
3545
+ athleteId: String!
3546
+ }
3547
+
3548
+ input UnfollowAthleteInput {
3549
+ """The athlete ID to unfollow"""
3550
+ athleteId: String!
3551
+ }
3552
+
3553
+ input IsFollowingAthleteInput {
3554
+ """The athlete ID to check"""
3555
+ athleteId: String!
3556
+ }
3557
+
3558
+ input FollowedAthletesQueryInput {
3559
+ """Maximum number of athletes to return (default: 20, max: 100)"""
3560
+ limit: Int
3561
+
3562
+ """Offset for pagination"""
3563
+ offset: Int
3564
+ }
3565
+
3566
+ input SendChatMessageDto {
3567
+ """Thread ID to send the message in"""
3568
+ threadId: String!
3569
+
3570
+ """Chat message content (1-2000 characters)"""
3571
+ message: String!
3572
+ }
3573
+
3574
+ input UpdateAiCoachConfigDto {
3575
+ """Enable or disable AI Coach"""
3576
+ enabled: Boolean
3577
+
3578
+ """Enable or disable nudge notifications"""
3579
+ nudgesEnabled: Boolean
3580
+
3581
+ """Preferred focus: BALANCED, TRAINING, SOCIAL, or COMPETITION"""
3582
+ preferredFocus: String
3583
+ }
3584
+
3585
+ input NudgeQueryDto {
3586
+ """If true, return only unread nudges"""
3587
+ unreadOnly: Boolean = false
3588
+ }
3589
+
3590
+ """Mode of donation for the funding checkout session"""
3591
+ enum DonationMode {
3592
+ PUBLIC
3593
+ PRIVATE
3594
+ ANONYMOUS
3595
+ }
3596
+
3597
+ enum OfferClaimStatus {
3598
+ ACTIVE
3599
+ EXPIRED
3600
+ ALL
3601
+ }
3602
+
3603
+ """Options for sorting posts"""
3604
+ enum PostSortOption {
3605
+ RECENT
3606
+ TOP
3607
+ UNDERPERFORMING
3608
+ }
3609
+
3610
+ type Query {
3611
+ findTenantById(_id: String!): Tenant!
3612
+ findTenantByEmail(email: String!, domainId: String!): Tenant!
3613
+ getTenants: [Tenant!]!
3614
+ isTenantUriAvailable(tenant_uri: String!): UriAvailableType!
3615
+ findUserById(_id: String!): User!
3616
+ findUserByEmail(email: String!): User!
3617
+ validateUserCredentials(username: String!, password: String!): User!
3618
+ getUploadUrl(input: AWSS3GetUploadDto!): AWSS3UploadUrl!
3619
+ industries: [Industry!]!
3620
+ findIndustryById(industryId: String!): Industry!
3621
+ brands: [Brand!]!
3622
+ getBrandsPaginated(query: BrandQueryDto): PaginatedBrands!
3623
+ getBrandByName(name: String!, translations: Boolean!): Brand!
3624
+ getBrandTranslation(brandId: String!, language: String!): BrandTranslation!
3625
+ existsValidSponsorForEmail(loginEmail: String!): Sponsor!
3626
+ sponsors: [Sponsor!]!
3627
+ getSponsorsPaginated(query: SponsorQueryDto): PaginatedSponsors!
3628
+ findSponsorAthleteInvitation(input: FindSponsorAthleteInvitationDto!): SponsorAthleteInvitation!
3629
+ verifyAthleteCompetitionLinkedForDelete(input: existValueDto!): CompetitionDeleteVerificationResponse!
3630
+ getAthletes: [Athlete!]!
3631
+ queryAthleteFundingCampaigns(input: AthleteQueryDto!): AthleteQueryResponse!
3632
+ searchAthletes(searchString: String!): [Athlete!]!
3633
+ findAthleteById(athleteId: String!): Athlete!
3634
+ findAthleteForUser(loginEmail: String!): Athlete!
3635
+ getRecommendedAthletes(loginEmail: String!): [Athlete!]!
3636
+ getSponsorAthletesForTenant: [Athlete!]!
3637
+ getAthleteCompetitions(input: GetAthleteCompetitionsDto!): [AthleteCompetition!]!
3638
+ getAthleteMemberships(athleteId: String!): [AthleteMembership!]!
3639
+ findAthletebyIdpublic(athleteId: String!): Athlete!
3640
+ getAthleteAlbums: [Album!]!
3641
+ getAndSetAlbumById(input: String!): Album!
3642
+ getAthleteAlbumId(input: String!): Album!
3643
+ queryAthleteWithFilter(input: AthleteQueryDto!): AthleteQueryResponse!
3644
+ getPublicAthleteAlbums(athleteId: String!): [Album!]!
3645
+ screenNameAvailability(input: existValueDto!): ExistValueResponse!
3646
+ checkScoreRefreshCapabilities(input: CheckScoreRefreshCapabilityDto!): CheckScoreRefreshCapabilityResponse!
3647
+ getAthleteHistoricalScoresPeriod(input: GetHistoricalScoresDto!): HistoricalScoresPeriod!
3648
+ getAthleteHistoricalScores(input: GetHistoricalScoresDto!): [HistoricalScore!]!
3649
+ getMyHistoricalScoresPeriod(input: GetMyHistoricalScoresDto!): HistoricalScoresPeriod!
3650
+ getMyHistoricalScores(input: GetMyHistoricalScoresDto!): [HistoricalScore!]!
3651
+ getAthleteCampaigns(input: GetAthleteCampaignsDto!): [FundRaisingCampaign!]!
3652
+ browseCampaigns(input: BrowseCampaignsDto!): BrowseCampaignsResult!
3653
+ getOnboardingProgress: OnboardingProgressResponse!
3654
+ getPublicAthleteIntegrationStatus(athleteId: String!): PublicIntegrationStatus!
3655
+ getSports: [Sport!]!
3656
+ getSportsPaginated(query: SportQueryDto): PaginatedSports!
3657
+ findSportById(sportId: String!): Sport!
3658
+ getSportLevels: [SportLevel!]!
3659
+ getPublicSponsorships: [Sponsorship!]!
3660
+ getTenantSponsorships: [Sponsorship!]!
3661
+ getCountries: [Country!]!
3662
+ getCountryStates(countryId: String!): [State!]!
3663
+ getStates: [State!]!
3664
+ getStateCities(stateId: String!): [City!]!
3665
+ findCitiesStartingWith(text: String!): [City!]!
3666
+ findCityById(cityId: String!): City!
3667
+ findVtxUser(input: FindVtxUserDto!): User!
3668
+ validateUserCredentialsVtx(username: String!, password: String!): User!
3669
+ getUserImagesFromEmail(loginEmail: String!): UserImages!
3670
+ getResetVerificationCode(input: String!): VerificationCode!
3671
+ verifyCode(input: VerifyCodeDto!): CodeVerificationResponse!
3672
+ isUserSuspended(loginEmail: String!): Boolean!
3673
+ getAllUsers: [AdminUserView!]!
3674
+ getUsersPaginated(query: UserQueryDto): PaginatedUsers!
3675
+ getStravaLoginUrl: String!
3676
+ getSportsEvents(input: GetSportEventsDto!): [SportsEvent!]!
3677
+ getSportsEventsPaginated(query: EventQueryDto): PaginatedEvents!
3678
+ getBudgetsByAthlete: BudgetData!
3679
+ getDonationsByAthlete: [Receipt!]!
3680
+ getDonationsToAthlete(athleteId: String!): [Donation!]!
3681
+ getDonationsToMe: [Donation!]!
3682
+ getBudgetConcepts: [BudgetConcept!]!
3683
+ getBudgetItemUnits: [BudgetItemUnit!]!
3684
+ getDonationDatesForCalendar(campaignId: String): DonationDates!
3685
+ getDonationsPaginated(query: DonationQueryDto): PaginatedDonations!
3686
+ getMembershipOrganizations: [MembershipOrganizationReference!]!
3687
+ getAthleteStravaIntegration: AthleteIntegrationReference!
3688
+ getAthleteInstagramIntegration: AthleteIntegrationReference!
3689
+ getAthleteIntegrations: AthleteIntegrationReference!
3690
+ stripeQuery(input: StripeQueryDto!): StripeObject!
3691
+ getStripeBalance: StripeBalance!
3692
+ getDatabaseTextFile(input: GetDatabaseFileDto!): TextDatabaseFile!
3693
+ getS3UploadUrl(input: AWSS3GetUploadDto!): AWSS3UploadUrl!
3694
+ getReceipt(input: GetReceiptDto!): Receipt!
3695
+ getReceiptUrl(input: GetReceiptDto!): ReceiptUrl!
3696
+ getTransactionDetails(input: GetTransactionDetailsDto!): TransactionDetails!
3697
+ findMemberForUser(loginEmail: String!): Member!
3698
+ getDonationsByMember: [Donation!]!
3699
+ getDonationsByUser(email: String!): [Donation!]!
3700
+ getAllTransactions: [AdminTransactionView!]!
3701
+ getTransactionsPaginated(query: TransactionQueryDto): PaginatedTransactions!
3702
+ offers: [Offer!]!
3703
+ getOffersPaginated(query: OfferQueryDto): PaginatedOffers!
3704
+ offersForAthlete(athleteId: String): [Offer!]!
3705
+ offer(id: String!): Offer!
3706
+ myOfferClaims(athleteId: String!, query: OfferClaimQueryDto): [OfferClaim!]!
3707
+ offerAvailability(offerId: String!, athleteId: String!): OfferAvailability!
3708
+ offersWithEligibility(query: OfferQueryDto): PaginatedOffersWithEligibility!
3709
+ getLeaderboard(input: LeaderboardQueryDto): LeaderboardResponse!
3710
+ getUserRank(input: UserRankQueryDto!): UserRank!
3711
+ athleteDashboard(athleteId: String!): DashboardSummary!
3712
+ athleteScoreHistory(input: ScoreHistoryQueryDto!): [ScoreHistoryEntry!]!
3713
+ athleteRankHistory(input: RankHistoryQueryDto!): [RankHistoryEntry!]!
3714
+ athleteRankContext(input: RankContextQueryDto!): RankContext!
3715
+ athleteActivities(input: ActivitiesQueryDto!): ActivitiesResponse!
3716
+ athleteActivityDetail(input: ActivityDetailQueryDto!): ActivityDetail!
3717
+ athleteComponentSummary(input: ComponentSummaryQueryDto!): ComponentSummary!
3718
+ athleteActivityDates(input: ActivityDatesQueryDto!): ActivityDatesResponse!
3719
+ socialAggregates(athleteId: ID!, platform: Platform!, range: DateRangeInput!, periodType: PeriodType): [SocialAggregateType!]!
3720
+ postsWithComparison(athleteId: ID!, platform: Platform!, options: PostComparisonInput): PostComparisonResultType!
3721
+
3722
+ """Get notifications for the current user"""
3723
+ myNotifications(input: NotificationQueryDto): NotificationListResponse!
3724
+
3725
+ """Get count of unread notifications"""
3726
+ notificationUnreadCount: UnreadCountResponse!
3727
+
3728
+ """Get notification preferences for the current user"""
3729
+ myNotificationPreferences: NotificationPreference!
3730
+
3731
+ """Get athletes followed by the current member"""
3732
+ myFollowedAthletes(input: FollowedAthletesQueryInput): FollowedAthletesListResponse!
3733
+
3734
+ """Check if the current member is following an athlete"""
3735
+ isFollowingAthlete(input: IsFollowingAthleteInput!): IsFollowingResponse!
3736
+ getEmailCampaigns(status: String, search: String, page: Int = 1, limit: Int = 20): EmailCampaignPage!
3737
+ getEmailCampaign(id: String!): EmailCampaign!
3738
+ getAudiencePreview(filters: AudienceFilterDto!): AudiencePreview!
3739
+ getSendGridTemplates: [SendGridTemplate!]!
3740
+ getSendGridTemplatePreview(templateId: String!): String
3741
+ getEmailSegments: [EmailSegment!]!
3742
+
3743
+ """Get the current week AI Coach thread with messages"""
3744
+ getAiCoachThread: AiCoachThread
3745
+
3746
+ """Get archived AI Coach thread history for the athlete"""
3747
+ getAiCoachThreadHistory(limit: Int = 10): [AiCoachThread!]!
3748
+
3749
+ """Get messages for a specific AI Coach thread"""
3750
+ getAiCoachThreadMessages(threadId: String!): [AiCoachMessage!]!
3751
+
3752
+ """Get AI Coach configuration for the current athlete"""
3753
+ getAiCoachConfig: AiCoachConfig!
3754
+
3755
+ """Get AI Coach nudges for the current athlete"""
3756
+ getAiCoachNudges(input: NudgeQueryDto): AiCoachNudgeListResponse!
3757
+
3758
+ """Get count of unread AI Coach nudges"""
3759
+ getAiCoachUnreadNudgeCount: AiCoachUnreadNudgeCountResponse!
3760
+ }
3761
+
3762
+ input AWSS3GetUploadDto {
3763
+ useType: String!
3764
+ name: String
3765
+ }
3766
+
3767
+ input FindSponsorAthleteInvitationDto {
3768
+ code: String!
3769
+ type: String
3770
+ }
3771
+
3772
+ input GetAthleteCompetitionsDto {
3773
+ athleteId: String!
3774
+ fromInclusive: DateTime
3775
+ toExclusive: DateTime
3776
+ }
3777
+
3778
+ input FindVtxUserDto {
3779
+ loginEmail: String!
3780
+ }
3781
+
3782
+ input GetSportEventsDto {
3783
+ matchString: String
3784
+ }
3785
+
3786
+ input AudienceFilterDto {
3787
+ """Filter by user type (athlete, member, sponsor)"""
3788
+ userType: String
3789
+
3790
+ """Filter by sport name (matches athlete main sport)"""
3791
+ sport: String
3792
+
3793
+ """Filter by country name"""
3794
+ country: String
3795
+
3796
+ """Onboarding status (complete, incomplete)"""
3797
+ onboardingStatus: String
3798
+
3799
+ """Campaign status filter (active, none, ending_soon, expired, funded)"""
3800
+ campaignStatus: String
3801
+
3802
+ """Wallet status filter (created, not_created)"""
3803
+ walletStatus: String
3804
+
3805
+ """Filter by Strava connection status"""
3806
+ hasStrava: Boolean
3807
+
3808
+ """Filter by Instagram connection status"""
3809
+ hasInstagram: Boolean
3810
+
3811
+ """Minimum VTX score"""
3812
+ vtxScoreMin: Float
3813
+
3814
+ """Maximum VTX score"""
3815
+ vtxScoreMax: Float
3816
+
3817
+ """Donor status (never_donated, has_donated)"""
3818
+ donorStatus: String
3819
+ }
3820
+
3821
+ type Mutation {
3822
+ registerNewDomainTenant(tenant: CreateTenantInput!): Tenant!
3823
+ registerNewDomainTenantWithLogin(tenant: CreateTenantInput!): TenantWithUserLogin!
3824
+ createUserAndLogin(user: CreateActiveUserInput!): UserWithToken!
3825
+ loginUserFromEmail(email: String!, loginMethod: String!): UserToken!
3826
+ loginUserFromCredentials(username: String!, password: String!): UserWithToken!
3827
+ registerUserToDomainFromEmail(input: RegisterUserToDomainFromEmailInput!): User!
3828
+ refreshToken(dto: RefreshTokenInput!): UserToken!
3829
+ deleteUploadedUseTypeFile(input: AWSS3DeleteUseTypeFileDto!): AWSS3CallResult!
3830
+ deleteUploadedBucketFile(input: AWSS3DeleteBucketFileDto!): AWSS3CallResult!
3831
+ deleteUploadedTypeKeyFile(input: AWSS3DeleteUseTypeKeyDto!): AWSS3CallResult!
3832
+ registerS3UploadedFile(input: AWSS3UploadedFileDto!): AWSS3File!
3833
+ createIndustry(input: CreateIndustryDto!): Industry!
3834
+ createBrand(input: CreateBrandDto!): Brand!
3835
+ updateBrand(id: String!, input: CreateBrandDto!): Brand!
3836
+ deleteBrand(id: String!): Boolean!
3837
+ linkBrandToSponsor(brandId: String!, sponsorId: String!): Brand!
3838
+ unlinkBrandFromSponsor(brandId: String!, sponsorId: String!): Brand!
3839
+ registerSponsor(input: RegisterSponsorInput!): Sponsor!
3840
+ createSponsor(input: CreateSponsorDto!): Sponsor!
3841
+ sendAthleteInvitations(input: InviteAthletesDto!): [SponsorAthleteInvitation!]!
3842
+ updateSponsor(id: String!, input: UpdateSponsorDto!): Sponsor!
3843
+ deleteSponsor(id: String!): Boolean!
3844
+ forceDeleteAthleteCompetition(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
3845
+ registerAthlete(input: RegisterAthleteDto!): Athlete!
3846
+ editProfileValue(input: EditValueDto!): EditValueResponse!
3847
+ editPicture(input: EditPictureDto!): EditPictureResponse!
3848
+ AddAlbumPictures(input: UploadAlbumsPicturesDto!): AddValuesResponse!
3849
+ addAthleteCompetition(input: CreateAthleteCompetitionDto!): AthleteCompetition!
3850
+ deleteAthleteCompetition(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
3851
+ createAthleteAlbum(input: UploadAlbumsPicturesDto!): Album!
3852
+ reorderAlbumIndex(input: EditDisplayIndexDto!): [Album!]!
3853
+ editAlbum(input: UploadAlbumsPicturesDto!): Album!
3854
+ deleteAthleteAlbum(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
3855
+ deleteAthletePhotos(input: DeleteValuesDto!): DeleteValuesResponse!
3856
+ saveAthleteCompetitionResult(input: SetCompetitionResultDto!): AthleteCompetitionResult!
3857
+ updateAthleteScores: Athlete!
3858
+ updateAthleteCompetitionScores: Athlete!
3859
+ forceRefreshAthleteScores(input: ForceScoreRefreshDto!): ForceScoreRefreshResponse!
3860
+ setCurrentCampaign(input: SetCurrentCampaignDto!): FundRaisingCampaign!
3861
+ deleteOnboardingAthlete: DeleteOnboardingAthleteResponse!
3862
+ updateOnboardingProgress(input: UpdateOnboardingProgressDto!): OnboardingProgressResponse!
3863
+ createSport(input: CreateSportDto!): Sport!
3864
+ updateSport(input: UpdateSportDto!): Sport!
3865
+ createSportLevel(input: CreateSportLevelDto!): SportLevel!
3866
+ createSponsorship(input: CreateSponsorshipDto!): Sponsorship!
3867
+ createCountry(input: CreateCountryDto!): Country!
3868
+ createState(input: CreateStateDto!): State!
3869
+ createCity(input: CreateCityDto!): City!
3870
+ preRegisterAthleteUser(input: RegisterUserDto!): VerificationCode!
3871
+ confirmAthleteUserRegistrationAndLogin(input: VerifyCodeDto!): UserWithToken!
3872
+ confirmAthleteUserRegistration(input: VerifyCodeDto!): User!
3873
+ registerAthleteUser(input: RegisterUserDto!): User!
3874
+ registerUser(input: RegisterUserDto!): User!
3875
+ registerSponsorUser(input: RegisterUserDto!): User!
3876
+ loginUserFromCredentialsVtx(username: String!, password: String!): UserWithToken!
3877
+ createResetPasswordCode(input: String!): EditValueResponse!
3878
+ resetUserPassword(input: resetPasswordDto!): EditValueResponse!
3879
+ validateToken(input: String!): ValidatedToken!
3880
+ updateUserSuspendedStatus(input: UpdateUserSuspendedStatusDto!): EditValueResponse!
3881
+ deleteMyAccount: DeleteVtxUserResponse!
3882
+ deleteVtxUser(input: DeleteVtxUserDto!): DeleteVtxUserResponse!
3883
+ createSportsEvent(input: CreateSportEventDto!): SportsEvent!
3884
+ updateSportsEvent(input: UpdateSportEventDto!): SportsEvent!
3885
+ deleteSportsEvent(eventId: String!): EditValueResponse!
3886
+ mergeSportsEvents(input: MergeSportsEventsDto!): MergeEventsResponse!
3887
+ setFundingStatus(input: SetFundingStatusDto!): FundRaisingCampaign!
3888
+ createFundingCampaign(input: CreateFundingCampaignDto!): FundRaisingCampaign!
3889
+ updateFundingCampaign(input: UpdateFundingCampaignDto!): FundRaisingCampaign!
3890
+ deleteFundingCampaign(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
3891
+ deleteFundingCampaigns(input: DeleteValuesDto!): DeleteValuesResponse!
3892
+ deleteCompetitionBudget(competitionId: String!): Boolean!
3893
+ addCompetitionBudget(input: AddCompetitionBudgetDto!): Boolean!
3894
+ editCompetitionBudget(input: EditCompetitionBudgetDto!): Boolean!
3895
+ editCampaignBudget(input: EditCampaignBudgetDto!): Boolean!
3896
+ editCompetitionBudgetForCampaign(input: EditCampaignBudgetDto!): Boolean!
3897
+ createMembershipOrganization(input: CreateMembershipOrganizationDto!): MembershipOrganizationReference!
3898
+ createAthleteMembershipAffilation(input: CreateAthleteMembershipDto!): AthleteMembership!
3899
+ deleteAthleteMembershipAffilation(input: DeleteSingleValueDto!): DeleteSingleValueResponse!
3900
+ updateAthleteIntegration(type: String!): Boolean!
3901
+ unlinkInstagram: Boolean!
3902
+ createStripeAccount(input: CreateStripeAccountDto!): StripeAccountReference!
3903
+ createAthleteStripeSession: StripeSession!
3904
+ createStripeCheckoutSession(input: DonationCheckoutDto!): StripeCheckoutSession!
3905
+ createStripeLoginLink: String!
3906
+ createStripeAccountLink: String!
3907
+ registerMember(input: RegisterMemberDto!): Member!
3908
+ createOffer(input: CreateOfferDto!): Offer!
3909
+ updateOffer(id: String!, input: CreateOfferDto!): Offer!
3910
+ deleteOffer(id: String!): Boolean!
3911
+ setOfferStatus(id: String!, status: String!): Offer!
3912
+ activateOffer(id: String!): Offer!
3913
+ deactivateOffer(id: String!): Offer!
3914
+ claimOffer(offerId: String!, athleteId: String!): OfferClaim!
3915
+ removeOfferClaim(claimId: String!, athleteId: String!): Boolean!
3916
+ uploadCouponCodes(offerId: String!, csvContent: String!): UploadResult!
3917
+ rebuildLeaderboardCache: Boolean!
3918
+
3919
+ """Mark a notification as read"""
3920
+ markNotificationAsRead(input: MarkNotificationReadDto!): Notification!
3921
+
3922
+ """Mark all notifications as read, returns count of updated notifications"""
3923
+ markAllNotificationsAsRead: Int!
3924
+
3925
+ """Dismiss a notification"""
3926
+ dismissNotification(input: DismissNotificationDto!): Boolean!
3927
+
3928
+ """Update notification preferences"""
3929
+ updateNotificationPreferences(input: UpdateNotificationPreferenceDto!): NotificationPreference!
3930
+
3931
+ """Register a device token for push notifications"""
3932
+ registerDeviceToken(input: RegisterDeviceTokenDto!): DeviceTokenType!
3933
+
3934
+ """Unregister a device token"""
3935
+ unregisterDeviceToken(input: UnregisterDeviceTokenDto!): Boolean!
3936
+
3937
+ """Follow an athlete"""
3938
+ followAthlete(input: FollowAthleteInput!): Boolean!
3939
+
3940
+ """Unfollow an athlete"""
3941
+ unfollowAthlete(input: UnfollowAthleteInput!): Boolean!
3942
+ createEmailCampaign(input: CreateEmailCampaignDto!): EmailCampaign!
3943
+ updateEmailCampaign(id: String!, input: UpdateEmailCampaignDto!): EmailCampaign!
3944
+ deleteEmailCampaign(id: String!): Boolean!
3945
+ cloneEmailCampaign(id: String!): EmailCampaign!
3946
+ sendTestEmail(campaignId: String!, adminEmail: String!): Boolean!
3947
+ sendBulkEmail(campaignId: String!): Boolean!
3948
+ scheduleEmailCampaign(campaignId: String!, scheduledFor: DateTime!): EmailCampaign!
3949
+ cancelScheduledEmail(campaignId: String!): EmailCampaign!
3950
+ createEmailSegment(input: CreateEmailSegmentDto!): EmailSegment!
3951
+ updateEmailSegment(id: String!, input: UpdateEmailSegmentDto!): EmailSegment!
3952
+ deleteEmailSegment(id: String!): Boolean!
3953
+
3954
+ """Send a chat message to AI Coach and receive a response"""
3955
+ sendAiCoachMessage(input: SendChatMessageDto!): AiCoachMessage!
3956
+
3957
+ """Update AI Coach preferences"""
3958
+ updateAiCoachConfig(input: UpdateAiCoachConfigDto!): AiCoachConfig!
3959
+
3960
+ """Mark an AI Coach nudge as read"""
3961
+ markAiCoachNudgeRead(nudgeId: String!): Boolean!
3962
+ }
3963
+
3964
+ input CreateTenantInput {
3965
+ name: String!
3966
+ email: String!
3967
+ tenant_uri: String!
3968
+ domain: String!
3969
+ }
3970
+
3971
+ input CreateActiveUserInput {
3972
+ loginEmail: String!
3973
+ password: String
3974
+ loginMethod: String
3975
+ clientType: String
3976
+ }
3977
+
3978
+ input RegisterUserToDomainFromEmailInput {
3979
+ email: String!
3980
+ domainId: String!
3981
+ tenantId: String
3982
+ createUserIfNotExist: Boolean = false
3983
+ }
3984
+
3985
+ input RefreshTokenInput {
3986
+ refreshToken: String!
3987
+ }
3988
+
3989
+ input AWSS3DeleteUseTypeFileDto {
3990
+ name: String!
3991
+ useType: String!
3992
+ }
3993
+
3994
+ input AWSS3DeleteBucketFileDto {
3995
+ key: String!
3996
+ bucket: String!
3997
+ credentialsId: String
3998
+ }
3999
+
4000
+ input AWSS3DeleteUseTypeKeyDto {
4001
+ key: String!
4002
+ useType: String!
4003
+ }
4004
+
4005
+ input CreateIndustryDto {
4006
+ name: String!
4007
+ }
4008
+
4009
+ input RegisterSponsorInput {
4010
+ name: String!
4011
+ phone: String
4012
+ hasWhatsapp: Boolean! = false
4013
+ companyName: String
4014
+ companyEmail: String!
4015
+ industryId: String!
4016
+ companySize: String!
4017
+ operatorType: String!
4018
+ numberOfAthletes: String!
4019
+ brands: [String!]!
4020
+ }
4021
+
4022
+ input UpdateSponsorDto {
4023
+ name: String
4024
+ description: String
4025
+ email: String
4026
+ }
4027
+
4028
+ input RegisterAthleteDto {
4029
+ email: String!
4030
+ firstName: String!
4031
+ lastName: String!
4032
+ screenName: String
4033
+ nationality: String!
4034
+ cityId: String!
4035
+ locLatitude: Float
4036
+ locLongitude: Float
4037
+ dateOfBirth: DateTime!
4038
+ lgbt: Boolean = false
4039
+ trainer: String
4040
+ trainerUrl: String
4041
+ aboutMe: String
4042
+ team: String
4043
+ gender: String!
4044
+ mainSport: String!
4045
+ mainSportLevel: String!
4046
+ profilePicture: AWSS3UploadedFileDto
4047
+ cardPicture: AWSS3UploadedFileDto
4048
+ }
4049
+
4050
+ input EditValueDto {
4051
+ field: String!
4052
+ newValue: String
4053
+ }
4054
+
4055
+ input EditDisplayIndexDto {
4056
+ updates: [AlbumIndexUpdate!]!
4057
+ }
4058
+
4059
+ input AlbumIndexUpdate {
4060
+ id: String!
4061
+ newIndex: Float!
4062
+ }
4063
+
4064
+ input SetCurrentCampaignDto {
4065
+ campaignId: String!
4066
+ }
4067
+
4068
+ input CreateSportDto {
4069
+ _id: String!
4070
+ name: String!
4071
+ priority: Float = 100
4072
+ resultType: String = "POSITION"
4073
+ }
4074
+
4075
+ input UpdateSportDto {
4076
+ _id: String!
4077
+ name: String!
4078
+ }
4079
+
4080
+ input CreateSportLevelDto {
4081
+ _id: String!
4082
+ label: String!
4083
+ index: Float!
4084
+ translations: [CreateSportLevelTranslationDto!]
4085
+ }
4086
+
4087
+ input CreateSportLevelTranslationDto {
4088
+ language: String!
4089
+ label: String!
4090
+ }
4091
+
4092
+ input CreateSponsorshipDto {
4093
+ title: String!
4094
+ brandId: String!
4095
+ description: String
4096
+ cashValue: Float = 0
4097
+ otherValue: Float = 0
4098
+ banner: AWSS3UploadedFileDto
4099
+ criteria: AthleteCriteriaDto
4100
+ deadline: DateTime
4101
+ startDate: DateTime
4102
+ duration: DurationDto!
4103
+ sponsorshipItems: [SponsorshipItemDto!]
4104
+ commitments: [SponsorshipCommitmentDto!]
4105
+ terms: String
4106
+ published: Boolean = true
4107
+ isPrivate: Boolean = false
4108
+ translations: [SponsorshipTranslationDto!]
4109
+ }
4110
+
4111
+ input DurationDto {
4112
+ length: Float! = 1
4113
+ unit: String! = "YEARS"
4114
+ }
4115
+
4116
+ input SponsorshipItemDto {
4117
+ _id: String!
4118
+ quantity: Float! = 1
4119
+ title: String!
4120
+ value: Float! = 0
4121
+ }
4122
+
4123
+ input SponsorshipCommitmentDto {
4124
+ _id: String!
4125
+ title: String!
4126
+ details: String
4127
+ hashTags: [String!]
4128
+ media: String!
4129
+ actionType: String!
4130
+ frequency: Float = 1
4131
+ periodicity: String!
4132
+ }
4133
+
4134
+ input SponsorshipTranslationDto {
4135
+ sponsorshipId: String!
4136
+ language: String!
4137
+ title: String
4138
+ description: String
4139
+ banner: AWSS3UploadedFileDto
4140
+ terms: String
4141
+ }
4142
+
4143
+ input CreateCountryDto {
4144
+ _id: String!
4145
+ name: String!
4146
+ }
4147
+
4148
+ input CreateStateDto {
4149
+ _id: String!
4150
+ name: String!
4151
+ countryId: String!
4152
+ }
4153
+
4154
+ input CreateCityDto {
4155
+ _id: String!
4156
+ cityName: String!
4157
+ cityNameLocalized: String!
4158
+ lat: Float!
4159
+ lng: Float!
4160
+ stateId: String!
4161
+ timezone: String!
4162
+ city_alt: String
4163
+ iso3: String
4164
+ admin_type: String
4165
+ capital: String
4166
+ density: Float
4167
+ population: Float
4168
+ population_proper: Float
4169
+ ranking: Float
4170
+ same_name: String
4171
+ }
4172
+
4173
+ input CreateSportEventDto {
4174
+ name: String!
4175
+ cityId: String
4176
+ sportId: String
4177
+ startDate: DateTime!
4178
+ endDate: DateTime
4179
+ website: String
4180
+ banner: AWSS3UploadedFileDto
4181
+ eventLevel: String = "Unranked"
4182
+ }
4183
+
4184
+ input CreateStripeAccountDto {
4185
+ countryId: String!
4186
+ acceptedTermsId: String!
4187
+ acceptedPrivacyId: String!
4188
+ }
4189
+
4190
+ input CreateEmailCampaignDto {
4191
+ """Email subject line"""
4192
+ subject: String!
4193
+
4194
+ """SendGrid template ID (if using template)"""
4195
+ templateId: String
4196
+
4197
+ """Template name (for audit trail)"""
4198
+ templateName: String
4199
+
4200
+ """Raw HTML content (from rich text editor)"""
4201
+ htmlContent: String
4202
+
4203
+ """Audience filter criteria"""
4204
+ audienceFilters: AudienceFilterDto!
4205
+
4206
+ """Saved segment ID (if using preset)"""
4207
+ segmentId: String
4208
+
4209
+ """Scheduled send date/time"""
4210
+ scheduledFor: DateTime
4211
+
4212
+ """Campaign status (default: draft)"""
4213
+ status: String
4214
+ }
4215
+
4216
+ input UpdateEmailCampaignDto {
4217
+ """Email subject line"""
4218
+ subject: String
4219
+
4220
+ """SendGrid template ID"""
4221
+ templateId: String
4222
+
4223
+ """Template name"""
4224
+ templateName: String
4225
+
4226
+ """Raw HTML content"""
4227
+ htmlContent: String
4228
+
4229
+ """Audience filter criteria"""
4230
+ audienceFilters: AudienceFilterDto
4231
+
4232
+ """Saved segment ID"""
4233
+ segmentId: String
4234
+
4235
+ """Scheduled send date/time"""
4236
+ scheduledFor: DateTime
4237
+
4238
+ """Campaign status"""
4239
+ status: String
4240
+ }
4241
+
4242
+ input CreateEmailSegmentDto {
4243
+ """Segment name"""
4244
+ name: String!
4245
+
4246
+ """Audience filter criteria for this segment"""
4247
+ filters: AudienceFilterDto!
4248
+ }
4249
+
4250
+ input UpdateEmailSegmentDto {
4251
+ """Segment name"""
4252
+ name: String
4253
+
4254
+ """Audience filter criteria"""
4255
+ filters: AudienceFilterDto
4256
+ }