@itm-studio/partner-sdk 0.3.0 → 0.3.2

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.
package/README.md CHANGED
@@ -32,6 +32,8 @@ const { getPartnerMomentsForBrand } = await itm.query({
32
32
  slug: true,
33
33
  startDate: true,
34
34
  endDate: true,
35
+ category: true,
36
+ subcategory: true,
35
37
  status: true,
36
38
  timezone: true,
37
39
  externalUrl: true,
@@ -394,7 +396,13 @@ const { getPartnerMomentsForBrand } = await itm.query({
394
396
  },
395
397
  sortOrder: "ASC", // ASC | DESC by start date (default: DESC)
396
398
  },
397
- moments: { uid: true, name: true, startDate: true },
399
+ moments: {
400
+ uid: true,
401
+ name: true,
402
+ startDate: true,
403
+ category: true,
404
+ subcategory: true,
405
+ },
398
406
  totalCount: true,
399
407
  hasNextPage: true,
400
408
  nextCursor: true,
@@ -409,6 +417,49 @@ setting `includePrivate` to `false`, preserves the public-only behavior.
409
417
  `filters.search` matches moment names and slugs case-insensitively, is limited
410
418
  to 100 characters, and composes with visibility, status, sorting, and cursor
411
419
  pagination.
420
+ Select `category` and `subcategory` on each moment when you need to filter or
421
+ group SDK results by the event taxonomy. Both values are set when the moment
422
+ is created; a film screening created with `category: "SCREENING"` and
423
+ `subcategory: "FILM_SCREENING"` is returned with exactly those values.
424
+
425
+ Moment tags can provide campaign-specific grouping without changing the event
426
+ taxonomy. `momentTags` is available on every `Moment` the SDK returns, including
427
+ `getPartnerMoment`. Only tags marked partner-visible are returned; private tags
428
+ are never available through the SDK. Each assignment includes whether it was
429
+ added manually or automatically. `pagination.take` must be a positive integer;
430
+ it defaults to 50 and is capped at 100. Pass `nextCursor` back as
431
+ `pagination.cursor` to fetch the next page:
432
+
433
+ ```typescript
434
+ const { getPartnerMomentsForBrand } = await itm.query({
435
+ getPartnerMomentsForBrand: {
436
+ __args: { take: 20 },
437
+ moments: {
438
+ uid: true,
439
+ name: true,
440
+ momentTags: {
441
+ __args: {
442
+ sources: ["MANUAL"], // omit to include MANUAL and AUTO
443
+ pagination: { take: 50 },
444
+ },
445
+ assignments: {
446
+ tag: { uid: true, name: true },
447
+ source: true,
448
+ isPublic: true,
449
+ confidence: true,
450
+ },
451
+ totalCount: true,
452
+ hasNextPage: true,
453
+ nextCursor: true,
454
+ },
455
+ },
456
+ totalCount: true,
457
+ },
458
+ });
459
+ ```
460
+
461
+ Use the returned Moment UIDs with audience filters when you need users who
462
+ interacted with Moments from a particular film campaign.
412
463
 
413
464
  ### `getPartnerDrops`
414
465
 
@@ -483,6 +534,11 @@ const { getPartnerMoment } = await itm.query({
483
534
  url: true,
484
535
  mimeType: true,
485
536
  },
537
+ venue: {
538
+ name: true,
539
+ city: true,
540
+ postalCode: true,
541
+ },
486
542
  ticketTiers: {
487
543
  name: true,
488
544
  price: true,
@@ -971,8 +1027,43 @@ Use OTP subscribe when you want the user to confirm the phone number before the
971
1027
  - `listNames`: optional brand list names. Missing lists are created automatically and the subscribed user is attached to them.
972
1028
  - `compliance`: optional metadata about how consent was collected. This is the right place for fields like `pageUrl`, `submissionMethod`, `submittedAt`, `timezone`, and geo/browser/device details.
973
1029
  - `compliance.ipAddress` and `compliance.userAgent`: optional. If you omit them and forward `x-forwarded-for` and `user-agent`, the backend backfills those values for you.
1030
+ - `consentText`: optional but strongly recommended. Send the verbatim opt-in disclosure the subscriber accepted on your signup surface, up to 5000 characters. See [Marketing Consent](#marketing-consent).
974
1031
  - `postSubscriptionMessage`: optional welcome message delivered automatically after the subscription becomes active. The SDK exposes this as `PostSubscriptionMessageInput` and accepts it on `CreatePartnerBrandSubscriptionInput`. See [Post-Subscription Welcome Message](#post-subscription-welcome-message).
975
1032
 
1033
+ ### Marketing Consent
1034
+
1035
+ A successful subscription **is** the marketing opt-in. Once `createPartnerBrandSubscription` (or `verifyPartnerBrandSubscription` for OTP flows) returns, the subscriber is consented for the brand's marketing SMS, and for email once an address is on file. Consent flows through to the brand's connected email/SMS destinations automatically.
1036
+
1037
+ Existing opt-outs always win, per channel. A prior STOP keyword or SMS unsubscribe for that brand blocks the SMS consent grant, and a prior email unsubscribe blocks the email consent grant — the subscription still succeeds, but consent is not granted on an opted-out channel. Users the brand has blacklisted cannot subscribe at all: the mutation fails with an authorization error.
1038
+
1039
+ **Because the subscribe call grants consent, collect the opt-in properly on your surface:**
1040
+
1041
+ - Show an explicit marketing consent disclosure at signup.
1042
+ - Send that exact disclosure back as `consentText`. It is stored with the subscription's compliance record as evidence of what the subscriber agreed to.
1043
+ - Send `compliance` metadata (at minimum `pageUrl` and `submissionMethod`) alongside it, and forward `x-forwarded-for` and `user-agent` so IP and user agent are captured.
1044
+
1045
+ ```typescript
1046
+ await client.mutation({
1047
+ createPartnerBrandSubscription: {
1048
+ __args: {
1049
+ input: {
1050
+ phoneNumber: "+14155551234",
1051
+ consentText:
1052
+ "By joining, you agree to receive recurring marketing texts from Brand. Msg & data rates may apply. Reply STOP to opt out.",
1053
+ compliance: {
1054
+ pageUrl: "https://example.com/signup",
1055
+ submissionMethod: "partner_sdk",
1056
+ },
1057
+ },
1058
+ },
1059
+ subscription: { uid: true },
1060
+ verificationRequired: true,
1061
+ },
1062
+ });
1063
+ ```
1064
+
1065
+ `consentText` is trimmed before it is stored, and a blank value is treated as omitted. Values longer than 5000 characters are rejected with a validation error, not truncated. In OTP mode the text is captured on the first call and re-used automatically when the flow is verified — send it on the first call only.
1066
+
976
1067
  ### OTP Flow Step By Step
977
1068
 
978
1069
  1. Call `createPartnerBrandSubscription` with `requireOtpVerification: true`.
@@ -1738,3 +1829,53 @@ When exposing a new backend endpoint to partners:
1738
1829
  3. Add tests in `tests/queries.test.ts`
1739
1830
  4. Open a PR — Hive will validate the schema change isn't breaking
1740
1831
  5. After merge, the schema is auto-published to Hive and a new SDK version can be released
1832
+
1833
+ ### Browse brand media (partners and agents)
1834
+
1835
+ `getPartnerMediaAssets` returns active assets linked to the authenticated brand,
1836
+ newest first. It defaults to 50 assets per page and caps `take` at 100. Follow
1837
+ `nextCursor` while `hasNextPage` is true; `totalCount` counts the matching library,
1838
+ not just this page. `mimeTypePrefix` is case-insensitive (`image/`, `video/`,
1839
+ `application/pdf`, etc.). Existing upload paths without a brand association are
1840
+ not included; an empty result does not prove the brand never uploaded a file.
1841
+
1842
+ ```ts
1843
+ const { getPartnerMediaAssets: page } = await client.query({
1844
+ getPartnerMediaAssets: {
1845
+ __args: { input: { take: 20, mimeTypePrefix: 'image/' } },
1846
+ mediaAssets: {
1847
+ uid: true, url: true, mimeType: true,
1848
+ dimensions: { width: true, height: true },
1849
+ transforms: { original: true, small: true, hls: true },
1850
+ createdAt: true,
1851
+ },
1852
+ totalCount: true, hasNextPage: true, nextCursor: true,
1853
+ },
1854
+ });
1855
+
1856
+ if (page.mediaAssets.length > 0) {
1857
+ const { getPartnerMediaAsset: asset } = await client.query({
1858
+ getPartnerMediaAsset: {
1859
+ __args: { uid: page.mediaAssets[0].uid },
1860
+ uid: true, url: true, mimeType: true,
1861
+ },
1862
+ });
1863
+ }
1864
+ ```
1865
+
1866
+ Only look up a UID after checking that a page contains an asset. Lookup returns
1867
+ `null` for missing, archived, unlinked, or other-brand assets. Transform fields
1868
+ may be null while processing is pending. Agents need `READ_MEDIA` for both reads.
1869
+
1870
+ Agent sessions may also use `getPartnerUploadUrl` and `createPartnerMediaAsset`
1871
+ with `UPLOAD_MEDIA`. PUT the bytes to the returned presigned URL, then register
1872
+ with the exact returned `filename` and the caller-supplied `mimetype` and
1873
+ `dimensions`. Add both
1874
+ `idempotencyKey` and `toolCallId` (nonblank, at most 255 characters) to registration.
1875
+ Persist the filename and registration payload before registering; after an
1876
+ unknown result, retry that same payload and key rather than requesting a fresh
1877
+ upload key. Replays return the same asset UID. The backend checks object existence
1878
+ and brand ownership and records an audit entry. Partner-token callers must omit
1879
+ both audit identifiers and retain their existing upload flow.
1880
+
1881
+ Deploy the backend media schema and migration before releasing this SDK contract.
package/dist/index.d.mts CHANGED
@@ -4,8 +4,8 @@ type Scalars = {
4
4
  ID: string;
5
5
  String: string;
6
6
  Boolean: boolean;
7
- Int: number;
8
7
  Float: number;
8
+ Int: number;
9
9
  };
10
10
  type ConsentStatus = 'NEVER_SUBSCRIBED' | 'SUBSCRIBED' | 'UNSUBSCRIBED';
11
11
  type UserSource = 'BRAND' | 'DICE' | 'ITM';
@@ -20,8 +20,8 @@ type MusicReleaseType = 'ALBUM' | 'EP' | 'SINGLE';
20
20
  type MomentType = 'DIGITAL' | 'HYBRID' | 'IRL';
21
21
  type MomentOnlineProvider = 'GOOGLE_MEET' | 'MS_TEAMS' | 'OTHER' | 'ZOOM';
22
22
  type TicketAttendanceMode = 'IN_PERSON' | 'ONLINE';
23
- type MomentCategory = 'ACTIVATION' | 'CONCERT' | 'DIGITAL' | 'DINING' | 'EDUCATION' | 'EXHIBITION' | 'FASHION' | 'FESTIVAL' | 'LAUNCH' | 'NIGHTLIFE' | 'OTHER' | 'PARTY' | 'PERFORMING_ARTS' | 'SCREENING' | 'SPORTS' | 'WELLNESS';
24
- type MomentSubcategory = 'ACOUSTIC_SET' | 'ADVANCE_SCREENING' | 'AFTER_PARTY' | 'AIRDROP' | 'ALBUM_DROP' | 'ALBUM_RELEASE_SHOW' | 'AMA' | 'ANNIVERSARY' | 'ARTIST_TALK' | 'ART_FAIR' | 'ART_FESTIVAL' | 'ATHLETE_APPEARANCE' | 'AWARDS' | 'BAR_TAKEOVER' | 'BATTLE' | 'BEER_AND_WINE_FESTIVAL' | 'BIENNALE' | 'BIRTHDAY' | 'BLOCK_PARTY' | 'BRAND_EXPERIENCE' | 'BRAND_REVEAL' | 'BREATHWORK' | 'BRUNCH_EVENT' | 'BURLESQUE' | 'CACAO_CEREMONY' | 'CARNIVAL' | 'CELEBRATION' | 'CHAMPIONSHIP' | 'CHEF_DINNER' | 'CHOIR_OR_ENSEMBLE' | 'CLUB_NIGHT' | 'CLUB_SET' | 'COLD_PLUNGE' | 'COLLABORATION_REVEAL' | 'COLLECTION_DROP' | 'COMEDY_FESTIVAL' | 'COMEDY_NIGHT' | 'COMEDY_SHOW' | 'COMMUNITY_MEETUP' | 'CONFERENCE' | 'COOKING_CLASS' | 'CULTURAL_FESTIVAL' | 'DANCE_PERFORMANCE' | 'DAYCLUB' | 'DIRECTORS_CUT' | 'DISCORD_EVENT' | 'DOCUMENTARY' | 'DRAG_SHOW' | 'ECSTATIC_DANCE' | 'ESPORTS' | 'EXHIBITION_GAME' | 'EXTREME_SPORTS' | 'FAN_EXPERIENCE' | 'FAN_FEST' | 'FASHION_FESTIVAL' | 'FASHION_PANEL' | 'FASHION_WEEK' | 'FIGHT_NIGHT' | 'FILM_FESTIVAL' | 'FILM_PREMIERE' | 'FINISSAGE' | 'FIRESIDE_CHAT' | 'FITNESS_CLASS' | 'FITTING_EVENT' | 'FOOD_FESTIVAL' | 'FOOD_PAIRING' | 'GALLERY_OPENING' | 'GAME_DAY' | 'GIVEAWAY' | 'GROUP_EXHIBITION' | 'GUERRILLA' | 'HACKATHON' | 'HEADLINER_SHOW' | 'HOLIDAY_PARTY' | 'HYBRID_EVENT' | 'IMMERSIVE_EXPERIENCE' | 'IMPROV_SHOW' | 'INFLUENCER_EVENT' | 'INSTALLATION' | 'INTERACTIVE_INSTALLATION' | 'JAZZ_NIGHT' | 'JAZZ_SESSION' | 'KARAOKE_NIGHT' | 'KEYNOTE' | 'LATE_NIGHT_SET' | 'LISTENING_PARTY' | 'LIVESTREAM' | 'LOOKBOOK_SHOOT' | 'MASQUERADE' | 'MASTERCLASS' | 'MEDITATION' | 'MEET_AND_GREET' | 'MEMBERS_ONLY' | 'MOBILE_TOUR' | 'MUSEUM_EVENT' | 'MUSICAL' | 'MUSIC_FESTIVAL' | 'MUSIC_VIDEO_PREMIERE' | 'NETWORKING_MIXER' | 'NFT_MINT' | 'ONLINE_DROP' | 'ONLINE_PREMIERE' | 'ONLINE_WATCH_PARTY' | 'OPEN_MIC' | 'OPERA' | 'ORCHESTRA' | 'OTHER' | 'OUTDOOR_CINEMA' | 'PANEL' | 'PERFORMANCE_ART' | 'PHOTO_ACTIVATION' | 'POOL_PARTY' | 'POP_UP_BOUTIQUE' | 'POP_UP_DINING' | 'POP_UP_GALLERY' | 'POP_UP_SHOP' | 'PRESENTATION' | 'PRESS_EVENT' | 'PREVIEW' | 'PRIDE_FESTIVAL' | 'PRIVATE_EVENT' | 'PRODUCT_LAUNCH' | 'RAVE' | 'RELEASE_PARTY' | 'RESIDENCY' | 'RESTAURANT_OPENING' | 'RETREAT' | 'RIVALRY_GAME' | 'ROOFTOP_PARTY' | 'ROUNDTABLE' | 'RUNWAY_SHOW' | 'RUN_CLUB' | 'RUN_OR_RACE' | 'SAMPLE_SALE' | 'SAMPLING' | 'SECRET_DINING' | 'SEMINAR' | 'SHORT_FILM' | 'SHOWCASE' | 'SHOWROOM' | 'SILENT_DISCO' | 'SOCIAL_CHALLENGE' | 'SOLO_EXHIBITION' | 'SOUND_BATH' | 'SPA_EXPERIENCE' | 'SPOKEN_WORD' | 'SPONSORSHIP' | 'SPORTS_CLINIC' | 'SPORTS_WATCH_PARTY' | 'STANDUP_COMEDY' | 'STREET_TEAM' | 'STUDIO_VISIT' | 'SUMMIT' | 'SUPPER_CLUB' | 'TAILGATE' | 'TASTING' | 'THEATER' | 'THEMED_NIGHT' | 'TOURNAMENT' | 'TOUR_STOP' | 'TRIBUTE_SHOW' | 'TRUNK_SHOW' | 'TWITTER_SPACE' | 'VARIETY_SHOW' | 'VENUE_OPENING' | 'VIRTUAL_CONCERT' | 'VIRTUAL_EVENT' | 'WAREHOUSE_PARTY' | 'WATCH_PARTY' | 'WEBINAR' | 'WELLNESS_FESTIVAL' | 'WELLNESS_WORKSHOP' | 'WORKSHOP' | 'YOGA_SESSION';
23
+ type MomentCategory = 'ACTIVATION' | 'BUSINESS' | 'COMMUNITY' | 'CONCERT' | 'DIGITAL' | 'DINING' | 'EDUCATION' | 'EXHIBITION' | 'FASHION' | 'FESTIVAL' | 'LAUNCH' | 'NIGHTLIFE' | 'OTHER' | 'PARTY' | 'PERFORMING_ARTS' | 'SCREENING' | 'SPORTS' | 'WELLNESS';
24
+ type MomentSubcategory = 'ACOUSTIC_SET' | 'ADVANCE_SCREENING' | 'AFTER_PARTY' | 'AIRDROP' | 'ALBUM_DROP' | 'ALBUM_RELEASE_SHOW' | 'AMA' | 'ANNIVERSARY' | 'APP_LAUNCH' | 'ARTIST_POP_UP' | 'ARTIST_RECEPTION' | 'ARTIST_TALK' | 'ART_FAIR' | 'ART_FESTIVAL' | 'ATHLETE_APPEARANCE' | 'AWARDS' | 'BAR_TAKEOVER' | 'BATTLE' | 'BEAUTY_FASHION_EVENT' | 'BEER_AND_WINE_FESTIVAL' | 'BEER_TASTING' | 'BIENNALE' | 'BIRTHDAY' | 'BLOCK_PARTY' | 'BOOK_LAUNCH' | 'BOOK_TALK' | 'BRAND_EXPERIENCE' | 'BRAND_REVEAL' | 'BREATHWORK' | 'BRUNCH_EVENT' | 'BURLESQUE' | 'BUSINESS_MIXER' | 'CACAO_CEREMONY' | 'CAREER_FAIR' | 'CARNIVAL' | 'CELEBRATION' | 'CHAMPIONSHIP' | 'CHARITY_EVENT' | 'CHEF_DINNER' | 'CHOIR_OR_ENSEMBLE' | 'CLASS' | 'CLUB_MEETING' | 'CLUB_NIGHT' | 'CLUB_SET' | 'COLD_PLUNGE' | 'COLLABORATION_REVEAL' | 'COLLECTION_DROP' | 'COMEDY_FESTIVAL' | 'COMEDY_NIGHT' | 'COMEDY_SHOW' | 'COMMUNITY_FESTIVAL' | 'COMMUNITY_MARKET' | 'COMMUNITY_MEETUP' | 'CONFERENCE' | 'COOKING_CLASS' | 'COURSE' | 'CREATOR_POP_UP' | 'CULTURAL_FESTIVAL' | 'CULTURAL_GATHERING' | 'DANCE_PARTY' | 'DANCE_PERFORMANCE' | 'DAYCLUB' | 'DEMO_DAY' | 'DESIGNER_MEET_AND_GREET' | 'DESIGN_EXHIBITION' | 'DINNER_PARTY' | 'DIRECTORS_CUT' | 'DISCORD_EVENT' | 'DOCUMENTARY' | 'DRAG_SHOW' | 'ECSTATIC_DANCE' | 'ESPORTS' | 'EXHIBITION_GAME' | 'EXTREME_SPORTS' | 'FAMILY_EVENT' | 'FAN_EXPERIENCE' | 'FAN_FEST' | 'FASHION_FESTIVAL' | 'FASHION_PANEL' | 'FASHION_WEEK' | 'FIGHT_NIGHT' | 'FILM_FESTIVAL' | 'FILM_PREMIERE' | 'FILM_SCREENING' | 'FINISSAGE' | 'FIRESIDE_CHAT' | 'FITNESS_CLASS' | 'FITTING_EVENT' | 'FOOD_FESTIVAL' | 'FOOD_MARKET' | 'FOOD_PAIRING' | 'FOUNDER_MEETUP' | 'FUNDRAISER' | 'GALLERY_OPENING' | 'GAME_DAY' | 'GAME_LAUNCH' | 'GAMING_STREAM' | 'GIVEAWAY' | 'GROUP_EXHIBITION' | 'GUERRILLA' | 'HACKATHON' | 'HEADLINER_SHOW' | 'HIIT_CLASS' | 'HOLIDAY_PARTY' | 'HYBRID_EVENT' | 'IMMERSIVE_EXPERIENCE' | 'IMPROV_SHOW' | 'INDUSTRY_PANEL' | 'INFLUENCER_EVENT' | 'INSTALLATION' | 'INTERACTIVE_INSTALLATION' | 'INVESTOR_EVENT' | 'JAM_SESSION' | 'JAZZ_NIGHT' | 'JAZZ_SESSION' | 'JOB_FAIR' | 'KARAOKE_NIGHT' | 'KEYNOTE' | 'LATE_NIGHT_SET' | 'LATIN_NIGHT' | 'LECTURE' | 'LISTENING_PARTY' | 'LIVESTREAM' | 'LIVE_AUDIO_ROOM' | 'LIVE_PERFORMANCE' | 'LIVE_PODCAST' | 'LOCAL_MEETUP' | 'LOOKBOOK_SHOOT' | 'MAGIC_SHOW' | 'MASQUERADE' | 'MASTERCLASS' | 'MEDITATION' | 'MEET_AND_GREET' | 'MEMBERS_ONLY' | 'MIXOLOGY_CLASS' | 'MOBILE_TOUR' | 'MUSEUM_EVENT' | 'MUSICAL' | 'MUSIC_FESTIVAL' | 'MUSIC_VIDEO_PREMIERE' | 'NETWORKING_EVENT' | 'NETWORKING_MIXER' | 'NFT_MINT' | 'NUTRITION_WORKSHOP' | 'OFFICE_HOURS' | 'ONLINE_CLASS' | 'ONLINE_COURSE' | 'ONLINE_DROP' | 'ONLINE_LECTURE' | 'ONLINE_OFFICE_HOURS' | 'ONLINE_PREMIERE' | 'ONLINE_WATCH_PARTY' | 'OPEN_DECKS' | 'OPEN_HOUSE' | 'OPEN_MIC' | 'OPERA' | 'ORCHESTRA' | 'OTHER' | 'OUTDOOR_CINEMA' | 'PANEL' | 'PERFORMANCE_ART' | 'PHOTO_ACTIVATION' | 'PHOTO_EXHIBITION' | 'PICKUP_GAME' | 'PILATES_CLASS' | 'PITCH_NIGHT' | 'POOL_PARTY' | 'POP_UP_BOUTIQUE' | 'POP_UP_DINING' | 'POP_UP_GALLERY' | 'POP_UP_SHOP' | 'PRESENTATION' | 'PRESS_EVENT' | 'PREVIEW' | 'PRIDE_FESTIVAL' | 'PRIVATE_EVENT' | 'PRODUCT_DEMO' | 'PRODUCT_LAUNCH' | 'Q_AND_A_SCREENING' | 'RAVE' | 'READING' | 'RELEASE_PARTY' | 'RESIDENCY' | 'RESTAURANT_OPENING' | 'RETREAT' | 'RIVALRY_GAME' | 'ROOFTOP_PARTY' | 'ROUNDTABLE' | 'RUNWAY_SHOW' | 'RUN_CLUB' | 'RUN_OR_RACE' | 'SAMPLE_SALE' | 'SAMPLING' | 'SECRET_DINING' | 'SEMINAR' | 'SERIES_SCREENING' | 'SHORT_FILM' | 'SHOWCASE' | 'SHOWROOM' | 'SILENT_DISCO' | 'SKATE_JAM' | 'SOCIAL_CHALLENGE' | 'SOLO_EXHIBITION' | 'SONGWRITER_ROUND' | 'SOUND_BATH' | 'SPA_EXPERIENCE' | 'SPOKEN_WORD' | 'SPONSORSHIP' | 'SPORTS_CLINIC' | 'SPORTS_TRAINING' | 'SPORTS_WATCH_PARTY' | 'STANDUP_COMEDY' | 'STORYTELLING' | 'STREAMING_RELEASE' | 'STREET_TEAM' | 'STUDIO_VISIT' | 'STUDY_GROUP' | 'STYLING_SESSION' | 'SUMMIT' | 'SUPPER_CLUB' | 'TAILGATE' | 'TASTING' | 'TECH_FESTIVAL' | 'THEATER' | 'THEMED_NIGHT' | 'TOURNAMENT' | 'TOUR_STOP' | 'TOWN_HALL' | 'TRADE_SHOW' | 'TRAINING' | 'TRIBUTE_SHOW' | 'TRUNK_SHOW' | 'TV_PREMIERE' | 'TWITTER_SPACE' | 'VARIETY_SHOW' | 'VENUE_OPENING' | 'VIRTUAL_CONCERT' | 'VIRTUAL_EVENT' | 'VIRTUAL_EXPO' | 'VIRTUAL_MEETUP' | 'VIRTUAL_NETWORKING' | 'VIRTUAL_SUMMIT' | 'VIRTUAL_WORKSHOP' | 'VOLUNTEER_EVENT' | 'WAREHOUSE_PARTY' | 'WATCH_PARTY' | 'WEBINAR' | 'WELLNESS_FESTIVAL' | 'WELLNESS_WORKSHOP' | 'WINE_TASTING' | 'WORKSHOP' | 'YOGA_SESSION';
25
25
  type MomentLineupStatus = 'APPROVED' | 'PENDING' | 'REJECTED';
26
26
  type MomentLineupType = 'CO_HOST' | 'DJ' | 'LINEUP' | 'PROMOTER' | 'SPEAKER' | 'VENDOR';
27
27
  /** Display label for the lineup section on public event pages. */
@@ -30,6 +30,7 @@ type EchoType = 'LINK' | 'POST' | 'IMAGE' | 'VIDEO' | 'GALLERY' | 'MERCH' | 'AUD
30
30
  type ThirdPartyEchoType = 'SPOTIFY' | 'INSTAGRAM' | 'TIKTOK';
31
31
  type PaymentStatus = 'PENDING' | 'SUCCEEDED' | 'FAILED';
32
32
  type TicketExtensionStatus = 'PENDING' | 'APPLIED' | 'CANCELLED' | 'EXPIRED' | 'FAILED' | 'REFUNDED';
33
+ type TagSource = 'MANUAL' | 'AUTO';
33
34
  interface Currency {
34
35
  uid: Scalars['ID'];
35
36
  code: Scalars['String'];
@@ -81,6 +82,27 @@ interface MomentCoverImage {
81
82
  mimeType: Scalars['String'];
82
83
  __typename: 'MomentCoverImage';
83
84
  }
85
+ interface Tag {
86
+ uid: Scalars['ID'];
87
+ name: Scalars['String'];
88
+ createdAt: Scalars['DateTime'];
89
+ updatedAt: Scalars['DateTime'];
90
+ __typename: 'Tag';
91
+ }
92
+ interface MomentTagAssignment {
93
+ tag: Tag;
94
+ source: TagSource;
95
+ isPublic: Scalars['Boolean'];
96
+ confidence: Scalars['Float'];
97
+ __typename: 'MomentTagAssignment';
98
+ }
99
+ interface GetMomentTagAssignmentsResponse {
100
+ assignments: MomentTagAssignment[];
101
+ totalCount: Scalars['Int'];
102
+ hasNextPage: Scalars['Boolean'];
103
+ nextCursor: (Scalars['String'] | null);
104
+ __typename: 'GetMomentTagAssignmentsResponse';
105
+ }
84
106
  interface Moment {
85
107
  uid: Scalars['ID'];
86
108
  name: Scalars['String'];
@@ -105,6 +127,8 @@ interface Moment {
105
127
  /** Cover image for the moment. Null if no cover image is set. */
106
128
  coverImage: MomentCoverImage;
107
129
  venue: (Venue | null);
130
+ /** Public tag assignments owned by the authenticated partner's brand. */
131
+ momentTags: GetMomentTagAssignmentsResponse;
108
132
  ticketTiers: TicketTier[];
109
133
  createdAt: Scalars['DateTime'];
110
134
  updatedAt: Scalars['DateTime'];
@@ -650,7 +674,18 @@ interface AgentThreadSeedContext {
650
674
  truncated: Scalars['Boolean'];
651
675
  __typename: 'AgentThreadSeedContext';
652
676
  }
677
+ interface GetPartnerMediaAssetsResponse {
678
+ mediaAssets: MediaAsset[];
679
+ totalCount: Scalars['Int'];
680
+ hasNextPage: Scalars['Boolean'];
681
+ nextCursor: (Scalars['String'] | null);
682
+ __typename: 'GetPartnerMediaAssetsResponse';
683
+ }
653
684
  interface Query {
685
+ /** Active brand-linked assets, newest first. Defaults to 50, capped at 100. READ_MEDIA for agents. */
686
+ getPartnerMediaAssets: GetPartnerMediaAssetsResponse;
687
+ /** An active asset linked to the caller's brand; null when unavailable. READ_MEDIA for agents. */
688
+ getPartnerMediaAsset: (MediaAsset | null);
654
689
  /** Get details for the brand associated with the partner token. */
655
690
  getPartnerBrand: PartnerBrand;
656
691
  /** Retrieve one AgentMail send batch owned by the authenticated partner brand. */
@@ -748,10 +783,19 @@ interface MediaAsset {
748
783
  size: Scalars['Int'];
749
784
  placeholderUrl: (Scalars['String'] | null);
750
785
  blurhash: (Scalars['String'] | null);
786
+ transforms: (Transforms | null);
751
787
  createdAt: Scalars['DateTime'];
752
788
  updatedAt: Scalars['DateTime'];
753
789
  __typename: 'MediaAsset';
754
790
  }
791
+ interface Transforms {
792
+ original: Scalars['String'];
793
+ small: (Scalars['String'] | null);
794
+ medium: (Scalars['String'] | null);
795
+ large: (Scalars['String'] | null);
796
+ hls: (Scalars['String'] | null);
797
+ __typename: 'Transforms';
798
+ }
755
799
  interface CreatePartnerBrandSubscriptionResponse {
756
800
  subscription: (BrandSubscription | null);
757
801
  verificationRequired: Scalars['Boolean'];
@@ -851,6 +895,34 @@ interface MomentCoverImageGenqlSelection {
851
895
  __typename?: boolean | number;
852
896
  __scalar?: boolean | number;
853
897
  }
898
+ interface TagGenqlSelection {
899
+ uid?: boolean | number;
900
+ name?: boolean | number;
901
+ createdAt?: boolean | number;
902
+ updatedAt?: boolean | number;
903
+ __typename?: boolean | number;
904
+ __scalar?: boolean | number;
905
+ }
906
+ interface MomentTagAssignmentGenqlSelection {
907
+ tag?: TagGenqlSelection;
908
+ source?: boolean | number;
909
+ isPublic?: boolean | number;
910
+ confidence?: boolean | number;
911
+ __typename?: boolean | number;
912
+ __scalar?: boolean | number;
913
+ }
914
+ interface GetMomentTagAssignmentsResponseGenqlSelection {
915
+ assignments?: MomentTagAssignmentGenqlSelection;
916
+ totalCount?: boolean | number;
917
+ hasNextPage?: boolean | number;
918
+ nextCursor?: boolean | number;
919
+ __typename?: boolean | number;
920
+ __scalar?: boolean | number;
921
+ }
922
+ interface PaginationInput {
923
+ cursor?: (Scalars['String'] | null);
924
+ take?: (Scalars['Float'] | null);
925
+ }
854
926
  interface MomentGenqlSelection {
855
927
  uid?: boolean | number;
856
928
  name?: boolean | number;
@@ -875,6 +947,13 @@ interface MomentGenqlSelection {
875
947
  /** Cover image for the moment. Null if no cover image is set. */
876
948
  coverImage?: MomentCoverImageGenqlSelection;
877
949
  venue?: VenueGenqlSelection;
950
+ /** Public tag assignments owned by the authenticated partner's brand. */
951
+ momentTags?: (GetMomentTagAssignmentsResponseGenqlSelection & {
952
+ __args?: {
953
+ pagination?: (PaginationInput | null);
954
+ sources?: (TagSource[] | null);
955
+ };
956
+ });
878
957
  ticketTiers?: TicketTierGenqlSelection;
879
958
  createdAt?: boolean | number;
880
959
  updatedAt?: boolean | number;
@@ -1509,7 +1588,33 @@ interface AgentThreadSeedContextGenqlSelection {
1509
1588
  __typename?: boolean | number;
1510
1589
  __scalar?: boolean | number;
1511
1590
  }
1591
+ interface GetPartnerMediaAssetsInput {
1592
+ cursor?: (Scalars['String'] | null);
1593
+ take?: (Scalars['Int'] | null);
1594
+ /** Case-insensitive MIME prefix, for example image/ or application/pdf. */
1595
+ mimeTypePrefix?: (Scalars['String'] | null);
1596
+ }
1597
+ interface GetPartnerMediaAssetsResponseGenqlSelection {
1598
+ mediaAssets?: MediaAssetGenqlSelection;
1599
+ totalCount?: boolean | number;
1600
+ hasNextPage?: boolean | number;
1601
+ nextCursor?: boolean | number;
1602
+ __typename?: boolean | number;
1603
+ __scalar?: boolean | number;
1604
+ }
1512
1605
  interface QueryGenqlSelection {
1606
+ /** Active brand-linked assets, newest first. Defaults to 50, capped at 100. READ_MEDIA for agents. */
1607
+ getPartnerMediaAssets?: (GetPartnerMediaAssetsResponseGenqlSelection & {
1608
+ __args: {
1609
+ input: GetPartnerMediaAssetsInput;
1610
+ };
1611
+ });
1612
+ /** An active asset linked to the caller's brand; null when unavailable. READ_MEDIA for agents. */
1613
+ getPartnerMediaAsset?: (MediaAssetGenqlSelection & {
1614
+ __args: {
1615
+ uid: Scalars['String'];
1616
+ };
1617
+ });
1513
1618
  /** Get details for the brand associated with the partner token. */
1514
1619
  getPartnerBrand?: PartnerBrandGenqlSelection;
1515
1620
  /** Retrieve one AgentMail send batch owned by the authenticated partner brand. */
@@ -1897,6 +2002,12 @@ interface PostSubscriptionMessageInput {
1897
2002
  }
1898
2003
  interface CreatePartnerBrandSubscriptionInput {
1899
2004
  compliance?: (SubscriptionComplianceInput | null);
2005
+ /**
2006
+ * Exact opt-in disclosure the subscriber accepted, stored as consent evidence
2007
+ * alongside the subscription compliance record. Send the verbatim text shown on
2008
+ * your signup surface — it is the record of what the subscriber agreed to.
2009
+ */
2010
+ consentText?: (Scalars['String'] | null);
1900
2011
  email?: (Scalars['String'] | null);
1901
2012
  /** Optional full name. If provided, include first and last name. */
1902
2013
  fullName?: (Scalars['String'] | null);
@@ -1944,11 +2055,21 @@ interface MediaAssetGenqlSelection {
1944
2055
  size?: boolean | number;
1945
2056
  placeholderUrl?: boolean | number;
1946
2057
  blurhash?: boolean | number;
2058
+ transforms?: TransformsGenqlSelection;
1947
2059
  createdAt?: boolean | number;
1948
2060
  updatedAt?: boolean | number;
1949
2061
  __typename?: boolean | number;
1950
2062
  __scalar?: boolean | number;
1951
2063
  }
2064
+ interface TransformsGenqlSelection {
2065
+ original?: boolean | number;
2066
+ small?: boolean | number;
2067
+ medium?: boolean | number;
2068
+ large?: boolean | number;
2069
+ hls?: boolean | number;
2070
+ __typename?: boolean | number;
2071
+ __scalar?: boolean | number;
2072
+ }
1952
2073
  interface CreatePartnerBrandSubscriptionResponseGenqlSelection {
1953
2074
  subscription?: BrandSubscriptionGenqlSelection;
1954
2075
  verificationRequired?: boolean | number;
@@ -1976,6 +2097,10 @@ interface MutationGenqlSelection {
1976
2097
  mimetype: Scalars['String'];
1977
2098
  filename: Scalars['String'];
1978
2099
  dimensions: DimensionsInput;
2100
+ /** Required for agent sessions; omit for partner tokens. Reuse with the same upload payload on retry. */
2101
+ idempotencyKey?: (Scalars['String'] | null);
2102
+ /** Required for agent sessions; omit for partner tokens. */
2103
+ toolCallId?: (Scalars['String'] | null);
1979
2104
  };
1980
2105
  });
1981
2106
  /**
@@ -2235,4 +2360,4 @@ type ITMPartnerClient = Client;
2235
2360
  */
2236
2361
  declare function createITMPartnerClient(config: ITMPartnerClientConfig): ITMPartnerClient;
2237
2362
 
2238
- export { type AgentThreadSeedContext, type ApplyDynamicPricingInput, type BrandAgentEmailMessageInput, type BrandAgentEmailSendBatch, type BrandAgentEmailSendBatchStatus, type BrandAgentEmailSendMessage, type BrandAgentEmailSendMessageStatus, type BrandDrop, type BrandDropCtaType, type BrandDropMusicLink, type BrandSubscription, type ConsentStatus, type CreateMomentOnlineConfigInput, type CreatePartnerBrandSubscriptionInput, type CreatePartnerBrandSubscriptionResponse, type CreatePartnerMomentInput, type CreatePartnerTicketTierInput, type Currency, DEFAULT_API_URL, type Dimensions, type DimensionsInput, type DynamicPricingActorType, type DynamicPricingAdmissionWindow, type DynamicPricingBatch, type DynamicPricingBatchEvent, type DynamicPricingBatchEventType, type DynamicPricingBatchItem, type DynamicPricingBatchItemStatus, type DynamicPricingBatchStatus, type DynamicPricingContext, type DynamicPricingExecutionMode, type DynamicPricingInventoryGuardInput, type DynamicPricingInventoryGuardMode, type DynamicPricingInventoryMetric, type DynamicPricingMomentInput, type DynamicPricingTierContext, type DynamicPricingTierUpdateInput, type Echo, type EchoMediaAsset, type EchoType, type EditPartnerTicketTiersForMomentInput, type EventImportPlatform, GenqlError, type GetBrandEchoesForUserResponse, type GetMomentLineupsResponse, type GetPartnerAudienceInput, type GetPartnerAudienceResponse, type GetPartnerCustomersResponse, type GetPartnerDropsResponse, type GetPartnerTicketTiersForMomentInput, type GetPartnerTicketTiersForMomentResponse, type GetPublicMomentsResponse, type GetTicketsResponse, type ITMPartnerAgentAccessConfig, type ITMPartnerAgentAccessCredentials, type ITMPartnerAgentSessionConfig, type ITMPartnerAgentSessionCredentials, type ITMPartnerClient, type ITMPartnerClientConfig, type ITMPartnerHeaders, type ITMPartnerHeadersObject, type ITMPartnerTokenConfig, type MediaAsset, type MediaAssetUploadUrl, type MerchPurchase, type Moment, type MomentCategory, type MomentCollection, type MomentCollectionLink, type MomentDiscountCodeUsage, type MomentDynamicPricingPolicy, type MomentDynamicPricingTierRule, type MomentLineup, type MomentLineupDisplayLabel, type MomentLineupResponseResult, type MomentLineupStatus, type MomentLineupType, type MomentOnlineProvider, type MomentSortOrder, type MomentStatus, type MomentSubcategory, type MomentType, type MusicReleaseType, type Mutation, type PartnerAudienceCustomer, type PartnerAudienceFiltersInput, type PartnerAudienceSortField, type PartnerAudienceSortInput, type PartnerBrand, type PartnerCustomer, type PartnerMomentAttendanceCount, type PartnerMomentAttendanceLookupInput, type PartnerMomentAttendanceStats, type PartnerMomentGuestlistAttendance, type PartnerMomentGuestlistLabelAttendance, type PartnerMomentStats, type PartnerMomentTicketAttendance, type PartnerMomentTicketTierAttendance, type PartnerMomentsFiltersInput, type PartnerTicketTier, type PartnerTicketTierUpdateInput, type Payment, type PaymentStatus, type PostSubscriptionEmailInput, type PostSubscriptionMessageInput, type PostSubscriptionPushInput, type PostSubscriptionSmsInput, type PublicMomentLineupInfo, type Query, type RespondToMomentLineupInput, type SendPartnerAgentEmailInput, type SortDirection, type SubscriptionComplianceInput, type ThirdPartyEchoType, type Ticket, type TicketAdmissionWindowSource, type TicketAttendanceMode, type TicketExtension, type TicketExtensionStatus, type TicketTier, type User, type UserSource, type Venue, type VenueInput, type VerifyPartnerBrandSubscriptionInput, createITMPartnerClient, everything, generateMutationOp, generateQueryOp };
2363
+ export { type AgentThreadSeedContext, type ApplyDynamicPricingInput, type BrandAgentEmailMessageInput, type BrandAgentEmailSendBatch, type BrandAgentEmailSendBatchStatus, type BrandAgentEmailSendMessage, type BrandAgentEmailSendMessageStatus, type BrandDrop, type BrandDropCtaType, type BrandDropMusicLink, type BrandSubscription, type ConsentStatus, type CreateMomentOnlineConfigInput, type CreatePartnerBrandSubscriptionInput, type CreatePartnerBrandSubscriptionResponse, type CreatePartnerMomentInput, type CreatePartnerTicketTierInput, type Currency, DEFAULT_API_URL, type Dimensions, type DimensionsInput, type DynamicPricingActorType, type DynamicPricingAdmissionWindow, type DynamicPricingBatch, type DynamicPricingBatchEvent, type DynamicPricingBatchEventType, type DynamicPricingBatchItem, type DynamicPricingBatchItemStatus, type DynamicPricingBatchStatus, type DynamicPricingContext, type DynamicPricingExecutionMode, type DynamicPricingInventoryGuardInput, type DynamicPricingInventoryGuardMode, type DynamicPricingInventoryMetric, type DynamicPricingMomentInput, type DynamicPricingTierContext, type DynamicPricingTierUpdateInput, type Echo, type EchoMediaAsset, type EchoType, type EditPartnerTicketTiersForMomentInput, type EventImportPlatform, GenqlError, type GetBrandEchoesForUserResponse, type GetMomentLineupsResponse, type GetMomentTagAssignmentsResponse, type GetPartnerAudienceInput, type GetPartnerAudienceResponse, type GetPartnerCustomersResponse, type GetPartnerDropsResponse, type GetPartnerMediaAssetsInput, type GetPartnerMediaAssetsResponse, type GetPartnerTicketTiersForMomentInput, type GetPartnerTicketTiersForMomentResponse, type GetPublicMomentsResponse, type GetTicketsResponse, type ITMPartnerAgentAccessConfig, type ITMPartnerAgentAccessCredentials, type ITMPartnerAgentSessionConfig, type ITMPartnerAgentSessionCredentials, type ITMPartnerClient, type ITMPartnerClientConfig, type ITMPartnerHeaders, type ITMPartnerHeadersObject, type ITMPartnerTokenConfig, type MediaAsset, type MediaAssetUploadUrl, type MerchPurchase, type Moment, type MomentCategory, type MomentCollection, type MomentCollectionLink, type MomentDiscountCodeUsage, type MomentDynamicPricingPolicy, type MomentDynamicPricingTierRule, type MomentLineup, type MomentLineupDisplayLabel, type MomentLineupResponseResult, type MomentLineupStatus, type MomentLineupType, type MomentOnlineProvider, type MomentSortOrder, type MomentStatus, type MomentSubcategory, type MomentTagAssignment, type MomentType, type MusicReleaseType, type Mutation, type PaginationInput, type PartnerAudienceCustomer, type PartnerAudienceFiltersInput, type PartnerAudienceSortField, type PartnerAudienceSortInput, type PartnerBrand, type PartnerCustomer, type PartnerMomentAttendanceCount, type PartnerMomentAttendanceLookupInput, type PartnerMomentAttendanceStats, type PartnerMomentGuestlistAttendance, type PartnerMomentGuestlistLabelAttendance, type PartnerMomentStats, type PartnerMomentTicketAttendance, type PartnerMomentTicketTierAttendance, type PartnerMomentsFiltersInput, type PartnerTicketTier, type PartnerTicketTierUpdateInput, type Payment, type PaymentStatus, type PostSubscriptionEmailInput, type PostSubscriptionMessageInput, type PostSubscriptionPushInput, type PostSubscriptionSmsInput, type PublicMomentLineupInfo, type Query, type RespondToMomentLineupInput, type SendPartnerAgentEmailInput, type SortDirection, type SubscriptionComplianceInput, type Tag, type TagSource, type ThirdPartyEchoType, type Ticket, type TicketAdmissionWindowSource, type TicketAttendanceMode, type TicketExtension, type TicketExtensionStatus, type TicketTier, type Transforms, type User, type UserSource, type Venue, type VenueInput, type VerifyPartnerBrandSubscriptionInput, createITMPartnerClient, everything, generateMutationOp, generateQueryOp };