> ## Documentation Index
> Fetch the complete documentation index at: https://docs.craveup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Export the signed-in customer's organization data



## OpenAPI

````yaml /generated/storefront.openapi.json get /customer/data-export
openapi: 3.0.3
info:
  title: Crave Storefront API
  version: 2.0.0
  description: >-
    Direct public Storefront API. Anonymous catalog reads require no API key.
    Protected resources use purpose-limited cart, checkout, receipt, or customer
    credentials.
  contact:
    name: Crave Support
    email: hello@craveup.com
servers:
  - url: https://api.craveup.com/api/v1/storefront
    description: Production Storefront API
  - url: https://sandbox-api.craveup.com/api/v1/storefront
    description: Sandbox Storefront API
security: []
tags:
  - name: Customer Auth
  - name: Catering
  - name: Loyalty
  - name: Merchants
  - name: Locations
  - name: Ordering Sessions
  - name: Menus
  - name: Products
  - name: Carts
  - name: Analytics
  - name: Checkout
  - name: Cart Items
  - name: Discounts
  - name: Customers
  - name: Orders
paths:
  /customer/data-export:
    get:
      tags:
        - Customers
      summary: Export the signed-in customer's organization data
      operationId: storefrontExportCustomerData
      parameters: []
      responses:
        '200':
          description: Customer profile, addresses, loyalty programs, and order history.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerDataExport'
        '400':
          description: The request is invalid.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '401':
          description: Authentication or capability authorization is required.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '403':
          description: The authenticated principal does not own this resource.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '404':
          description: The requested resource was not found.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '429':
          description: The request was rate limited.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '500':
          description: An unexpected error occurred.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
        '503':
          description: A required dependency is temporarily unavailable.
          headers:
            X-Request-Id:
              description: Opaque request identifier for support and telemetry correlation.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommerceErrorEnvelope'
      security:
        - StorefrontCustomerAuth: []
components:
  schemas:
    CustomerDataExport:
      type: object
      properties:
        exportedAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        customer:
          $ref: '#/components/schemas/CustomerExportCustomer'
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/CustomerExportAddress'
        loyaltyPrograms:
          type: array
          items:
            type: string
        cateringEvents:
          type: array
          items:
            $ref: '#/components/schemas/CateringCustomerDataExportEvent'
        orders:
          type: array
          items:
            $ref: '#/components/schemas/CustomerExportOrder'
      required:
        - exportedAt
        - customer
        - addresses
        - loyaltyPrograms
        - cateringEvents
        - orders
      additionalProperties: false
    CommerceErrorEnvelope:
      type: object
      properties:
        code:
          anyOf:
            - type: string
              enum:
                - VALIDATION_ERROR
                - UNAUTHORIZED
                - CUSTOMER_AUTH_CODE_REJECTED
                - FORBIDDEN
                - NOT_FOUND
                - RATE_LIMITED
                - CART_CONFLICT
                - REQUOTE_REQUIRED
                - RESOURCE_CONFLICT
                - CART_IMMUTABLE
                - IDEMPOTENCY_KEY_REQUIRED
                - IDEMPOTENCY_KEY_REUSED
                - IDEMPOTENCY_IN_PROGRESS
                - DEPENDENCY_UNAVAILABLE
                - INTERNAL_ERROR
            - type: string
              minLength: 1
        message:
          type: string
          minLength: 1
        requestId:
          type: string
          minLength: 8
        details:
          type: object
          additionalProperties: {}
      required:
        - code
        - message
        - requestId
      additionalProperties: false
    CustomerExportCustomer:
      type: object
      properties:
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        email:
          nullable: true
          type: string
        firstName:
          nullable: true
          type: string
        id:
          type: string
          minLength: 1
          maxLength: 128
        identityState:
          type: string
          enum:
            - guest
            - verified
        lastName:
          nullable: true
          type: string
        organizationId:
          type: string
          minLength: 1
          maxLength: 128
        phone:
          nullable: true
          type: string
        verifiedContacts:
          type: array
          items:
            type: string
            enum:
              - email
              - phone
      required:
        - createdAt
        - email
        - firstName
        - id
        - identityState
        - lastName
        - organizationId
        - phone
        - verifiedContacts
      additionalProperties: false
    CustomerExportAddress:
      type: object
      properties:
        fullAddress:
          type: string
        id:
          type: string
          minLength: 1
          maxLength: 128
        line1:
          type: string
        line2:
          type: string
        line3:
          type: string
      required:
        - fullAddress
        - id
        - line1
        - line2
        - line3
      additionalProperties: false
    CateringCustomerDataExportEvent:
      type: object
      properties:
        locationId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        reference:
          type: string
          pattern: ^[1-9]\d{5}$
        status:
          type: string
          enum:
            - enquiry
            - quoted
            - confirmed
            - locked
            - completed
            - cancelled
            - declined
            - expired
        source:
          type: string
          enum:
            - nomly_phone
            - web_form
            - staff
            - catervox_voice
        isTest:
          type: boolean
        eventDate:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
        serviceTime:
          type: string
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
        headcount:
          type: object
          properties:
            guests:
              type: integer
              minimum: 1
              maximum: 9007199254740991
            approximate:
              type: boolean
          required:
            - guests
            - approximate
          additionalProperties: false
        serviceStyle:
          type: string
          enum:
            - pickup
            - drop_off
            - drop_off_with_setup
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        contact:
          $ref: '#/components/schemas/CateringEventContact'
        details:
          $ref: '#/components/schemas/CateringEventDetails'
        textConsent:
          anyOf:
            - $ref: '#/components/schemas/CateringTextConsent'
            - type: string
              nullable: true
              enum:
                - null
        amendments:
          type: array
          items:
            $ref: '#/components/schemas/CateringExportAmendment'
        refundGroups:
          type: array
          items:
            $ref: '#/components/schemas/CateringExportRefundGroup'
        cancellationDecisions:
          type: array
          items:
            $ref: '#/components/schemas/CateringCancellationDecision'
        serviceCancellations:
          type: array
          items:
            $ref: '#/components/schemas/CateringExportServiceCancellation'
        cancellationRequests:
          type: array
          items:
            $ref: '#/components/schemas/CateringCancellationRequest'
        quotes:
          type: array
          items:
            $ref: '#/components/schemas/CateringExportQuote'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/CateringExportPayment'
      required:
        - locationId
        - reference
        - status
        - source
        - isTest
        - eventDate
        - serviceTime
        - headcount
        - serviceStyle
        - createdAt
        - contact
        - details
        - textConsent
        - amendments
        - refundGroups
        - cancellationDecisions
        - serviceCancellations
        - cancellationRequests
        - quotes
        - payments
      additionalProperties: false
    CustomerExportOrder:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        shortId:
          type: string
        restaurantDisplayName:
          type: string
        fulfillmentMethod:
          type: string
        fulfillmentIdentifier:
          type: string
        pickupType:
          type: string
        orderTime:
          type: string
        orderDate:
          type: string
        totalQuantity:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        currency:
          type: string
        orderTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        status:
          type: string
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        catering:
          default: null
          nullable: true
          type: object
          properties:
            eventId:
              type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            locationId:
              type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            returnPath:
              type: string
              pattern: ^\/c\/[0-9a-f-]{36}\/[0-9a-f-]{36}$
            reference:
              type: string
              minLength: 1
              maxLength: 255
            paymentKind:
              type: string
              enum:
                - deposit
                - full
                - balance
          required:
            - eventId
            - locationId
            - returnPath
            - reference
            - paymentKind
          additionalProperties: false
        financial:
          anyOf:
            - $ref: '#/components/schemas/PublicOrderFinancial'
            - type: string
              nullable: true
              enum:
                - null
        partiallyRefunded:
          nullable: true
          type: boolean
        items:
          type: array
          items:
            $ref: '#/components/schemas/PublicOrderItem'
        pricing:
          $ref: '#/components/schemas/PublicOrderPricing'
        deliveryInfo:
          nullable: true
          type: object
          properties:
            deliveryAddress:
              type: string
        delivery:
          $ref: '#/components/schemas/PublicOrderDelivery'
        roomServiceInfo:
          nullable: true
          type: object
          additionalProperties: {}
        tableServiceInfo:
          nullable: true
          type: object
          additionalProperties: {}
        payment:
          $ref: '#/components/schemas/PublicOrderPayment'
        updatedAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        locationId:
          type: string
          minLength: 1
          maxLength: 128
      required:
        - id
        - shortId
        - restaurantDisplayName
        - fulfillmentMethod
        - fulfillmentIdentifier
        - pickupType
        - orderTime
        - orderDate
        - totalQuantity
        - currency
        - orderTotal
        - status
        - createdAt
        - financial
        - partiallyRefunded
        - items
        - pricing
        - deliveryInfo
        - delivery
        - roomServiceInfo
        - tableServiceInfo
        - payment
        - updatedAt
        - locationId
      additionalProperties: false
    CateringEventContact:
      type: object
      properties:
        name:
          type: string
        phone:
          nullable: true
          type: string
        email:
          nullable: true
          type: string
        organization:
          nullable: true
          type: string
      required:
        - name
        - phone
        - email
        - organization
      additionalProperties: false
    CateringEventDetails:
      type: object
      properties:
        deliveryAddress:
          nullable: true
          type: object
          properties:
            street:
              type: string
              minLength: 1
              maxLength: 200
            streetOptional:
              default: ''
              type: string
              maxLength: 200
            city:
              type: string
              minLength: 1
              maxLength: 120
            state:
              type: string
              minLength: 1
              maxLength: 120
            zipCode:
              type: string
              minLength: 1
              maxLength: 20
            country:
              type: string
              enum:
                - United States
                - United Arab Emirates
                - Australia
                - United Kingdom
          required:
            - street
            - city
            - state
            - zipCode
            - country
          additionalProperties: false
        deliveryAddressStatus:
          type: string
          enum:
            - not_applicable
            - complete
            - needs_confirmation
        serviceAddress:
          nullable: true
          type: string
        accessNotes:
          nullable: true
          type: string
        onSiteContact:
          nullable: true
          type: object
          properties:
            name:
              type: string
            phone:
              nullable: true
              type: string
          required:
            - name
            - phone
          additionalProperties: false
        menuRequest:
          nullable: true
          type: string
        dietary:
          type: array
          items:
            type: object
            properties:
              constraint:
                type: string
              count:
                nullable: true
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
              kind:
                type: string
                enum:
                  - preference
                  - allergy
                  - unspecified
            required:
              - constraint
              - count
              - kind
            additionalProperties: false
        serviceware:
          nullable: true
          type: object
          properties:
            needed:
              type: boolean
            asStated:
              nullable: true
              type: string
          required:
            - needed
            - asStated
          additionalProperties: false
        budgetAsStated:
          nullable: true
          type: string
        occasion:
          nullable: true
          type: string
        questionsForTeam:
          type: array
          items:
            type: string
        notes:
          nullable: true
          type: string
      required:
        - deliveryAddress
        - deliveryAddressStatus
        - serviceAddress
        - accessNotes
        - onSiteContact
        - menuRequest
        - dietary
        - serviceware
        - budgetAsStated
        - occasion
        - questionsForTeam
        - notes
      additionalProperties: false
    CateringTextConsent:
      type: object
      properties:
        granted:
          type: boolean
        phone:
          type: string
        grantedAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - granted
        - phone
        - grantedAt
      additionalProperties: false
    CateringExportAmendment:
      type: object
      properties:
        id:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        originalQuoteId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        version:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          maximum: 9007199254740991
        currency:
          type: string
          pattern: ^[A-Z]{3}$
        totals:
          $ref: '#/components/schemas/CateringQuoteTotals'
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        expiresAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        eventRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        pricedLines:
          type: array
          items:
            $ref: '#/components/schemas/CateringAmendmentPricedLine'
        offer:
          anyOf:
            - $ref: '#/components/schemas/CateringAmendmentOfferSnapshot'
            - type: string
              nullable: true
              enum:
                - null
        decision:
          nullable: true
          type: object
          properties:
            outcome:
              type: string
              enum:
                - accepted
                - declined
            createdAt:
              type: string
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
          required:
            - outcome
            - createdAt
          additionalProperties: false
      required:
        - id
        - originalQuoteId
        - version
        - currency
        - totals
        - createdAt
        - expiresAt
        - eventRevision
        - pricedLines
        - offer
        - decision
      additionalProperties: false
    CateringExportRefundGroup:
      type: object
      properties:
        id:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        quoteId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        eventRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        currency:
          type: string
          pattern: ^[A-Z]{3}$
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
        reason:
          nullable: true
          type: string
        allocations:
          minItems: 1
          maxItems: 20
          type: array
          items:
            type: object
            properties:
              orderId:
                type: string
                format: uuid
                pattern: >-
                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              amountMinor:
                type: integer
                minimum: 0
                exclusiveMinimum: true
                maximum: 9007199254740991
            required:
              - orderId
              - amountMinor
            additionalProperties: false
      required:
        - id
        - quoteId
        - eventRevision
        - currency
        - createdAt
        - reason
        - allocations
      additionalProperties: false
    CateringCancellationDecision:
      type: object
      properties:
        id:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        requestId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        quoteId:
          type: string
          minLength: 1
          maxLength: 128
        eventRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        outcome:
          type: string
          enum:
            - approved
            - rejected
        reason:
          nullable: true
          type: string
          minLength: 1
          maxLength: 500
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - id
        - requestId
        - quoteId
        - eventRevision
        - outcome
        - reason
        - createdAt
      additionalProperties: false
    CateringExportServiceCancellation:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        quoteId:
          type: string
          minLength: 1
          maxLength: 128
        eventRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        reason:
          nullable: true
          type: string
          minLength: 1
          maxLength: 500
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - id
        - quoteId
        - eventRevision
        - reason
        - createdAt
      additionalProperties: false
    CateringCancellationRequest:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        quoteId:
          type: string
          minLength: 1
          maxLength: 128
        eventRevision:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        reason:
          nullable: true
          type: string
          minLength: 1
          maxLength: 500
        status:
          type: string
          enum:
            - open
            - approved
            - rejected
        createdAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - id
        - quoteId
        - eventRevision
        - reason
        - status
        - createdAt
      additionalProperties: false
    CateringExportQuote:
      type: object
      properties:
        version:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        status:
          type: string
          enum:
            - draft
            - sent
            - accepted
            - superseded
            - declined
            - expired
        totals:
          $ref: '#/components/schemas/CateringQuoteTotals'
        noteToCustomer:
          type: string
        lines:
          type: array
          items:
            $ref: '#/components/schemas/CateringQuoteLine'
        eventSnapshot:
          $ref: '#/components/schemas/CateringExportQuoteSnapshot'
      required:
        - version
        - status
        - totals
        - noteToCustomer
        - lines
        - eventSnapshot
      additionalProperties: false
    CateringExportPayment:
      type: object
      properties:
        kind:
          type: string
          enum:
            - deposit
            - balance
            - additional
        status:
          type: string
          enum:
            - pending
            - paid
            - expired
        amount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        total:
          nullable: true
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        currency:
          type: string
        paidAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - kind
        - status
        - amount
        - total
        - currency
        - paidAt
      additionalProperties: false
    PublicOrderFinancial:
      oneOf:
        - type: object
          properties:
            state:
              type: string
              enum:
                - known
            status:
              type: string
              enum:
                - NO_PAYMENT_REQUIRED
                - DUE
                - PARTIALLY_PAID
                - PAID
                - PARTIALLY_REFUNDED
                - REFUNDED
                - CANCELED
            reconciliationStatus:
              type: string
              enum:
                - CURRENT
                - RECONCILING
                - ACTION_REQUIRED
            revision:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            collected:
              type: string
              allOf:
                - type: string
                  pattern: ^-?\d+(?:\.\d+)?$
                - type: string
                  pattern: ^\d+(?:\.\d+)?$
            due:
              type: string
              allOf:
                - type: string
                  pattern: ^-?\d+(?:\.\d+)?$
                - type: string
                  pattern: ^\d+(?:\.\d+)?$
          required:
            - state
            - status
            - reconciliationStatus
            - revision
            - collected
            - due
          additionalProperties: false
        - type: object
          properties:
            state:
              type: string
              enum:
                - unavailable
            reason:
              type: string
              enum:
                - evidence_unavailable
                - evidence_conflict
          required:
            - state
            - reason
          additionalProperties: false
    PublicOrderItem:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          maxLength: 128
        name:
          type: string
        quantity:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        price:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        total:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        discount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        specialInstructions:
          type: string
        modifiers:
          type: array
          items:
            type: object
            properties:
              groupName:
                type: string
              name:
                type: string
              quantity:
                type: integer
                minimum: 0
                maximum: 9007199254740991
              price:
                type: string
                pattern: ^-?\d+(?:\.\d+)?$
            required:
              - groupName
              - name
              - quantity
              - price
            additionalProperties: false
      required:
        - id
        - name
        - quantity
        - price
        - total
        - discount
        - specialInstructions
        - modifiers
      additionalProperties: false
    PublicOrderPricing:
      type: object
      properties:
        subtotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        discount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        tax:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        tip:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        serviceFee:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        fulfillmentFee:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        enterpriseFee:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        total:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        refunded:
          anyOf:
            - type: string
              allOf:
                - type: string
                  pattern: ^-?\d+(?:\.\d+)?$
                - type: string
                  pattern: ^\d+(?:\.\d+)?$
            - type: string
              nullable: true
              enum:
                - null
        netPaid:
          anyOf:
            - type: string
              allOf:
                - type: string
                  pattern: ^-?\d+(?:\.\d+)?$
                - type: string
                  pattern: ^\d+(?:\.\d+)?$
            - type: string
              nullable: true
              enum:
                - null
      required:
        - subtotal
        - discount
        - tax
        - tip
        - serviceFee
        - fulfillmentFee
        - enterpriseFee
        - total
        - refunded
        - netPaid
      additionalProperties: false
    PublicOrderDelivery:
      nullable: true
      type: object
      properties:
        provider:
          type: string
          enum:
            - DOORDASH_DRIVE
        status:
          type: string
        trackingUrl:
          nullable: true
          type: string
          format: uri
        supportReference:
          nullable: true
          type: string
        courierName:
          nullable: true
          type: string
        pickupEstimatedAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        pickupActualAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        dropoffEstimatedAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        dropoffActualAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        cancellationReason:
          nullable: true
          type: string
        providerUpdatedAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - provider
        - status
        - trackingUrl
        - supportReference
        - courierName
        - pickupEstimatedAt
        - pickupActualAt
        - dropoffEstimatedAt
        - dropoffActualAt
        - cancellationReason
        - providerUpdatedAt
      additionalProperties: false
    PublicOrderPayment:
      nullable: true
      type: object
      properties:
        provider:
          nullable: true
          type: string
          enum:
            - STRIPE
            - SQUARE
        cardLast4:
          nullable: true
          type: string
        walletType:
          nullable: true
          type: string
        cardBrand:
          nullable: true
          type: string
      required:
        - provider
        - cardLast4
        - walletType
        - cardBrand
    CateringQuoteTotals:
      type: object
      properties:
        subtotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        discount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        taxRate:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        taxTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        serviceFeeRate:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        serviceFeeTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        total:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        depositPercent:
          type: integer
          minimum: 0
          maximum: 100
        depositAmount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        depositTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        balanceAmount:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        balanceTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
      required:
        - subtotal
        - discount
        - taxRate
        - taxTotal
        - serviceFeeRate
        - serviceFeeTotal
        - total
        - depositPercent
        - depositAmount
        - depositTotal
        - balanceAmount
        - balanceTotal
      additionalProperties: false
    CateringAmendmentPricedLine:
      type: object
      properties:
        kind:
          type: string
          enum:
            - menu
            - one_off
        lineId:
          type: string
          minLength: 1
          maxLength: 255
        productId:
          nullable: true
          type: string
        unitPrice:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        quantity:
          type: string
          pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
        unit:
          type: string
          enum:
            - person
            - item
            - dozen
            - tray
            - pack
            - lb
            - oz
            - kg
            - g
            - gallon
            - quart
            - liter
            - ml
            - fl_oz
        lineTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        minimumSpendEligibility:
          type: string
          enum:
            - food_beverage
            - excluded
            - unreviewed
      required:
        - kind
        - lineId
        - productId
        - unitPrice
        - quantity
        - unit
        - lineTotal
        - minimumSpendEligibility
      additionalProperties: false
    CateringAmendmentOfferSnapshot:
      type: object
      properties:
        originalQuoteId:
          type: string
          format: uuid
          pattern: >-
            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        eventSnapshot:
          type: object
          properties:
            eventDate:
              type: string
              pattern: ^\d{4}-\d{2}-\d{2}$
            serviceTime:
              type: string
              pattern: ^([01]\d|2[0-3]):[0-5]\d$
            headcount:
              type: object
              properties:
                guests:
                  type: integer
                  minimum: 1
                  maximum: 10000
                approximate:
                  type: boolean
              required:
                - guests
                - approximate
              additionalProperties: false
            serviceStyle:
              type: string
              enum:
                - pickup
                - drop_off
                - drop_off_with_setup
            serviceAddress:
              nullable: true
              type: string
              minLength: 1
              maxLength: 800
            deliveryAddress:
              nullable: true
              type: object
              properties:
                street:
                  type: string
                  minLength: 1
                  maxLength: 200
                streetOptional:
                  default: ''
                  type: string
                  maxLength: 200
                city:
                  type: string
                  minLength: 1
                  maxLength: 120
                state:
                  type: string
                  minLength: 1
                  maxLength: 120
                zipCode:
                  type: string
                  minLength: 1
                  maxLength: 20
                country:
                  type: string
                  enum:
                    - United States
                    - United Arab Emirates
                    - Australia
                    - United Kingdom
              required:
                - street
                - city
                - state
                - zipCode
                - country
              additionalProperties: false
          required:
            - eventDate
            - serviceTime
            - headcount
            - serviceStyle
            - serviceAddress
          additionalProperties: false
        lines:
          minItems: 1
          maxItems: 100
          type: array
          items:
            $ref: '#/components/schemas/CateringQuoteLine'
        totals:
          $ref: '#/components/schemas/CateringQuoteTotals'
        noteToCustomer:
          type: string
          maxLength: 2000
        terms:
          type: object
          properties:
            changeCutoffHours:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            balanceDue:
              oneOf:
                - type: object
                  properties:
                    rule:
                      type: string
                      enum:
                        - at_cutoff
                  required:
                    - rule
                  additionalProperties: false
                - type: object
                  properties:
                    rule:
                      type: string
                      enum:
                        - event_day
                  required:
                    - rule
                  additionalProperties: false
                - type: object
                  properties:
                    rule:
                      type: string
                      enum:
                        - days_after_event
                    days:
                      type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                  required:
                    - rule
                    - days
                  additionalProperties: false
            quoteValidityDays:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            cancellationTerms:
              type: string
          required:
            - changeCutoffHours
            - balanceDue
            - quoteValidityDays
            - cancellationTerms
          additionalProperties: false
        timeZone:
          type: string
          minLength: 1
          maxLength: 100
        lockAt:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
      required:
        - originalQuoteId
        - eventSnapshot
        - lines
        - totals
        - noteToCustomer
        - terms
        - timeZone
        - lockAt
      additionalProperties: false
    CateringQuoteLine:
      type: object
      properties:
        source:
          nullable: true
          type: object
          properties:
            menuId:
              type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            locationId:
              type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            channel:
              type: string
              enum:
                - catering
            kind:
              type: string
              enum:
                - released
            menuReleaseId:
              type: string
              format: uuid
              pattern: >-
                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          required:
            - menuId
            - locationId
            - channel
            - kind
            - menuReleaseId
          additionalProperties: false
        kind:
          type: string
          enum:
            - menu
            - one_off
        lineId:
          type: string
          minLength: 1
          maxLength: 255
        productId:
          nullable: true
          type: string
        name:
          type: string
        unitPrice:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        quantity:
          type: string
          pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
        unit:
          type: string
          enum:
            - person
            - item
            - dozen
            - tray
            - pack
            - lb
            - oz
            - kg
            - g
            - gallon
            - quart
            - liter
            - ml
            - fl_oz
        note:
          nullable: true
          type: string
        lineTotal:
          type: string
          pattern: ^-?\d+(?:\.\d+)?$
        minimumSpendEligibility:
          type: string
          enum:
            - food_beverage
            - excluded
            - unreviewed
        configuration:
          nullable: true
          type: object
          properties:
            source:
              type: object
              properties:
                menuId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                locationId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                channel:
                  type: string
                  enum:
                    - catering
                kind:
                  type: string
                  enum:
                    - released
                menuReleaseId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              required:
                - menuId
                - locationId
                - channel
                - kind
                - menuReleaseId
              additionalProperties: false
            lineId:
              type: string
              minLength: 1
              maxLength: 200
            productId:
              type: string
              minLength: 1
              maxLength: 200
            selections:
              maxItems: 50
              type: array
              items:
                $ref: '#/components/schemas/SelectedModifierGroup'
            quantity:
              type: string
              pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
            allocation:
              $ref: '#/components/schemas/CateringCommercialAllocation'
            dietaryPreferences:
              allOf:
                - $ref: '#/components/schemas/UpdateCartDietaryPreferencesRequest'
            requestedQuantity:
              nullable: true
              type: string
              pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
            acceptedSelections:
              maxItems: 50
              type: array
              items:
                $ref: '#/components/schemas/AcceptedModifierGroup'
            priceBasis:
              type: string
              enum:
                - per_person
                - per_item
                - per_dozen
                - per_tray
                - per_pack
                - per_lb
                - per_oz
                - per_kg
                - per_g
                - per_gallon
                - per_quart
                - per_liter
                - per_ml
                - per_fl_oz
            unit:
              type: string
              enum:
                - person
                - item
                - dozen
                - tray
                - pack
                - lb
                - oz
                - kg
                - g
                - gallon
                - quart
                - liter
                - ml
                - fl_oz
            planningYield:
              anyOf:
                - $ref: '#/components/schemas/CateringPlanningYield'
                - type: string
                  nullable: true
                  enum:
                    - null
            unitPrice:
              $ref: '#/components/schemas/CateringAmount'
            lineTotal:
              $ref: '#/components/schemas/CateringAmount'
            charges:
              maxItems: 10000
              type: array
              items:
                $ref: '#/components/schemas/CateringCalculatedCharge'
            effectiveRules:
              $ref: '#/components/schemas/CateringEffectiveRules'
            food:
              $ref: '#/components/schemas/ConfiguredFoodEvaluation'
            explanation:
              type: string
          required:
            - source
            - lineId
            - productId
            - selections
            - quantity
            - allocation
            - requestedQuantity
            - acceptedSelections
            - priceBasis
            - unit
            - planningYield
            - unitPrice
            - lineTotal
            - charges
            - effectiveRules
            - food
            - explanation
          additionalProperties: false
        review:
          nullable: true
          type: object
          properties:
            priceConfirmations:
              type: array
              items:
                type: object
                properties:
                  chargeId:
                    type: string
                    minLength: 1
                    maxLength: 255
                  selectionPath:
                    minItems: 1
                    maxItems: 41
                    type: array
                    items:
                      type: string
                      minLength: 1
                      maxLength: 255
                  unitPriceCents:
                    type: integer
                    minimum: 0
                    maximum: 99999999
                  reason:
                    type: string
                    minLength: 1
                    maxLength: 1000
                required:
                  - chargeId
                  - selectionPath
                  - unitPriceCents
                  - reason
                additionalProperties: false
            ruleResolutions:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - BELOW_MINIMUM_HEADCOUNT
                      - BELOW_MINIMUM_ORDER
                      - BELOW_MINIMUM_UNITS
                      - INSUFFICIENT_LEAD_TIME
                  reason:
                    type: string
                    minLength: 1
                    maxLength: 1000
                required:
                  - code
                  - reason
                additionalProperties: false
          required:
            - priceConfirmations
            - ruleResolutions
          additionalProperties: false
      required:
        - source
        - kind
        - lineId
        - productId
        - name
        - unitPrice
        - quantity
        - unit
        - note
        - lineTotal
        - minimumSpendEligibility
        - configuration
        - review
      additionalProperties: false
    CateringExportQuoteSnapshot:
      type: object
      properties:
        eventDate:
          type: string
        serviceTime:
          type: string
        headcount:
          type: object
          properties:
            guests:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            approximate:
              type: boolean
          required:
            - guests
            - approximate
          additionalProperties: false
        serviceStyle:
          type: string
          enum:
            - pickup
            - drop_off
            - drop_off_with_setup
        serviceAddress:
          nullable: true
          type: string
        eventStartsAt:
          nullable: true
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
        timeZone:
          nullable: true
          type: string
          minLength: 1
          maxLength: 100
      required:
        - eventDate
        - serviceTime
        - headcount
        - serviceStyle
        - serviceAddress
      additionalProperties: false
    SelectedModifierGroup:
      type: object
      properties:
        groupId:
          type: string
          minLength: 1
          maxLength: 128
        selectedOptions:
          minItems: 0
          maxItems: 50
          type: array
          items:
            type: object
            properties:
              optionId:
                type: string
                minLength: 1
                maxLength: 128
              quantity:
                type: integer
                minimum: 1
                maximum: 99
              children:
                maxItems: 20
                type: array
                items:
                  $ref: '#/components/schemas/SelectedModifierGroup'
            required:
              - optionId
              - quantity
            additionalProperties: false
      required:
        - groupId
        - selectedOptions
      additionalProperties: false
    CateringCommercialAllocation:
      nullable: true
      type: object
      properties:
        groupId:
          type: string
          minLength: 1
          maxLength: 200
        guests:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          maximum: 10000
      required:
        - groupId
        - guests
      additionalProperties: false
    UpdateCartDietaryPreferencesRequest:
      type: object
      properties:
        preferences:
          maxItems: 2
          type: array
          items:
            type: string
            enum:
              - vegetarian
              - vegan
        avoidAllergenIds:
          maxItems: 14
          type: array
          items:
            type: string
            enum:
              - milk
              - egg
              - fish
              - crustacean_shellfish
              - tree_nuts
              - peanut
              - wheat
              - soy
              - sesame
              - celery
              - mustard
              - lupin
              - molluscs
              - sulphites
      required:
        - preferences
        - avoidAllergenIds
      additionalProperties: false
    AcceptedModifierGroup:
      type: object
      properties:
        groupId:
          type: string
          minLength: 1
          maxLength: 128
        selectedOptions:
          maxItems: 50
          type: array
          items:
            type: object
            properties:
              optionId:
                type: string
                minLength: 1
                maxLength: 128
              quantity:
                type: integer
                minimum: 0
                exclusiveMinimum: true
                maximum: 99
              selectionPath:
                minItems: 3
                maxItems: 41
                type: array
                items:
                  type: string
                  minLength: 1
                  maxLength: 128
              provenance:
                type: string
                enum:
                  - customer
                  - default
                  - fixed
              children:
                maxItems: 50
                type: array
                items:
                  $ref: '#/components/schemas/AcceptedModifierGroup'
            required:
              - optionId
              - quantity
              - selectionPath
              - provenance
              - children
            additionalProperties: false
      required:
        - groupId
        - selectedOptions
      additionalProperties: false
    CateringPlanningYield:
      type: object
      properties:
        guests:
          type: string
          pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
        quantity:
          type: string
          pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
        reviewNote:
          type: string
          minLength: 1
          maxLength: 2000
      required:
        - guests
        - quantity
        - reviewNote
      additionalProperties: false
    CateringAmount:
      type: object
      properties:
        minCents:
          type: integer
          minimum: 0
          maximum: 99999999
        maxCents:
          type: integer
          minimum: 0
          maximum: 99999999
      required:
        - minCents
        - maxCents
      additionalProperties: false
    CateringCalculatedCharge:
      type: object
      properties:
        chargeId:
          type: string
          minLength: 1
          maxLength: 200
        scope:
          type: string
          enum:
            - sold_unit
            - affected_person
            - order
        bucketId:
          type: string
          minLength: 1
          maxLength: 200
        selectionPath:
          maxItems: 41
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 200
        quantity:
          type: string
          pattern: ^(?:0|[1-9]\d{0,5})(?:\.\d{1,6})?$
        unitPrice:
          $ref: '#/components/schemas/CateringAmount'
        lineTotal:
          $ref: '#/components/schemas/CateringAmount'
        minimumSpendEligibility:
          type: string
          enum:
            - food_beverage
            - excluded
            - unreviewed
        coveredByBucket:
          type: boolean
      required:
        - chargeId
        - scope
        - bucketId
        - selectionPath
        - quantity
        - unitPrice
        - lineTotal
        - minimumSpendEligibility
        - coveredByBucket
      additionalProperties: false
    CateringEffectiveRules:
      type: object
      properties:
        values:
          type: object
          properties:
            minimumGuests:
              type: integer
              minimum: 0
              exclusiveMinimum: true
              maximum: 10000
            maximumGuests:
              type: integer
              minimum: 0
              exclusiveMinimum: true
              maximum: 10000
            minimumUnits:
              type: string
              pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
            maximumUnits:
              type: string
              pattern: ^(?:0|[1-9]\d{0,4})(?:\.\d{1,6})?$
            minimumSpend:
              type: object
              properties:
                amountCents:
                  type: integer
                  minimum: 0
                  maximum: 99999999
                basis:
                  type: string
                  enum:
                    - eligible_food_beverage_before_discounts
              required:
                - amountCents
                - basis
              additionalProperties: false
            leadTimeHours:
              type: integer
              minimum: 0
              maximum: 8760
          additionalProperties: false
        sources:
          type: object
          additionalProperties:
            type: object
            properties:
              scope:
                type: string
                enum:
                  - location
                  - menu
                  - category
                  - product
              entityId:
                type: string
                minLength: 1
                maxLength: 200
              serviceStyle:
                nullable: true
                type: string
                enum:
                  - pickup
                  - drop_off
                  - drop_off_with_setup
            required:
              - scope
              - entityId
              - serviceStyle
            additionalProperties: false
      required:
        - values
        - sources
      additionalProperties: false
    ConfiguredFoodEvaluation:
      type: object
      properties:
        source:
          oneOf:
            - type: object
              properties:
                menuId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                locationId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                channel:
                  type: string
                  enum:
                    - online
                    - catering
                kind:
                  type: string
                  enum:
                    - released
                menuReleaseId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              required:
                - menuId
                - locationId
                - channel
                - kind
                - menuReleaseId
              additionalProperties: false
            - type: object
              properties:
                menuId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                locationId:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                channel:
                  type: string
                  enum:
                    - online
                    - catering
                kind:
                  type: string
                  enum:
                    - draft
                draftRevision:
                  type: integer
                  minimum: 0
                  exclusiveMinimum: true
                  maximum: 9007199254740991
              required:
                - menuId
                - locationId
                - channel
                - kind
                - draftRevision
              additionalProperties: false
        contributions:
          maxItems: 10000
          type: array
          items:
            type: object
            properties:
              entityId:
                type: string
                format: uuid
                pattern: >-
                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              selectionPath:
                maxItems: 80
                type: array
                items:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              fraction:
                type: object
                properties:
                  numerator:
                    type: number
                    minimum: 0
                  denominator:
                    type: number
                    minimum: 0
                    exclusiveMinimum: true
                required:
                  - numerator
                  - denominator
                additionalProperties: false
              provenance:
                nullable: true
                oneOf:
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - entered
                    required:
                      - kind
                    additionalProperties: false
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - provider
                      provider:
                        type: string
                        enum:
                          - square
                          - clover
                          - toast
                      revision:
                        type: string
                        minLength: 1
                        maxLength: 128
                    required:
                      - kind
                      - provider
                      - revision
                    additionalProperties: false
                  - type: object
                    properties:
                      kind:
                        type: string
                        enum:
                          - recipe
                      servingsYield:
                        type: number
                        minimum: 0
                        exclusiveMinimum: true
                      components:
                        minItems: 1
                        maxItems: 100
                        type: array
                        items:
                          type: object
                          properties:
                            entityId:
                              type: string
                              format: uuid
                              pattern: >-
                                ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                            fraction:
                              type: object
                              properties:
                                numerator:
                                  type: number
                                  minimum: 0
                                denominator:
                                  type: number
                                  minimum: 0
                                  exclusiveMinimum: true
                              required:
                                - numerator
                                - denominator
                              additionalProperties: false
                          required:
                            - entityId
                            - fraction
                          additionalProperties: false
                    required:
                      - kind
                      - servingsYield
                      - components
                    additionalProperties: false
              nutrients:
                type: object
                properties:
                  caloriesKcal:
                    nullable: true
                    type: number
                    minimum: 0
                  proteinGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  carbohydrateGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  fatGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  fiberGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  sugarGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  saturatedFatGrams:
                    nullable: true
                    type: number
                    minimum: 0
                  sodiumMilligrams:
                    nullable: true
                    type: number
                    minimum: 0
                required:
                  - caloriesKcal
                  - proteinGrams
                  - carbohydrateGrams
                  - fatGrams
                  - fiberGrams
                  - sugarGrams
                  - saturatedFatGrams
                  - sodiumMilligrams
                additionalProperties: false
            required:
              - entityId
              - selectionPath
              - fraction
              - provenance
              - nutrients
            additionalProperties: false
        serving:
          type: object
          properties:
            label:
              type: string
              minLength: 1
              maxLength: 255
            grams:
              nullable: true
              type: number
              minimum: 0
              exclusiveMinimum: true
          required:
            - label
            - grams
          additionalProperties: false
        quantity:
          type: object
          properties:
            unit:
              type: string
              enum:
                - serving
                - person
                - item
                - dozen
                - tray
                - pack
                - lb
                - oz
                - kg
                - g
                - gallon
                - quart
                - liter
                - ml
                - fl_oz
            count:
              type: number
              minimum: 0
              exclusiveMinimum: true
              maximum: 10000
          required:
            - unit
            - count
          additionalProperties: false
        trayYield:
          nullable: true
          type: object
          properties:
            servingsPerTray:
              type: number
              minimum: 0
              exclusiveMinimum: true
          required:
            - servingsPerTray
          additionalProperties: false
        perServing:
          type: object
          properties:
            caloriesKcal:
              nullable: true
              type: number
              minimum: 0
            proteinGrams:
              nullable: true
              type: number
              minimum: 0
            carbohydrateGrams:
              nullable: true
              type: number
              minimum: 0
            fatGrams:
              nullable: true
              type: number
              minimum: 0
            fiberGrams:
              nullable: true
              type: number
              minimum: 0
            sugarGrams:
              nullable: true
              type: number
              minimum: 0
            saturatedFatGrams:
              nullable: true
              type: number
              minimum: 0
            sodiumMilligrams:
              nullable: true
              type: number
              minimum: 0
          required:
            - caloriesKcal
            - proteinGrams
            - carbohydrateGrams
            - fatGrams
            - fiberGrams
            - sugarGrams
            - saturatedFatGrams
            - sodiumMilligrams
          additionalProperties: false
        perTray:
          nullable: true
          type: object
          properties:
            caloriesKcal:
              nullable: true
              type: number
              minimum: 0
            proteinGrams:
              nullable: true
              type: number
              minimum: 0
            carbohydrateGrams:
              nullable: true
              type: number
              minimum: 0
            fatGrams:
              nullable: true
              type: number
              minimum: 0
            fiberGrams:
              nullable: true
              type: number
              minimum: 0
            sugarGrams:
              nullable: true
              type: number
              minimum: 0
            saturatedFatGrams:
              nullable: true
              type: number
              minimum: 0
            sodiumMilligrams:
              nullable: true
              type: number
              minimum: 0
          required:
            - caloriesKcal
            - proteinGrams
            - carbohydrateGrams
            - fatGrams
            - fiberGrams
            - sugarGrams
            - saturatedFatGrams
            - sodiumMilligrams
          additionalProperties: false
        lineTotal:
          type: object
          properties:
            caloriesKcal:
              nullable: true
              type: number
              minimum: 0
            proteinGrams:
              nullable: true
              type: number
              minimum: 0
            carbohydrateGrams:
              nullable: true
              type: number
              minimum: 0
            fatGrams:
              nullable: true
              type: number
              minimum: 0
            fiberGrams:
              nullable: true
              type: number
              minimum: 0
            sugarGrams:
              nullable: true
              type: number
              minimum: 0
            saturatedFatGrams:
              nullable: true
              type: number
              minimum: 0
            sodiumMilligrams:
              nullable: true
              type: number
              minimum: 0
          required:
            - caloriesKcal
            - proteinGrams
            - carbohydrateGrams
            - fatGrams
            - fiberGrams
            - sugarGrams
            - saturatedFatGrams
            - sodiumMilligrams
          additionalProperties: false
        completeness:
          type: string
          enum:
            - complete
            - partial
            - unknown
        missing:
          maxItems: 10000
          type: array
          items:
            type: object
            properties:
              entityId:
                type: string
                format: uuid
                pattern: >-
                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              nutrient:
                type: string
                enum:
                  - caloriesKcal
                  - proteinGrams
                  - carbohydrateGrams
                  - fatGrams
                  - fiberGrams
                  - sugarGrams
                  - saturatedFatGrams
                  - sodiumMilligrams
            required:
              - entityId
              - nutrient
            additionalProperties: false
        warnings:
          maxItems: 10000
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - DIETARY_CONFLICT
                  - ALLERGEN_PRESENT
                  - ALLERGEN_POSSIBLE
                  - DIETARY_INFORMATION_UNKNOWN
              entityId:
                type: string
                format: uuid
                pattern: >-
                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              preferenceId:
                anyOf:
                  - type: string
                    enum:
                      - vegetarian
                      - vegan
                  - type: string
                    enum:
                      - milk
                      - egg
                      - fish
                      - crustacean_shellfish
                      - tree_nuts
                      - peanut
                      - wheat
                      - soy
                      - sesame
                      - celery
                      - mustard
                      - lupin
                      - molluscs
                      - sulphites
              selectionPath:
                maxItems: 80
                type: array
                items:
                  type: string
                  format: uuid
                  pattern: >-
                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
            required:
              - code
              - entityId
              - preferenceId
              - selectionPath
            additionalProperties: false
      required:
        - source
        - contributions
        - serving
        - quantity
        - trayYield
        - perServing
        - perTray
        - lineTotal
        - completeness
        - missing
        - warnings
      additionalProperties: false
  securitySchemes:
    StorefrontCustomerAuth:
      type: http
      scheme: bearer
      bearerFormat: opaque
      description: >-
        Merchant-bound opaque customer access capability returned by fresh code
        verification or refresh.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.