interface components { schemas: { /** FetchAdsResponse */ FetchAdsResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }[]; /** FetchAdResponse */ FetchAdResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** * CreateAdRequest * @description Request payload for creating a new ad */ CreateAdRequest: { venueAccessor: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; }; /** * CreateAdResponse * @description Successfully created ad */ CreateAdResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** * EditAdRequest * @description Partial-update body for an existing ad */ EditAdRequest: { venueAccessor: string; id: string; content?: { businessName: { [key: string]: string; }; headlines: { [key: string]: string[]; }; descriptions: { [key: string]: string[]; }; paths: { [key: string]: string[]; }; /** Format: uri */ finalUrl: string; }; status?: components["schemas"]["AdStatus"]; }; /** * EditAdResponse * @description Successfully updated ad */ EditAdResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** * EditMetaAdRequest * @description Partial-update body for an existing Meta ad */ EditMetaAdRequest: { venueAccessor: string; id: string; metaContent?: { primaryText: { [key: string]: string; }; headline: { [key: string]: string; }; description: { [key: string]: string; }; /** Format: uri */ finalUrl: string; callToAction: string; creatives: { [key: string]: { assetId: string; }; }; }; status?: components["schemas"]["AdStatus"]; }; /** * EditMetaAdResponse * @description Successfully updated Meta ad */ EditMetaAdResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** SaveAdKeywordsRequest */ SaveAdKeywordsRequest: { venueAccessor: string; adId: string; keywords: string[]; dismissedKeywords: string[]; disabledVenueKeywords: string[]; }; /** SaveAdKeywordsResponse */ SaveAdKeywordsResponse: { success: boolean; keywords: string[]; dismissedKeywords: string[]; disabledVenueKeywords: string[]; }; /** SaveAdCalloutsRequest */ SaveAdCalloutsRequest: { venueAccessor: string; adId: string; calloutIds: string[]; }; /** SaveAdCalloutsResponse */ SaveAdCalloutsResponse: { success: boolean; calloutIds: string[]; }; /** SaveAdNegativeKeywordsRequest */ SaveAdNegativeKeywordsRequest: { venueAccessor: string; adId: string; negativeKeywords: string[]; /** @default [] */ disabledVenueNegativeKeywords: string[]; }; /** SaveAdNegativeKeywordsResponse */ SaveAdNegativeKeywordsResponse: { success: boolean; negativeKeywords: string[]; disabledVenueNegativeKeywords: string[]; syncedToGoogle: boolean; }; /** SaveAdWebsitePagesRequest */ SaveAdWebsitePagesRequest: { venueAccessor: string; adId: string; websitePageIds: string[]; }; /** SaveAdWebsitePagesResponse */ SaveAdWebsitePagesResponse: { success: boolean; websitePageIds: string[]; }; /** SetAdBudgetRequest */ SetAdBudgetRequest: { venueAccessor: string; adId: string; dailyBudget: number; }; /** SetAdBudgetResponse */ SetAdBudgetResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** DeleteAdResponse */ DeleteAdResponse: { id: string; venueId: string; ownerEntityType: components["schemas"]["AdOwnerType"]; ownerEntityId: string; channel: components["schemas"]["AdChannel"]; status: components["schemas"]["AdStatus"]; campaignId: string | null; content: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metaContent: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; metaRefs: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; keywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; negativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; disabledVenueNegativeKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; dismissedKeywords: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; keywordMetrics: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; websitePageIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; calloutIds: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; manageCallScheduleSelf: boolean; callScheduleRitualAccessors: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; phone: string | null; manageBiddingStrategySelf: boolean; biddingStrategy: components["schemas"]["AdBiddingStrategy"]; publishedContentHash: string | null; publishedAt: unknown; pushedKeywords: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; dailyBudget: number | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** * Area * @description A bookable + public area for a venue. Assets are only included when the request expands them. Operational flags (`isActive`, `isPublic`, `isBookable`) and audit columns are only populated for authenticated venue staff. */ Area: { id: string; venueId: string; accessor: string; name: { [key: string]: string; }; description: { [key: string]: string; } | null; longDescription: { [key: string]: string; } | null; minCapacity: number | null; maxCapacity: number; currency: components["schemas"]["Currency"]; basePrice: number | null; perPersonPrice: number | null; features: { icon: string; label: { [key: string]: string; }; description?: { [key: string]: string; }; }[] | null; bookingMode: components["schemas"]["AreaBookingMode"]; isBookable?: boolean; isPublic?: boolean; isActive?: boolean; areaType?: components["schemas"]["AreaType"]; turnTimes?: { [key: string]: number; } | null; cleanup?: number | null; assets?: { id: string; type: components["schemas"]["AssetType"]; tags: string[] | null; filename: string; contentType: string; metadata: { width?: number; height?: number; duration?: number; } | null; cropArea: { x: number; y: number; width: number; height: number; } | null; /** Format: uri */ publicUrl: string; }[]; closures?: { id: string; date: string; reason: { [key: string]: string; } | null; isActive: boolean; }[]; }; /** FetchAreasResponse */ FetchAreasResponse: components["schemas"]["Area"][]; /** * FetchAreaResponse * @description A bookable + public area for a venue. Assets are only included when the request expands them. Operational flags (`isActive`, `isPublic`, `isBookable`) and audit columns are only populated for authenticated venue staff. */ FetchAreaResponse: { id: string; venueId: string; accessor: string; name: { [key: string]: string; }; description: { [key: string]: string; } | null; longDescription: { [key: string]: string; } | null; minCapacity: number | null; maxCapacity: number; currency: components["schemas"]["Currency"]; basePrice: number | null; perPersonPrice: number | null; features: { icon: string; label: { [key: string]: string; }; description?: { [key: string]: string; }; }[] | null; bookingMode: components["schemas"]["AreaBookingMode"]; isBookable?: boolean; isPublic?: boolean; isActive?: boolean; areaType?: components["schemas"]["AreaType"]; turnTimes?: { [key: string]: number; } | null; cleanup?: number | null; assets?: { id: string; type: components["schemas"]["AssetType"]; tags: string[] | null; filename: string; contentType: string; metadata: { width?: number; height?: number; duration?: number; } | null; cropArea: { x: number; y: number; width: number; height: number; } | null; /** Format: uri */ publicUrl: string; }[]; closures?: { id: string; date: string; reason: { [key: string]: string; } | null; isActive: boolean; }[]; }; /** GetAreaAvailabilityResponse */ GetAreaAvailabilityResponse: { from: string; to: string; bookingMode: components["schemas"]["AreaBookingMode"]; occupied: { date: string; startTime: string | null; endTime: string | null; }[]; }; /** FetchAreaBookingsResponse */ FetchAreaBookingsResponse: { id: string; areaId: string; bookingDate: string; startTime: string | null; endTime: string | null; partySize: number; status: components["schemas"]["AreaBookingStatus"]; guestFirstName?: string; guestLastName?: string; totalPrice?: number; currency?: components["schemas"]["Currency"]; confirmationCode?: string | null; }[]; /** SubmitAreaBookingPayload */ SubmitAreaBookingPayload: { requestedDate: string; requestedStartTime?: string; requestedEndTime?: string; partySize: number; guestFirstName: string; guestLastName: string; /** Format: email */ guestEmail: string; guestPhone?: string; message?: string; source?: components["schemas"]["AreaBookingRequestSource"]; }; /** SubmitAreaBookingRequestResponse */ SubmitAreaBookingRequestResponse: { id: string; venueId: string; areaId: string; requestedDate: string; requestedStartTime: string | null; requestedEndTime: string | null; partySize: number; guestFirstName: string; guestLastName: string; guestEmail: string; guestPhone: string | null; message: string | null; source: components["schemas"]["AreaBookingRequestSource"]; status: components["schemas"]["AreaBookingRequestStatus"]; areaBookingId: string | null; createdAt: string | null; updatedAt: string | null; }; /** * FeatureImage * @description An article's resolved feature image. `caption` / `alt` are per-locale TipTap docs (PATCH accepts plain strings — server normalises). `captionByLocale` / `altByLocale` expose the raw per-locale records for editor surfaces. */ FeatureImage: { id: string; publicUrl: string | null; locale: string; caption: { [key: string]: unknown; } | null; alt: { [key: string]: unknown; } | null; captionByLocale: { [key: string]: unknown; }; altByLocale: { [key: string]: unknown; }; }; /** OgImage */ OgImage: { id: string; publicUrl: string | null; locale: string; }; /** ArticleMentionCounts */ ArticleMentionCounts: { dishes: number; beverages: number; ingredients: number; menus: number; rituals: number; }; /** FetchArticlesResponse */ FetchArticlesResponse: { id: string; venueId: string; accessor: string; slug: { [key: string]: { [key: string]: unknown; }; }; title: { [key: string]: { [key: string]: unknown; }; }; excerpt: { [key: string]: { [key: string]: unknown; }; }; content: { [key: string]: unknown; } | null; metaTitle: { [key: string]: string; } | null; metaDescription: { [key: string]: string; } | null; tags: string[]; isActive: boolean; isFeatured: boolean; priority: number; status: components["schemas"]["ArticleStatus"]; publishedAt: string | null; createdAt: string | null; updatedAt: string | null; featureImage: components["schemas"]["FeatureImage"] | null; ogImage?: components["schemas"]["OgImage"] | null; mentionCounts?: components["schemas"]["ArticleMentionCounts"]; }[]; /** * FetchArticleResponse * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale. `ogImage` overrides the social-card image when set; `null` means it falls back to `featureImage`. */ FetchArticleResponse: { id: string; venueId: string; accessor: string; slug: { [key: string]: { [key: string]: unknown; }; }; title: { [key: string]: { [key: string]: unknown; }; }; excerpt: { [key: string]: { [key: string]: unknown; }; }; content: { [key: string]: unknown; } | null; metaTitle: { [key: string]: string; } | null; metaDescription: { [key: string]: string; } | null; tags: string[]; isActive: boolean; isFeatured: boolean; priority: number; status: components["schemas"]["ArticleStatus"]; publishedAt: string | null; createdAt: string | null; updatedAt: string | null; featureImage: components["schemas"]["FeatureImage"] | null; ogImage?: components["schemas"]["OgImage"] | null; }; /** EditArticleRequest */ EditArticleRequest: { slug?: { [key: string]: unknown; }; title?: { [key: string]: unknown; }; excerpt?: { [key: string]: unknown; }; content?: { [key: string]: unknown; }; metaTitle?: { [key: string]: string; }; metaDescription?: { [key: string]: string; }; tags?: string[]; isActive?: boolean; isFeatured?: boolean; priority?: number; }; /** * EditArticleResponse * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale. `ogImage` overrides the social-card image when set; `null` means it falls back to `featureImage`. */ EditArticleResponse: { id: string; venueId: string; accessor: string; slug: { [key: string]: { [key: string]: unknown; }; }; title: { [key: string]: { [key: string]: unknown; }; }; excerpt: { [key: string]: { [key: string]: unknown; }; }; content: { [key: string]: unknown; } | null; metaTitle: { [key: string]: string; } | null; metaDescription: { [key: string]: string; } | null; tags: string[]; isActive: boolean; isFeatured: boolean; priority: number; status: components["schemas"]["ArticleStatus"]; publishedAt: string | null; createdAt: string | null; updatedAt: string | null; featureImage: components["schemas"]["FeatureImage"] | null; ogImage?: components["schemas"]["OgImage"] | null; }; /** SetArticleFeatureImageUploadBody */ SetArticleFeatureImageUploadBody: { /** @description Image file (multipart/form-data field) */ file: string; }; /** * PatchArticleFeatureImageBody * @description Locale-keyed merge of the asset-side `caption` and `alt` records. Each locale value may be a plain string OR a TipTap doc; strings are wrapped server-side. Setting `en` does not touch `de`. */ PatchArticleFeatureImageBody: { caption?: { [key: string]: unknown; }; alt?: { [key: string]: unknown; }; }; /** FetchAssetsByTagResponse */ FetchAssetsByTagResponse: { id: string; type: components["schemas"]["AssetType"]; metadata: { width?: number; height?: number; duration?: number; } | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string | null; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: { [key: string]: unknown; }; alt: { [key: string]: unknown; }; cropArea: { x: number; y: number; width: number; height: number; } | null; publicUrl: string; }[]; /** BasketTotals */ BasketTotals: { currency: components["schemas"]["Currency"]; itemsTotal: number; taxAmount: number; depositCharge: number; grossTotal: number; depositCredit: number; effectiveTotal: number; cashRefund: number; returnable: { depositwareTemplateId: string; count: number; }[]; }; /** FetchBasketResponse */ FetchBasketResponse: { /** Format: uuid */ id: string; sessionId: string; status: components["schemas"]["BasketStatus"]; currency: components["schemas"]["Currency"]; items: { /** Format: uuid */ id: string; metadata: { [key: string]: unknown; } | null; deposit: { depositwareTemplateId: string; name: { [key: string]: string; }; amount: number; currency: components["schemas"]["Currency"]; } | null; menuItems: { menuItemId: string; role: string | null; quantity: number; unit: components["schemas"]["Unit"]; }[]; }[]; itemCount: number; totals: components["schemas"]["BasketTotals"]; declaredReturns: { depositwareTemplateId: string; count: number; }[]; expiresAt: string; createdAt: string | null; updatedAt: string | null; }; /** * AddToBasketRequest * @description Add an item to the shopping basket */ AddToBasketRequest: { /** Format: uuid */ venueId: string; sessionId: string; menuItems: { menuItemId: string; role?: string; quantity?: number; unit?: components["schemas"]["Unit"]; }[]; metadata?: { [key: string]: unknown; }; }; /** AddToBasketResponse */ AddToBasketResponse: { /** Format: uuid */ basketItemId: string; itemCount: number; deposit: { depositwareTemplateId: string; name: { [key: string]: string; }; amount: number; currency: components["schemas"]["Currency"]; } | null; totals: components["schemas"]["BasketTotals"]; }; /** RemoveFromBasketResponse */ RemoveFromBasketResponse: { success: boolean; /** Format: uuid */ basketItemId: string; itemCount: number; totals: components["schemas"]["BasketTotals"] | null; }; /** GetBasketTotalsRequest */ GetBasketTotalsRequest: { venueAccessor: string; basketId: string; declaredReturns?: { depositwareTemplateId: string; count: number; }[]; }; /** GetBasketTotalsResponse */ GetBasketTotalsResponse: { currency: components["schemas"]["Currency"]; itemsTotal: number; taxAmount: number; depositCharge: number; grossTotal: number; depositCredit: number; effectiveTotal: number; cashRefund: number; returnable: { depositwareTemplateId: string; count: number; }[]; }; /** AbandonBasketRequest */ AbandonBasketRequest: { sessionId: string; }; /** AbandonBasketResponse */ AbandonBasketResponse: { abandonedCount: number; }; /** SetBasketDeclaredReturnsRequest */ SetBasketDeclaredReturnsRequest: { venueAccessor: string; basketId: string; sessionId: string; declaredReturns: { depositwareTemplateId: string; count: number; }[]; }; /** SetBasketDeclaredReturnsResponse */ SetBasketDeclaredReturnsResponse: { basketId: string; declaredReturns: { depositwareTemplateId: string; count: number; }[]; }; /** AssetWithPublicUrl */ AssetWithPublicUrl: { id: string; type: components["schemas"]["AssetType"]; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; alt: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metadata: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; cropArea: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; sortIndex: string | null; createdAt: unknown; updatedAt: unknown; createdBy: string | null; updatedBy: string | null; venueId: string | null; contentHash: string | null; publicUrl: string | null; }; /** FetchBeverageResponse */ FetchBeverageResponse: { id: string; venueId: string; accessor: string; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; shortName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; kitchenName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; subtitle: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; longDescription: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isAlcoholic: boolean; alcoholPercentage: string | null; volumes: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; category: components["schemas"]["BeverageCategory"]; categoryAttributes: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servingRecommendations: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; assets: components["schemas"]["AssetWithPublicUrl"][]; }; /** EditBeverageRequest */ EditBeverageRequest: { id: string; venueId?: string; accessor?: string; name?: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; shortName?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; kitchenName?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; subtitle?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; description?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; longDescription?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isAlcoholic?: boolean; alcoholPercentage?: string | null; volumes?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; category?: components["schemas"]["BeverageCategory"]; categoryAttributes?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servingRecommendations?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive?: boolean; sortIndex?: string | null; venueAccessor: string; }; /** EditBeverageResponse */ EditBeverageResponse: { id: string; venueId: string; accessor: string; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; shortName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; kitchenName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; subtitle: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; longDescription: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isAlcoholic: boolean; alcoholPercentage: string | null; volumes: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; category: components["schemas"]["BeverageCategory"]; categoryAttributes: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; servingRecommendations: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; }; /** GetCalloutsResponse */ GetCalloutsResponse: { id: string; venueId: string; label: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }[]; /** CreateCalloutRequest */ CreateCalloutRequest: { venueAccessor: string; id?: string; label: { [key: string]: string; }; }; /** CreateCalloutResponse */ CreateCalloutResponse: { id: string; venueId: string; label: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** UpdateCalloutRequest */ UpdateCalloutRequest: { venueAccessor: string; id: string; label: { [key: string]: string; }; }; /** UpdateCalloutResponse */ UpdateCalloutResponse: { id: string; venueId: string; label: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** DeleteCalloutResponse */ DeleteCalloutResponse: { id: string; venueId: string; label: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** FetchDishResponse */ FetchDishResponse: { id: string; venueId: string; accessor: string; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; shortName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; kitchenName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; subtitle: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; longDescription: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isVegan: boolean | null; isVegetarian: boolean | null; isGlutenFree: boolean | null; isDairyFree: boolean | null; spiciness: number | null; suggestedPrice: number | null; currency: components["schemas"]["Currency"]; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; assets: components["schemas"]["AssetWithPublicUrl"][]; }; /** EditDishRequest */ EditDishRequest: { venueAccessor: string; id: string; name: { [key: string]: string; }; shortName?: { [key: string]: string; } | null; kitchenName?: { [key: string]: string; } | null; subtitle?: { [key: string]: string; } | null; description?: { [key: string]: string; } | null; longDescription?: { [key: string]: string; } | null; suggestedPrice?: number | null; currency: components["schemas"]["Currency"]; /** @default false */ isVegan: boolean; /** @default false */ isVegetarian: boolean; /** @default false */ isGlutenFree: boolean; /** @default false */ isDairyFree: boolean; /** @default 0 */ spiciness: number; /** @default true */ isActive: boolean; }; /** EditDishResponse */ EditDishResponse: { id: string; venueId: string; accessor: string; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; shortName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; kitchenName: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; subtitle: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; longDescription: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isVegan: boolean | null; isVegetarian: boolean | null; isGlutenFree: boolean | null; isDairyFree: boolean | null; spiciness: number | null; suggestedPrice: number | null; currency: components["schemas"]["Currency"]; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; }; /** FetchEventsResponse */ FetchEventsResponse: { id: string; venueId: string; accessor: string | null; name: { [key: string]: string; }; description: { [key: string]: string; } | null; scheduleId: string | null; ritualId: string | null; occurrenceDate: string | null; ritualType: components["schemas"]["RitualType"]; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; isPublic: boolean; isRecurring: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; schedule: { id: string; duration: number | null; name: { [key: string]: string; }; timezone: string; description: { [key: string]: string; } | null; rrule: string | null; exdates: string[] | null; validFrom: string | null; validTo: string | null; slotMode: components["schemas"]["SlotMode"]; intervalDuration: number | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; scheduleOverrides: { id: string; date: string; isActive: boolean; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; scheduleId: string; reason: { [key: string]: string; } | null; scheduleOverrideTimeSlots: { sortIndex: string | null; overrideId: string; timeSlotId: string; timeSlot: { id: string; isActive: boolean | null; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; startTime: string; endTime: string | null; isSchedulable: boolean | null; }; }[]; }[]; scheduleTimeSlots: { sortIndex: string | null; scheduleId: string | null; timeSlotId: string | null; dayOfWeek: components["schemas"]["DayOfWeek"]; timeSlot: { id: string; isActive: boolean | null; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; startTime: string; endTime: string | null; isSchedulable: boolean | null; } | null; }[]; } | null; nextOccurrence: string | null; assets: { id: string; type: components["schemas"]["AssetType"]; metadata: { width?: number; height?: number; duration?: number; } | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string | null; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: { [key: string]: unknown; }; alt: { [key: string]: unknown; }; cropArea: { x: number; y: number; width: number; height: number; } | null; publicUrl: string; }[]; timeSlots: { id?: string; startTime?: string; endTime?: string | null; dayOfWeek?: components["schemas"]["DayOfWeek"]; isSchedulable?: boolean | null; }[]; scheduleOverrides: { id: string; date: string; reason: { [key: string]: string; } | null; timeSlots: { id?: string; startTime?: string; endTime?: string | null; dayOfWeek?: components["schemas"]["DayOfWeek"]; isSchedulable?: boolean | null; }[]; }[]; promotions: { id: string; name: { [key: string]: string; }; description: { [key: string]: string; } | null; validFrom: string | null; validTo: string | null; isActive: boolean; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string; benefitType: components["schemas"]["PromotionBenefitType"]; benefitValue: { [key: string]: unknown; }; conditions: { [key: string]: unknown; } | null; maxRedemptions: number | null; currentRedemptions: number | null; timeSlotIds: string[] | null; }[]; }[]; /** * FetchEventResponse * @description Event details. Nested objects (schedule, timeSlots, menus, assets, nextOccurrence) pass through; their shape follows the SDK Event interface. */ FetchEventResponse: { id: string; venueId: string; accessor: string | null; name: { [key: string]: string; }; description: { [key: string]: string; } | null; scheduleId: string | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; isPublic: boolean; isRecurring: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; createdAt: unknown; updatedAt: unknown; nextOccurrence?: string | null; schedule?: { id: string; name: { [key: string]: string; }; description: { [key: string]: string; } | null; timezone: string; rrule: string | null; exdates: string[] | null; validFrom: string | null; validTo: string | null; isActive: boolean; slotMode: components["schemas"]["SlotMode"]; intervalDuration: number | null; duration: number | null; scheduleTimeSlots?: { dayOfWeek: components["schemas"]["DayOfWeek"]; timeSlot: { id: string; startTime: string; endTime: string | null; isActive: boolean | null; isSchedulable: boolean | null; }; }[]; }; menus?: { id: string; accessor: string; name: { [key: string]: string; }; category: string; }[]; assets?: { id: string; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; sortIndex: string | null; publicUrl: string; }[]; }; /** FetchSlotAvailabilityResponse */ FetchSlotAvailabilityResponse: { /** @description Slot start time in HH:MM:SS format */ startTime: string; /** @description Whether a party of this size can be booked at this slot */ acceptable: boolean; /** @description Whether the public widget should offer this slot — passive: always; auto_steer: only when acceptable */ offered: boolean; reason: components["schemas"]["OccupancyReason"]; }[]; /** * CreateEventRequest * @description Request payload for creating a new event */ CreateEventRequest: { accessor?: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId?: string | null; occurrenceDate?: string | null; maxBookings?: number | null; maxGuests?: number | null; minPartySize?: number | null; maxPartySize?: number | null; staffByRole?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic?: boolean; reservationsEnabled?: boolean; bookingOpensAtDays?: number | null; bookingClosesAtOffset?: number | null; isActive?: boolean; isFeatured?: boolean; takesOverDay?: boolean; servedMarket?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; schedule?: { rrule?: string | null; timezone?: string | null; validFrom?: string | null; validTo?: string | null; timeRanges: { startTime: string; endTime: string; lastSeatingTime?: string | null; }[]; slotMode?: components["schemas"]["SlotMode"]; intervalDuration?: number | null; duration?: number | null; } | null; ritualAccessor?: string | null; venueAccessor: string; }; /** * CreateEventResponse * @description Successfully created event */ CreateEventResponse: { id: string; venueId: string; accessor: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId: string | null; ritualId: string | null; occurrenceDate: string | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; staffByRole: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** * EditEventRequest * @description Partial-update body for an existing event */ EditEventRequest: { accessor?: string | null; name?: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId?: string | null; occurrenceDate?: string | null; maxBookings?: number | null; maxGuests?: number | null; minPartySize?: number | null; maxPartySize?: number | null; staffByRole?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic?: boolean; reservationsEnabled?: boolean; bookingOpensAtDays?: number | null; bookingClosesAtOffset?: number | null; isActive?: boolean; isFeatured?: boolean; takesOverDay?: boolean; servedMarket?: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; schedule?: { rrule?: string | null; timezone?: string | null; validFrom?: string | null; validTo?: string | null; timeRanges: { startTime: string; endTime: string; lastSeatingTime?: string | null; }[]; slotMode?: components["schemas"]["SlotMode"]; intervalDuration?: number | null; duration?: number | null; } | null; ritualAccessor?: string | null; }; /** Schedule */ Schedule: { id: string; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; timezone: string; rrule: string | null; exdates: string[] | null; validFrom: string | null; validTo: string | null; slotMode: components["schemas"]["SlotMode"]; intervalDuration: number | null; duration: number | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; scheduleTimeSlots?: { scheduleId: string | null; timeSlotId: string | null; dayOfWeek: components["schemas"]["DayOfWeek"]; sortIndex: string | null; timeSlot: { id: string; startTime: string; endTime: string | null; channel: components["schemas"]["BookingChannel"]; isActive: boolean | null; isSchedulable: boolean | null; maxBookings: number | null; maxGuests: number | null; overflowBookings: number | null; overflowGuests: number | null; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; } | null; }[]; scheduleOverrides?: { id: string; scheduleId: string; date: string; reason: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; scheduleOverrideTimeSlots: { overrideId: string; timeSlotId: string; sortIndex: string | null; timeSlot: { id: string; startTime: string; endTime: string | null; channel: components["schemas"]["BookingChannel"]; isActive: boolean | null; isSchedulable: boolean | null; maxBookings: number | null; maxGuests: number | null; overflowBookings: number | null; overflowGuests: number | null; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; }; }[]; }[]; scheduleSlotPolicies?: { id: string; scheduleId: string; channel: components["schemas"]["BookingChannel"]; slotMode: components["schemas"]["SlotMode"]; intervalDuration: number | null; duration: number | null; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; }[]; }; /** * EditEventResponse * @description Successfully updated event with schedule */ EditEventResponse: { id: string; venueId: string; accessor: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId: string | null; ritualId: string | null; occurrenceDate: string | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; staffByRole: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; schedule: components["schemas"]["Schedule"] | null; }; /** DeleteEventResponse */ DeleteEventResponse: { id: string; venueId: string; accessor: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId: string | null; ritualId: string | null; occurrenceDate: string | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; staffByRole: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** UploadAssetResponse */ UploadAssetResponse: { asset: { id: string; type: components["schemas"]["AssetType"]; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; alt: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metadata: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; cropArea: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; sortIndex: string | null; createdAt: unknown; updatedAt: unknown; createdBy: string | null; updatedBy: string | null; venueId: string | null; contentHash: string | null; }; publicUrl: string | null; }; /** DeleteAssetResponse */ DeleteAssetResponse: { success: boolean; deleted: boolean; }; /** * FetchMenuResponse * @description Menu details. `assets[]` is always hydrated with public URLs; `items[]` (with nested dish/beverage) is included when `expand=items` is requested. Each dish/beverage always carries its flat, hydrated `assets[]` (public URLs resolved) — the raw junction relations are never surfaced. */ FetchMenuResponse: { id: string; title: { [key: string]: string; }; subtitle: { [key: string]: string; } | null; accessor: string; metadata: { orderingEnabled?: boolean; compactTags?: string[]; showDepositware?: boolean; tagSortOrder?: string[]; subscriptionsEnabled?: boolean; isDeliveryEnabled?: boolean; assetsEnabled?: boolean; } | null; description: { [key: string]: string; } | null; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string; deliveryThresholdAmount: number | null; deliveryThresholdQuantity: number | null; assets: { id: string; type: components["schemas"]["AssetType"]; metadata: { width?: number; height?: number; duration?: number; } | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string | null; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: { [key: string]: unknown; }; alt: { [key: string]: unknown; }; cropArea: { x: number; y: number; width: number; height: number; } | null; contentHash: string | null; publicUrl: string; }[]; items?: { id: string; type: components["schemas"]["MenuItemType"]; tags: string[] | null; priceAdjustment: number; currency: components["schemas"]["Currency"]; isActive: boolean; isFeatured: boolean; sortIndex: string | null; availableDays: components["schemas"]["DayOfWeek"][] | null; availableWeeks: number[] | null; dish: { id: string; accessor: string; name: { [key: string]: string; }; shortName?: { [key: string]: string; }; description: { [key: string]: string; } | null; longDescription?: { [key: string]: string; } | null; isVegetarian: boolean | null; isVegan: boolean | null; isGlutenFree: boolean | null; isDairyFree: boolean | null; spiciness: number | null; assets?: { id: string; type: components["schemas"]["AssetType"]; metadata: { width?: number; height?: number; duration?: number; } | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string | null; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: { [key: string]: unknown; }; alt: { [key: string]: unknown; }; cropArea: { x: number; y: number; width: number; height: number; } | null; contentHash: string | null; publicUrl: string; }[]; additives?: { id: string; eNumber: string; technicalName: { [key: string]: string; }; isAllergen: boolean | null; requiresWarning: boolean | null; warningMessage: { [key: string]: string; } | null; regulation: string | null; }[]; } | null; beverage: { id: string; accessor: string; name: { [key: string]: string; }; shortName?: { [key: string]: string; }; description: { [key: string]: string; } | null; longDescription?: { [key: string]: string; } | null; assets?: { id: string; type: components["schemas"]["AssetType"]; metadata: { width?: number; height?: number; duration?: number; } | null; isActive: boolean; sortIndex: string | null; updatedAt: unknown; updatedBy: string | null; createdAt: unknown; createdBy: string | null; venueId: string | null; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: { [key: string]: unknown; }; alt: { [key: string]: unknown; }; cropArea: { x: number; y: number; width: number; height: number; } | null; contentHash: string | null; publicUrl: string; }[]; additives?: { id: string; eNumber: string; technicalName: { [key: string]: string; }; isAllergen: boolean | null; requiresWarning: boolean | null; warningMessage: { [key: string]: string; } | null; regulation: string | null; }[]; } | null; }[]; }; /** FetchMenuBundlesResponse */ FetchMenuBundlesResponse: { id: string; menuId: string; name: { [key: string]: string; }; shortName: { [key: string]: string; } | null; description: { [key: string]: string; } | null; tags: string[]; price: { amount: number; currency: components["schemas"]["Currency"]; }; currency: components["schemas"]["Currency"]; taxRateId: string; isActive: boolean; sortIndex: string | null; depositwareTemplateId: string | null; depositwareTemplate: { name: { [key: string]: string; }; } | null; deposit: { depositwareTemplateId: string; accessor: string; amount: number; currency: components["schemas"]["Currency"]; } | null; }[]; /** FetchMenuSubscriptionsResponse */ FetchMenuSubscriptionsResponse: { id: string; menuId: string; accessor: string; name: { [key: string]: string; }; shortName: { [key: string]: string; } | null; description: { [key: string]: string; } | null; scheduleId: string | null; allowance: number; billingPeriod: components["schemas"]["SubscriptionPeriod"]; allowancePeriod: components["schemas"]["SubscriptionPeriod"]; expiryInDays: number; price: number; currency: components["schemas"]["Currency"]; stripeProductId: string | null; stripePriceId: string | null; isActive: boolean; sortIndex: string | null; subscriberCount: number; redeemableTagSets: string[][]; posters: { id: string; menuSubscriptionId: string; storagePath: string; publicUrl: string; filename: string; contentType: string; sizeBytes: number; sortIndex: string | null; createdBy: string | null; createdAt: string | null; }[]; }[]; /** * PlaceOrderRequest * @description Place a new order for a specific venue */ PlaceOrderRequest: { venueAccessor: string; basketId: string; sessionId: string; paymentMethod: components["schemas"]["PaymentMethod"]; fulfillmentType: components["schemas"]["FulfillmentType"]; /** Format: date-time */ fulfillmentAt?: string | null; guestFirstName?: string; guestLastName?: string; guestEmail?: string; declaredReturns?: { depositwareTemplateId: string; count: number; }[]; }; /** PlaceOrderResponse */ PlaceOrderResponse: { id: string; status: string; publicId: string | null; orderId: string; quickReferenceNumber: number | null; currency: components["schemas"]["Currency"]; }; /** ConfirmOrderRequest */ ConfirmOrderRequest: { venueAccessor: string; orderId: string; paymentIntentId: string; }; /** ConfirmOrderResponse */ ConfirmOrderResponse: { id: string; status: string; publicId: string | null; quickReferenceNumber: number | null; guestId?: string; }; /** FetchLatestOrderResponse */ FetchLatestOrderResponse: { /** Format: uuid */ id: string; publicId: string | null; quickReferenceNumber: number | null; status: components["schemas"]["OrderStatus"]; paymentStatus: components["schemas"]["PaymentStatus"]; fulfillmentType: components["schemas"]["FulfillmentType"]; fulfillmentAt: string | null; orderedAt: string; totalAmount: number; currency: components["schemas"]["Currency"]; items: { /** Format: uuid */ id: string; metadata: { [key: string]: unknown; } | null; deposit: { depositwareTemplateId: string; name: { [key: string]: string; }; amount: number; currency: components["schemas"]["Currency"]; } | null; menuItems: { menuItemId: string; role: string | null; quantity: number; unit: components["schemas"]["Unit"]; }[]; }[]; itemCount: number; totals: components["schemas"]["BasketTotals"]; declaredReturns: { depositwareTemplateId: string; count: number; }[]; }; /** CreatePaymentIntentRequest */ CreatePaymentIntentRequest: { venueAccessor: string; basketId: string; currency: components["schemas"]["Currency"]; sessionId: string; fulfillmentType: components["schemas"]["FulfillmentType"]; /** Format: date-time */ fulfillmentAt?: string | null; guestFirstName?: string; guestLastName?: string; teamOrderPublicId?: string; declaredReturns?: { depositwareTemplateId: string; count: number; }[]; }; /** CreatePaymentIntentResponse */ CreatePaymentIntentResponse: { clientSecret: string | null; paymentIntentId: string; orderId: string; }; /** CreateDeltaPaymentIntentRequest */ CreateDeltaPaymentIntentRequest: { venueAccessor: string; basketId: string; sessionId: string; currency: components["schemas"]["Currency"]; declaredReturns?: { depositwareTemplateId: string; count: number; }[]; }; /** CreateDeltaPaymentIntentResponse */ CreateDeltaPaymentIntentResponse: { clientSecret: string | null; paymentIntentId: string; orderId: string; amount: number; /** @enum {string} */ status: "requires_payment_method" | "requires_confirmation" | "requires_action" | "processing" | "requires_capture" | "canceled" | "succeeded"; }; /** ReduceDeltaPaymentIntentRequest */ ReduceDeltaPaymentIntentRequest: { venueAccessor: string; basketId: string; sessionId: string; currency: components["schemas"]["Currency"]; declaredReturns?: { depositwareTemplateId: string; count: number; }[]; }; /** ReduceDeltaPaymentIntentResponse */ ReduceDeltaPaymentIntentResponse: { orderId: string; paidTotal: number; released: number; }; /** CreateMenuPublicationRequest */ CreateMenuPublicationRequest: { venueAccessor: string; menuAccessor: string; name?: string; }; /** CreateMenuPublicationResponse */ CreateMenuPublicationResponse: { id: string; venueId: string; accessor: string; name: string; type: components["schemas"]["PublicationType"]; paperSize: components["schemas"]["PublicationPaperSize"]; palette: components["schemas"]["PublicationPalette"]; designDoc: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; renderedAssetId: string | null; frameId: string | null; ruleIconAssetId: string | null; templateId: string | null; sourceType: components["schemas"]["PublicationSourceType"]; sourceId: string | null; isActive: boolean; sortIndex: string | null; createdAt: unknown; createdBy: string | null; updatedAt: unknown; updatedBy: string | null; }; /** SetMenuPublicationBlocksRequest */ SetMenuPublicationBlocksRequest: { venueAccessor: string; publicationAccessor: string; showTitle?: boolean; title?: { [key: string]: string; }; showSubtitle?: boolean; subtitle?: { [key: string]: string; }; subtitleFontRole?: components["schemas"]["FontRole"]; subtitleFontFace?: string; subtitleSize?: number; subtitleColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; showDescription?: boolean; description?: { [key: string]: string; }; titleFontRole?: components["schemas"]["FontRole"]; titleFontFace?: string; titleSize?: number; descriptionFontRole?: components["schemas"]["FontRole"]; descriptionFontFace?: string; descriptionSize?: number; descriptionColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; paddingX?: number; paddingY?: number; bleed?: boolean; pageNumbers?: boolean; groupBy?: components["schemas"]["PublicationGroupBy"]; groupFlow?: components["schemas"]["PublicationGroupFlow"]; weekScope?: components["schemas"]["PublicationWeekScope"]; weekRangeStart?: number; weekRangeEnd?: number; weekdaySubgrouping?: boolean; showPrice?: boolean; priceDecimals?: number; priceFontRole?: components["schemas"]["FontRole"]; priceFontFace?: string; priceShowCurrency?: boolean; pricePosition?: components["schemas"]["PublicationPricePosition"]; chipOutlined?: boolean; chipModest?: boolean; veganChipColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; vegetarianChipColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; spicinessChipColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; allergensChipColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; paperSize?: components["schemas"]["PublicationPaperSize"]; palette?: components["schemas"]["PublicationPalette"]; showFrame?: boolean; frameStyle?: components["schemas"]["PublicationFrameStyle"]; frameColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; frameWidth?: number; frameInset?: number; frameId?: string; frameName?: string; frameIcons?: { assetId: string; rotation: number; }[]; titleAlign?: components["schemas"]["EnumCenterLeftRight"]; subtitleAlign?: components["schemas"]["EnumCenterLeftRight"]; descriptionAlign?: components["schemas"]["PublicationTextAlign"]; showRule?: boolean; rulePosition?: components["schemas"]["PublicationRulePosition"]; ruleStyle?: components["schemas"]["PublicationRuleStyle"]; ruleColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; ruleIconAssetId?: string; showQr?: boolean; qrTarget?: components["schemas"]["PublicationQrTarget"]; qrCustomUrl?: string; qrPlacement?: components["schemas"]["PublicationQrPlacement"]; qrSize?: number; itemTitleSize?: number; itemSubtitleSize?: number; itemSubtitleColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; itemDescriptionSize?: number; itemDescriptionColor?: ({ palette: string; shade: string; } | { custom: string; }) | null; showItemTitles?: boolean; showItemSubtitles?: boolean; showItemDescriptions?: boolean; showVegan?: boolean; showVegetarian?: boolean; showSpiciness?: boolean; showAllergens?: boolean; }; /** SetMenuPublicationBlocksResponse */ SetMenuPublicationBlocksResponse: { id: string; accessor: string; }; /** RenderMenuPublicationPdfRequest */ RenderMenuPublicationPdfRequest: { venueAccessor: string; publicationAccessor: string; locale?: string; }; /** RenderMenuPublicationPdfResponse */ RenderMenuPublicationPdfResponse: { fileName: string; pages: number; pdfBase64: string; }; /** BookletSectionInput */ BookletSectionInput: { publicationAccessor: string; pageStart?: number; pageEnd?: number; }; /** ComposeMenuPublicationBookletRequest */ ComposeMenuPublicationBookletRequest: { venueAccessor: string; bookletAccessor?: string; sections?: components["schemas"]["BookletSectionInput"][]; locale?: string; }; /** ComposeMenuPublicationBookletResponse */ ComposeMenuPublicationBookletResponse: { fileName: string; pages: number; pdfBase64: string; }; /** * MakeReservationRequest * @description Request payload for making a new reservation */ MakeReservationRequest: { /** @description Venue identifier — UUID or URL-friendly slug (accessor). Resolved server-side. */ venueAccessor: string; /** * Format: uuid * @description UUID of the event this reservation is for */ eventId: string; /** * Format: uuid * @description UUID of the area to seat this party in. Defaults to the event's primary area (the one with the most tables) when omitted; the occupancy gate evaluates capacity against this area. */ areaId?: string | null; /** @description Date of the reservation in YYYY-MM-DD format */ reservationDate: string; /** @description Time of the reservation in HH:MM:SS format */ reservationTime: string; /** @description Number of guests in the party. Must be between 1 and 20. */ partySize: number; /** @description Reservation duration in minutes. Defaults to 120 minutes if not specified. Range: 30-300 minutes. */ duration?: number | null; /** * Format: uuid * @description UUID of existing customer profile if available */ guestId?: string | null; /** @description First name of the customer making the reservation */ guestFirstName: string; /** @description Last name of the customer making the reservation */ guestLastName: string; /** * Format: email * @description Email address for reservation confirmations and updates */ guestEmail?: string | null; /** @description Phone number for reservation confirmations and updates. Include country code for international numbers. */ guestPhone?: string | null; contactPreference?: components["schemas"]["ContactPreference"]; source?: components["schemas"]["AreaBookingRequestSource"]; /** @description Any dietary restrictions, allergies, or special occasions (max 500 characters) */ specialRequests?: string | null; /** @description Preferred seating area or table type (e.g., "window seat", "quiet area", "patio") */ tablePreference?: string | null; /** @description Google Ads click identifier from the landing URL (auto-tagging). Stored for server-side conversion reporting. */ gclid?: string | null; /** @description Google Ads click identifier for app/web (iOS) where `gclid` is unavailable. */ gbraid?: string | null; /** @description Google Ads click identifier for web-to-app (iOS) where `gclid` is unavailable. */ wbraid?: string | null; /** @description Meta (Facebook/Instagram) click identifier from the landing URL. Stored for server-side Conversions API reporting. */ fbclid?: string | null; }; /** * MakeReservationResponse * @description Successfully created reservation */ MakeReservationResponse: { /** * Format: uuid * @description Unique identifier for the reservation */ id: string; /** * Format: uuid * @description Restaurant/tenant identifier */ venueId: string; /** * Format: uuid * @description Event identifier for this reservation */ eventId: string; areaId: string | null; quickReferenceNumber: number | null; /** @description Date of the reservation in YYYY-MM-DD format */ reservationDate: string; /** @description Time of the reservation in HH:MM:SS format */ reservationTime: string; /** @description Number of guests in the party */ partySize: number; /** @description Reservation duration in minutes */ duration: number | null; /** * Format: uuid * @description Link to customer profile if exists */ guestId: string | null; partyId: string | null; /** @description First name of the customer */ guestFirstName: string; /** @description Last name of the customer */ guestLastName: string; /** @description Customer email address */ guestEmail: string | null; /** @description Customer phone number */ guestPhone: string | null; contactPreference: components["schemas"]["ContactPreference"]; status: components["schemas"]["ReservationStatus"]; /** @description 6-character confirmation code for the reservation */ confirmationCode: string | null; /** @description When the reservation was confirmed */ confirmedAt: unknown; /** @description When the guest arrived */ arrivedAt: unknown; /** @description When the guest was seated */ seatedAt: unknown; /** @description When the dining was completed */ completedAt: unknown; /** @description When the reservation was cancelled */ cancelledAt: unknown; cancellationReason: components["schemas"]["CancellationReason"]; /** @description Additional cancellation details */ cancellationNote: string | null; source: components["schemas"]["AreaBookingRequestSource"]; gclid: string | null; gbraid: string | null; wbraid: string | null; fbclid: string | null; /** @description Any special requirements or notes */ specialRequests: string | null; /** @description Preferred seating location */ tablePreference: string | null; /** @description User ID who created the reservation */ createdBy: string | null; /** @description User ID who last updated the reservation */ updatedBy: string | null; /** @description Reservation creation timestamp */ createdAt: unknown; /** @description Last update timestamp */ updatedAt: unknown; }; /** FetchRitualResponse */ FetchRitualResponse: { id: string; venueId: string; accessor: string; ritualType: components["schemas"]["RitualType"]; scheduleId: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; playbook: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; isPublic: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; assets: { id: string; type: components["schemas"]["AssetType"]; tags: string[] | null; bucket: string; storagePath: string; filename: string; contentType: string; sizeBytes: number; caption: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; alt: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; metadata: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; cropArea: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isActive: boolean; sortIndex: string | null; createdAt: unknown; updatedAt: unknown; createdBy: string | null; updatedBy: string | null; venueId: string | null; contentHash: string | null; publicUrl: string; }[]; events: { id: string; venueId: string; accessor: string | null; name: (string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]; description: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; scheduleId: string | null; ritualId: string | null; occurrenceDate: string | null; maxBookings: number | null; maxGuests: number | null; minPartySize: number | null; maxPartySize: number | null; staffByRole: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; isPublic: boolean; reservationsEnabled: boolean; bookingOpensAtDays: number | null; bookingClosesAtOffset: number | null; isActive: boolean; isFeatured: boolean; takesOverDay: boolean; servedMarket: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; covers: number; }[]; schedule: components["schemas"]["Schedule"] | null; }; /** GetSubscriptionResponse */ GetSubscriptionResponse: { id: string; menuId: string; accessor: string; name: { [key: string]: string; }; shortName: { [key: string]: string; } | null; description: { [key: string]: string; } | null; scheduleId: string | null; allowance: number; billingPeriod: components["schemas"]["SubscriptionPeriod"]; allowancePeriod: components["schemas"]["SubscriptionPeriod"]; redeemableTagSets: string[][]; expiryInDays: number | null; price: number; currency: components["schemas"]["Currency"]; isActive: boolean; sortIndex: string | null; posters: { id: string; menuSubscriptionId: string; storagePath: string; /** Format: uri */ publicUrl: string; filename: string; contentType: string; sizeBytes: number; sortIndex: string | null; createdBy: string | null; createdAt: string | null; }[]; }; /** SubscribeToSubscriptionBody */ SubscribeToSubscriptionBody: { /** Format: email */ email: string; firstName?: string; lastName?: string; sessionId?: string; /** Format: uri */ successUrl: string; /** Format: uri */ cancelUrl: string; }; /** SubscribeToSubscriptionResponse */ SubscribeToSubscriptionResponse: { /** Format: uri */ checkoutUrl: string | null; sessionId: string; }; /** CancelSubscriptionRequest */ CancelSubscriptionRequest: { subscriberId: string; }; /** CancelSubscriptionResponse */ CancelSubscriptionResponse: { /** @enum {boolean} */ success: true; }; /** GetSubscriptionCreditsResponse */ GetSubscriptionCreditsResponse: { id: string; subscriberId: string; periodStart: string; periodEnd: string; expiresAt: string | null; status: components["schemas"]["SubscriptionCreditStatus"]; redeemedAt: string | null; orderId: string | null; createdAt: string | null; }[]; /** DeliveryAddress */ DeliveryAddress: { street: string; city: string; region?: string | null; postcode: string; country: components["schemas"]["Country"]; }; /** * CreateTeamOrderRequest * @description Create a team order: promotes the lead's active basket into a shared team basket and returns the share token. */ CreateTeamOrderRequest: { venueAccessor: string; sessionId: string; /** Format: uuid */ menuId: string; leadDisplayName: string; teamName?: string; /** Format: uri */ logoUrl?: string; /** Format: date-time */ deadlineAt?: string | null; fulfillmentType: components["schemas"]["FulfillmentType"]; /** Format: date-time */ fulfillmentAt?: string | null; deliveryAddress?: components["schemas"]["DeliveryAddress"]; allowedPaymentMethods: components["schemas"]["PaymentMethod"][]; /** Format: uuid */ eventId?: string; }; /** CreateTeamOrderResponse */ CreateTeamOrderResponse: { publicId: string; /** Format: uuid */ teamOrderId: string; }; /** FetchTeamOrderResponse */ FetchTeamOrderResponse: { teamOrder: { id: string; publicId: string; venueId: string; menuId: string; eventId: string | null; teamName: string | null; logoUrl: string | null; leadDisplayName: string; status: components["schemas"]["TeamOrderStatus"]; allowedPaymentMethods: components["schemas"]["PaymentMethod"][]; fulfillmentType: components["schemas"]["FulfillmentType"]; /** Format: date-time */ fulfillmentAt: string | null; /** Format: date-time */ deadlineAt: string | null; /** Format: date-time */ lockedAt: string | null; /** Format: date-time */ placedAt: string | null; /** Format: date-time */ cancelledAt: string | null; cancelReason: string | null; deliveryAddressId: string | null; diningLocation: string | null; diningTime: string | null; isDeliveryEnabled: boolean; quickReferenceNumber: number | null; }; deliveryThreshold: { amount: number | null; quantity: number | null; }; participants: { guestId: string; basketId: string | null; orderId: string | null; participantNumber: number | null; displayName: string | null; status: components["schemas"]["ParticipantStatus"]; bundleCount: number; amount: number; paymentMethod: components["schemas"]["PaymentMethod"]; isLead: boolean; isMe: boolean; /** Format: date-time */ joinedAt: string; items: { id: string; metadata: { [key: string]: unknown; } | null; menuItems: { menuItemId: string; role: string | null; quantity: number; unit: components["schemas"]["Unit"]; }[]; isPaid: boolean; }[]; payments: { amount: number; method: components["schemas"]["PaymentMethod"]; status: components["schemas"]["ActivePaymentStatus"]; /** Format: date-time */ createdAt: string; cardLast4: string | null; }[]; paidTotal: number; amountDue: number; declaredReturns: { depositwareTemplateId: string; count: number; }[]; leadSettledAt: string | null; }[]; aggregatedTotals: { confirmedBundleCount: number; confirmedAmount: number; totalBundleCount: number; }; thresholdCheck: { meets: boolean; failedConstraints: components["schemas"]["TeamOrderThresholdConstraint"][]; requiredQuantity: number | null; currentQuantity: number; requiredAmount: number | null; currentAmount: number; }; isLead: boolean; }; /** JoinTeamOrderRequest */ JoinTeamOrderRequest: { publicId: string; sessionId: string; displayName?: string; }; /** JoinTeamOrderResponse */ JoinTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; basketId: string; guestId: string; status: components["schemas"]["TeamOrderStatus"]; isLead: boolean; alreadyJoined: boolean; }; /** SubmitTeamOrderRequest */ SubmitTeamOrderRequest: { publicId: string; sessionId: string; }; /** SubmitTeamOrderResponse */ SubmitTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; capturedOrderIds: string[]; cashPendingOrderIds: string[]; droppedBasketIds: string[]; /** Format: date-time */ placedAt: string; }; /** CancelTeamOrderRequest */ CancelTeamOrderRequest: { publicId: string; sessionId: string; reason?: string; }; /** CancelTeamOrderResponse */ CancelTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; voidedPaymentIntentIds: string[]; /** Format: date-time */ cancelledAt: string; }; /** ExtendDeadlineTeamOrderRequest */ ExtendDeadlineTeamOrderRequest: { publicId: string; sessionId: string; /** Format: date-time */ newDeadlineAt: string; }; /** ExtendDeadlineTeamOrderResponse */ ExtendDeadlineTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; /** Format: date-time */ deadlineAt: string | null; }; /** SetFulfillmentAtTeamOrderRequest */ SetFulfillmentAtTeamOrderRequest: { publicId: string; sessionId: string; /** Format: date-time */ fulfillmentAt: string; }; /** SetFulfillmentAtTeamOrderResponse */ SetFulfillmentAtTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; /** Format: date-time */ fulfillmentAt: string; /** Format: date-time */ deadlineAt: string | null; }; /** SetDiningLocationTeamOrderRequest */ SetDiningLocationTeamOrderRequest: { publicId: string; sessionId: string; diningLocation: string; }; /** SetDiningLocationTeamOrderResponse */ SetDiningLocationTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; diningLocation: string | null; }; /** SetDiningTimeTeamOrderRequest */ SetDiningTimeTeamOrderRequest: { publicId: string; sessionId: string; diningTime: string; }; /** SetDiningTimeTeamOrderResponse */ SetDiningTimeTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; diningTime: string; diningOffset: number; }; /** SetOrderLeadSettledRequest */ SetOrderLeadSettledRequest: { publicId: string; sessionId: string; /** Format: uuid */ orderId: string; settled: boolean; }; /** SetOrderLeadSettledResponse */ SetOrderLeadSettledResponse: { /** Format: uuid */ orderId: string; leadSettledAt: string | null; }; /** AutoExtendFulfillmentIfExpiredRequest */ AutoExtendFulfillmentIfExpiredRequest: { publicId: string; sessionId: string; /** Format: date-time */ proposedFulfillmentAt: string; }; /** AutoExtendFulfillmentIfExpiredResponse */ AutoExtendFulfillmentIfExpiredResponse: { extended: boolean; teamOrderId: string; status: string; /** Format: date-time */ fulfillmentAt: string; /** Format: date-time */ deadlineAt: string | null; /** Format: date-time */ previousFulfillmentAt: string; waitingCount: number; }; /** SwitchFulfillmentTeamOrderRequest */ SwitchFulfillmentTeamOrderRequest: { publicId: string; sessionId: string; fulfillmentType: components["schemas"]["FulfillmentType"]; deliveryAddress?: components["schemas"]["DeliveryAddress"]; }; /** SwitchFulfillmentTeamOrderResponse */ SwitchFulfillmentTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; status: components["schemas"]["TeamOrderStatus"]; fulfillmentType: components["schemas"]["FulfillmentType"]; deliveryAddressId: string | null; }; /** UpdateDeliveryAddressTeamOrderRequest */ UpdateDeliveryAddressTeamOrderRequest: { publicId: string; sessionId: string; deliveryAddress: components["schemas"]["DeliveryAddress"]; }; /** UpdateDeliveryAddressTeamOrderResponse */ UpdateDeliveryAddressTeamOrderResponse: { /** Format: uuid */ teamOrderId: string; deliveryAddressId: string; }; /** * GetVenueResponse * @description A venue. The public API exposes only the minimal id + accessor + naming + locale fields the CLI's `venues use` / `auth whoami` consume. */ GetVenueResponse: { id: string; accessor: string; officialName: string; legalName: string; shortName: string; brandName: string; primaryLocale: string; supportedLocales: string[]; timezone: string; createdAt: unknown; updatedAt: unknown; }; /** GetWebsitePagesResponse */ GetWebsitePagesResponse: { id: string; venueId: string; ownerType: components["schemas"]["WebsitePageOwnerType"]; ownerId: string | null; label: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; path: string | null; externalUrl: string | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }[]; /** CreateWebsitePageRequest */ CreateWebsitePageRequest: { venueAccessor: string; id?: string; ownerType?: components["schemas"]["WebsitePageOwnerType"]; ownerId?: string | null; label?: { [key: string]: string; } | null; target: string; }; /** CreateWebsitePageResponse */ CreateWebsitePageResponse: { id: string; venueId: string; ownerType: components["schemas"]["WebsitePageOwnerType"]; ownerId: string | null; label: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; path: string | null; externalUrl: string | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** UpdateWebsitePageRequest */ UpdateWebsitePageRequest: { venueAccessor: string; id: string; label?: { [key: string]: string; } | null; target: string; }; /** UpdateWebsitePageResponse */ UpdateWebsitePageResponse: { id: string; venueId: string; ownerType: components["schemas"]["WebsitePageOwnerType"]; ownerId: string | null; label: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; path: string | null; externalUrl: string | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** DeleteWebsitePageResponse */ DeleteWebsitePageResponse: { id: string; venueId: string; ownerType: components["schemas"]["WebsitePageOwnerType"]; ownerId: string | null; label: ((string | number | boolean | (null)) | { [key: string]: unknown; } | unknown[]) | null; path: string | null; externalUrl: string | null; createdBy: string | null; updatedBy: string | null; createdAt: unknown; updatedAt: unknown; }; /** @enum {string} */ ActivePaymentStatus: "authorized" | "captured" | "cash_pending" | "cash_received"; /** @enum {string} */ ActorType: "human" | "robot"; /** @enum {string} */ AdditiveFunction: "acid" | "acidity_regulator" | "anti_caking_agent" | "anti_foaming_agent" | "antioxidant" | "bulking_agent" | "carrier" | "colour" | "emulsifier" | "emulsifying_salt" | "firming_agent" | "flavour_enhancer" | "flour_treatment_agent" | "foaming_agent" | "gelling_agent" | "glazing_agent" | "humectant" | "modified_starch" | "preservative" | "packaging_gas" | "propellant_gas" | "raising_agent" | "sequestrant" | "stabiliser" | "sweetener" | "thickener"; /** @enum {string} */ AreaBookingMode: "slot" | "day"; /** @enum {string} */ AreaBookingRequestSource: "website" | "phone" | "walk_in"; /** @enum {string} */ AreaBookingRequestStatus: "pending" | "approved" | "rejected" | "cancelled"; /** @enum {string} */ AreaBookingStatus: "confirmed" | "arrived" | "completed" | "cancelled" | "no_show"; /** @enum {string} */ AreaType: "indoor" | "outdoor"; /** @enum {string} */ ArticleEditorSaveState: "idle" | "saving" | "saved" | "error"; /** @enum {string} */ ArticleStatus: "draft" | "published"; /** @enum {string} */ BasketStatus: "active" | "abandoned" | "converted"; /** @enum {string} */ BeverageCategory: "wine" | "beer" | "coffee" | "tea" | "cocktail" | "juice" | "soft_drink" | "dairy_drink" | "spirit" | "water"; /** @enum {string} */ BillingInterval: "month" | "year"; /** @enum {string} */ BookingChannel: "reservation" | "order"; /** @enum {string} */ CampaignControlReason: "quota_exhausted" | "campaign_removed"; /** @enum {string} */ CancellationReason: "guest_request" | "restaurant_request"; /** @enum {string} */ ContactEmailType: "primary" | "billing"; /** @enum {string} */ ContactEmailVerificationStatus: "pending" | "verified" | "completed" | "superseded"; /** @enum {string} */ ContactPreference: "email" | "phone" | "sms" | "none"; /** @enum {string} */ Country: "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW"; /** @enum {string} */ Currency: "EUR" | "CHF"; /** @enum {string} */ DayOfWeek: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday"; /** @enum {string} */ DepositTransactionType: "charged" | "refunded" | "forfeited" | "waived" | "credit_used"; /** @enum {string} */ DepositwareStatus: "available" | "issued" | "returned" | "lost" | "damaged" | "retired"; /** @enum {string} */ EntityOwnerType: "event" | "dish" | "beverage" | "venue" | "menu" | "menuSubscription" | "ritual"; /** @enum {string} */ GuestTier: "blacklisted" | "atRisk" | "loyal" | "newGuest" | "regular"; /** @enum {string} */ IntegrationNotificationType: "order_created" | "order_cancelled" | "order_completed" | "team_order_created" | "reservation_created" | "reservation_confirmed" | "reservation_cancelled"; /** @enum {string} */ IntegrationType: "telegram" | "google_ads" | "google_business_profile" | "meta_ads"; /** @enum {string} */ InventoryAssetStatus: "available" | "in_use" | "maintenance" | "retired"; /** @enum {string} */ InventoryCategory: "depositware" | "furniture" | "equipment" | "utensil"; /** @enum {string} */ InvitationScenario: "new_user" | "already_member" | "former_employee"; /** @enum {string} */ InvitationStatus: "pending" | "accepted" | "rejected" | "expired" | "revoked"; /** @enum {string} */ InvitationType: "venue_user" | "party_connection"; /** @enum {string} */ Jurisdiction: "DE" | "CH" | "FR" | "IT"; /** @enum {string} */ JurisdictionType: "country" | "region" | "municipality"; /** @enum {string} */ KeywordDefaultScope: "venueType" | "cuisine"; /** @enum {string} */ Locale: "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "br" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "cy" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "fr" | "fy" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "hr" | "ht" | "hu" | "hy" | "hz" | "ia" | "id" | "ie" | "ig" | "ii" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "no" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "th" | "ti" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu"; /** @enum {string} */ MenuItemMarker: "vegan" | "vegetarian" | "allergens" | "spicy"; /** @enum {string} */ MenuItemType: "dish" | "beverage"; /** @enum {string} */ MessageDirection: "incoming" | "outgoing"; /** @enum {string} */ MessageSource: "platform"; /** @enum {string} */ MessageStatus: "draft" | "submitting" | "submitted" | "rejected" | "failed" | "received"; /** @enum {string} */ MessageThreadStatus: "open" | "awaiting_them" | "awaiting_us" | "closed"; /** @enum {string} */ MessageThreadSubjectType: "party"; /** @enum {string} */ MetaCallToAction: "LEARN_MORE" | "BOOK_TRAVEL" | "ORDER_NOW" | "GET_OFFER" | "CONTACT_US" | "SIGN_UP"; /** @enum {string} */ MetaChannel: "facebook" | "instagram"; /** @enum {string} */ MetaInsightsDatePreset: "last_7d" | "last_30d" | "maximum"; /** @enum {string} */ MetaIntegrationStatus: "invited" | "linked" | "active"; /** @enum {string} */ MetaServingTargetStatus: "ACTIVE" | "PAUSED"; /** @enum {string} */ OccupancyReason: "ok" | "tables" | "personnel" | "window" | "slot_capacity"; /** @enum {string} */ FulfillmentType: "pickup" | "delivery"; /** @enum {string} */ OrderStatus: "pending" | "in_progress" | "ready" | "completed" | "cancelled"; /** @enum {string} */ PartyGender: "male" | "female" | "neutral"; /** @enum {string} */ PartyType: "natural_person" | "legal_entity"; /** @enum {string} */ PaxBand: "1-2" | "3-4" | "5-6" | "7+"; /** @enum {string} */ PaymentMethod: "card" | "cash" | "voucher"; /** @enum {string} */ PaymentStatus: "unpaid" | "paid" | "refunded" | "authorized" | "cash_pending"; /** @enum {string} */ PlatformRole: "platform_maintainer"; /** @enum {string} */ RequestContactEmailChangeOutcome: "requested" | "unchanged"; /** @enum {string} */ ReservationDeclineReason: "fully_booked" | "closed" | "other"; /** @enum {string} */ ReservationMode: "passive" | "auto_steer"; /** @enum {string} */ Role: "superadmin" | "admin" | "manager" | "chef" | "cook" | "waiter" | "rider"; /** @enum {string} */ ScanTokenEntityType: "order" | "depositware"; /** @enum {string} */ ScheduleOverrideMode: "closed" | "deviating"; /** @enum {string} */ ServedMarketAreaType: "pin" | "postcode" | "city" | "region" | "country"; /** @enum {string} */ ServedMarketScope: "include" | "exclude"; /** @enum {string} */ SortOrder: "asc" | "desc"; /** @enum {string} */ SubscriberStatus: "active" | "paused" | "cancelled" | "past_due" | "trialing"; /** @enum {string} */ SubscriptionCreditStatus: "available" | "redeemed" | "expired"; /** @enum {string} */ SubscriptionPeriod: "week" | "month" | "year"; /** @enum {string} */ ParticipantStatus: "browsing" | "authorized" | "cash_pending" | "placed" | "completed" | "cancelled"; /** @enum {string} */ TeamOrderStatus: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled"; /** @enum {string} */ TeamOrderThresholdConstraint: "quantity" | "amount"; /** @enum {string} */ Unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces"; /** @enum {string} */ Variant: "dark" | "light" | "success" | "warning" | "danger" | "primary" | "secondary"; /** @enum {string} */ WizardKey: "ads-venue-explainer-v1" | "ads-menu-explainer-v1" | "ads-dish-explainer-v1" | "ads-beverage-explainer-v1"; /** @enum {string} */ AdBiddingStrategy: "MAXIMIZE_CONVERSIONS" | "MAXIMIZE_CLICKS"; /** @enum {string} */ AdChannel: "google" | "facebook" | "instagram"; /** @enum {string} */ AdOwnerType: "event" | "ritual" | "venue" | "dish" | "beverage" | "menu"; /** @enum {string} */ AdStatus: "draft" | "ready" | "archived"; /** @enum {string} */ GoogleAdsAssetFamily: "sitelinks" | "callouts"; /** @enum {string} */ MentionEntityType: "dish" | "beverage" | "ingredient" | "menu" | "ritual"; /** @enum {string} */ MentionType: "link" | "value"; /** @enum {string} */ Permission: "area-booking-requests:create" | "bank-accounts:manage" | "bank-accounts:view" | "beverages:create" | "beverages:delete" | "beverages:read" | "beverages:update" | "categories:create" | "categories:delete" | "categories:update" | "deposits:calculate" | "deposits:mark-lost" | "deposits:override-penalty" | "deposits:process-return" | "deposits:report" | "deposits:view" | "dishes:create" | "dishes:delete" | "dishes:read" | "dishes:update" | "features:create" | "features:delete" | "features:update" | "features:view" | "fulfillment:assign" | "fulfillment:mark-delivered" | "iam:human" | "iam:robot" | "inbox:view" | "kitchen:mark-preparing" | "kitchen:mark-ready" | "kitchen:view" | "m2m:ping" | "menus:manage" | "menus:read" | "orders:activity" | "orders:analytics" | "orders:cancel" | "orders:create" | "orders:discount" | "orders:export" | "orders:read-all" | "orders:read-own" | "orders:refund" | "orders:update" | "orders:void" | "payments:process" | "payments:refund" | "plans:create" | "plans:delete" | "plans:update" | "plans:view" | "platform:view" | "users:delete" | "platform-mention-fields:manage" | "reports:analytics" | "reports:orders" | "roles:assign" | "roles:create" | "roles:delete" | "roles:update" | "roles:view" | "rolodex:manage" | "rolodex:view" | "subscriptions:create" | "subscriptions:delete" | "subscriptions:update" | "subscriptions:view" | "team:invite" | "team:remove" | "team:revoke" | "team:update" | "team:view" | "venue:manage-gbp" | "venue:manage-payments" | "venue:update" | "venue:view"; /** @enum {string} */ PendingSuperadminTransferStatus: "pending_invite" | "accepted_awaiting_payment" | "completed" | "cancelled" | "expired"; /** @enum {string} */ BillingMode: "single_anchor" | "split"; /** @enum {string} */ VenueChargeType: "base" | "addon"; /** @enum {string} */ AssetType: "image" | "video" | "document"; /** @enum {string} */ GbpMediaCategory: "cover" | "logo" | "gallery" | "video"; /** @enum {string} */ GbpSyncStatus: "processing" | "live" | "rejected" | "failed" | "removed"; /** @enum {string} */ GeoAreaType: "postcode" | "city"; /** @enum {string} */ PublicationSectionType: "cover" | "body" | "back"; /** @enum {string} */ PublicationFrameStyle: "solid" | "icon"; /** @enum {string} */ PublicationGroupBy: "weekday" | "calendar_week" | "none"; /** @enum {string} */ PublicationGroupFlow: "stacked" | "page_break"; /** @enum {string} */ PublicationPalette: "primary" | "secondary"; /** @enum {string} */ PublicationPaperSize: "a4" | "a5" | "letter" | "legal"; /** @enum {string} */ PublicationPricePosition: "right" | "bottom"; /** @enum {string} */ PublicationQrPlacement: "topLeft" | "topRight" | "bottomLeft" | "bottomRight"; /** @enum {string} */ PublicationQrTarget: "online_menu" | "custom"; /** @enum {string} */ PublicationRulePosition: "below_title" | "below_subtitle" | "below_description"; /** @enum {string} */ PublicationRuleStyle: "solid" | "dashed" | "dotted" | "double" | "wavy" | "diamond" | "flourish" | "asterisks" | "fade" | "dot_ornament" | "icon"; /** @enum {string} */ PublicationSourceType: "menu" | "dish" | "beverage" | "event" | "venue"; /** @enum {string} */ PublicationTextAlign: "left" | "center" | "right" | "justify"; /** @enum {string} */ PublicationType: "menu" | "flyer" | "wine_list" | "about" | "cover" | "booklet" | "custom"; /** @enum {string} */ PublicationWeekScope: "current" | "all" | "range"; /** @enum {string} */ Direction: "left" | "right" | "up" | "down"; /** @enum {string} */ DirectionX: "left" | "right"; /** @enum {string} */ DirectionY: "up" | "down"; /** @enum {string} */ Orientation: "vertical" | "horizontal"; /** @enum {string} */ PositionCenter: "center"; /** @enum {string} */ PositionCorner: "top-left" | "top-right" | "bottom-left" | "bottom-right"; /** @enum {string} */ PositionEdge: "start" | "end"; /** @enum {string} */ Position: "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center"; /** @enum {string} */ PositionY: "top" | "bottom"; /** @enum {string} */ EventAssetSource: "inherited" | "manual"; /** @enum {string} */ RitualType: "service" | "special"; /** @enum {string} */ SlotMode: "interval" | "duration"; /** @enum {string} */ PublicationEventType: "download" | "scan"; /** @enum {string} */ TeamOrderPaymentStatus: "authorized" | "captured" | "cash_pending" | "cash_received" | "voided" | "failed"; /** @enum {string} */ FeatureCategory: "articles" | "auth" | "billing" | "core" | "guests" | "events" | "inventory" | "menus" | "orders" | "platform" | "promotions" | "reservations" | "settings" | "venues"; /** @enum {string} */ FeatureGate: "custom-email-sender"; /** @enum {string} */ FeatureStatus: "backlog" | "in_development" | "released"; /** @enum {string} */ MentionFieldFormatter: "text" | "currency" | "integer" | "percentage" | "boolean"; /** @enum {string} */ KeywordPolarity: "positive" | "negative"; /** @enum {string} */ PromotionBenefitType: "free_item" | "discount_percentage" | "discount_amount" | "buy_x_get_y"; /** @enum {string} */ ReservationPromotionStatus: "applied" | "redeemed" | "expired"; /** @enum {string} */ ReservationStatus: "pending" | "confirmed" | "arrived" | "seated" | "completed" | "cancelled" | "no_show"; /** @enum {string} */ ReservationMessageStatus: "draft" | "sent"; /** @enum {string} */ BankAccountStatus: "active" | "inactive" | "closed"; /** @enum {string} */ VenueEmailSenderStatus: "pending" | "verified" | "failed" | "temporary_failure"; /** @enum {string} */ WebsitePageOwnerType: "venue" | "menu" | "dish" | "beverage" | "ingredient" | "event" | "ritual"; /** @enum {string} */ VenueAssetType: "logomark" | "wordmark" | "combinationmark_horizontal" | "combinationmark_vertical" | "icon"; /** @enum {string} */ FontRole: "system" | "accent"; /** @enum {string} */ FontStyle: "normal" | "italic"; /** @enum {string} */ VenueUserStatus: "pending" | "confirmed" | "revoked"; /** @enum {string} */ VenueType: "restaurant" | "fine_dining_restaurant" | "ghost_kitchen" | "food_truck"; /** @enum {string} */ EnumTrue: "true"; /** @enum {string} */ EnumFalse: "false"; /** @enum {string} */ EnumCenterLeftRight: "center" | "left" | "right"; }; responses: never; parameters: never; requestBodies: never; headers: never; pathItems: never; } type schemas = components['schemas']; type CreateEventRequest = schemas['CreateEventRequest']; type CreateEventResponse = schemas['CreateEventResponse']; type PatchEventRequest = schemas['EditEventRequest']; type PatchEventResponse = schemas['EditEventResponse']; type DeleteEventResponse = schemas['DeleteEventResponse']; type UploadEventAssetResponse = schemas['UploadAssetResponse']; /** * Args for `client.events.uploadPoster()`. Mirrors * {@link UploadFeatureImageArgs} — the SDK accepts a `Buffer` / * `Uint8Array` payload + filename + content-type and builds the * multipart FormData internally. Client ergonomics, no wire equivalent. */ interface UploadEventAssetArgs { data: Buffer | Uint8Array; filename: string; contentType: string; } /** * Args for `client.dishes.uploadAsset()` / `client.beverages.uploadAsset()`. * Like {@link UploadEventAssetArgs} but with optional discovery `tags` applied * to the new asset row (e.g. `['lunch-menu']` to surface the image in the lunch * carousel). The SDK builds the multipart FormData internally. */ interface UploadAssetArgs { data: Buffer | Uint8Array; filename: string; contentType: string; tags?: string[]; } /** `uploadAsset` response — the new asset + its public URL. Shared by the dish, beverage, and event upload methods. */ type UploadAssetResponse = schemas['UploadAssetResponse']; /** * A single ad row — generated-bound to the `FetchAdResponse` component * (`createSelectSchema(ads)` server-side). Carries the polymorphic owner * (`ownerEntityType` / `ownerEntityId`), the `channel`, the paste-ready * Google Search Ad `content` document, and the lifecycle `status`. */ type Ad = schemas['FetchAdResponse']; /** * The ads list response — generated-bound to `FetchAdsResponse` (an array * of {@link Ad}), ordered by `createdAt`. Never hand-rolled. */ type ListAdsResponse = schemas['FetchAdsResponse']; type CreateAdRequest = schemas['CreateAdRequest']; type CreateAdResponse = schemas['CreateAdResponse']; type PatchAdRequest = schemas['EditAdRequest']; type PatchAdResponse = schemas['EditAdResponse']; type DeleteAdResponse = schemas['DeleteAdResponse']; type EditMetaAdRequest = schemas['EditMetaAdRequest']; type EditMetaAdResponse = schemas['EditMetaAdResponse']; type SaveAdCalloutsRequest = schemas['SaveAdCalloutsRequest']; type SaveAdCalloutsResponse = schemas['SaveAdCalloutsResponse']; type SaveAdKeywordsRequest = schemas['SaveAdKeywordsRequest']; type SaveAdKeywordsResponse = schemas['SaveAdKeywordsResponse']; type SaveAdNegativeKeywordsRequest = schemas['SaveAdNegativeKeywordsRequest']; type SaveAdNegativeKeywordsResponse = schemas['SaveAdNegativeKeywordsResponse']; type SaveAdWebsitePagesRequest = schemas['SaveAdWebsitePagesRequest']; type SaveAdWebsitePagesResponse = schemas['SaveAdWebsitePagesResponse']; type SetAdBudgetRequest = schemas['SetAdBudgetRequest']; type SetAdBudgetResponse = schemas['SetAdBudgetResponse']; type GetCalloutsResponse = schemas['GetCalloutsResponse']; type CreateCalloutRequest = schemas['CreateCalloutRequest']; type CreateCalloutResponse = schemas['CreateCalloutResponse']; type UpdateCalloutRequest = schemas['UpdateCalloutRequest']; type UpdateCalloutResponse = schemas['UpdateCalloutResponse']; type DeleteCalloutResponse = schemas['DeleteCalloutResponse']; /** * A dish read by accessor: localized name/description, dietary flags, price, * and assets with public URLs. Generated-bound to `FetchDishResponse` * (`createSelectSchema(dishes)` + assets, server-side). */ type FetchDishResponse = schemas['FetchDishResponse']; type EditDishRequest = schemas['EditDishRequest']; type EditDishResponse = schemas['EditDishResponse']; /** * A beverage read by accessor: localized name/description, price, and * assets with public URLs. Generated-bound to `FetchBeverageResponse` * (`createSelectSchema(beverages)` + assets, server-side). */ type FetchBeverageResponse = schemas['FetchBeverageResponse']; type EditBeverageRequest = schemas['EditBeverageRequest']; type EditBeverageResponse = schemas['EditBeverageResponse']; /** * The publications CLI/agent verbs: create a menu-bound publication, fold * design blocks into its designDoc, render its print PDF, and compose * booklets from ordered sections. PDFs travel base64-encoded (`pdfBase64` + * `pages`); decode with `Buffer.from(pdfBase64, 'base64')`. */ type CreateMenuPublicationRequest = schemas['CreateMenuPublicationRequest']; type CreateMenuPublicationResponse = schemas['CreateMenuPublicationResponse']; type SetMenuPublicationBlocksRequest = schemas['SetMenuPublicationBlocksRequest']; type SetMenuPublicationBlocksResponse = schemas['SetMenuPublicationBlocksResponse']; type RenderMenuPublicationPdfRequest = schemas['RenderMenuPublicationPdfRequest']; type RenderMenuPublicationPdfResponse = schemas['RenderMenuPublicationPdfResponse']; type ComposeMenuPublicationBookletRequest = schemas['ComposeMenuPublicationBookletRequest']; type ComposeMenuPublicationBookletResponse = schemas['ComposeMenuPublicationBookletResponse']; type GetWebsitePagesResponse = schemas['GetWebsitePagesResponse']; type CreateWebsitePageRequest = schemas['CreateWebsitePageRequest']; type CreateWebsitePageResponse = schemas['CreateWebsitePageResponse']; type UpdateWebsitePageRequest = schemas['UpdateWebsitePageRequest']; type UpdateWebsitePageResponse = schemas['UpdateWebsitePageResponse']; type DeleteWebsitePageResponse = schemas['DeleteWebsitePageResponse']; /** * Optional filters for `client.ads.list()`. Each narrows the venue's ad * set; omit all to list every ad. Client ergonomics, mapped to the wire * query string by the resource layer. */ interface ListAdsOptions { /** Filter to ads owning this entity type (e.g. `event`). */ ownerEntityType?: string; /** Filter to ads owning this specific entity id. */ ownerEntityId?: string; /** Filter to ads on this channel (e.g. `google`). */ channel?: string; } type Article = schemas['FetchArticleResponse']; type ListArticlesResponse = schemas['FetchArticlesResponse']; type GetArticleResponse = schemas['FetchArticleResponse']; type PatchArticleRequest = schemas['EditArticleRequest']; type PatchArticleResponse = schemas['EditArticleResponse']; type FeatureImage = schemas['FeatureImage']; type PatchFeatureImageRequest = schemas['PatchArticleFeatureImageBody']; /** * Args for `client.articles.uploadFeatureImage()`. The SDK accepts a * `Buffer` or `Uint8Array` payload + filename + content-type — it * builds the FormData internally so callers don't have to know about * multipart wire encoding. Client ergonomics, no wire equivalent. */ interface UploadFeatureImageArgs { data: Buffer | Uint8Array; filename: string; contentType: string; } interface ListArticlesOptions { /** Only return articles whose `tags` array contains this value. */ tag?: string; /** When `true`, include articles whose `publishedAt` is null. Default `false`. */ includeDrafts?: boolean; /** When `true`, include articles whose `isActive` is `false`. Default `false`. */ includeInactive?: boolean; } type Venue = schemas['GetVenueResponse']; type GetVenueResponse = schemas['GetVenueResponse']; /** * Order fulfillment type — bound to the generated `FulfillmentType` * component (order3000's `order_fulfillment_type` enum, surfaced via * `openapi-typescript`). Never hand-rolled. */ type OrderFulfillmentType = schemas['FulfillmentType']; type PlaceOrderRequest = Omit & { /** * When the order should be fulfilled (ISO 8601 datetime or Date). * Null / omitted in team-order mode — the Lead's pickup-time decision * is attached to the team row and backfilled onto each child order at * submit time. */ fulfillmentAt?: Date | string | null; }; type PlaceOrderResponse = schemas['PlaceOrderResponse']; type MakeReservationRequest = schemas['MakeReservationRequest']; type MakeReservationResponse = schemas['MakeReservationResponse']; /** * Day of week — generated-bound to the `dayOfWeek` enum carried by the * events list schedule time-slot rows. The order3000 events output * schema is now precise (no more `.passthrough()`), so this derives * straight from the wire contract. */ type DayOfWeek = NonNullable['scheduleTimeSlots'][number]['dayOfWeek']>; /** * A single event time slot — the one slot shape, used by both the weekly * recurring `timeSlots[]` and the per-date `scheduleOverrides[].timeSlots[]`. * `dayOfWeek` is present only on weekly slots (optional); every field is * optional because the underlying join row may be absent, so consumers * resolving "the slots bookable on date X" must guard. Generated-bound to * the events list response's `timeSlots[]` element. */ type TimeSlot = schemas['FetchEventsResponse'][number]['timeSlots'][number]; /** * A date-specific schedule override for an event. Generated-bound to the * events list response's `scheduleOverrides[]` element. */ type ScheduleOverride = schemas['FetchEventsResponse'][number]['scheduleOverrides'][number]; /** * An event's schedule (rrule, validity window, slot-generation settings, * plus the nested override / time-slot rows). Generated-bound to the * non-null `schedule` object on the events list response. * * `intervalDuration` / `duration` are milliseconds (codebase convention). */ type Schedule = NonNullable; /** * An asset (image/video/document) attached to an event. Generated-bound to the * events list response's `assets[]` element. Use the asset's `tags` (e.g. * `'poster'`) to classify how it's used. */ type EventAsset = schemas['FetchEventsResponse'][number]['assets'][number]; /** * A promotion attached to an event. Generated-bound to the events list * response's `promotions[]` element. */ type Promotion = schemas['FetchEventsResponse'][number]['promotions'][number]; /** * A single event as returned by the list endpoint, with schedule, * posters, promotions, time slots and overrides inlined. Generated-bound * to the events list response element — request-shape drift is now * impossible. */ type Event = schemas['FetchEventsResponse'][number]; interface ListEventsOptions { /** Include private events in the response */ includePrivate?: boolean; /** Include inactive events in the response */ includeInactive?: boolean; /** Filter by isPublic status */ isPublic?: boolean; /** Filter by isRecurring status */ isRecurring?: boolean; /** Filter by isClosed status */ isClosed?: boolean; /** Filter for events occurring within N days from today */ upcomingWithinDays?: number; } /** * The events list response — generated-bound to `FetchEventsResponse` * (an array of {@link Event}). Never hand-rolled. */ type ListEventsResponse = schemas['FetchEventsResponse']; /** * An asset (image/video/document) as returned by the assets-by-tag endpoint, * with its resolved Supabase `publicUrl`. Generated-bound to * `FetchAssetsByTagResponse`'s element — never hand-rolled. */ type Asset = schemas['FetchAssetsByTagResponse'][number]; interface ListAssetsOptions { /** Required. Only assets carrying this tag are returned. */ tag: string; /** Optional asset-type filter. */ type?: 'image' | 'video' | 'document'; } /** * The assets-by-tag list response — generated-bound to * `FetchAssetsByTagResponse` (an array of {@link Asset}). Never hand-rolled. */ type ListAssetsResponse = schemas['FetchAssetsByTagResponse']; /** * Menu item discriminant — generated-bound to the `type` enum on the * menu response's `items[]` element. The `fetchMenu` output schema is * now precise; never hand-rolled. */ type MenuItemType = NonNullable[number]['type']; /** * Crop area coordinates for assets. Shared UI helper (mirrors the * `@kolaveri/molecules` Cropper type) — not a wire DTO. */ interface CropArea { x: number; y: number; width: number; height: number; } /** * A menu — generated-bound to `FetchMenuResponse`. order3000's * `fetchMenu` action always projects the flat, hydrated client view: * `assets[]` (menu-level) and every `items[].dish.assets[]` / * `items[].beverage.assets[]` are resolved to flat assets carrying * their Supabase `publicUrl`; the raw `*_assets` junction relations are * stripped at source and never surface on the wire. Bound here via the * same alias-derivation style as `Basket`/`BasketItem`. */ type Menu = NonNullable; /** * A single menu item — generated-bound to the element type of * `Menu.items[]` (present when `expand=items`). */ type MenuItem = NonNullable[number]; /** * The dish carried by a menu item — generated-bound to `MenuItem.dish`. */ type MenuDish = NonNullable; /** * The beverage carried by a menu item — generated-bound to * `MenuItem.beverage`. */ type MenuBeverage = NonNullable; /** * A flat, hydrated asset — generated-bound to the element type of the * always-present menu-level `Menu.assets[]`. Identical in shape to the * per-item `dish.assets[]` / `beverage.assets[]` elements (all are the * same hydrated asset projection with a resolved `publicUrl`). */ type MenuAsset = NonNullable[number]; interface GetMenuOptions { /** Expand related resources (items, assets) */ expand?: ('items' | 'assets')[]; } /** * Wire shape for a single menu bundle, bound to the generated OpenAPI * schema (`FetchMenuBundlesResponse`) — never hand-rolled. The * authoritative contract is order3000's `fetchMenuBundles` output * schema, surfaced here via `openapi-typescript`. Notably `price` is * `{ amount, currency }`, not a bare number. */ type MenuBundle = schemas['FetchMenuBundlesResponse'][number]; type MenuBundleDeposit = NonNullable; /** * A single event as returned by the `events.get` endpoint, with * optional schedule / menus / posters expansions. Generated-bound to the * `FetchEventResponse` component (the order3000 `fetchEvent` output * schema is now precise) — request-shape drift is impossible. */ type EventByAccessor = schemas['FetchEventResponse']; /** * The fetched event's schedule sub-object, including the optional * `scheduleTimeSlots[]` expansion. Generated-bound to the non-null * `schedule` on `FetchEventResponse`. Kept as a distinct public SDK type * name (re-exported as `O3KScheduleWithTimeSlots`) for downstream * stability; structurally it is the single-event-fetch schedule shape. */ type ScheduleWithTimeSlots = NonNullable; /** * A single regular time slot on the by-accessor event's schedule. * Generated-bound to the element type of the (optional) * `schedule.scheduleTimeSlots[]` array on `FetchEventResponse`. */ type ScheduleTimeSlot = NonNullable[number]; /** * A menu summary attached to a by-accessor event. Generated-bound to the * element type of `FetchEventResponse`'s optional `menus[]` array. */ type EventMenu = NonNullable[number]; /** * A single ritual as returned by the `rituals.get` endpoint — its template * schedule (time slots + date overrides), media, and the events materialised * from it (with per-day covers). Generated-bound to the `FetchRitualResponse` * component (the order3000 `fetchRitual` output schema), so request-shape drift * is impossible. The component is nullable on the wire (the action returns the * ritual or throws); `get()` resolves on success, so the SDK type is non-null. */ type RitualByAccessor = NonNullable; interface GetEventOptions { /** Expand related resources (schedule, timeSlots, menus, posters) */ expand?: ('schedule' | 'timeSlots' | 'menus' | 'assets')[]; } type AreaBookingMode = schemas['FetchAreaResponse']['bookingMode']; type AreaBookingRequestStatus = schemas['SubmitAreaBookingRequestResponse']['status']; type AreaBookingRequestSource = schemas['SubmitAreaBookingRequestResponse']['source']; type AreaBookingStatus = schemas['FetchAreaBookingsResponse'][number]['status']; type AreaAsset = NonNullable[number]; type AreaFeature = NonNullable[number]; type Area = schemas['FetchAreaResponse']; interface GetAreaOptions { expand?: 'assets'[]; } type AreaAvailabilityWindow = schemas['GetAreaAvailabilityResponse']['occupied'][number]; type AreaAvailabilityResponse = schemas['GetAreaAvailabilityResponse']; type EventSlotAvailabilityResponse = schemas['FetchSlotAvailabilityResponse']; interface GetEventSlotAvailabilityOptions { reservationDate: string; partySize: number; areaId?: string; /** * Booking channel to evaluate (default 'reservation'). 'order' returns the * event's order-pickup grid — its own slot rows and per-slot caps, gated by * the order booking window instead of the table-occupancy engine. An event * without a dedicated order grid inherits the reservation grid. */ channel?: 'reservation' | 'order'; } interface GetAreaAvailabilityOptions { /** YYYY-MM-DD — defaults to today */ from?: string; /** YYYY-MM-DD — defaults to today + 90d */ to?: string; } type SubmitAreaBookingRequestPayload = schemas['SubmitAreaBookingPayload']; type AreaBookingRequestResponse = schemas['SubmitAreaBookingRequestResponse']; /** * Canonical basket — generated-bound to the `FetchBasketResponse` * component (the order3000 `fetchBasket` output schema is now precise). * Returned by `baskets.get(sessionId)`. */ type Basket = NonNullable; /** * Basket lifecycle status — generated-bound to the `status` enum on * `FetchBasketResponse`. No longer a bare wire `string`. */ type BasketStatus = Basket['status']; type Currency = schemas['BasketTotals']['currency']; /** * Unit of measurement for portion tracking. Bound to the generated * add-to-basket request shape. */ type Unit = NonNullable; /** * A single basket item — generated-bound to the element type of * `FetchBasketResponse.items[]`. One physical product (e.g. a TiffinBox * with rice, curry, and sides); `Basket.itemCount` is the COUNT of basket * items, not a sum of menu-item quantities. */ type BasketItem = Basket['items'][number]; /** * Reference to a menu item within a basket item — generated-bound to the * element type of `BasketItem.menuItems[]`. Each ref carries its own * portion size (quantity + unit) for precise tracking like * "100g rice, 80g curry". */ type BasketItemMenuItemRef = BasketItem['menuItems'][number]; /** * Free-form per-basket-item metadata bag — generated-bound to the * (nullable) `metadata` object on `FetchBasketResponse.items[]`. The wire * contract types this as an open `{ [key: string]: unknown }` record; * thamarai narrows individual keys (`type`, `mode`, `upsell`, `price`) at * its own transform boundary. */ type BasketItemMetadata = NonNullable; /** * Deposit info on a basket item — generated-bound to the (nullable) * `deposit` object on `FetchBasketResponse.items[]`. order3000 refuses * any inbound deposit money amount; this object is outbound-only, for UI * display. */ type BasketItemDeposit = NonNullable; /** * Order workflow status — generated-bound to the `status` enum on * `FetchLatestOrderResponse` (order3000's `order_status`). No longer a * bare wire `string`. */ type OrderStatus = NonNullable['status']; /** * Payment workflow status — generated-bound to the `paymentStatus` enum * on `FetchLatestOrderResponse` (order3000's `payment_status`). No longer * a bare wire `string`. */ type PaymentStatus = NonNullable['paymentStatus']; /** * The most recent non-team order for a guest session, with the captured * basket items + totals + declared returns inlined. Returned by * `orders.getLatest(sessionId)` — `null` when the session has no * qualifying order (fresh sessionIds and team-only sessions both fall * through to `null`). Generated-bound to the `FetchLatestOrderResponse` * component (the order3000 `fetchLatestOrder` output schema is now * precise). */ type LatestOrder = NonNullable; /** * One "I'll return N of this template" declaration. Bound to the * generated basket-totals `returnable` element — clients never specify * a deposit money amount. */ type DeclaredReturn = schemas['BasketTotals']['returnable'][number]; /** * Canonical basket totals (all cents), bound to the generated * `BasketTotals` component. The single figure clients read for every * displayed monetary value. */ type BasketTotals = schemas['BasketTotals']; /** * Request to add an item to the basket. * * Menu items can optionally include portion information (quantity/unit). * If not provided, defaults to the menu item's configured portion size. * `venueAccessor` is injected by the SDK resource layer, so it's omitted * from the public caller shape. */ type AddToBasketRequest = Omit; type AddToBasketResponse = schemas['AddToBasketResponse']; type RemoveFromBasketResponse = schemas['RemoveFromBasketResponse']; type CreatePaymentIntentRequest = Omit & { /** * Optional — null / omitted in team-order mode. The Lead's pickup-time * decision is stored on the team row and backfilled onto each child * order at submit time. */ fulfillmentAt?: Date | string | null; }; type CreatePaymentIntentResponse = schemas['CreatePaymentIntentResponse']; type CreateDeltaPaymentIntentRequest = Omit; type CreateDeltaPaymentIntentResponse = schemas['CreateDeltaPaymentIntentResponse']; type ReduceDeltaPaymentIntentRequest = Omit; type ReduceDeltaPaymentIntentResponse = schemas['ReduceDeltaPaymentIntentResponse']; type ConfirmOrderRequest = Omit; type ConfirmOrderResponse = schemas['ConfirmOrderResponse']; type SubscriptionPeriod = schemas['GetSubscriptionResponse']['billingPeriod']; /** * Subscriber lifecycle status — generated-bound to the `subscriber_status` * pgEnum, surfaced via order3000's `FetchSubscribersResponse[].status` * (and `fetchMenuSubscription`). openapi-typescript hoists the shared * enum into `components.schemas['SubscriberStatus']`. */ type SubscriberStatus = schemas['SubscriberStatus']; type SubscriptionCreditStatus = schemas['GetSubscriptionCreditsResponse'][number]['status']; type MenuSubscriptionPoster = NonNullable[number]; type MenuSubscription = schemas['GetSubscriptionResponse']; type SubscribeRequest = schemas['SubscribeToSubscriptionBody']; type SubscribeResponse = schemas['SubscribeToSubscriptionResponse']; type SubscriptionCredit = schemas['GetSubscriptionCreditsResponse'][number]; export type { EditMetaAdResponse as $, Ad as A, Basket as B, ComposeMenuPublicationBookletRequest as C, CreateCalloutResponse as D, CreateDeltaPaymentIntentRequest as E, CreateDeltaPaymentIntentResponse as F, CreateEventRequest as G, CreateEventResponse as H, CreateMenuPublicationRequest as I, CreateMenuPublicationResponse as J, CreatePaymentIntentRequest as K, CreatePaymentIntentResponse as L, CreateWebsitePageRequest as M, CreateWebsitePageResponse as N, CropArea as O, Currency as P, DayOfWeek as Q, DeclaredReturn as R, DeleteAdResponse as S, DeleteCalloutResponse as T, DeleteEventResponse as U, DeleteWebsitePageResponse as V, EditBeverageRequest as W, EditBeverageResponse as X, EditDishRequest as Y, EditDishResponse as Z, EditMetaAdRequest as _, AddToBasketRequest as a, SaveAdWebsitePagesRequest as a$, Event as a0, EventAsset as a1, EventByAccessor as a2, EventMenu as a3, EventSlotAvailabilityResponse as a4, FeatureImage as a5, FetchBeverageResponse as a6, FetchDishResponse as a7, GetAreaAvailabilityOptions as a8, GetAreaOptions as a9, MenuSubscription as aA, MenuSubscriptionPoster as aB, OrderFulfillmentType as aC, OrderStatus as aD, PatchAdRequest as aE, PatchAdResponse as aF, PatchArticleRequest as aG, PatchArticleResponse as aH, PatchEventRequest as aI, PatchEventResponse as aJ, PatchFeatureImageRequest as aK, PaymentStatus as aL, PlaceOrderRequest as aM, PlaceOrderResponse as aN, Promotion as aO, ReduceDeltaPaymentIntentRequest as aP, ReduceDeltaPaymentIntentResponse as aQ, RemoveFromBasketResponse as aR, RenderMenuPublicationPdfRequest as aS, RenderMenuPublicationPdfResponse as aT, RitualByAccessor as aU, SaveAdCalloutsRequest as aV, SaveAdCalloutsResponse as aW, SaveAdKeywordsRequest as aX, SaveAdKeywordsResponse as aY, SaveAdNegativeKeywordsRequest as aZ, SaveAdNegativeKeywordsResponse as a_, GetArticleResponse as aa, GetCalloutsResponse as ab, GetEventOptions as ac, GetEventSlotAvailabilityOptions as ad, GetMenuOptions as ae, GetVenueResponse as af, GetWebsitePagesResponse as ag, LatestOrder as ah, ListAdsOptions as ai, ListAdsResponse as aj, ListArticlesOptions as ak, ListArticlesResponse as al, ListAssetsOptions as am, ListAssetsResponse as an, ListEventsOptions as ao, ListEventsResponse as ap, MakeReservationRequest as aq, MakeReservationResponse as ar, Menu as as, MenuAsset as at, MenuBeverage as au, MenuBundle as av, MenuBundleDeposit as aw, MenuDish as ax, MenuItem as ay, MenuItemType as az, AddToBasketResponse as b, SaveAdWebsitePagesResponse as b0, Schedule as b1, ScheduleOverride as b2, ScheduleTimeSlot as b3, ScheduleWithTimeSlots as b4, SetAdBudgetRequest as b5, SetAdBudgetResponse as b6, SetMenuPublicationBlocksRequest as b7, SetMenuPublicationBlocksResponse as b8, SubmitAreaBookingRequestPayload as b9, SubscribeRequest as ba, SubscribeResponse as bb, SubscriberStatus as bc, SubscriptionCredit as bd, SubscriptionCreditStatus as be, SubscriptionPeriod as bf, TimeSlot as bg, Unit as bh, UpdateCalloutRequest as bi, UpdateCalloutResponse as bj, UpdateWebsitePageRequest as bk, UpdateWebsitePageResponse as bl, UploadAssetArgs as bm, UploadAssetResponse as bn, UploadEventAssetArgs as bo, UploadEventAssetResponse as bp, UploadFeatureImageArgs as bq, Venue as br, Area as c, AreaAsset as d, AreaAvailabilityResponse as e, AreaAvailabilityWindow as f, AreaBookingMode as g, AreaBookingRequestResponse as h, AreaBookingRequestSource as i, AreaBookingRequestStatus as j, AreaBookingStatus as k, AreaFeature as l, Article as m, Asset as n, BasketItem as o, BasketItemDeposit as p, BasketItemMenuItemRef as q, BasketItemMetadata as r, BasketStatus as s, BasketTotals as t, ComposeMenuPublicationBookletResponse as u, ConfirmOrderRequest as v, ConfirmOrderResponse as w, CreateAdRequest as x, CreateAdResponse as y, CreateCalloutRequest as z };